Merge branch '5.X' into future/flowable

This commit is contained in:
gssong 2023-09-22 23:25:29 +08:00
commit 139b5c20b8
41 changed files with 242 additions and 152 deletions

16
pom.xml
View File

@ -13,13 +13,13 @@
<description>RuoYi-Vue-Plus多租户管理系统</description> <description>RuoYi-Vue-Plus多租户管理系统</description>
<properties> <properties>
<revision>5.1.0-BETA</revision> <revision>5.1.0</revision>
<spring-boot.version>3.1.2</spring-boot.version> <spring-boot.version>3.1.3</spring-boot.version>
<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>
<spring-boot.mybatis>3.0.2</spring-boot.mybatis> <spring-boot.mybatis>3.0.2</spring-boot.mybatis>
<springdoc.version>2.1.0</springdoc.version> <springdoc.version>2.2.0</springdoc.version>
<therapi-javadoc.version>0.15.0</therapi-javadoc.version> <therapi-javadoc.version>0.15.0</therapi-javadoc.version>
<poi.version>5.2.3</poi.version> <poi.version>5.2.3</poi.version>
<easyexcel.version>3.3.2</easyexcel.version> <easyexcel.version>3.3.2</easyexcel.version>
@ -29,15 +29,15 @@
<p6spy.version>3.9.1</p6spy.version> <p6spy.version>3.9.1</p6spy.version>
<hutool.version>5.8.20</hutool.version> <hutool.version>5.8.20</hutool.version>
<okhttp.version>4.10.0</okhttp.version> <okhttp.version>4.10.0</okhttp.version>
<spring-boot-admin.version>3.1.3</spring-boot-admin.version> <spring-boot-admin.version>3.1.5</spring-boot-admin.version>
<redisson.version>3.23.1</redisson.version> <redisson.version>3.23.4</redisson.version>
<lock4j.version>2.2.4</lock4j.version> <lock4j.version>2.2.5</lock4j.version>
<dynamic-ds.version>4.1.3</dynamic-ds.version> <dynamic-ds.version>4.1.3</dynamic-ds.version>
<alibaba-ttl.version>2.14.2</alibaba-ttl.version> <alibaba-ttl.version>2.14.2</alibaba-ttl.version>
<powerjob.version>4.3.3</powerjob.version> <powerjob.version>4.3.3</powerjob.version>
<mapstruct-plus.version>1.3.5</mapstruct-plus.version> <mapstruct-plus.version>1.3.5</mapstruct-plus.version>
<mapstruct-plus.lombok.version>0.2.0</mapstruct-plus.lombok.version> <mapstruct-plus.lombok.version>0.2.0</mapstruct-plus.lombok.version>
<lombok.version>1.18.26</lombok.version> <lombok.version>1.18.28</lombok.version>
<bouncycastle.version>1.72</bouncycastle.version> <bouncycastle.version>1.72</bouncycastle.version>
<justauth.version>1.16.5</justauth.version> <justauth.version>1.16.5</justauth.version>
<!-- 离线IP地址定位库 --> <!-- 离线IP地址定位库 -->
@ -47,7 +47,7 @@
<snakeyaml.version>1.33</snakeyaml.version> <snakeyaml.version>1.33</snakeyaml.version>
<!-- OSS 配置 --> <!-- OSS 配置 -->
<aws-java-sdk-s3.version>1.12.517</aws-java-sdk-s3.version> <aws-java-sdk-s3.version>1.12.540</aws-java-sdk-s3.version>
<!-- SMS 配置 --> <!-- SMS 配置 -->
<sms4j.version>2.2.0</sms4j.version> <sms4j.version>2.2.0</sms4j.version>

View File

@ -1,4 +1,5 @@
FROM findepi/graalvm:java17-native #FROM findepi/graalvm:java17-native
FROM openjdk:17.0.2-oraclelinux8
MAINTAINER Lion Li MAINTAINER Lion Li
@ -8,7 +9,7 @@ RUN mkdir -p /ruoyi/server/logs \
WORKDIR /ruoyi/server WORKDIR /ruoyi/server
ENV SERVER_PORT=8080 ENV SERVER_PORT=8080 LANG=C.UTF-8 LC_ALL=C.UTF-8
EXPOSE ${SERVER_PORT} EXPOSE ${SERVER_PORT}

View File

@ -15,10 +15,7 @@ import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.enums.LoginType; import org.dromara.common.core.enums.LoginType;
import org.dromara.common.core.enums.TenantStatus; import org.dromara.common.core.enums.TenantStatus;
import org.dromara.common.core.exception.user.UserException; import org.dromara.common.core.exception.user.UserException;
import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.*;
import org.dromara.common.core.utils.MessageUtils;
import org.dromara.common.core.utils.ServletUtils;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.log.event.LogininforEvent; import org.dromara.common.log.event.LogininforEvent;
import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
@ -210,6 +207,9 @@ public class SysLoginService {
if (TenantConstants.DEFAULT_TENANT_ID.equals(tenantId)) { if (TenantConstants.DEFAULT_TENANT_ID.equals(tenantId)) {
return; return;
} }
if (StringUtils.isBlank(tenantId)) {
throw new TenantException("tenant.number.not.blank");
}
SysTenantVo tenant = tenantService.queryByTenantId(tenantId); SysTenantVo tenant = tenantService.queryByTenantId(tenantId);
if (ObjectUtil.isNull(tenant)) { if (ObjectUtil.isNull(tenant)) {
log.info("登录租户:{} 不存在.", tenantId); log.info("登录租户:{} 不存在.", tenantId);

View File

@ -245,10 +245,10 @@ justauth:
client-id: 10**********6 client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e client-secret: 1f7d08**********5b7**********29e
redirect-uri: ${justauth.address}/social-callback?source=oschina redirect-uri: ${justauth.address}/social-callback?source=oschina
alipay: alipay_wallet:
client-id: 10**********6 client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e client-secret: 1f7d08**********5b7**********29e
redirect-uri: ${justauth.address}/social-callback?source=alipay redirect-uri: ${justauth.address}/social-callback?source=alipay_wallet
alipay-public-key: MIIB**************DAQAB alipay-public-key: MIIB**************DAQAB
wechat_open: wechat_open:
client-id: 10**********6 client-id: 10**********6

View File

@ -247,10 +247,10 @@ justauth:
client-id: 10**********6 client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e client-secret: 1f7d08**********5b7**********29e
redirect-uri: ${justauth.address}/social-callback?source=oschina redirect-uri: ${justauth.address}/social-callback?source=oschina
alipay: alipay_wallet:
client-id: 10**********6 client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e client-secret: 1f7d08**********5b7**********29e
redirect-uri: ${justauth.address}/social-callback?source=alipay redirect-uri: ${justauth.address}/social-callback?source=alipay_wallet
alipay-public-key: MIIB**************DAQAB alipay-public-key: MIIB**************DAQAB
wechat_open: wechat_open:
client-id: 10**********6 client-id: 10**********6

View File

@ -6,10 +6,6 @@ ruoyi:
version: ${revision} version: ${revision}
# 版权年份 # 版权年份
copyrightYear: 2023 copyrightYear: 2023
# 实例演示开关
demoEnabled: true
# 获取ip地址开关
addressEnabled: true
captcha: captcha:
enable: true enable: true

View File

@ -14,7 +14,7 @@
</description> </description>
<properties> <properties>
<revision>5.1.0-BETA</revision> <revision>5.1.0</revision>
</properties> </properties>
<dependencyManagement> <dependencyManagement>

View File

@ -1,7 +1,6 @@
package org.dromara.common.core.config; package org.dromara.common.core.config;
import lombok.Data; import lombok.Data;
import lombok.Getter;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -31,19 +30,4 @@ public class RuoYiConfig {
*/ */
private String copyrightYear; private String copyrightYear;
/**
* 实例演示开关
*/
private boolean demoEnabled;
/**
* 获取地址开关
*/
@Getter
private static boolean addressEnabled;
public void setAddressEnabled(boolean addressEnabled) {
RuoYiConfig.addressEnabled = addressEnabled;
}
} }

View File

@ -1,13 +1,12 @@
package org.dromara.common.core.domain.model; package org.dromara.common.core.domain.model;
import jakarta.validation.constraints.Email; import jakarta.validation.constraints.Email;
import org.dromara.common.core.constant.UserConstants; import jakarta.validation.constraints.NotBlank;
import lombok.Data; import lombok.Data;
import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.validate.auth.*; import org.dromara.common.core.validate.auth.*;
import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Length;
import jakarta.validation.constraints.NotBlank;
/** /**
* 用户登录对象 * 用户登录对象
* *
@ -42,7 +41,6 @@ public class LoginBody {
/** /**
* 租户ID * 租户ID
*/ */
@NotBlank(message = "{tenant.number.not.blank}")
private String tenantId; private String tenantId;
/** /**

View File

@ -1,11 +1,12 @@
package org.dromara.common.encrypt.core; package org.dromara.common.encrypt.core;
import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.ReflectUtil;
import org.dromara.common.encrypt.annotation.EncryptField;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.encrypt.annotation.EncryptField;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@ -35,8 +36,13 @@ public class EncryptorManager {
*/ */
public Set<Field> getFieldCache(Class<?> sourceClazz) { public Set<Field> getFieldCache(Class<?> sourceClazz) {
return fieldCache.computeIfAbsent(sourceClazz, clazz -> { return fieldCache.computeIfAbsent(sourceClazz, clazz -> {
Field[] declaredFields = clazz.getDeclaredFields(); Set<Field> fieldSet = new HashSet<>();
Set<Field> fieldSet = Arrays.stream(declaredFields).filter(field -> while (clazz != null) {
Field[] fields = clazz.getDeclaredFields();
fieldSet.addAll(Arrays.asList(fields));
clazz = clazz.getSuperclass();
}
fieldSet = fieldSet.stream().filter(field ->
field.isAnnotationPresent(EncryptField.class) && field.getType() == String.class) field.isAnnotationPresent(EncryptField.class) && field.getType() == String.class)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
for (Field field : fieldSet) { for (Field field : fieldSet) {

View File

@ -182,12 +182,12 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
* 分页查询VO * 分页查询VO
*/ */
default <C, P extends IPage<C>> P selectVoPage(IPage<T> page, Wrapper<T> wrapper, Class<C> voClass) { default <C, P extends IPage<C>> P selectVoPage(IPage<T> page, Wrapper<T> wrapper, Class<C> voClass) {
IPage<T> pageData = this.selectPage(page, wrapper); List<T> list = this.selectList(page, wrapper);
IPage<C> voPage = new Page<>(pageData.getCurrent(), pageData.getSize(), pageData.getTotal()); IPage<C> voPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
if (CollUtil.isEmpty(pageData.getRecords())) { if (CollUtil.isEmpty(list)) {
return (P) voPage; return (P) voPage;
} }
voPage.setRecords(MapstructUtils.convert(pageData.getRecords(), voClass)); voPage.setRecords(MapstructUtils.convert(list, voClass));
return (P) voPage; return (P) voPage;
} }

View File

@ -131,6 +131,32 @@ public class QueueUtils {
return priorityBlockingQueue.offer(data); return priorityBlockingQueue.offer(data);
} }
/**
* 优先队列获取一个队列数据 没有数据返回 null(不支持延迟队列)
*
* @param queueName 队列名
*/
public static <T> T getPriorityQueueObject(String queueName) {
RPriorityBlockingQueue<T> queue = CLIENT.getPriorityBlockingQueue(queueName);
return queue.poll();
}
/**
* 优先队列删除队列数据(不支持延迟队列)
*/
public static <T> boolean removePriorityQueueObject(String queueName, T data) {
RPriorityBlockingQueue<T> queue = CLIENT.getPriorityBlockingQueue(queueName);
return queue.remove(data);
}
/**
* 优先队列销毁队列 所有阻塞监听 报错(不支持延迟队列)
*/
public static <T> boolean destroyPriorityQueue(String queueName) {
RPriorityBlockingQueue<T> queue = CLIENT.getPriorityBlockingQueue(queueName);
return queue.delete();
}
/** /**
* 尝试设置 有界队列 容量 用于限制数量 * 尝试设置 有界队列 容量 用于限制数量
* *
@ -169,6 +195,32 @@ public class QueueUtils {
return boundedBlockingQueue.offer(data); return boundedBlockingQueue.offer(data);
} }
/**
* 有界队列获取一个队列数据 没有数据返回 null(不支持延迟队列)
*
* @param queueName 队列名
*/
public static <T> T getBoundedQueueObject(String queueName) {
RBoundedBlockingQueue<T> queue = CLIENT.getBoundedBlockingQueue(queueName);
return queue.poll();
}
/**
* 有界队列删除队列数据(不支持延迟队列)
*/
public static <T> boolean removeBoundedQueueObject(String queueName, T data) {
RBoundedBlockingQueue<T> queue = CLIENT.getBoundedBlockingQueue(queueName);
return queue.remove(data);
}
/**
* 有界队列销毁队列 所有阻塞监听 报错(不支持延迟队列)
*/
public static <T> boolean destroyBoundedQueue(String queueName) {
RBoundedBlockingQueue<T> queue = CLIENT.getBoundedBlockingQueue(queueName);
return queue.delete();
}
/** /**
* 订阅阻塞队列(可订阅所有实现类 例如: 延迟 优先 有界 ) * 订阅阻塞队列(可订阅所有实现类 例如: 延迟 优先 有界 )
*/ */

View File

@ -48,7 +48,7 @@ public class SocialUtils {
case "coding" -> new AuthCodingRequest(AuthConfig.builder().clientId(clientId).clientSecret(clientSecret).redirectUri(redirectUri).build(), STATE_CACHE); case "coding" -> new AuthCodingRequest(AuthConfig.builder().clientId(clientId).clientSecret(clientSecret).redirectUri(redirectUri).build(), STATE_CACHE);
case "oschina" -> new AuthOschinaRequest(AuthConfig.builder().clientId(clientId).clientSecret(clientSecret).redirectUri(redirectUri).build(), STATE_CACHE); case "oschina" -> new AuthOschinaRequest(AuthConfig.builder().clientId(clientId).clientSecret(clientSecret).redirectUri(redirectUri).build(), STATE_CACHE);
// 支付宝在创建回调地址时不允许使用localhost或者127.0.0.1所以这儿的回调地址使用的局域网内的ip // 支付宝在创建回调地址时不允许使用localhost或者127.0.0.1所以这儿的回调地址使用的局域网内的ip
case "alipay" -> new AuthAlipayRequest(AuthConfig.builder().clientId(clientId).clientSecret(clientSecret).redirectUri(redirectUri).build(), socialProperties.getType().get("alipay").getAlipayPublicKey(), STATE_CACHE); case "alipay_wallet" -> new AuthAlipayRequest(AuthConfig.builder().clientId(clientId).clientSecret(clientSecret).redirectUri(redirectUri).build(), socialProperties.getType().get("alipay_wallet").getAlipayPublicKey(), STATE_CACHE);
case "qq" -> new AuthQqRequest(AuthConfig.builder().clientId(clientId).clientSecret(clientSecret).redirectUri(redirectUri).build(), STATE_CACHE); case "qq" -> new AuthQqRequest(AuthConfig.builder().clientId(clientId).clientSecret(clientSecret).redirectUri(redirectUri).build(), STATE_CACHE);
case "wechat_open" -> new AuthWeChatOpenRequest(AuthConfig.builder().clientId(clientId).clientSecret(clientSecret).redirectUri(redirectUri).build(), STATE_CACHE); case "wechat_open" -> new AuthWeChatOpenRequest(AuthConfig.builder().clientId(clientId).clientSecret(clientSecret).redirectUri(redirectUri).build(), STATE_CACHE);
case "taobao" -> new AuthTaobaoRequest(AuthConfig.builder().clientId(clientId).clientSecret(clientSecret).redirectUri(redirectUri).build(), STATE_CACHE); case "taobao" -> new AuthTaobaoRequest(AuthConfig.builder().clientId(clientId).clientSecret(clientSecret).redirectUri(redirectUri).build(), STATE_CACHE);

View File

@ -5,6 +5,7 @@ import lombok.NoArgsConstructor;
import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.WebSocketSession;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
/** /**
@ -31,6 +32,10 @@ public class WebSocketSessionHolder {
return USER_SESSION_MAP.get(sessionKey); return USER_SESSION_MAP.get(sessionKey);
} }
public static Set<Long> getSessionsAll() {
return USER_SESSION_MAP.keySet();
}
public static Boolean existSession(Long sessionKey) { public static Boolean existSession(Long sessionKey) {
return USER_SESSION_MAP.containsKey(sessionKey); return USER_SESSION_MAP.containsKey(sessionKey);
} }

View File

@ -19,13 +19,18 @@ public class WebSocketTopicListener implements ApplicationRunner, Ordered {
@Override @Override
public void run(ApplicationArguments args) throws Exception { public void run(ApplicationArguments args) throws Exception {
WebSocketUtils.subscribeMessage((message) -> { WebSocketUtils.subscribeMessage((message) -> {
log.info("WebSocket主题订阅收到消息session keys={} message={}", message.getSessionKeys(), message.getMessage()); log.info("WebSocket主题订阅收到消息session keys={} message={}", message.getSessionKeys(), message.getMessage());
// 如果key不为空就按照key发消息 如果为空就群发
if (CollUtil.isNotEmpty(message.getSessionKeys())) { if (CollUtil.isNotEmpty(message.getSessionKeys())) {
message.getSessionKeys().forEach(key -> { message.getSessionKeys().forEach(key -> {
if (WebSocketSessionHolder.existSession(key)) { if (WebSocketSessionHolder.existSession(key)) {
WebSocketUtils.sendMessage(key, message.getMessage()); WebSocketUtils.sendMessage(key, message.getMessage());
} }
}); });
} else {
WebSocketSessionHolder.getSessionsAll().forEach(key -> {
WebSocketUtils.sendMessage(key, message.getMessage());
});
} }
}); });
log.info("初始化WebSocket主题订阅监听器成功"); log.info("初始化WebSocket主题订阅监听器成功");

View File

@ -1,13 +1,13 @@
package org.dromara.common.websocket.utils; package org.dromara.common.websocket.utils;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.websocket.dto.WebSocketMessageDto; import org.dromara.common.websocket.dto.WebSocketMessageDto;
import org.dromara.common.websocket.holder.WebSocketSessionHolder; import org.dromara.common.websocket.holder.WebSocketSessionHolder;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.socket.PongMessage; import org.springframework.web.socket.PongMessage;
import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketMessage; import org.springframework.web.socket.WebSocketMessage;
@ -77,6 +77,22 @@ public class WebSocketUtils {
} }
} }
/**
* 发布订阅的消息(群发)
*
* @param message 消息内容
*/
public static void publishAll(String message) {
WebSocketSessionHolder.getSessionsAll().forEach(key -> {
WebSocketUtils.sendMessage(key, message);
});
WebSocketMessageDto broadcastMessage = new WebSocketMessageDto();
broadcastMessage.setMessage(message);
RedisUtils.publish(WEB_SOCKET_TOPIC, broadcastMessage, consumer -> {
log.info(" WebSocket发送主题订阅消息topic:{} message:{}", WEB_SOCKET_TOPIC, message);
});
}
public static void sendPongMessage(WebSocketSession session) { public static void sendPongMessage(WebSocketSession session) {
sendMessage(session, new PongMessage()); sendMessage(session, new PongMessage());
} }

View File

@ -1,4 +1,5 @@
FROM findepi/graalvm:java17-native #FROM findepi/graalvm:java17-native
FROM openjdk:17.0.2-oraclelinux8
MAINTAINER Lion Li MAINTAINER Lion Li
@ -6,6 +7,8 @@ RUN mkdir -p /ruoyi/monitor/logs
WORKDIR /ruoyi/monitor WORKDIR /ruoyi/monitor
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
EXPOSE 9090 EXPOSE 9090
ADD ./target/ruoyi-monitor-admin.jar ./app.jar ADD ./target/ruoyi-monitor-admin.jar ./app.jar

View File

@ -1,4 +1,5 @@
FROM findepi/graalvm:java17-native #FROM findepi/graalvm:java17-native
FROM openjdk:17.0.2-oraclelinux8
MAINTAINER Lion Li MAINTAINER Lion Li
@ -6,6 +7,8 @@ RUN mkdir -p /ruoyi/powerjob/logs
WORKDIR /ruoyi/powerjob WORKDIR /ruoyi/powerjob
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
EXPOSE 7700 EXPOSE 7700
ADD ./target/ruoyi-powerjob-server.jar ./app.jar ADD ./target/ruoyi-powerjob-server.jar ./app.jar

View File

@ -63,6 +63,11 @@
<artifactId>ruoyi-common-excel</artifactId> <artifactId>ruoyi-common-excel</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-security</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-web</artifactId> <artifactId>ruoyi-common-web</artifactId>

View File

@ -1,9 +1,11 @@
package org.dromara.demo.controller.queue; package org.dromara.demo.controller.queue;
import cn.dev33.satoken.annotation.SaIgnore;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.redis.utils.QueueUtils; import org.dromara.common.redis.utils.QueueUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RBoundedBlockingQueue;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -35,7 +37,7 @@ public class BoundedQueueController {
@GetMapping("/add") @GetMapping("/add")
public R<Void> add(String queueName, int capacity) { public R<Void> add(String queueName, int capacity) {
// 用完了一定要销毁 否则会一直存在 // 用完了一定要销毁 否则会一直存在
boolean b = QueueUtils.destroyQueue(queueName); boolean b = QueueUtils.destroyBoundedQueue(queueName);
log.info("通道: {} , 删除: {}", queueName, b); log.info("通道: {} , 删除: {}", queueName, b);
// 初始化设置一次即可 // 初始化设置一次即可
if (QueueUtils.trySetBoundedQueueCapacity(queueName, capacity)) { if (QueueUtils.trySetBoundedQueueCapacity(queueName, capacity)) {
@ -64,7 +66,7 @@ public class BoundedQueueController {
@GetMapping("/remove") @GetMapping("/remove")
public R<Void> remove(String queueName) { public R<Void> remove(String queueName) {
String data = "data-" + 5; String data = "data-" + 5;
if (QueueUtils.removeQueueObject(queueName, data)) { if (QueueUtils.removeBoundedQueueObject(queueName, data)) {
log.info("通道: {} , 删除数据: {}", queueName, data); log.info("通道: {} , 删除数据: {}", queueName, data);
} else { } else {
return R.fail("操作失败"); return R.fail("操作失败");
@ -81,7 +83,7 @@ public class BoundedQueueController {
public R<Void> get(String queueName) { public R<Void> get(String queueName) {
String data; String data;
do { do {
data = QueueUtils.getQueueObject(queueName); data = QueueUtils.getBoundedQueueObject(queueName);
log.info("通道: {} , 获取数据: {}", queueName, data); log.info("通道: {} , 获取数据: {}", queueName, data);
} while (data != null); } while (data != null);
return R.ok("操作成功"); return R.ok("操作成功");

View File

@ -34,7 +34,7 @@ public class PriorityQueueController {
@GetMapping("/add") @GetMapping("/add")
public R<Void> add(String queueName) { public R<Void> add(String queueName) {
// 用完了一定要销毁 否则会一直存在 // 用完了一定要销毁 否则会一直存在
boolean b = QueueUtils.destroyQueue(queueName); boolean b = QueueUtils.destroyPriorityQueue(queueName);
log.info("通道: {} , 删除: {}", queueName, b); log.info("通道: {} , 删除: {}", queueName, b);
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
@ -63,7 +63,7 @@ public class PriorityQueueController {
PriorityDemo data = new PriorityDemo(); PriorityDemo data = new PriorityDemo();
data.setName(name); data.setName(name);
data.setOrderNum(orderNum); data.setOrderNum(orderNum);
if (QueueUtils.removeQueueObject(queueName, data)) { if (QueueUtils.removePriorityQueueObject(queueName, data)) {
log.info("通道: {} , 删除数据: {}", queueName, data); log.info("通道: {} , 删除数据: {}", queueName, data);
} else { } else {
return R.fail("操作失败"); return R.fail("操作失败");
@ -80,7 +80,7 @@ public class PriorityQueueController {
public R<Void> get(String queueName) { public R<Void> get(String queueName) {
PriorityDemo data; PriorityDemo data;
do { do {
data = QueueUtils.getQueueObject(queueName); data = QueueUtils.getPriorityQueueObject(queueName);
log.info("通道: {} , 获取数据: {}", queueName, data); log.info("通道: {} , 获取数据: {}", queueName, data);
} while (data != null); } while (data != null);
return R.ok("操作成功"); return R.ok("操作成功");

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.poi.ss.formula.functions.T;
import org.dromara.common.mybatis.annotation.DataColumn; import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
@ -33,7 +34,7 @@ public interface TestDemoMapper extends BaseMapperPlus<TestDemo, TestDemoVo> {
@DataColumn(key = "deptName", value = "dept_id"), @DataColumn(key = "deptName", value = "dept_id"),
@DataColumn(key = "userName", value = "user_id") @DataColumn(key = "userName", value = "user_id")
}) })
<P extends IPage<TestDemo>> P selectPage(P page, @Param(Constants.WRAPPER) Wrapper<TestDemo> queryWrapper); List<TestDemo> selectList(IPage<TestDemo> page, @Param(Constants.WRAPPER) Wrapper<TestDemo> queryWrapper);
@Override @Override
@DataPermission({ @DataPermission({

View File

@ -65,6 +65,7 @@ public class TestDemoServiceImpl implements ITestDemoService {
lqw.eq(StringUtils.isNotBlank(bo.getValue()), TestDemo::getValue, bo.getValue()); lqw.eq(StringUtils.isNotBlank(bo.getValue()), TestDemo::getValue, bo.getValue());
lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null, lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null,
TestDemo::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime")); TestDemo::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime"));
lqw.orderByAsc(TestDemo::getId);
return lqw; return lqw;
} }

View File

@ -47,6 +47,7 @@ public class TestTreeServiceImpl implements ITestTreeService {
lqw.like(StringUtils.isNotBlank(bo.getTreeName()), TestTree::getTreeName, bo.getTreeName()); lqw.like(StringUtils.isNotBlank(bo.getTreeName()), TestTree::getTreeName, bo.getTreeName());
lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null, lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null,
TestTree::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime")); TestTree::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime"));
lqw.orderByAsc(TestTree::getId);
return lqw; return lqw;
} }

View File

@ -15,7 +15,7 @@
#end #end
#if($column.htmlType == "input" || $column.htmlType == "textarea") #if($column.htmlType == "input" || $column.htmlType == "textarea")
<el-form-item label="${comment}" prop="${column.javaField}"> <el-form-item label="${comment}" prop="${column.javaField}">
<el-input v-model="queryParams.${column.javaField}" placeholder="请输入${comment}" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.${column.javaField}" placeholder="请输入${comment}" clearable style="width: 240px" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType) #elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType)
<el-form-item label="${comment}" prop="${column.javaField}"> <el-form-item label="${comment}" prop="${column.javaField}">
@ -322,19 +322,19 @@ const data = reactive<PageData<${BusinessName}Form, ${BusinessName}Query>>({
queryParams: { queryParams: {
#foreach ($column in $columns) #foreach ($column in $columns)
#if($column.query) #if($column.query)
#if($column.htmlType != "datetime" || $column.queryType != "BETWEEN") #if($column.htmlType != "datetime" || $column.queryType != "BETWEEN")
$column.javaField: undefined#if($foreach.count != $columns.size()),#end $column.javaField: undefined,
#end #end
#end #end
#end #end
params: { params: {
#foreach ($column in $columns) #foreach ($column in $columns)
#if($column.query) #if($column.query)
#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN") #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
$column.javaField: undefined#if($foreach.count != $columns.size()),#end $column.javaField: undefined#if($foreach.count != $columns.size()),#end
#end #end
#end #end
#end #end
} }
}, },
rules: { rules: {
@ -451,7 +451,7 @@ const handleUpdate = async (row: ${BusinessName}VO) => {
reset(); reset();
await getTreeselect(); await getTreeselect();
if (row != null) { if (row != null) {
form.value.${treeParentCode} = row.${treeCode}; form.value.${treeParentCode} = row.${treeParentCode};
} }
const res = await get${BusinessName}(row.${treeCode}); const res = await get${BusinessName}(row.${treeCode});
Object.assign(form.value, res.data); Object.assign(form.value, res.data);

View File

@ -15,7 +15,7 @@
#end #end
#if($column.htmlType == "input" || $column.htmlType == "textarea") #if($column.htmlType == "input" || $column.htmlType == "textarea")
<el-form-item label="${comment}" prop="${column.javaField}"> <el-form-item label="${comment}" prop="${column.javaField}">
<el-input v-model="queryParams.${column.javaField}" placeholder="请输入${comment}" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.${column.javaField}" placeholder="请输入${comment}" clearable style="width: 240px" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType) #elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType)
<el-form-item label="${comment}" prop="${column.javaField}"> <el-form-item label="${comment}" prop="${column.javaField}">
@ -308,19 +308,19 @@ const data = reactive<PageData<${BusinessName}Form, ${BusinessName}Query>>({
pageSize: 10, pageSize: 10,
#foreach ($column in $columns) #foreach ($column in $columns)
#if($column.query) #if($column.query)
#if($column.htmlType != "datetime" || $column.queryType != "BETWEEN") #if($column.htmlType != "datetime" || $column.queryType != "BETWEEN")
$column.javaField: undefined#if($foreach.count != $columns.size()),#end $column.javaField: undefined,
#end #end
#end #end
#end #end
params: { params: {
#foreach ($column in $columns) #foreach ($column in $columns)
#if($column.query) #if($column.query)
#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN") #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
$column.javaField: undefined#if($foreach.count != $columns.size()),#end $column.javaField: undefined#if($foreach.count != $columns.size()),#end
#end #end
#end #end
#end #end
} }
}, },
rules: { rules: {

View File

@ -84,6 +84,12 @@
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sensitive</artifactId> <artifactId>ruoyi-common-sensitive</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-encrypt</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -80,10 +80,6 @@ public class SysMenuController extends BaseController {
/** /**
* 获取菜单下拉树列表 * 获取菜单下拉树列表
*/ */
@SaCheckRole(value = {
TenantConstants.SUPER_ADMIN_ROLE_KEY,
TenantConstants.TENANT_ADMIN_ROLE_KEY
}, mode = SaMode.OR)
@SaCheckPermission("system:menu:query") @SaCheckPermission("system:menu:query")
@GetMapping("/treeselect") @GetMapping("/treeselect")
public R<List<Tree<Long>>> treeselect(SysMenuBo menu) { public R<List<Tree<Long>>> treeselect(SysMenuBo menu) {
@ -96,10 +92,6 @@ public class SysMenuController extends BaseController {
* *
* @param roleId 角色ID * @param roleId 角色ID
*/ */
@SaCheckRole(value = {
TenantConstants.SUPER_ADMIN_ROLE_KEY,
TenantConstants.TENANT_ADMIN_ROLE_KEY
}, mode = SaMode.OR)
@SaCheckPermission("system:menu:query") @SaCheckPermission("system:menu:query")
@GetMapping(value = "/roleMenuTreeselect/{roleId}") @GetMapping(value = "/roleMenuTreeselect/{roleId}")
public R<MenuTreeSelectVo> roleMenuTreeselect(@PathVariable("roleId") Long roleId) { public R<MenuTreeSelectVo> roleMenuTreeselect(@PathVariable("roleId") Long roleId) {

View File

@ -112,6 +112,9 @@ public class SysUserController extends BaseController {
TenantHelper.clearDynamic(); TenantHelper.clearDynamic();
} }
SysUserVo user = userService.selectUserById(loginUser.getUserId()); SysUserVo user = userService.selectUserById(loginUser.getUserId());
if (ObjectUtil.isNull(user)) {
return R.fail("没有权限访问用户数据!");
}
userInfoVo.setUser(user); userInfoVo.setUser(user);
userInfoVo.setPermissions(loginUser.getMenuPermission()); userInfoVo.setPermissions(loginUser.getMenuPermission());
userInfoVo.setRoles(loginUser.getRolePermission()); userInfoVo.setRoles(loginUser.getRolePermission());
@ -151,6 +154,7 @@ public class SysUserController extends BaseController {
@Log(title = "用户管理", businessType = BusinessType.INSERT) @Log(title = "用户管理", businessType = BusinessType.INSERT)
@PostMapping @PostMapping
public R<Void> add(@Validated @RequestBody SysUserBo user) { public R<Void> add(@Validated @RequestBody SysUserBo user) {
deptService.checkDeptDataScope(user.getDeptId());
if (!userService.checkUserNameUnique(user)) { if (!userService.checkUserNameUnique(user)) {
return R.fail("新增用户'" + user.getUserName() + "'失败,登录账号已存在"); return R.fail("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
} else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) {
@ -176,6 +180,7 @@ public class SysUserController extends BaseController {
public R<Void> edit(@Validated @RequestBody SysUserBo user) { public R<Void> edit(@Validated @RequestBody SysUserBo user) {
userService.checkUserAllowed(user.getUserId()); userService.checkUserAllowed(user.getUserId());
userService.checkUserDataScope(user.getUserId()); userService.checkUserDataScope(user.getUserId());
deptService.checkDeptDataScope(user.getDeptId());
if (!userService.checkUserNameUnique(user)) { if (!userService.checkUserNameUnique(user)) {
return R.fail("修改用户'" + user.getUserName() + "'失败,登录账号已存在"); return R.fail("修改用户'" + user.getUserName() + "'失败,登录账号已存在");
} else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) {

View File

@ -79,7 +79,7 @@ public class SysUserImportListener extends AnalysisEventListener<SysUserImportVo
} }
} catch (Exception e) { } catch (Exception e) {
failureNum++; failureNum++;
String msg = "<br/>" + failureNum + "、账号 " + sysUser.getUserName() + " 导入失败:"; String msg = "<br/>" + failureNum + "、账号 " + userVo.getUserName() + " 导入失败:";
failureMsg.append(msg).append(e.getMessage()); failureMsg.append(msg).append(e.getMessage());
log.error(msg, e); log.error(msg, e);
} }

View File

@ -20,7 +20,6 @@ import org.springframework.stereotype.Service;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 客户端管理Service业务层处理 * 客户端管理Service业务层处理
@ -75,12 +74,12 @@ public class SysClientServiceImpl implements ISysClientService {
} }
private LambdaQueryWrapper<SysClient> buildQueryWrapper(SysClientBo bo) { private LambdaQueryWrapper<SysClient> buildQueryWrapper(SysClientBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SysClient> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<SysClient> lqw = Wrappers.lambdaQuery();
lqw.eq(StringUtils.isNotBlank(bo.getClientId()), SysClient::getClientId, bo.getClientId()); lqw.eq(StringUtils.isNotBlank(bo.getClientId()), SysClient::getClientId, bo.getClientId());
lqw.eq(StringUtils.isNotBlank(bo.getClientKey()), SysClient::getClientKey, bo.getClientKey()); lqw.eq(StringUtils.isNotBlank(bo.getClientKey()), SysClient::getClientKey, bo.getClientKey());
lqw.eq(StringUtils.isNotBlank(bo.getClientSecret()), SysClient::getClientSecret, bo.getClientSecret()); lqw.eq(StringUtils.isNotBlank(bo.getClientSecret()), SysClient::getClientSecret, bo.getClientSecret());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysClient::getStatus, bo.getStatus()); lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysClient::getStatus, bo.getStatus());
lqw.orderByAsc(SysClient::getId);
return lqw; return lqw;
} }

View File

@ -114,6 +114,7 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService {
lqw.like(StringUtils.isNotBlank(bo.getConfigKey()), SysConfig::getConfigKey, bo.getConfigKey()); lqw.like(StringUtils.isNotBlank(bo.getConfigKey()), SysConfig::getConfigKey, bo.getConfigKey());
lqw.between(params.get("beginTime") != null && params.get("endTime") != null, lqw.between(params.get("beginTime") != null && params.get("endTime") != null,
SysConfig::getCreateTime, params.get("beginTime"), params.get("endTime")); SysConfig::getCreateTime, params.get("beginTime"), params.get("endTime"));
lqw.orderByAsc(SysConfig::getConfigId);
return lqw; return lqw;
} }

View File

@ -83,6 +83,7 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
lqw.eq(ObjectUtil.isNotNull(bo.getParentId()), SysDept::getParentId, bo.getParentId()); lqw.eq(ObjectUtil.isNotNull(bo.getParentId()), SysDept::getParentId, bo.getParentId());
lqw.like(StringUtils.isNotBlank(bo.getDeptName()), SysDept::getDeptName, bo.getDeptName()); lqw.like(StringUtils.isNotBlank(bo.getDeptName()), SysDept::getDeptName, bo.getDeptName());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysDept::getStatus, bo.getStatus()); lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysDept::getStatus, bo.getStatus());
lqw.orderByAsc(SysDept::getDeptId);
lqw.orderByAsc(SysDept::getParentId); lqw.orderByAsc(SysDept::getParentId);
lqw.orderByAsc(SysDept::getOrderNum); lqw.orderByAsc(SysDept::getOrderNum);
return lqw; return lqw;

View File

@ -76,6 +76,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService, DictService
lqw.like(StringUtils.isNotBlank(bo.getDictType()), SysDictType::getDictType, bo.getDictType()); lqw.like(StringUtils.isNotBlank(bo.getDictType()), SysDictType::getDictType, bo.getDictType());
lqw.between(params.get("beginTime") != null && params.get("endTime") != null, lqw.between(params.get("beginTime") != null && params.get("endTime") != null,
SysDictType::getCreateTime, params.get("beginTime"), params.get("endTime")); SysDictType::getCreateTime, params.get("beginTime"), params.get("endTime"));
lqw.orderByAsc(SysDictType::getDictId);
return lqw; return lqw;
} }

View File

@ -203,7 +203,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
List<RouterVo> childrenList = new ArrayList<>(); List<RouterVo> childrenList = new ArrayList<>();
RouterVo children = new RouterVo(); RouterVo children = new RouterVo();
children.setPath(menu.getPath()); children.setPath(menu.getPath());
children.setComponent(menu.getComponentInfo()); children.setComponent(menu.getComponent());
children.setName(StringUtils.capitalize(menu.getPath())); children.setName(StringUtils.capitalize(menu.getPath()));
children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath()));
children.setQuery(menu.getQueryParam()); children.setQuery(menu.getQueryParam());

View File

@ -71,6 +71,7 @@ public class SysNoticeServiceImpl implements ISysNoticeService {
SysUserVo sysUser = userMapper.selectUserByUserName(bo.getCreateByName()); SysUserVo sysUser = userMapper.selectUserByUserName(bo.getCreateByName());
lqw.eq(SysNotice::getCreateBy, ObjectUtil.isNotNull(sysUser) ? sysUser.getUserId() : null); lqw.eq(SysNotice::getCreateBy, ObjectUtil.isNotNull(sysUser) ? sysUser.getUserId() : null);
} }
lqw.orderByAsc(SysNotice::getNoticeId);
return lqw; return lqw;
} }

View File

@ -92,6 +92,7 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
lqw.eq(StringUtils.isNotBlank(bo.getConfigKey()), SysOssConfig::getConfigKey, bo.getConfigKey()); lqw.eq(StringUtils.isNotBlank(bo.getConfigKey()), SysOssConfig::getConfigKey, bo.getConfigKey());
lqw.like(StringUtils.isNotBlank(bo.getBucketName()), SysOssConfig::getBucketName, bo.getBucketName()); lqw.like(StringUtils.isNotBlank(bo.getBucketName()), SysOssConfig::getBucketName, bo.getBucketName());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysOssConfig::getStatus, bo.getStatus()); lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysOssConfig::getStatus, bo.getStatus());
lqw.orderByAsc(SysOssConfig::getOssConfigId);
return lqw; return lqw;
} }

View File

@ -93,6 +93,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
SysOss::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime")); SysOss::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime"));
lqw.eq(ObjectUtil.isNotNull(bo.getCreateBy()), SysOss::getCreateBy, bo.getCreateBy()); lqw.eq(ObjectUtil.isNotNull(bo.getCreateBy()), SysOss::getCreateBy, bo.getCreateBy());
lqw.eq(StringUtils.isNotBlank(bo.getService()), SysOss::getService, bo.getService()); lqw.eq(StringUtils.isNotBlank(bo.getService()), SysOss::getService, bo.getService());
lqw.orderByAsc(SysOss::getOssId);
return lqw; return lqw;
} }

View File

@ -1,30 +1,29 @@
package org.dromara.system.service.impl; package org.dromara.system.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.TenantConstants; import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.dromara.common.mybatis.core.page.TableDataInfo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.dromara.system.domain.SysTenant; import org.dromara.system.domain.SysTenant;
import org.dromara.system.mapper.SysTenantMapper; import org.dromara.system.domain.SysTenantPackage;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.system.domain.bo.SysTenantPackageBo; import org.dromara.system.domain.bo.SysTenantPackageBo;
import org.dromara.system.domain.vo.SysTenantPackageVo; import org.dromara.system.domain.vo.SysTenantPackageVo;
import org.dromara.system.domain.SysTenantPackage; import org.dromara.system.mapper.SysTenantMapper;
import org.dromara.system.mapper.SysTenantPackageMapper; import org.dromara.system.mapper.SysTenantPackageMapper;
import org.dromara.system.service.ISysTenantPackageService; import org.dromara.system.service.ISysTenantPackageService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Collection; import java.util.Collection;
import java.util.List;
/** /**
* 租户套餐Service业务层处理 * 租户套餐Service业务层处理
@ -72,10 +71,10 @@ public class SysTenantPackageServiceImpl implements ISysTenantPackageService {
} }
private LambdaQueryWrapper<SysTenantPackage> buildQueryWrapper(SysTenantPackageBo bo) { private LambdaQueryWrapper<SysTenantPackage> buildQueryWrapper(SysTenantPackageBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SysTenantPackage> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<SysTenantPackage> lqw = Wrappers.lambdaQuery();
lqw.like(StringUtils.isNotBlank(bo.getPackageName()), SysTenantPackage::getPackageName, bo.getPackageName()); lqw.like(StringUtils.isNotBlank(bo.getPackageName()), SysTenantPackage::getPackageName, bo.getPackageName());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysTenantPackage::getStatus, bo.getStatus()); lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysTenantPackage::getStatus, bo.getStatus());
lqw.orderByAsc(SysTenantPackage::getPackageId);
return lqw; return lqw;
} }

View File

@ -103,6 +103,7 @@ public class SysTenantServiceImpl implements ISysTenantService {
lqw.eq(bo.getExpireTime() != null, SysTenant::getExpireTime, bo.getExpireTime()); lqw.eq(bo.getExpireTime() != null, SysTenant::getExpireTime, bo.getExpireTime());
lqw.eq(bo.getAccountCount() != null, SysTenant::getAccountCount, bo.getAccountCount()); lqw.eq(bo.getAccountCount() != null, SysTenant::getAccountCount, bo.getAccountCount());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysTenant::getStatus, bo.getStatus()); lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysTenant::getStatus, bo.getStatus());
lqw.orderByAsc(SysTenant::getId);
return lqw; return lqw;
} }

View File

@ -77,20 +77,20 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
Map<String, Object> params = user.getParams(); Map<String, Object> params = user.getParams();
QueryWrapper<SysUser> wrapper = Wrappers.query(); QueryWrapper<SysUser> wrapper = Wrappers.query();
wrapper.eq("u.del_flag", UserConstants.USER_NORMAL) wrapper.eq("u.del_flag", UserConstants.USER_NORMAL)
.eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId()) .eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId())
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName()) .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
.eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus()) .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber()) .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
.between(params.get("beginTime") != null && params.get("endTime") != null, .between(params.get("beginTime") != null && params.get("endTime") != null,
"u.create_time", params.get("beginTime"), params.get("endTime")) "u.create_time", params.get("beginTime"), params.get("endTime"))
.and(ObjectUtil.isNotNull(user.getDeptId()), w -> { .and(ObjectUtil.isNotNull(user.getDeptId()), w -> {
List<SysDept> deptList = deptMapper.selectList(new LambdaQueryWrapper<SysDept>() List<SysDept> deptList = deptMapper.selectList(new LambdaQueryWrapper<SysDept>()
.select(SysDept::getDeptId) .select(SysDept::getDeptId)
.apply(DataBaseHelper.findInSet(user.getDeptId(), "ancestors"))); .apply(DataBaseHelper.findInSet(user.getDeptId(), "ancestors")));
List<Long> ids = StreamUtils.toList(deptList, SysDept::getDeptId); List<Long> ids = StreamUtils.toList(deptList, SysDept::getDeptId);
ids.add(user.getDeptId()); ids.add(user.getDeptId());
w.in("u.dept_id", ids); w.in("u.dept_id", ids);
}); }).orderByAsc("u.user_id");
return wrapper; return wrapper;
} }
@ -104,10 +104,11 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
public TableDataInfo<SysUserVo> selectAllocatedList(SysUserBo user, PageQuery pageQuery) { public TableDataInfo<SysUserVo> selectAllocatedList(SysUserBo user, PageQuery pageQuery) {
QueryWrapper<SysUser> wrapper = Wrappers.query(); QueryWrapper<SysUser> wrapper = Wrappers.query();
wrapper.eq("u.del_flag", UserConstants.USER_NORMAL) wrapper.eq("u.del_flag", UserConstants.USER_NORMAL)
.eq(ObjectUtil.isNotNull(user.getRoleId()), "r.role_id", user.getRoleId()) .eq(ObjectUtil.isNotNull(user.getRoleId()), "r.role_id", user.getRoleId())
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName()) .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
.eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus()) .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber()); .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
.orderByAsc("u.user_id");
Page<SysUserVo> page = baseMapper.selectAllocatedList(pageQuery.build(), wrapper); Page<SysUserVo> page = baseMapper.selectAllocatedList(pageQuery.build(), wrapper);
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
@ -123,10 +124,11 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
List<Long> userIds = userRoleMapper.selectUserIdsByRoleId(user.getRoleId()); List<Long> userIds = userRoleMapper.selectUserIdsByRoleId(user.getRoleId());
QueryWrapper<SysUser> wrapper = Wrappers.query(); QueryWrapper<SysUser> wrapper = Wrappers.query();
wrapper.eq("u.del_flag", UserConstants.USER_NORMAL) wrapper.eq("u.del_flag", UserConstants.USER_NORMAL)
.and(w -> w.ne("r.role_id", user.getRoleId()).or().isNull("r.role_id")) .and(w -> w.ne("r.role_id", user.getRoleId()).or().isNull("r.role_id"))
.notIn(CollUtil.isNotEmpty(userIds), "u.user_id", userIds) .notIn(CollUtil.isNotEmpty(userIds), "u.user_id", userIds)
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName()) .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber()); .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
.orderByAsc("u.user_id");
Page<SysUserVo> page = baseMapper.selectUnallocatedList(pageQuery.build(), wrapper); Page<SysUserVo> page = baseMapper.selectUnallocatedList(pageQuery.build(), wrapper);
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
@ -203,8 +205,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override @Override
public boolean checkUserNameUnique(SysUserBo user) { public boolean checkUserNameUnique(SysUserBo user) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysUser>() boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysUser>()
.eq(SysUser::getUserName, user.getUserName()) .eq(SysUser::getUserName, user.getUserName())
.ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId())); .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId()));
return !exist; return !exist;
} }
@ -216,8 +218,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override @Override
public boolean checkPhoneUnique(SysUserBo user) { public boolean checkPhoneUnique(SysUserBo user) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysUser>() boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysUser>()
.eq(SysUser::getPhonenumber, user.getPhonenumber()) .eq(SysUser::getPhonenumber, user.getPhonenumber())
.ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId())); .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId()));
return !exist; return !exist;
} }
@ -229,8 +231,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override @Override
public boolean checkEmailUnique(SysUserBo user) { public boolean checkEmailUnique(SysUserBo user) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysUser>() boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysUser>()
.eq(SysUser::getEmail, user.getEmail()) .eq(SysUser::getEmail, user.getEmail())
.ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId())); .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId()));
return !exist; return !exist;
} }
@ -343,9 +345,9 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override @Override
public int updateUserStatus(Long userId, String status) { public int updateUserStatus(Long userId, String status) {
return baseMapper.update(null, return baseMapper.update(null,
new LambdaUpdateWrapper<SysUser>() new LambdaUpdateWrapper<SysUser>()
.set(SysUser::getStatus, status) .set(SysUser::getStatus, status)
.eq(SysUser::getUserId, userId)); .eq(SysUser::getUserId, userId));
} }
/** /**
@ -357,12 +359,12 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override @Override
public int updateUserProfile(SysUserBo user) { public int updateUserProfile(SysUserBo user) {
return baseMapper.update(null, return baseMapper.update(null,
new LambdaUpdateWrapper<SysUser>() new LambdaUpdateWrapper<SysUser>()
.set(ObjectUtil.isNotNull(user.getNickName()), SysUser::getNickName, user.getNickName()) .set(ObjectUtil.isNotNull(user.getNickName()), SysUser::getNickName, user.getNickName())
.set(SysUser::getPhonenumber, user.getPhonenumber()) .set(SysUser::getPhonenumber, user.getPhonenumber())
.set(SysUser::getEmail, user.getEmail()) .set(SysUser::getEmail, user.getEmail())
.set(SysUser::getSex, user.getSex()) .set(SysUser::getSex, user.getSex())
.eq(SysUser::getUserId, user.getUserId())); .eq(SysUser::getUserId, user.getUserId()));
} }
/** /**
@ -375,9 +377,9 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override @Override
public boolean updateUserAvatar(Long userId, Long avatar) { public boolean updateUserAvatar(Long userId, Long avatar) {
return baseMapper.update(null, return baseMapper.update(null,
new LambdaUpdateWrapper<SysUser>() new LambdaUpdateWrapper<SysUser>()
.set(SysUser::getAvatar, avatar) .set(SysUser::getAvatar, avatar)
.eq(SysUser::getUserId, userId)) > 0; .eq(SysUser::getUserId, userId)) > 0;
} }
/** /**
@ -390,9 +392,9 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override @Override
public int resetUserPwd(Long userId, String password) { public int resetUserPwd(Long userId, String password) {
return baseMapper.update(null, return baseMapper.update(null,
new LambdaUpdateWrapper<SysUser>() new LambdaUpdateWrapper<SysUser>()
.set(SysUser::getPassword, password) .set(SysUser::getPassword, password)
.eq(SysUser::getUserId, userId)); .eq(SysUser::getUserId, userId));
} }
/** /**
@ -523,6 +525,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
public List<SysUserVo> selectUserListByDept(Long deptId) { public List<SysUserVo> selectUserListByDept(Long deptId) {
LambdaQueryWrapper<SysUser> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<SysUser> lqw = Wrappers.lambdaQuery();
lqw.eq(SysUser::getDeptId, deptId); lqw.eq(SysUser::getDeptId, deptId);
lqw.orderByAsc(SysUser::getUserId);
return baseMapper.selectVoList(lqw); return baseMapper.selectVoList(lqw);
} }
@ -530,7 +533,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override @Override
public String selectUserNameById(Long userId) { public String selectUserNameById(Long userId) {
SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper<SysUser>() SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getUserName).eq(SysUser::getUserId, userId)); .select(SysUser::getUserName).eq(SysUser::getUserId, userId));
return ObjectUtil.isNull(sysUser) ? null : sysUser.getUserName(); return ObjectUtil.isNull(sysUser) ? null : sysUser.getUserName();
} }