upd
This commit is contained in:
@@ -10,6 +10,24 @@
|
|||||||
|
|
||||||
https://github.com/odboy-tianjun/cutejava
|
https://github.com/odboy-tianjun/cutejava
|
||||||
|
|
||||||
|
#### 编码规范
|
||||||
|
|
||||||
|
- 和数据库表一一对应的类, 以`Tb`结尾
|
||||||
|
- 前端请求参数类名, 以`Args`结尾
|
||||||
|
- 返回给前端的数据类名, 以`Vo`结尾
|
||||||
|
- 事件驱动类名,以`Event`结尾
|
||||||
|
- 消息队列/Socket传输类名,以`Message`结尾
|
||||||
|
- 原框架以外的所有辅助类的类名, 以`Cs`开头
|
||||||
|
- 查询分页、查询列表的方法,一律为同一个方法名
|
||||||
|
- 查询分页:queryUserListByArgs(args, page)
|
||||||
|
- 查询列表:queryUserListByArgs(args)
|
||||||
|
- MapperXml:这样mapper.xml文件中的实现方法只需要写一个queryUserListByArgs
|
||||||
|
- Mapper层查询方法,统一使用以下命名规则
|
||||||
|
- 分页、列表:query{TableName}ListByArgs
|
||||||
|
- 精确查询:get{TableName}{By FieldName}
|
||||||
|
- 统计数量:get{具体语义}Count{By FieldName}
|
||||||
|
- 枚举类名,以`Enum`结尾
|
||||||
|
|
||||||
#### 主要特性
|
#### 主要特性
|
||||||
|
|
||||||
- 使用最新技术栈,社区资源丰富。
|
- 使用最新技术栈,社区资源丰富。
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>cutejava</artifactId>
|
<artifactId>cutejava</artifactId>
|
||||||
<groupId>cn.odboy</groupId>
|
<groupId>cn.odboy</groupId>
|
||||||
<version>1.3.1</version>
|
<version>1.4.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>cutejava-common</artifactId>
|
<artifactId>cutejava-common</artifactId>
|
||||||
|
|||||||
@@ -1,11 +1,6 @@
|
|||||||
package cn.odboy.annotation;
|
package cn.odboy.annotation;
|
||||||
|
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.*;
|
||||||
import java.lang.annotation.ElementType;
|
|
||||||
import java.lang.annotation.Inherited;
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用于标记匿名访问方法
|
* 用于标记匿名访问方法
|
||||||
|
|||||||
+2
-5
@@ -3,11 +3,8 @@ package cn.odboy.annotation;
|
|||||||
import org.springframework.core.annotation.AliasFor;
|
import org.springframework.core.annotation.AliasFor;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMethod;
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
import java.lang.annotation.Documented;
|
|
||||||
import java.lang.annotation.ElementType;
|
import java.lang.annotation.*;
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Annotation for mapping HTTP {@code DELETE} requests onto specific handler
|
* Annotation for mapping HTTP {@code DELETE} requests onto specific handler
|
||||||
|
|||||||
@@ -3,11 +3,8 @@ package cn.odboy.annotation;
|
|||||||
import org.springframework.core.annotation.AliasFor;
|
import org.springframework.core.annotation.AliasFor;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMethod;
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
import java.lang.annotation.Documented;
|
|
||||||
import java.lang.annotation.ElementType;
|
import java.lang.annotation.*;
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Annotation for mapping HTTP {@code GET} requests onto specific handler
|
* Annotation for mapping HTTP {@code GET} requests onto specific handler
|
||||||
|
|||||||
+2
-5
@@ -3,11 +3,8 @@ package cn.odboy.annotation;
|
|||||||
import org.springframework.core.annotation.AliasFor;
|
import org.springframework.core.annotation.AliasFor;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMethod;
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
import java.lang.annotation.Documented;
|
|
||||||
import java.lang.annotation.ElementType;
|
import java.lang.annotation.*;
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Annotation for mapping HTTP {@code PATCH} requests onto specific handler
|
* Annotation for mapping HTTP {@code PATCH} requests onto specific handler
|
||||||
|
|||||||
+2
-5
@@ -3,11 +3,8 @@ package cn.odboy.annotation;
|
|||||||
import org.springframework.core.annotation.AliasFor;
|
import org.springframework.core.annotation.AliasFor;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMethod;
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
import java.lang.annotation.Documented;
|
|
||||||
import java.lang.annotation.ElementType;
|
import java.lang.annotation.*;
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Annotation for mapping HTTP {@code POST} requests onto specific handler
|
* Annotation for mapping HTTP {@code POST} requests onto specific handler
|
||||||
|
|||||||
@@ -3,11 +3,8 @@ package cn.odboy.annotation;
|
|||||||
import org.springframework.core.annotation.AliasFor;
|
import org.springframework.core.annotation.AliasFor;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMethod;
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
import java.lang.annotation.Documented;
|
|
||||||
import java.lang.annotation.ElementType;
|
import java.lang.annotation.*;
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Annotation for mapping HTTP {@code PUT} requests onto specific handler
|
* Annotation for mapping HTTP {@code PUT} requests onto specific handler
|
||||||
|
|||||||
+2
-1
@@ -9,6 +9,7 @@ import lombok.Setter;
|
|||||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
import org.springframework.data.annotation.CreatedBy;
|
import org.springframework.data.annotation.CreatedBy;
|
||||||
import org.springframework.data.annotation.LastModifiedBy;
|
import org.springframework.data.annotation.LastModifiedBy;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
@@ -20,7 +21,7 @@ import java.util.Date;
|
|||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
public class MyLogicEntity extends MyObject {
|
public class CsBaseUserTimeLogicTb extends CsSerializeObject {
|
||||||
@CreatedBy
|
@CreatedBy
|
||||||
@TableField(value = "create_by", fill = FieldFill.INSERT)
|
@TableField(value = "create_by", fill = FieldFill.INSERT)
|
||||||
@ApiModelProperty(value = "创建人", hidden = true)
|
@ApiModelProperty(value = "创建人", hidden = true)
|
||||||
+2
-1
@@ -9,6 +9,7 @@ import lombok.Setter;
|
|||||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
import org.springframework.data.annotation.CreatedBy;
|
import org.springframework.data.annotation.CreatedBy;
|
||||||
import org.springframework.data.annotation.LastModifiedBy;
|
import org.springframework.data.annotation.LastModifiedBy;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
@@ -16,7 +17,7 @@ import java.util.Date;
|
|||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
@EqualsAndHashCode(callSuper = false)
|
@EqualsAndHashCode(callSuper = false)
|
||||||
public class MyEntity extends MyObject {
|
public class CsBaseUserTimeTb extends CsSerializeObject {
|
||||||
|
|
||||||
@CreatedBy
|
@CreatedBy
|
||||||
@TableField(fill = FieldFill.INSERT)
|
@TableField(fill = FieldFill.INSERT)
|
||||||
+2
-1
@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
|
|||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
import javax.validation.constraints.Min;
|
import javax.validation.constraints.Min;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
@@ -17,7 +18,7 @@ import java.io.Serializable;
|
|||||||
@Data
|
@Data
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class PageArgs<T> implements Serializable {
|
public class CsPageArgs<T> implements Serializable {
|
||||||
@NotNull(message = "参数page不能为空")
|
@NotNull(message = "参数page不能为空")
|
||||||
@Min(value = 1, message = "参数page最小值为1")
|
@Min(value = 1, message = "参数page最小值为1")
|
||||||
@ApiModelProperty(value = "页码", example = "1")
|
@ApiModelProperty(value = "页码", example = "1")
|
||||||
+1
-1
@@ -12,7 +12,7 @@ import lombok.NoArgsConstructor;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@EqualsAndHashCode(callSuper = false)
|
@EqualsAndHashCode(callSuper = false)
|
||||||
public class BaseResult<T> extends MyObject {
|
public class CsResultVo<T> extends CsSerializeObject {
|
||||||
private T content;
|
private T content;
|
||||||
private long totalElements;
|
private long totalElements;
|
||||||
}
|
}
|
||||||
+3
-6
@@ -15,11 +15,8 @@
|
|||||||
*/
|
*/
|
||||||
package cn.odboy.base;
|
package cn.odboy.base;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.*;
|
||||||
import lombok.Builder;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -33,7 +30,7 @@ import java.util.Map;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@EqualsAndHashCode(callSuper = false)
|
@EqualsAndHashCode(callSuper = false)
|
||||||
public class MyMetaOption extends MyObject {
|
public class CsSelectOptionItemVo extends CsSerializeObject {
|
||||||
private String label;
|
private String label;
|
||||||
private String value;
|
private String value;
|
||||||
private Map<String, Object> ext;
|
private Map<String, Object> ext;
|
||||||
+1
-1
@@ -8,6 +8,6 @@ import java.io.Serializable;
|
|||||||
* @author odboy
|
* @author odboy
|
||||||
* @date 2022-01-12
|
* @date 2022-01-12
|
||||||
*/
|
*/
|
||||||
public class MyObject implements Serializable {
|
public class CsSerializeObject implements Serializable {
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
}
|
}
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package cn.odboy.base;
|
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页结果封装类
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@EqualsAndHashCode(callSuper = false)
|
|
||||||
public class PageResult<T> extends MyObject {
|
|
||||||
private List<T> content;
|
|
||||||
private long totalElements;
|
|
||||||
}
|
|
||||||
+1
-1
@@ -28,7 +28,7 @@ import org.springframework.stereotype.Component;
|
|||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Component
|
@Component
|
||||||
public class BeanLoadFinishListener implements ApplicationListener<ContextRefreshedEvent> {
|
public class CsBeanLoadFinishListener implements ApplicationListener<ContextRefreshedEvent> {
|
||||||
@Override
|
@Override
|
||||||
public void onApplicationEvent(ContextRefreshedEvent event) {
|
public void onApplicationEvent(ContextRefreshedEvent event) {
|
||||||
log.info("所有的Bean都加载完毕了");
|
log.info("所有的Bean都加载完毕了");
|
||||||
+2
-1
@@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.springframework.context.ConfigurableApplicationContext;
|
import org.springframework.context.ConfigurableApplicationContext;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
|
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
|
|
||||||
@@ -30,7 +31,7 @@ import java.net.UnknownHostException;
|
|||||||
* @date 2024-04-20
|
* @date 2024-04-20
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class BootApplication {
|
public class CsBootApplication {
|
||||||
@Bean
|
@Bean
|
||||||
public SpringBeanHolder springContextHolder() {
|
public SpringBeanHolder springContextHolder() {
|
||||||
return new SpringBeanHolder();
|
return new SpringBeanHolder();
|
||||||
+3
-8
@@ -19,13 +19,8 @@ import cn.hutool.core.util.ReflectUtil;
|
|||||||
import cn.hutool.script.ScriptRuntimeException;
|
import cn.hutool.script.ScriptRuntimeException;
|
||||||
import cn.odboy.exception.BadRequestException;
|
import cn.odboy.exception.BadRequestException;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import javax.script.Bindings;
|
|
||||||
import javax.script.Invocable;
|
import javax.script.*;
|
||||||
import javax.script.ScriptContext;
|
|
||||||
import javax.script.ScriptEngine;
|
|
||||||
import javax.script.ScriptEngineManager;
|
|
||||||
import javax.script.ScriptException;
|
|
||||||
import javax.script.SimpleScriptContext;
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -39,7 +34,7 @@ import java.util.Set;
|
|||||||
* @date 2023-12-05
|
* @date 2023-12-05
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class ScriptHelper {
|
public class CsScriptHelper {
|
||||||
private static final String FUNCTION_TAG = "function";
|
private static final String FUNCTION_TAG = "function";
|
||||||
private final ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
|
private final ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
|
||||||
|
|
||||||
@@ -2,6 +2,7 @@ package cn.odboy.context;
|
|||||||
|
|
||||||
import org.springframework.web.context.request.RequestContextHolder;
|
import org.springframework.web.context.request.RequestContextHolder;
|
||||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import org.springframework.context.ApplicationContext;
|
|||||||
import org.springframework.context.ApplicationContextAware;
|
import org.springframework.context.ApplicationContextAware;
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package cn.odboy.exception;
|
|||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
|
|
||||||
import static org.springframework.http.HttpStatus.BAD_REQUEST;
|
import static org.springframework.http.HttpStatus.BAD_REQUEST;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+1
@@ -13,6 +13,7 @@ import org.springframework.validation.ObjectError;
|
|||||||
import org.springframework.web.bind.MethodArgumentNotValidException;
|
import org.springframework.web.bind.MethodArgumentNotValidException;
|
||||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||||
|
|
||||||
import static org.springframework.http.HttpStatus.NOT_FOUND;
|
import static org.springframework.http.HttpStatus.NOT_FOUND;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
|||||||
+3
-3
@@ -16,7 +16,7 @@
|
|||||||
package cn.odboy.monitor.controller;
|
package cn.odboy.monitor.controller;
|
||||||
|
|
||||||
import cn.odboy.annotation.AnonymousGetMapping;
|
import cn.odboy.annotation.AnonymousGetMapping;
|
||||||
import cn.odboy.monitor.service.HealthCheckPointService;
|
import cn.odboy.monitor.service.CsHealthCheckPointService;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -31,9 +31,9 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@RequestMapping("/healthCheck")
|
@RequestMapping("/healthCheck")
|
||||||
@Api(tags = "系统:健康检查接口")
|
@Api(tags = "系统:健康检查接口")
|
||||||
public class HealthCheckController {
|
public class CsHealthCheckController {
|
||||||
@Autowired
|
@Autowired
|
||||||
private HealthCheckPointService healthCheckPointService;
|
private CsHealthCheckPointService healthCheckPointService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 就绪检查
|
* 就绪检查
|
||||||
+1
-1
@@ -2,7 +2,7 @@ package cn.odboy.monitor.service;
|
|||||||
|
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
|
|
||||||
public interface HealthCheckPointService {
|
public interface CsHealthCheckPointService {
|
||||||
/**
|
/**
|
||||||
* 就绪检查
|
* 就绪检查
|
||||||
*/
|
*/
|
||||||
@@ -23,6 +23,7 @@ import org.springframework.data.redis.serializer.RedisSerializationContext;
|
|||||||
import org.springframework.data.redis.serializer.RedisSerializer;
|
import org.springframework.data.redis.serializer.RedisSerializer;
|
||||||
import org.springframework.data.redis.serializer.SerializationException;
|
import org.springframework.data.redis.serializer.SerializationException;
|
||||||
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
||||||
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|||||||
@@ -7,21 +7,11 @@ import org.slf4j.Logger;
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.data.redis.connection.RedisConnection;
|
import org.springframework.data.redis.connection.RedisConnection;
|
||||||
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||||
import org.springframework.data.redis.core.ConvertingCursor;
|
import org.springframework.data.redis.core.*;
|
||||||
import org.springframework.data.redis.core.Cursor;
|
|
||||||
import org.springframework.data.redis.core.RedisCallback;
|
|
||||||
import org.springframework.data.redis.core.RedisConnectionUtils;
|
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
|
||||||
import org.springframework.data.redis.core.ScanOptions;
|
|
||||||
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashSet;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|||||||
@@ -7,13 +7,8 @@ import org.springframework.web.bind.annotation.RequestMethod;
|
|||||||
import org.springframework.web.method.HandlerMethod;
|
import org.springframework.web.method.HandlerMethod;
|
||||||
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
|
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
|
||||||
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
|
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 匿名标记工具
|
* 匿名标记工具
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package cn.odboy.util;
|
|||||||
import cn.hutool.http.useragent.UserAgent;
|
import cn.hutool.http.useragent.UserAgent;
|
||||||
import cn.hutool.http.useragent.UserAgentUtil;
|
import cn.hutool.http.useragent.UserAgentUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
|
|||||||
+3
-2
@@ -17,6 +17,7 @@ package cn.odboy.util;
|
|||||||
|
|
||||||
import cn.hutool.core.codec.Base64Encoder;
|
import cn.hutool.core.codec.Base64Encoder;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -25,8 +26,8 @@ import java.nio.charset.StandardCharsets;
|
|||||||
* @author odboy
|
* @author odboy
|
||||||
* @date 2022-11-16
|
* @date 2022-11-16
|
||||||
*/
|
*/
|
||||||
public final class Base64SecretUtil {
|
public final class CsBase64SecretUtil {
|
||||||
private Base64SecretUtil() {
|
private CsBase64SecretUtil() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String build() {
|
public static String build() {
|
||||||
+16
-20
@@ -15,17 +15,13 @@
|
|||||||
*/
|
*/
|
||||||
package cn.odboy.util;
|
package cn.odboy.util;
|
||||||
|
|
||||||
import cn.odboy.base.MyMetaOption;
|
import cn.odboy.base.CsSelectOptionItemVo;
|
||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -36,7 +32,7 @@ import java.util.stream.Collectors;
|
|||||||
* @author odboy
|
* @author odboy
|
||||||
* @date 2022-11-09
|
* @date 2022-11-09
|
||||||
*/
|
*/
|
||||||
public final class CollUtil extends cn.hutool.core.collection.CollUtil {
|
public final class CsCollUtil extends cn.hutool.core.collection.CollUtil {
|
||||||
private static <T, K> Predicate<T> distinctPredicate(Function<? super T, ? extends K> keyMapper) {
|
private static <T, K> Predicate<T> distinctPredicate(Function<? super T, ? extends K> keyMapper) {
|
||||||
Map<Object, Boolean> map = new HashMap<>(3);
|
Map<Object, Boolean> map = new HashMap<>(3);
|
||||||
return (t) -> null == map.putIfAbsent(keyMapper.apply(t), true);
|
return (t) -> null == map.putIfAbsent(keyMapper.apply(t), true);
|
||||||
@@ -108,7 +104,7 @@ public final class CollUtil extends cn.hutool.core.collection.CollUtil {
|
|||||||
* @return /
|
* @return /
|
||||||
*/
|
*/
|
||||||
public static Double streamDoubleAdd(List<Double> data) {
|
public static Double streamDoubleAdd(List<Double> data) {
|
||||||
if (CollUtil.isNotEmpty(data)) {
|
if (CsCollUtil.isNotEmpty(data)) {
|
||||||
return data.stream().filter(Objects::nonNull).reduce(Double::sum).orElse(0.0);
|
return data.stream().filter(Objects::nonNull).reduce(Double::sum).orElse(0.0);
|
||||||
}
|
}
|
||||||
return 0.0;
|
return 0.0;
|
||||||
@@ -123,7 +119,7 @@ public final class CollUtil extends cn.hutool.core.collection.CollUtil {
|
|||||||
* @return /
|
* @return /
|
||||||
*/
|
*/
|
||||||
public static BigDecimal streamBigDecimalAdd(List<BigDecimal> data) {
|
public static BigDecimal streamBigDecimalAdd(List<BigDecimal> data) {
|
||||||
if (CollUtil.isNotEmpty(data)) {
|
if (CsCollUtil.isNotEmpty(data)) {
|
||||||
return data.stream().filter(Objects::nonNull).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
|
return data.stream().filter(Objects::nonNull).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
|
||||||
}
|
}
|
||||||
return BigDecimal.ZERO;
|
return BigDecimal.ZERO;
|
||||||
@@ -199,25 +195,25 @@ public final class CollUtil extends cn.hutool.core.collection.CollUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
List<MyMetaOption> testData = new ArrayList<>();
|
List<CsSelectOptionItemVo> testData = new ArrayList<>();
|
||||||
MyMetaOption selectOption1 = MyMetaOption.builder().label("苹果").value("apple").build();
|
CsSelectOptionItemVo selectOption1 = CsSelectOptionItemVo.builder().label("苹果").value("apple").build();
|
||||||
MyMetaOption selectOption2 = MyMetaOption.builder().label("苹果").value("apple").build();
|
CsSelectOptionItemVo selectOption2 = CsSelectOptionItemVo.builder().label("苹果").value("apple").build();
|
||||||
MyMetaOption selectOption3 = MyMetaOption.builder().label("香蕉").value("banana").build();
|
CsSelectOptionItemVo selectOption3 = CsSelectOptionItemVo.builder().label("香蕉").value("banana").build();
|
||||||
MyMetaOption selectOption4 = MyMetaOption.builder().label("猫").value("cat").build();
|
CsSelectOptionItemVo selectOption4 = CsSelectOptionItemVo.builder().label("猫").value("cat").build();
|
||||||
testData.add(selectOption1);
|
testData.add(selectOption1);
|
||||||
testData.add(selectOption2);
|
testData.add(selectOption2);
|
||||||
testData.add(selectOption3);
|
testData.add(selectOption3);
|
||||||
testData.add(selectOption4);
|
testData.add(selectOption4);
|
||||||
List<MyMetaOption> selectOptions1 = CollUtil.streamAscSort(testData, MyMetaOption::getValue);
|
List<CsSelectOptionItemVo> selectOptions1 = CsCollUtil.streamAscSort(testData, CsSelectOptionItemVo::getValue);
|
||||||
System.out.println(JSON.toJSONString(selectOptions1));
|
System.out.println(JSON.toJSONString(selectOptions1));
|
||||||
List<MyMetaOption> selectOptions2 = CollUtil.streamDescSort(testData, MyMetaOption::getValue);
|
List<CsSelectOptionItemVo> selectOptions2 = CsCollUtil.streamDescSort(testData, CsSelectOptionItemVo::getValue);
|
||||||
System.out.println(JSON.toJSONString(selectOptions2));
|
System.out.println(JSON.toJSONString(selectOptions2));
|
||||||
List<MyMetaOption> selectOptions3 = CollUtil.streamDistinct(testData, MyMetaOption::getValue);
|
List<CsSelectOptionItemVo> selectOptions3 = CsCollUtil.streamDistinct(testData, CsSelectOptionItemVo::getValue);
|
||||||
System.out.println(JSON.toJSONString(selectOptions3));
|
System.out.println(JSON.toJSONString(selectOptions3));
|
||||||
Map<String, String> selectMap1 = CollUtil.streamToMap(testData, MyMetaOption::getValue, MyMetaOption::getLabel);
|
Map<String, String> selectMap1 = CsCollUtil.streamToMap(testData, CsSelectOptionItemVo::getValue, CsSelectOptionItemVo::getLabel);
|
||||||
System.out.println(JSON.toJSONString(selectMap1));
|
System.out.println(JSON.toJSONString(selectMap1));
|
||||||
// 这只是一个示范
|
// 这只是一个示范
|
||||||
BigDecimal total1 = CollUtil.streamBigDecimalAdd(testData, "value");
|
BigDecimal total1 = CsCollUtil.streamBigDecimalAdd(testData, "value");
|
||||||
System.out.println(total1);
|
System.out.println(total1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+4
-4
@@ -8,7 +8,7 @@ import java.util.concurrent.atomic.AtomicLong;
|
|||||||
* @author odboy
|
* @author odboy
|
||||||
* @date 2025-04-05
|
* @date 2025-04-05
|
||||||
*/
|
*/
|
||||||
public final class DistributedIdUtil {
|
public final class CsDistributedIdUtil {
|
||||||
/**
|
/**
|
||||||
* 起始毫秒时间戳,2020-12-30
|
* 起始毫秒时间戳,2020-12-30
|
||||||
*/
|
*/
|
||||||
@@ -73,7 +73,7 @@ public final class DistributedIdUtil {
|
|||||||
* 单例实例持有者类
|
* 单例实例持有者类
|
||||||
*/
|
*/
|
||||||
private static class InstanceHolder {
|
private static class InstanceHolder {
|
||||||
private static final DistributedIdUtil INSTANCE = new DistributedIdUtil(20, 12, 5, 5, 12);
|
private static final CsDistributedIdUtil INSTANCE = new CsDistributedIdUtil(20, 12, 5, 5, 12);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -85,7 +85,7 @@ public final class DistributedIdUtil {
|
|||||||
* @param workerIdBits 机器 ID 所占位数
|
* @param workerIdBits 机器 ID 所占位数
|
||||||
* @param sequenceBits 序列号所占位数
|
* @param sequenceBits 序列号所占位数
|
||||||
*/
|
*/
|
||||||
public DistributedIdUtil(long dataCenterId, long workerId, long dataCenterIdBits, long workerIdBits, long sequenceBits) {
|
public CsDistributedIdUtil(long dataCenterId, long workerId, long dataCenterIdBits, long workerIdBits, long sequenceBits) {
|
||||||
this.dataCenterIdBits = dataCenterIdBits;
|
this.dataCenterIdBits = dataCenterIdBits;
|
||||||
this.workerIdBits = workerIdBits;
|
this.workerIdBits = workerIdBits;
|
||||||
this.sequenceBits = sequenceBits;
|
this.sequenceBits = sequenceBits;
|
||||||
@@ -176,7 +176,7 @@ public final class DistributedIdUtil {
|
|||||||
new Thread(() -> {
|
new Thread(() -> {
|
||||||
long id = Thread.currentThread().getId();
|
long id = Thread.currentThread().getId();
|
||||||
for (int j = 0; j < 20; j++) {
|
for (int j = 0; j < 20; j++) {
|
||||||
System.out.println(id + " - " + DistributedIdUtil.fastNextId());
|
System.out.println(id + " - " + CsDistributedIdUtil.fastNextId());
|
||||||
}
|
}
|
||||||
}).start();
|
}).start();
|
||||||
}
|
}
|
||||||
+4
-3
@@ -17,6 +17,7 @@ package cn.odboy.util;
|
|||||||
|
|
||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.alibaba.fastjson2.TypeReference;
|
import com.alibaba.fastjson2.TypeReference;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@@ -26,7 +27,7 @@ import java.util.Map;
|
|||||||
* @author odboy
|
* @author odboy
|
||||||
* @date 2024-10-01
|
* @date 2024-10-01
|
||||||
*/
|
*/
|
||||||
public final class JsonUtil {
|
public final class CsJsonUtil {
|
||||||
public static <K, V> Map<K, V> toMap(String jsonStr, Class<K> kClass, Class<V> vClass) {
|
public static <K, V> Map<K, V> toMap(String jsonStr, Class<K> kClass, Class<V> vClass) {
|
||||||
return JSON.parseObject(jsonStr, new TypeReference<Map<K, V>>() {
|
return JSON.parseObject(jsonStr, new TypeReference<Map<K, V>>() {
|
||||||
});
|
});
|
||||||
@@ -39,8 +40,8 @@ public final class JsonUtil {
|
|||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
String mapStr = "{\"key1\":\"value1\", \"key2\":\"value2\"}";
|
String mapStr = "{\"key1\":\"value1\", \"key2\":\"value2\"}";
|
||||||
System.err.println(JsonUtil.toMap(mapStr, String.class, String.class));
|
System.err.println(CsJsonUtil.toMap(mapStr, String.class, String.class));
|
||||||
String listStr = "[\"value1\", \"value2\"]";
|
String listStr = "[\"value1\", \"value2\"]";
|
||||||
System.err.println(JsonUtil.toList(listStr, String.class));
|
System.err.println(CsJsonUtil.toList(listStr, String.class));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+6
-5
@@ -16,7 +16,8 @@
|
|||||||
package cn.odboy.util;
|
package cn.odboy.util;
|
||||||
|
|
||||||
import cn.hutool.core.date.DateTime;
|
import cn.hutool.core.date.DateTime;
|
||||||
import cn.odboy.base.MyEntity;
|
import cn.odboy.base.CsBaseUserTimeTb;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
@@ -28,7 +29,7 @@ import java.util.stream.Collectors;
|
|||||||
* @author odboy
|
* @author odboy
|
||||||
* @date 2024-10-01
|
* @date 2024-10-01
|
||||||
*/
|
*/
|
||||||
public final class ListUtil {
|
public final class CsListUtil {
|
||||||
/**
|
/**
|
||||||
* 根据对象T的属性去重
|
* 根据对象T的属性去重
|
||||||
*
|
*
|
||||||
@@ -48,10 +49,10 @@ public final class ListUtil {
|
|||||||
* list转map,保留旧值 -> Map<String, User> userMap = users.stream().collect(Collectors.toMap(User::getName, user -> user, (existing, replacement) -> existing));
|
* list转map,保留旧值 -> Map<String, User> userMap = users.stream().collect(Collectors.toMap(User::getName, user -> user, (existing, replacement) -> existing));
|
||||||
*/
|
*/
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
List<MyEntity> entities = new ArrayList<>();
|
List<CsBaseUserTimeTb> entities = new ArrayList<>();
|
||||||
int total = 50;
|
int total = 50;
|
||||||
for (int i = 0; i < total; i++) {
|
for (int i = 0; i < total; i++) {
|
||||||
MyEntity entity = new MyEntity();
|
CsBaseUserTimeTb entity = new CsBaseUserTimeTb();
|
||||||
if (i % 2 == 0) {
|
if (i % 2 == 0) {
|
||||||
entity.setCreateBy("odboy");
|
entity.setCreateBy("odboy");
|
||||||
} else {
|
} else {
|
||||||
@@ -62,7 +63,7 @@ public final class ListUtil {
|
|||||||
entity.setUpdateTime(DateTime.now().toTimestamp());
|
entity.setUpdateTime(DateTime.now().toTimestamp());
|
||||||
entities.add(entity);
|
entities.add(entity);
|
||||||
}
|
}
|
||||||
List<MyEntity> entities1 = ListUtil.distinctByArgs(entities, MyEntity::getCreateBy);
|
List<CsBaseUserTimeTb> entities1 = CsListUtil.distinctByArgs(entities, CsBaseUserTimeTb::getCreateBy);
|
||||||
System.err.println(entities1);
|
System.err.println(entities1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+1
-1
@@ -21,7 +21,7 @@ package cn.odboy.util;
|
|||||||
* @author odboy
|
* @author odboy
|
||||||
* @date 2025-01-13
|
* @date 2025-01-13
|
||||||
*/
|
*/
|
||||||
public final class LogFmtUtil {
|
public final class CsLogFmtUtil {
|
||||||
/**
|
/**
|
||||||
* 替换字符串中的占位符 {} 为传入的参数
|
* 替换字符串中的占位符 {} 为传入的参数
|
||||||
*
|
*
|
||||||
+1
-1
@@ -27,7 +27,7 @@ import java.util.Set;
|
|||||||
* @author odboy
|
* @author odboy
|
||||||
* @date 2025-01-15
|
* @date 2025-01-15
|
||||||
*/
|
*/
|
||||||
public final class ValidationUtil {
|
public final class CsValidUtil {
|
||||||
private static final Validator VALIDATOR = Validation.buildDefaultValidatorFactory().getValidator();
|
private static final Validator VALIDATOR = Validation.buildDefaultValidatorFactory().getValidator();
|
||||||
|
|
||||||
public static <T> void validate(T object) {
|
public static <T> void validate(T object) {
|
||||||
@@ -11,14 +11,11 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.apache.poi.util.IOUtils;
|
import org.apache.poi.util.IOUtils;
|
||||||
import org.apache.poi.xssf.streaming.SXSSFSheet;
|
import org.apache.poi.xssf.streaming.SXSSFSheet;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.servlet.ServletOutputStream;
|
import javax.servlet.ServletOutputStream;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.File;
|
import java.io.*;
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
@@ -28,10 +25,8 @@ import java.util.LinkedHashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import static cn.odboy.constant.SystemConst.SYMBOL_ADD;
|
|
||||||
import static cn.odboy.constant.SystemConst.SYMBOL_AT;
|
import static cn.odboy.constant.SystemConst.*;
|
||||||
import static cn.odboy.constant.SystemConst.SYMBOL_EQUAL;
|
|
||||||
import static cn.odboy.constant.SystemConst.SYMBOL_SUBTRACT;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* File工具类,扩展 hutool 工具包
|
* File工具类,扩展 hutool 工具包
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package cn.odboy.util;
|
|||||||
import cn.odboy.context.SpringBeanHolder;
|
import cn.odboy.context.SpringBeanHolder;
|
||||||
import net.dreamlu.mica.ip2region.core.Ip2regionSearcher;
|
import net.dreamlu.mica.ip2region.core.Ip2regionSearcher;
|
||||||
import net.dreamlu.mica.ip2region.core.IpInfo;
|
import net.dreamlu.mica.ip2region.core.IpInfo;
|
||||||
|
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.NetworkInterface;
|
import java.net.NetworkInterface;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
|
|||||||
@@ -1,14 +1,18 @@
|
|||||||
package cn.odboy.util;
|
package cn.odboy.util;
|
||||||
|
|
||||||
import cn.odboy.base.PageResult;
|
import cn.odboy.base.CsResultVo;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页工具
|
* 分页工具
|
||||||
|
*
|
||||||
|
* @author odboy
|
||||||
*/
|
*/
|
||||||
public final class PageUtil extends cn.hutool.core.util.PageUtil {
|
public final class PageUtil extends cn.hutool.core.util.PageUtil {
|
||||||
|
|
||||||
@@ -31,32 +35,39 @@ public final class PageUtil extends cn.hutool.core.util.PageUtil {
|
|||||||
/**
|
/**
|
||||||
* Page 数据处理
|
* Page 数据处理
|
||||||
*/
|
*/
|
||||||
public static <T> PageResult<T> toPage(IPage<T> page) {
|
public static <T> CsResultVo<List<T>> toPage(IPage<T> page) {
|
||||||
return new PageResult<>(page.getRecords(), page.getTotal());
|
return new CsResultVo<>(page.getRecords(), page.getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 自定义分页
|
* 自定义分页
|
||||||
*/
|
*/
|
||||||
public static <T> PageResult<T> toPage(List<T> list) {
|
public static <T> CsResultVo<List<T>> toPage(List<T> list) {
|
||||||
return new PageResult<>(list, list.size());
|
return new CsResultVo<>(list, list.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 返回空数据
|
* 返回空数据
|
||||||
*/
|
*/
|
||||||
public static <T> PageResult<T> noData() {
|
public static <T> CsResultVo<List<T>> emptyListData() {
|
||||||
return new PageResult<>(null, 0);
|
return new CsResultVo<>(new ArrayList<>(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回空数据
|
||||||
|
*/
|
||||||
|
public static <T> CsResultVo<T> emptyData() {
|
||||||
|
return new CsResultVo<>(null, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 自定义分页
|
* 自定义分页
|
||||||
*/
|
*/
|
||||||
public static <T> PageResult<T> toPage(List<T> list, long totalElements) {
|
public static <T> CsResultVo<List<T>> toPage(List<T> list, long totalElements) {
|
||||||
return new PageResult<>(list, totalElements);
|
return new CsResultVo<>(list, totalElements);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Page<Object> getCount(BaseMapper<?> baseMapper) {
|
public static <T> Page<T> getCount(BaseMapper<T> baseMapper) {
|
||||||
return new Page<>(1, baseMapper.selectCount(null));
|
return new Page<>(1, baseMapper.selectCount(null));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,10 @@
|
|||||||
package cn.odboy.util;
|
package cn.odboy.util;
|
||||||
|
|
||||||
import org.apache.commons.codec.binary.Base64;
|
import org.apache.commons.codec.binary.Base64;
|
||||||
|
|
||||||
import javax.crypto.Cipher;
|
import javax.crypto.Cipher;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.security.KeyFactory;
|
import java.security.*;
|
||||||
import java.security.KeyPair;
|
|
||||||
import java.security.KeyPairGenerator;
|
|
||||||
import java.security.NoSuchAlgorithmException;
|
|
||||||
import java.security.PrivateKey;
|
|
||||||
import java.security.PublicKey;
|
|
||||||
import java.security.interfaces.RSAPrivateKey;
|
import java.security.interfaces.RSAPrivateKey;
|
||||||
import java.security.interfaces.RSAPublicKey;
|
import java.security.interfaces.RSAPublicKey;
|
||||||
import java.security.spec.PKCS8EncodedKeySpec;
|
import java.security.spec.PKCS8EncodedKeySpec;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package cn.odboy.util;
|
package cn.odboy.util;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -13,7 +13,7 @@ import org.springframework.stereotype.Component;
|
|||||||
* @date 2024-06-07
|
* @date 2024-06-07
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class WebSocketServerFactory implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> {
|
public class CsWebSocketServerFactory implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void customize(UndertowServletWebServerFactory factory) {
|
public void customize(UndertowServletWebServerFactory factory) {
|
||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
package cn.odboy.websocket.constant;
|
package cn.odboy.websocket.constant;
|
||||||
|
|
||||||
|
|
||||||
public enum WebSocketMessageBizTypeEnum {
|
public enum CsWebSocketBizTypeEnum {
|
||||||
/**
|
/**
|
||||||
* 连接
|
* 连接
|
||||||
*/
|
*/
|
||||||
+1
-1
@@ -4,7 +4,7 @@ import java.util.Collection;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
public class WebSocketClientManager {
|
public class CsWebSocketClientManager {
|
||||||
/**
|
/**
|
||||||
* concurrent包的线程安全Map,用来存放每个客户端对应的MyWebSocket对象。(分布式必出问题)
|
* concurrent包的线程安全Map,用来存放每个客户端对应的MyWebSocket对象。(分布式必出问题)
|
||||||
*/
|
*/
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
package cn.odboy.websocket.context;
|
||||||
|
|
||||||
|
import cn.odboy.websocket.constant.CsWebSocketBizTypeEnum;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class CsWebSocketMessage {
|
||||||
|
private String message;
|
||||||
|
private CsWebSocketBizTypeEnum bizType;
|
||||||
|
|
||||||
|
public CsWebSocketMessage(String message, CsWebSocketBizTypeEnum bizType) {
|
||||||
|
this.message = message;
|
||||||
|
this.bizType = bizType;
|
||||||
|
}
|
||||||
|
}
|
||||||
+8
-12
@@ -1,14 +1,10 @@
|
|||||||
package cn.odboy.websocket.context;
|
package cn.odboy.websocket.context;
|
||||||
|
|
||||||
import cn.odboy.websocket.dto.WebSocketMessageDto;
|
|
||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import javax.websocket.OnClose;
|
|
||||||
import javax.websocket.OnError;
|
import javax.websocket.*;
|
||||||
import javax.websocket.OnMessage;
|
|
||||||
import javax.websocket.OnOpen;
|
|
||||||
import javax.websocket.Session;
|
|
||||||
import javax.websocket.server.PathParam;
|
import javax.websocket.server.PathParam;
|
||||||
import javax.websocket.server.ServerEndpoint;
|
import javax.websocket.server.ServerEndpoint;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -35,7 +31,7 @@ public class WebSocketServer {
|
|||||||
public void onOpen(Session session, @PathParam("sid") String sid) {
|
public void onOpen(Session session, @PathParam("sid") String sid) {
|
||||||
this.session = session;
|
this.session = session;
|
||||||
this.sid = sid;
|
this.sid = sid;
|
||||||
WebSocketClientManager.addClient(sid, this);
|
CsWebSocketClientManager.addClient(sid, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -43,7 +39,7 @@ public class WebSocketServer {
|
|||||||
*/
|
*/
|
||||||
@OnClose
|
@OnClose
|
||||||
public void onClose() {
|
public void onClose() {
|
||||||
WebSocketClientManager.removeClient(this.sid);
|
CsWebSocketClientManager.removeClient(this.sid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -63,7 +59,7 @@ public class WebSocketServer {
|
|||||||
* @param message /
|
* @param message /
|
||||||
*/
|
*/
|
||||||
private static void sendToAll(String message) {
|
private static void sendToAll(String message) {
|
||||||
for (WebSocketServer item : WebSocketClientManager.getAllClient()) {
|
for (WebSocketServer item : CsWebSocketClientManager.getAllClient()) {
|
||||||
try {
|
try {
|
||||||
item.innerSendMessage(message);
|
item.innerSendMessage(message);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@@ -88,14 +84,14 @@ public class WebSocketServer {
|
|||||||
/**
|
/**
|
||||||
* 群发自定义消息
|
* 群发自定义消息
|
||||||
*/
|
*/
|
||||||
public static void sendMessage(WebSocketMessageDto webSocketMessageDto, @PathParam("sid") String sid) throws IOException {
|
public static void sendMessage(CsWebSocketMessage webSocketMessage, @PathParam("sid") String sid) throws IOException {
|
||||||
String message = JSON.toJSONString(webSocketMessageDto);
|
String message = JSON.toJSONString(webSocketMessage);
|
||||||
log.info("推送消息到{},推送内容:{}", sid, message);
|
log.info("推送消息到{},推送内容:{}", sid, message);
|
||||||
try {
|
try {
|
||||||
if (sid == null) {
|
if (sid == null) {
|
||||||
sendToAll(message);
|
sendToAll(message);
|
||||||
} else {
|
} else {
|
||||||
WebSocketClientManager.getClientBySid(sid).innerSendMessage(message);
|
CsWebSocketClientManager.getClientBySid(sid).innerSendMessage(message);
|
||||||
}
|
}
|
||||||
} catch (IOException ignored) {
|
} catch (IOException ignored) {
|
||||||
}
|
}
|
||||||
|
|||||||
-15
@@ -1,15 +0,0 @@
|
|||||||
package cn.odboy.websocket.dto;
|
|
||||||
|
|
||||||
import cn.odboy.websocket.constant.WebSocketMessageBizTypeEnum;
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
@Data
|
|
||||||
public class WebSocketMessageDto {
|
|
||||||
private String message;
|
|
||||||
private WebSocketMessageBizTypeEnum bizType;
|
|
||||||
|
|
||||||
public WebSocketMessageDto(String message, WebSocketMessageBizTypeEnum bizType) {
|
|
||||||
this.message = message;
|
|
||||||
this.bizType = bizType;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>cutejava</artifactId>
|
<artifactId>cutejava</artifactId>
|
||||||
<groupId>cn.odboy</groupId>
|
<groupId>cn.odboy</groupId>
|
||||||
<version>1.3.1</version>
|
<version>1.4.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cn.odboy</groupId>
|
<groupId>cn.odboy</groupId>
|
||||||
<artifactId>cutejava-system</artifactId>
|
<artifactId>cutejava-system</artifactId>
|
||||||
<version>1.3.1</version>
|
<version>1.4.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,20 @@
|
|||||||
package cn.odboy;
|
package cn.odboy;
|
||||||
|
|
||||||
import cn.odboy.annotation.AnonymousGetMapping;
|
import cn.odboy.annotation.AnonymousGetMapping;
|
||||||
import cn.odboy.context.BootApplication;
|
import cn.odboy.context.CsBootApplication;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@RestController
|
@RestController
|
||||||
@Api(hidden = true)
|
@Api(hidden = true)
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
public class AppRun extends BootApplication {
|
public class AppRun extends CsBootApplication {
|
||||||
|
|
||||||
public static void main(String[] args) throws UnknownHostException {
|
public static void main(String[] args) throws UnknownHostException {
|
||||||
SpringApplication springApplication = new SpringApplication(AppRun.class);
|
SpringApplication springApplication = new SpringApplication(AppRun.class);
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
package cn.odboy;
|
package cn.odboy;
|
||||||
|
|
||||||
|
|
||||||
import cn.odboy.core.framework.mybatisplus.util.CmdGenHelper;
|
import cn.odboy.core.framework.mybatisplus.core.CsMpCmdGenUtil;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11,7 +12,7 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public class GenCode {
|
public class GenCode {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
CmdGenHelper generator = new CmdGenHelper();
|
CsMpCmdGenUtil generator = new CsMpCmdGenUtil();
|
||||||
generator.setDatabaseUrl(String.format("jdbc:mysql://%s:%s/%s", "localhost", 3306, "cutejava20250321"));
|
generator.setDatabaseUrl(String.format("jdbc:mysql://%s:%s/%s", "localhost", 3306, "cutejava20250321"));
|
||||||
generator.setDriverClassName("com.mysql.cj.jdbc.Driver");
|
generator.setDriverClassName("com.mysql.cj.jdbc.Driver");
|
||||||
generator.setDatabaseUsername("root");
|
generator.setDatabaseUsername("root");
|
||||||
@@ -19,7 +20,7 @@ public class GenCode {
|
|||||||
genCareer(generator);
|
genCareer(generator);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void genCareer(CmdGenHelper generator) {
|
private static void genCareer(CsMpCmdGenUtil generator) {
|
||||||
generator.gen("tool_", List.of(
|
generator.gen("tool_", List.of(
|
||||||
// "tool_qiniu_content",
|
// "tool_qiniu_content",
|
||||||
));
|
));
|
||||||
|
|||||||
+2
-2
@@ -1,13 +1,13 @@
|
|||||||
package cn.odboy.monitor;
|
package cn.odboy.monitor;
|
||||||
|
|
||||||
import cn.odboy.core.service.system.SystemDictService;
|
import cn.odboy.core.service.system.SystemDictService;
|
||||||
import cn.odboy.monitor.service.HealthCheckPointService;
|
import cn.odboy.monitor.service.CsHealthCheckPointService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class HealthCheckPointerImpl implements HealthCheckPointService {
|
public class HealthCheckPointerImpl implements CsHealthCheckPointService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private SystemDictService systemDictService;
|
private SystemDictService systemDictService;
|
||||||
|
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ server:
|
|||||||
undertow:
|
undertow:
|
||||||
threads:
|
threads:
|
||||||
# 工作线程数,默认设置为io-threads * 8。如果你的应用程序有很多同步阻塞操作,可以适当增加这个值
|
# 工作线程数,默认设置为io-threads * 8。如果你的应用程序有很多同步阻塞操作,可以适当增加这个值
|
||||||
worker: 4
|
worker: 8
|
||||||
# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
|
# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
|
||||||
# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
|
# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
|
||||||
io: 2
|
io: 4
|
||||||
# 设置为true以使用直接内存(堆外内存)来存储缓冲区。这可以减少垃圾回收的开销。
|
# 设置为true以使用直接内存(堆外内存)来存储缓冲区。这可以减少垃圾回收的开销。
|
||||||
direct-buffers: true
|
direct-buffers: true
|
||||||
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
|
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
|
||||||
@@ -54,9 +54,9 @@ spring:
|
|||||||
druid:
|
druid:
|
||||||
db-type: com.alibaba.druid.pool.DruidDataSource
|
db-type: com.alibaba.druid.pool.DruidDataSource
|
||||||
driverClassName: com.p6spy.engine.spy.P6SpyDriver
|
driverClassName: com.p6spy.engine.spy.P6SpyDriver
|
||||||
url: jdbc:p6spy:mysql://127.0.0.1:3306/cutejava20250321?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
|
url: jdbc:p6spy:mysql://127.0.0.1:3306/cutejava?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
|
||||||
username: root
|
username: root
|
||||||
password: 123456
|
password: root123456
|
||||||
# 初始连接数,建议设置为与最小空闲连接数相同
|
# 初始连接数,建议设置为与最小空闲连接数相同
|
||||||
initial-size: 2
|
initial-size: 2
|
||||||
# 最小空闲连接数,保持足够的空闲连接以应对请求
|
# 最小空闲连接数,保持足够的空闲连接以应对请求
|
||||||
@@ -111,7 +111,7 @@ spring:
|
|||||||
database: ${REDIS_DB:1}
|
database: ${REDIS_DB:1}
|
||||||
host: ${REDIS_HOST:127.0.0.1}
|
host: ${REDIS_HOST:127.0.0.1}
|
||||||
port: ${REDIS_PORT:6379}
|
port: ${REDIS_PORT:6379}
|
||||||
password: ${REDIS_PWD:123456}
|
password: ${REDIS_PWD:root123456}
|
||||||
# 连接超时时间
|
# 连接超时时间
|
||||||
timeout: 5000
|
timeout: 5000
|
||||||
# 连接池配置
|
# 连接池配置
|
||||||
@@ -125,7 +125,6 @@ spring:
|
|||||||
max-idle: 20
|
max-idle: 20
|
||||||
# 连接池中的最小空闲连接数
|
# 连接池中的最小空闲连接数
|
||||||
min-idle: 1
|
min-idle: 1
|
||||||
# 持久层
|
|
||||||
mybatis-plus:
|
mybatis-plus:
|
||||||
configuration:
|
configuration:
|
||||||
# 开启 Mybatis 二级缓存,默认为 true
|
# 开启 Mybatis 二级缓存,默认为 true
|
||||||
@@ -218,6 +217,15 @@ app:
|
|||||||
keep-alive-seconds: 60
|
keep-alive-seconds: 60
|
||||||
# 队列容量
|
# 队列容量
|
||||||
queue-capacity: 50
|
queue-capacity: 50
|
||||||
|
pipeline-task-pool:
|
||||||
|
# 核心线程池大小
|
||||||
|
core-pool-size: 10
|
||||||
|
# 最大线程数
|
||||||
|
max-pool-size: 200
|
||||||
|
# 活跃时间
|
||||||
|
keep-alive-seconds: 60
|
||||||
|
# 队列容量
|
||||||
|
queue-capacity: 300
|
||||||
# oss
|
# oss
|
||||||
oss:
|
oss:
|
||||||
# 七牛云
|
# 七牛云
|
||||||
@@ -228,7 +236,6 @@ app:
|
|||||||
captchaSetting:
|
captchaSetting:
|
||||||
# 邮箱验证码有效时间/秒
|
# 邮箱验证码有效时间/秒
|
||||||
expiration: 300
|
expiration: 300
|
||||||
|
|
||||||
## 启用debug
|
## 启用debug
|
||||||
#debug: true
|
#debug: true
|
||||||
#logging:
|
#logging:
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ server:
|
|||||||
undertow:
|
undertow:
|
||||||
threads:
|
threads:
|
||||||
# 工作线程数,默认设置为io-threads * 8。如果你的应用程序有很多同步阻塞操作,可以适当增加这个值
|
# 工作线程数,默认设置为io-threads * 8。如果你的应用程序有很多同步阻塞操作,可以适当增加这个值
|
||||||
worker: 4
|
worker: 8
|
||||||
# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
|
# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
|
||||||
# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
|
# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
|
||||||
io: 2
|
io: 4
|
||||||
# 设置为true以使用直接内存(堆外内存)来存储缓冲区。这可以减少垃圾回收的开销。
|
# 设置为true以使用直接内存(堆外内存)来存储缓冲区。这可以减少垃圾回收的开销。
|
||||||
direct-buffers: true
|
direct-buffers: true
|
||||||
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
|
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
|
||||||
@@ -54,9 +54,9 @@ spring:
|
|||||||
druid:
|
druid:
|
||||||
db-type: com.alibaba.druid.pool.DruidDataSource
|
db-type: com.alibaba.druid.pool.DruidDataSource
|
||||||
driverClassName: com.p6spy.engine.spy.P6SpyDriver
|
driverClassName: com.p6spy.engine.spy.P6SpyDriver
|
||||||
url: jdbc:p6spy:mysql://127.0.0.1:3306/cutejava20250321?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
|
url: jdbc:p6spy:mysql://127.0.0.1:3306/cutejava?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
|
||||||
username: root
|
username: root
|
||||||
password: 123456
|
password: root123456
|
||||||
# 初始连接数,建议设置为与最小空闲连接数相同
|
# 初始连接数,建议设置为与最小空闲连接数相同
|
||||||
initial-size: 2
|
initial-size: 2
|
||||||
# 最小空闲连接数,保持足够的空闲连接以应对请求
|
# 最小空闲连接数,保持足够的空闲连接以应对请求
|
||||||
@@ -111,7 +111,7 @@ spring:
|
|||||||
database: ${REDIS_DB:1}
|
database: ${REDIS_DB:1}
|
||||||
host: ${REDIS_HOST:127.0.0.1}
|
host: ${REDIS_HOST:127.0.0.1}
|
||||||
port: ${REDIS_PORT:6379}
|
port: ${REDIS_PORT:6379}
|
||||||
password: ${REDIS_PWD:123456}
|
password: ${REDIS_PWD:root123456}
|
||||||
# 连接超时时间
|
# 连接超时时间
|
||||||
timeout: 5000
|
timeout: 5000
|
||||||
# 连接池配置
|
# 连接池配置
|
||||||
@@ -125,7 +125,6 @@ spring:
|
|||||||
max-idle: 20
|
max-idle: 20
|
||||||
# 连接池中的最小空闲连接数
|
# 连接池中的最小空闲连接数
|
||||||
min-idle: 1
|
min-idle: 1
|
||||||
# 持久层
|
|
||||||
mybatis-plus:
|
mybatis-plus:
|
||||||
configuration:
|
configuration:
|
||||||
# 开启 Mybatis 二级缓存,默认为 true
|
# 开启 Mybatis 二级缓存,默认为 true
|
||||||
@@ -188,7 +187,7 @@ app:
|
|||||||
# 登录
|
# 登录
|
||||||
login:
|
login:
|
||||||
# 是否限制单用户登录
|
# 是否限制单用户登录
|
||||||
single: true
|
single: false
|
||||||
# 验证码
|
# 验证码
|
||||||
captchaSetting:
|
captchaSetting:
|
||||||
# 验证码类型配置 查看 LoginProperties 类
|
# 验证码类型配置 查看 LoginProperties 类
|
||||||
@@ -207,7 +206,7 @@ app:
|
|||||||
font-size: 25
|
font-size: 25
|
||||||
# 是否开启 swagger-ui
|
# 是否开启 swagger-ui
|
||||||
swagger:
|
swagger:
|
||||||
enabled: false
|
enabled: true
|
||||||
# 针对@Async
|
# 针对@Async
|
||||||
async-task-pool:
|
async-task-pool:
|
||||||
# 核心线程池大小
|
# 核心线程池大小
|
||||||
@@ -218,6 +217,15 @@ app:
|
|||||||
keep-alive-seconds: 60
|
keep-alive-seconds: 60
|
||||||
# 队列容量
|
# 队列容量
|
||||||
queue-capacity: 50
|
queue-capacity: 50
|
||||||
|
pipeline-task-pool:
|
||||||
|
# 核心线程池大小
|
||||||
|
core-pool-size: 10
|
||||||
|
# 最大线程数
|
||||||
|
max-pool-size: 200
|
||||||
|
# 活跃时间
|
||||||
|
keep-alive-seconds: 60
|
||||||
|
# 队列容量
|
||||||
|
queue-capacity: 300
|
||||||
# oss
|
# oss
|
||||||
oss:
|
oss:
|
||||||
# 七牛云
|
# 七牛云
|
||||||
@@ -228,3 +236,8 @@ app:
|
|||||||
captchaSetting:
|
captchaSetting:
|
||||||
# 邮箱验证码有效时间/秒
|
# 邮箱验证码有效时间/秒
|
||||||
expiration: 300
|
expiration: 300
|
||||||
|
## 启用debug
|
||||||
|
#debug: true
|
||||||
|
#logging:
|
||||||
|
# level:
|
||||||
|
# root: debug
|
||||||
|
|||||||
@@ -1,31 +1,42 @@
|
|||||||
# 配置 quartz 分布式支持, sql 文件在 sql 目录下,需要导入到数据库,并且需要修改 application.yml 文件的 active: dev 配置
|
# 配置 quartz 分布式支持, sql 文件在 sql 目录下,需要导入到数据库,并且需要修改 application.yml 文件的 active: dev 配置
|
||||||
spring:
|
spring:
|
||||||
quartz:
|
|
||||||
# Quartz集群, 数据库表名称一定要不区分大小写!
|
# Quartz集群, 数据库表名称一定要不区分大小写!
|
||||||
|
quartz:
|
||||||
|
# 必需,指定使用 JDBC 存储
|
||||||
job-store-type: jdbc
|
job-store-type: jdbc
|
||||||
properties:
|
properties:
|
||||||
org:
|
org:
|
||||||
quartz:
|
quartz:
|
||||||
scheduler:
|
scheduler:
|
||||||
|
# 必需,指定调度器实例的名称
|
||||||
instanceName: ClusteredScheduler
|
instanceName: ClusteredScheduler
|
||||||
|
# 必需,指定调度器实例的 ID
|
||||||
instanceId: AUTO
|
instanceId: AUTO
|
||||||
jobStore:
|
|
||||||
class: org.quartz.impl.jdbcjobstore.JobStoreTX
|
|
||||||
driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
|
|
||||||
tablePrefix: QRTZ_
|
|
||||||
isClustered: true
|
|
||||||
clusterCheckinInterval: 20000
|
|
||||||
useProperties: false
|
|
||||||
dataSource: myDS
|
|
||||||
threadPool:
|
threadPool:
|
||||||
class: org.quartz.simpl.SimpleThreadPool
|
class: org.quartz.simpl.SimpleThreadPool
|
||||||
|
# 可选,线程池的线程数量,可以根据需要调整
|
||||||
threadCount: 10
|
threadCount: 10
|
||||||
threadsInheritContextClassLoaderOfInitializingThread: true
|
threadsInheritContextClassLoaderOfInitializingThread: true
|
||||||
dataSource:
|
dataSource:
|
||||||
myDS:
|
jobStoreDataSource:
|
||||||
driver: com.mysql.cj.jdbc.Driver
|
driver: com.mysql.cj.jdbc.Driver
|
||||||
URL: jdbc:mysql://127.0.0.1:3306/cutejava20250321?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
|
URL: jdbc:mysql://127.0.0.1:3306/cutejava?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
|
||||||
user: root
|
user: root
|
||||||
password: 123456
|
password: root123456
|
||||||
maxConnections: 5
|
maxConnections: 10
|
||||||
validationQuery: select 1
|
validationQuery: select 1
|
||||||
|
jobStore:
|
||||||
|
# 可选,如果你不需要集群,可以去掉
|
||||||
|
isClustered: true
|
||||||
|
# 可选,集群检查间隔时间,可以根据需要调整
|
||||||
|
clusterCheckinInterval: 10000
|
||||||
|
# class: org.quartz.impl.jdbcjobstore.JobStoreTX
|
||||||
|
# 必需,指定 JDBC 驱动代理类
|
||||||
|
driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
|
||||||
|
# 可选,是否使用属性存储,可以根据需要调整
|
||||||
|
useProperties: false
|
||||||
|
# 必需,指定表的前缀
|
||||||
|
tablePrefix: QRTZ_
|
||||||
|
# 可选,指定误触发阈值,可以根据需要调整
|
||||||
|
misfireThreshold: 60000
|
||||||
|
dataSource: jobStoreDataSource
|
||||||
@@ -5,4 +5,4 @@
|
|||||||
| |___ | |_| | | | | |___ | |_| | / / | | | |/ / / / | |
|
| |___ | |_| | | | | |___ | |_| | / / | | | |/ / / / | |
|
||||||
\_____| \_____/ |_| |_____| \_____/ /_/ |_| |___/ /_/ |_|
|
\_____| \_____/ |_| |_____| \_____/ /_/ |_| |___/ /_/ |_|
|
||||||
|
|
||||||
Spring Boot Version: (${spring-boot.version}),CuteJava Version: (1.3.0)
|
Spring Boot Version: (${spring-boot.version}),CuteJava Version: (1.4.0)
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
# 应用的拦截模块
|
# 应用的拦截模块
|
||||||
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
|
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
|
||||||
# 自定义日志打印
|
# 自定义日志打印
|
||||||
logMessageFormat=cn.odboy.core.framework.mybatisplus.context.CustomP6SpyLogger
|
logMessageFormat=cn.odboy.core.framework.mybatisplus.config.MpCustomP6SpyLogger
|
||||||
# 日志输出到控制台
|
# 日志输出到控制台
|
||||||
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
|
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
|
||||||
# 日期格式
|
# 日期格式
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package cn.odboy.util;
|
|||||||
|
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import static cn.odboy.util.DesEncryptUtil.desDecrypt;
|
import static cn.odboy.util.DesEncryptUtil.desDecrypt;
|
||||||
import static cn.odboy.util.DesEncryptUtil.desEncrypt;
|
import static cn.odboy.util.DesEncryptUtil.desEncrypt;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|||||||
@@ -2,10 +2,8 @@ package cn.odboy.util;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.springframework.mock.web.MockMultipartFile;
|
import org.springframework.mock.web.MockMultipartFile;
|
||||||
import static cn.odboy.util.FileUtil.getPrefix;
|
|
||||||
import static cn.odboy.util.FileUtil.getSize;
|
import static cn.odboy.util.FileUtil.*;
|
||||||
import static cn.odboy.util.FileUtil.getSuffix;
|
|
||||||
import static cn.odboy.util.FileUtil.toFile;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
public class FileUtilTest {
|
public class FileUtilTest {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package cn.odboy.util;
|
package cn.odboy.util;
|
||||||
|
|
||||||
import cn.odboy.core.framework.flow.context.PipelineManager;
|
import cn.odboy.core.framework.flow.core.PipelineManager;
|
||||||
import cn.odboy.core.framework.flow.context.PipelineProcessManager;
|
import cn.odboy.core.framework.flow.core.PipelineProcessManager;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|||||||
@@ -2,12 +2,11 @@ package cn.odboy.util;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.springframework.mock.web.MockHttpServletRequest;
|
import org.springframework.mock.web.MockHttpServletRequest;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import static cn.odboy.util.StringUtil.getWeekDay;
|
|
||||||
import static cn.odboy.util.StringUtil.toCamelCase;
|
import static cn.odboy.util.StringUtil.*;
|
||||||
import static cn.odboy.util.StringUtil.toCapitalizeCamelCase;
|
|
||||||
import static cn.odboy.util.StringUtil.toUnderScoreCase;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import cn.hutool.core.date.DateTime;
|
|||||||
import cn.hutool.core.thread.ThreadUtil;
|
import cn.hutool.core.thread.ThreadUtil;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.RandomUtil;
|
import cn.hutool.core.util.RandomUtil;
|
||||||
import cn.odboy.base.MyObject;
|
import cn.odboy.base.CsSerializeObject;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
@@ -22,7 +22,7 @@ import java.util.Map;
|
|||||||
public class PipelineTests {
|
public class PipelineTests {
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
public static class PipelineNodeVo extends MyObject {
|
public static class PipelineNodeVo extends CsSerializeObject {
|
||||||
/**
|
/**
|
||||||
* Service Code
|
* Service Code
|
||||||
*/
|
*/
|
||||||
@@ -65,7 +65,7 @@ public class PipelineTests {
|
|||||||
private List<ButtonVo> buttonList;
|
private List<ButtonVo> buttonList;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
public static class ButtonVo extends MyObject {
|
public static class ButtonVo extends CsSerializeObject {
|
||||||
/**
|
/**
|
||||||
* 按钮类型(get:带参get请求 link:带参跳转)
|
* 按钮类型(get:带参get请求 link:带参跳转)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>cutejava</artifactId>
|
<artifactId>cutejava</artifactId>
|
||||||
<groupId>cn.odboy</groupId>
|
<groupId>cn.odboy</groupId>
|
||||||
<version>1.3.1</version>
|
<version>1.4.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cn.odboy</groupId>
|
<groupId>cn.odboy</groupId>
|
||||||
<artifactId>cutejava-common</artifactId>
|
<artifactId>cutejava-common</artifactId>
|
||||||
<version>1.3.1</version>
|
<version>1.4.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- jwt -->
|
<!-- jwt -->
|
||||||
@@ -80,10 +80,16 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-quartz</artifactId>
|
<artifactId>spring-boot-starter-quartz</artifactId>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.quartz-scheduler</groupId>
|
||||||
|
<artifactId>quartz</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.quartz-scheduler</groupId>
|
<groupId>org.quartz-scheduler</groupId>
|
||||||
<artifactId>quartz-jobs</artifactId>
|
<artifactId>quartz</artifactId>
|
||||||
<version>2.5.0</version>
|
<version>2.5.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
package cn.odboy.core.api.system;
|
|
||||||
|
|
||||||
|
|
||||||
import cn.odboy.core.dal.dataobject.system.User;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 数据权限服务类
|
|
||||||
*/
|
|
||||||
public interface SystemDataApi {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取数据权限
|
|
||||||
*
|
|
||||||
* @param user /
|
|
||||||
* @return /
|
|
||||||
*/
|
|
||||||
List<Long> describeDeptIdListByUserIdWithDeptId(User user);
|
|
||||||
}
|
|
||||||
@@ -1,93 +0,0 @@
|
|||||||
package cn.odboy.core.api.system;
|
|
||||||
|
|
||||||
import cn.odboy.base.BaseResult;
|
|
||||||
import cn.odboy.core.dal.dataobject.system.Dept;
|
|
||||||
import cn.odboy.core.service.system.dto.QueryDeptRequest;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public interface SystemDeptApi {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询所有数据
|
|
||||||
*
|
|
||||||
* @param criteria 条件
|
|
||||||
* @param isQuery /
|
|
||||||
* @return /
|
|
||||||
* @throws Exception /
|
|
||||||
*/
|
|
||||||
List<Dept> describeDeptList(QueryDeptRequest criteria, Boolean isQuery) throws Exception;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据ID查询
|
|
||||||
*
|
|
||||||
* @param id /
|
|
||||||
* @return /
|
|
||||||
*/
|
|
||||||
Dept describeDeptById(Long id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据PID查询
|
|
||||||
*
|
|
||||||
* @param pid /
|
|
||||||
* @return /
|
|
||||||
*/
|
|
||||||
List<Dept> describeDeptListByPid(long pid);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据角色ID查询
|
|
||||||
*
|
|
||||||
* @param id /
|
|
||||||
* @return /
|
|
||||||
*/
|
|
||||||
Set<Dept> describeDeptByRoleId(Long id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取部门下所有关联的部门
|
|
||||||
*
|
|
||||||
* @param deptList /
|
|
||||||
* @param depts /
|
|
||||||
* @return /
|
|
||||||
*/
|
|
||||||
Set<Dept> describeRelationDeptSet(List<Dept> deptList, Set<Dept> depts);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据ID获取同级与上级数据
|
|
||||||
*
|
|
||||||
* @param dept /
|
|
||||||
* @param depts /
|
|
||||||
* @return /
|
|
||||||
*/
|
|
||||||
List<Dept> describeSuperiorDeptListByPid(Dept dept, List<Dept> depts);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 构建树形数据
|
|
||||||
*
|
|
||||||
* @param depts /
|
|
||||||
* @return /
|
|
||||||
*/
|
|
||||||
BaseResult<Object> buildDeptTree(List<Dept> depts);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取
|
|
||||||
*
|
|
||||||
* @param deptList 、
|
|
||||||
* @return 、
|
|
||||||
*/
|
|
||||||
List<Long> describeChildDeptIdListByDeptIds(List<Dept> deptList);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 验证是否被角色或用户关联
|
|
||||||
*
|
|
||||||
* @param depts /
|
|
||||||
*/
|
|
||||||
void verifyBindRelationByIds(Set<Dept> depts);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 遍历所有部门和子部门
|
|
||||||
*
|
|
||||||
* @param ids /
|
|
||||||
* @param depts /
|
|
||||||
*/
|
|
||||||
void traverseDeptByIdWithPids(Set<Long> ids, Set<Dept> depts);
|
|
||||||
}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
package cn.odboy.core.api.system;
|
|
||||||
|
|
||||||
import cn.odboy.base.PageResult;
|
|
||||||
import cn.odboy.core.dal.dataobject.system.Dict;
|
|
||||||
import cn.odboy.core.service.system.dto.QueryDictRequest;
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public interface SystemDictApi {
|
|
||||||
/**
|
|
||||||
* 分页查询
|
|
||||||
*
|
|
||||||
* @param criteria 条件
|
|
||||||
* @param page 分页参数
|
|
||||||
* @return /
|
|
||||||
*/
|
|
||||||
PageResult<Dict> describeDictPage(QueryDictRequest criteria, Page<Object> page);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询全部数据
|
|
||||||
*
|
|
||||||
* @param criteria /
|
|
||||||
* @return /
|
|
||||||
*/
|
|
||||||
List<Dict> describeDictList(QueryDictRequest criteria);
|
|
||||||
}
|
|
||||||
-26
@@ -1,26 +0,0 @@
|
|||||||
package cn.odboy.core.api.system;
|
|
||||||
|
|
||||||
import cn.odboy.base.PageResult;
|
|
||||||
import cn.odboy.core.dal.dataobject.system.DictDetail;
|
|
||||||
import cn.odboy.core.service.system.dto.QueryDictDetailRequest;
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public interface SystemDictDetailApi {
|
|
||||||
/**
|
|
||||||
* 分页查询
|
|
||||||
*
|
|
||||||
* @param criteria 条件
|
|
||||||
* @param page 分页参数
|
|
||||||
* @return /
|
|
||||||
*/
|
|
||||||
PageResult<DictDetail> describeDictDetailPage(QueryDictDetailRequest criteria, Page<Object> page);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据字典名称获取字典详情
|
|
||||||
*
|
|
||||||
* @param name 字典名称
|
|
||||||
* @return /
|
|
||||||
*/
|
|
||||||
List<DictDetail> describeDictDetailListByName(String name);
|
|
||||||
}
|
|
||||||
-44
@@ -1,44 +0,0 @@
|
|||||||
package cn.odboy.core.api.system;
|
|
||||||
|
|
||||||
import cn.odboy.base.PageResult;
|
|
||||||
import cn.odboy.core.dal.dataobject.job.QuartzJob;
|
|
||||||
import cn.odboy.core.dal.dataobject.job.QuartzLog;
|
|
||||||
import cn.odboy.core.service.system.dto.QueryQuartzJobRequest;
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public interface SystemQuartzJobApi {
|
|
||||||
/**
|
|
||||||
* 分页查询
|
|
||||||
*
|
|
||||||
* @param criteria 条件
|
|
||||||
* @param page 分页参数
|
|
||||||
* @return /
|
|
||||||
*/
|
|
||||||
PageResult<QuartzJob> describeQuartzJobPage(QueryQuartzJobRequest criteria, Page<Object> page);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询全部
|
|
||||||
*
|
|
||||||
* @param criteria 条件
|
|
||||||
* @return /
|
|
||||||
*/
|
|
||||||
List<QuartzJob> describeQuartzJobList(QueryQuartzJobRequest criteria);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页查询日志
|
|
||||||
*
|
|
||||||
* @param criteria 条件
|
|
||||||
* @param page 分页参数
|
|
||||||
* @return /
|
|
||||||
*/
|
|
||||||
PageResult<QuartzLog> describeQuartzLogPage(QueryQuartzJobRequest criteria, Page<Object> page);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询全部
|
|
||||||
*
|
|
||||||
* @param criteria 条件
|
|
||||||
* @return /
|
|
||||||
*/
|
|
||||||
List<QuartzLog> describeQuartzLogList(QueryQuartzJobRequest criteria);
|
|
||||||
}
|
|
||||||
-206
@@ -1,206 +0,0 @@
|
|||||||
package cn.odboy.core.api.system.impl;
|
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
|
||||||
import cn.odboy.base.BaseResult;
|
|
||||||
import cn.odboy.core.api.system.SystemDeptApi;
|
|
||||||
import cn.odboy.core.constant.DataScopeEnum;
|
|
||||||
import cn.odboy.core.constant.SystemRedisKey;
|
|
||||||
import cn.odboy.core.dal.dataobject.system.Dept;
|
|
||||||
import cn.odboy.core.dal.mysql.system.DeptMapper;
|
|
||||||
import cn.odboy.core.dal.mysql.system.RoleMapper;
|
|
||||||
import cn.odboy.core.dal.mysql.system.UserMapper;
|
|
||||||
import cn.odboy.core.framework.permission.util.SecurityHelper;
|
|
||||||
import cn.odboy.core.service.system.dto.QueryDeptRequest;
|
|
||||||
import cn.odboy.exception.BadRequestException;
|
|
||||||
import cn.odboy.redis.RedisHelper;
|
|
||||||
import cn.odboy.util.ClassUtil;
|
|
||||||
import cn.odboy.util.StringUtil;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class SystemDeptApiImpl implements SystemDeptApi {
|
|
||||||
private final DeptMapper deptMapper;
|
|
||||||
private final RoleMapper roleMapper;
|
|
||||||
private final UserMapper userMapper;
|
|
||||||
private final RedisHelper redisHelper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 筛选出 list 中没有父部门(即 pid 不在其他部门 id 列表中的部门)的部门列表
|
|
||||||
*/
|
|
||||||
private List<Dept> deduplication(List<Dept> list) {
|
|
||||||
List<Dept> deptList = new ArrayList<>();
|
|
||||||
// 使用 Set 存储所有部门的 id
|
|
||||||
Set<Long> idSet = list.stream().map(Dept::getId).collect(Collectors.toSet());
|
|
||||||
// 遍历部门列表,筛选出没有父部门的部门
|
|
||||||
for (Dept dept : list) {
|
|
||||||
if (!idSet.contains(dept.getPid())) {
|
|
||||||
deptList.add(dept);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return deptList;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Dept> describeDeptList(QueryDeptRequest criteria, Boolean isQuery) throws Exception {
|
|
||||||
String dataScopeType = SecurityHelper.getDataScopeType();
|
|
||||||
if (isQuery) {
|
|
||||||
if (dataScopeType.equals(DataScopeEnum.ALL.getValue())) {
|
|
||||||
criteria.setPidIsNull(true);
|
|
||||||
}
|
|
||||||
List<Field> fields = ClassUtil.getAllFields(criteria.getClass(), new ArrayList<>());
|
|
||||||
List<String> fieldNames = new ArrayList<>() {{
|
|
||||||
add("pidIsNull");
|
|
||||||
add("enabled");
|
|
||||||
}};
|
|
||||||
for (Field field : fields) {
|
|
||||||
// 设置对象的访问权限,保证对private的属性的访问
|
|
||||||
field.setAccessible(true);
|
|
||||||
Object val = field.get(criteria);
|
|
||||||
if (fieldNames.contains(field.getName())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (ObjectUtil.isNotNull(val)) {
|
|
||||||
criteria.setPidIsNull(null);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 数据权限
|
|
||||||
criteria.setIds(SecurityHelper.getCurrentUserDataScope());
|
|
||||||
List<Dept> list = deptMapper.queryDeptListByArgs(criteria);
|
|
||||||
// 如果为空,就代表为自定义权限或者本级权限,就需要去重,不理解可以注释掉,看查询结果
|
|
||||||
if (StringUtil.isBlank(dataScopeType)) {
|
|
||||||
return deduplication(list);
|
|
||||||
}
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Dept describeDeptById(Long id) {
|
|
||||||
String key = SystemRedisKey.DEPT_ID + id;
|
|
||||||
Dept dept = redisHelper.get(key, Dept.class);
|
|
||||||
if (dept == null) {
|
|
||||||
dept = deptMapper.selectById(id);
|
|
||||||
redisHelper.set(key, dept, 1, TimeUnit.DAYS);
|
|
||||||
}
|
|
||||||
return dept;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Dept> describeDeptListByPid(long pid) {
|
|
||||||
return deptMapper.queryDeptListByPid(pid);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<Dept> describeDeptByRoleId(Long id) {
|
|
||||||
return deptMapper.queryDeptSetByRoleId(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<Dept> describeRelationDeptSet(List<Dept> menuList, Set<Dept> deptSet) {
|
|
||||||
for (Dept dept : menuList) {
|
|
||||||
deptSet.add(dept);
|
|
||||||
List<Dept> deptList = deptMapper.queryDeptListByPid(dept.getId());
|
|
||||||
if (CollUtil.isNotEmpty(deptList)) {
|
|
||||||
describeRelationDeptSet(deptList, deptSet);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return deptSet;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Long> describeChildDeptIdListByDeptIds(List<Dept> deptList) {
|
|
||||||
List<Long> list = new ArrayList<>();
|
|
||||||
deptList.forEach(dept -> {
|
|
||||||
if (dept != null && dept.getEnabled()) {
|
|
||||||
List<Dept> deptList1 = deptMapper.queryDeptListByPid(dept.getId());
|
|
||||||
if (CollUtil.isNotEmpty(deptList1)) {
|
|
||||||
list.addAll(describeChildDeptIdListByDeptIds(deptList1));
|
|
||||||
}
|
|
||||||
list.add(dept.getId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Dept> describeSuperiorDeptListByPid(Dept dept, List<Dept> deptList) {
|
|
||||||
if (dept.getPid() == null) {
|
|
||||||
deptList.addAll(deptMapper.queryDeptListByPidIsNull());
|
|
||||||
return deptList;
|
|
||||||
}
|
|
||||||
deptList.addAll(deptMapper.queryDeptListByPid(dept.getPid()));
|
|
||||||
return describeSuperiorDeptListByPid(describeDeptById(dept.getPid()), deptList);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BaseResult<Object> buildDeptTree(List<Dept> deptList) {
|
|
||||||
Set<Dept> trees = new LinkedHashSet<>();
|
|
||||||
Set<Dept> deptSet = new LinkedHashSet<>();
|
|
||||||
List<String> deptNames = deptList.stream().map(Dept::getName).collect(Collectors.toList());
|
|
||||||
boolean isChild;
|
|
||||||
for (Dept dept : deptList) {
|
|
||||||
isChild = false;
|
|
||||||
if (dept.getPid() == null) {
|
|
||||||
trees.add(dept);
|
|
||||||
}
|
|
||||||
for (Dept it : deptList) {
|
|
||||||
if (it.getPid() != null && dept.getId().equals(it.getPid())) {
|
|
||||||
isChild = true;
|
|
||||||
if (dept.getChildren() == null) {
|
|
||||||
dept.setChildren(new ArrayList<>());
|
|
||||||
}
|
|
||||||
dept.getChildren().add(it);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isChild) {
|
|
||||||
deptSet.add(dept);
|
|
||||||
} else if (dept.getPid() != null && !deptNames.contains(describeDeptById(dept.getPid()).getName())) {
|
|
||||||
deptSet.add(dept);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (CollectionUtil.isEmpty(trees)) {
|
|
||||||
trees = deptSet;
|
|
||||||
}
|
|
||||||
BaseResult<Object> baseResult = new BaseResult<>();
|
|
||||||
baseResult.setContent(CollectionUtil.isEmpty(trees) ? deptSet : trees);
|
|
||||||
baseResult.setTotalElements(deptSet.size());
|
|
||||||
return baseResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void verifyBindRelationByIds(Set<Dept> deptSet) {
|
|
||||||
Set<Long> deptIds = deptSet.stream().map(Dept::getId).collect(Collectors.toSet());
|
|
||||||
if (userMapper.getUserCountByDeptIds(deptIds) > 0) {
|
|
||||||
throw new BadRequestException("所选部门存在用户关联,请解除后再试!");
|
|
||||||
}
|
|
||||||
if (roleMapper.getRoleCountByDeptIds(deptIds) > 0) {
|
|
||||||
throw new BadRequestException("所选部门存在角色关联,请解除后再试!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void traverseDeptByIdWithPids(Set<Long> ids, Set<Dept> depts) {
|
|
||||||
for (Long id : ids) {
|
|
||||||
// 根部门
|
|
||||||
depts.add(describeDeptById(id));
|
|
||||||
// 子部门
|
|
||||||
List<Dept> deptList = describeDeptListByPid(id);
|
|
||||||
if (CollectionUtil.isNotEmpty(deptList)) {
|
|
||||||
depts = describeRelationDeptSet(deptList, depts);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-30
@@ -1,30 +0,0 @@
|
|||||||
package cn.odboy.core.api.system.impl;
|
|
||||||
|
|
||||||
import cn.odboy.base.PageResult;
|
|
||||||
import cn.odboy.core.api.system.SystemDictApi;
|
|
||||||
import cn.odboy.core.dal.dataobject.system.Dict;
|
|
||||||
import cn.odboy.core.dal.mysql.system.DictMapper;
|
|
||||||
import cn.odboy.core.service.system.dto.QueryDictRequest;
|
|
||||||
import cn.odboy.util.PageUtil;
|
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class SystemDictApiImpl implements SystemDictApi {
|
|
||||||
private final DictMapper dictMapper;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PageResult<Dict> describeDictPage(QueryDictRequest criteria, Page<Object> page) {
|
|
||||||
IPage<Dict> dicts = dictMapper.queryDictPageByArgs(criteria, page);
|
|
||||||
return PageUtil.toPage(dicts);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Dict> describeDictList(QueryDictRequest criteria) {
|
|
||||||
return dictMapper.queryDictPageByArgs(criteria, PageUtil.getCount(dictMapper)).getRecords();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-41
@@ -1,41 +0,0 @@
|
|||||||
package cn.odboy.core.api.system.impl;
|
|
||||||
|
|
||||||
import cn.odboy.base.PageResult;
|
|
||||||
import cn.odboy.core.api.system.SystemQuartzJobApi;
|
|
||||||
import cn.odboy.core.dal.dataobject.job.QuartzJob;
|
|
||||||
import cn.odboy.core.dal.dataobject.job.QuartzLog;
|
|
||||||
import cn.odboy.core.dal.mysql.job.QuartzJobMapper;
|
|
||||||
import cn.odboy.core.dal.mysql.job.QuartzLogMapper;
|
|
||||||
import cn.odboy.core.service.system.dto.QueryQuartzJobRequest;
|
|
||||||
import cn.odboy.util.PageUtil;
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class SystemQuartzJobApiImpl implements SystemQuartzJobApi {
|
|
||||||
private final QuartzJobMapper quartzJobMapper;
|
|
||||||
private final QuartzLogMapper quartzLogMapper;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PageResult<QuartzJob> describeQuartzJobPage(QueryQuartzJobRequest criteria, Page<Object> page) {
|
|
||||||
return PageUtil.toPage(quartzJobMapper.queryQuartzJobPageByArgs(criteria, page));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PageResult<QuartzLog> describeQuartzLogPage(QueryQuartzJobRequest criteria, Page<Object> page) {
|
|
||||||
return PageUtil.toPage(quartzLogMapper.queryQuartzLogPageByArgs(criteria, page));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<QuartzJob> describeQuartzJobList(QueryQuartzJobRequest criteria) {
|
|
||||||
return quartzJobMapper.queryQuartzJobPageByArgs(criteria, PageUtil.getCount(quartzJobMapper)).getRecords();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<QuartzLog> describeQuartzLogList(QueryQuartzJobRequest criteria) {
|
|
||||||
return quartzLogMapper.queryQuartzLogPageByArgs(criteria, PageUtil.getCount(quartzLogMapper)).getRecords();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
package cn.odboy.core.api.tools;
|
|
||||||
|
|
||||||
import cn.odboy.core.dal.dataobject.tools.EmailConfig;
|
|
||||||
|
|
||||||
public interface EmailApi {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询配置
|
|
||||||
*
|
|
||||||
* @return EmailConfig 邮件配置
|
|
||||||
*/
|
|
||||||
EmailConfig describeEmailConfig();
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
package cn.odboy.core.api.tools;
|
|
||||||
|
|
||||||
import cn.odboy.base.PageResult;
|
|
||||||
import cn.odboy.core.dal.dataobject.tools.LocalStorage;
|
|
||||||
import cn.odboy.core.service.tools.dto.QueryLocalStorageRequest;
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public interface LocalStorageApi {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页查询
|
|
||||||
*
|
|
||||||
* @param criteria 条件
|
|
||||||
* @param page 分页参数
|
|
||||||
* @return /
|
|
||||||
*/
|
|
||||||
PageResult<LocalStorage> describeLocalStoragePage(QueryLocalStorageRequest criteria, Page<Object> page);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询全部数据
|
|
||||||
*
|
|
||||||
* @param criteria 条件
|
|
||||||
* @return /
|
|
||||||
*/
|
|
||||||
List<LocalStorage> describeLocalStorageList(QueryLocalStorageRequest criteria);
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
package cn.odboy.core.api.tools;
|
|
||||||
|
|
||||||
import cn.odboy.core.dal.dataobject.tools.QiniuConfig;
|
|
||||||
|
|
||||||
public interface QiniuConfigApi {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询配置
|
|
||||||
*
|
|
||||||
* @return QiniuConfig
|
|
||||||
*/
|
|
||||||
QiniuConfig describeQiniuConfig();
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
package cn.odboy.core.api.tools;
|
|
||||||
|
|
||||||
import cn.odboy.base.PageResult;
|
|
||||||
import cn.odboy.core.dal.dataobject.tools.QiniuContent;
|
|
||||||
import cn.odboy.core.service.tools.dto.QueryQiniuRequest;
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public interface QiniuContentApi {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页查询
|
|
||||||
*
|
|
||||||
* @param criteria 条件
|
|
||||||
* @param page 分页参数
|
|
||||||
* @return /
|
|
||||||
*/
|
|
||||||
PageResult<QiniuContent> describeQiniuContentPage(QueryQiniuRequest criteria, Page<Object> page);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询全部
|
|
||||||
*
|
|
||||||
* @param criteria 条件
|
|
||||||
* @return /
|
|
||||||
*/
|
|
||||||
List<QiniuContent> describeQiniuContentList(QueryQiniuRequest criteria);
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
package cn.odboy.core.api.tools.impl;
|
|
||||||
|
|
||||||
import cn.odboy.core.api.tools.EmailApi;
|
|
||||||
import cn.odboy.core.dal.dataobject.tools.EmailConfig;
|
|
||||||
import cn.odboy.core.dal.mysql.tools.EmailConfigMapper;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.springframework.cache.annotation.CacheConfig;
|
|
||||||
import org.springframework.cache.annotation.Cacheable;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
@CacheConfig(cacheNames = "email")
|
|
||||||
public class EmailApiImpl implements EmailApi {
|
|
||||||
private final EmailConfigMapper emailConfigMapper;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Cacheable(key = "'config'")
|
|
||||||
public EmailConfig describeEmailConfig() {
|
|
||||||
EmailConfig emailConfig = emailConfigMapper.selectById(1L);
|
|
||||||
return emailConfig == null ? new EmailConfig() : emailConfig;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-28
@@ -1,28 +0,0 @@
|
|||||||
package cn.odboy.core.api.tools.impl;
|
|
||||||
|
|
||||||
import cn.odboy.base.PageResult;
|
|
||||||
import cn.odboy.core.api.tools.LocalStorageApi;
|
|
||||||
import cn.odboy.core.dal.dataobject.tools.LocalStorage;
|
|
||||||
import cn.odboy.core.dal.mysql.tools.LocalStorageMapper;
|
|
||||||
import cn.odboy.core.service.tools.dto.QueryLocalStorageRequest;
|
|
||||||
import cn.odboy.util.PageUtil;
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class LocalStorageApiImpl implements LocalStorageApi {
|
|
||||||
private final LocalStorageMapper localStorageMapper;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PageResult<LocalStorage> describeLocalStoragePage(QueryLocalStorageRequest criteria, Page<Object> page) {
|
|
||||||
return PageUtil.toPage(localStorageMapper.queryLocalStoragePageByArgs(criteria, page));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<LocalStorage> describeLocalStorageList(QueryLocalStorageRequest criteria) {
|
|
||||||
return localStorageMapper.queryLocalStoragePageByArgs(criteria, PageUtil.getCount(localStorageMapper)).getRecords();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-23
@@ -1,23 +0,0 @@
|
|||||||
package cn.odboy.core.api.tools.impl;
|
|
||||||
|
|
||||||
import cn.odboy.core.api.tools.QiniuConfigApi;
|
|
||||||
import cn.odboy.core.dal.dataobject.tools.QiniuConfig;
|
|
||||||
import cn.odboy.core.dal.mysql.tools.QiniuConfigMapper;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.springframework.cache.annotation.CacheConfig;
|
|
||||||
import org.springframework.cache.annotation.Cacheable;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
@CacheConfig(cacheNames = "qiNiu")
|
|
||||||
public class QiniuConfigApiImpl implements QiniuConfigApi {
|
|
||||||
private final QiniuConfigMapper qiniuConfigMapper;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Cacheable(key = "'config'")
|
|
||||||
public QiniuConfig describeQiniuConfig() {
|
|
||||||
QiniuConfig qiniuConfig = qiniuConfigMapper.selectById(1L);
|
|
||||||
return qiniuConfig == null ? new QiniuConfig() : qiniuConfig;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-30
@@ -1,30 +0,0 @@
|
|||||||
package cn.odboy.core.api.tools.impl;
|
|
||||||
|
|
||||||
import cn.odboy.base.PageResult;
|
|
||||||
import cn.odboy.core.api.tools.QiniuContentApi;
|
|
||||||
import cn.odboy.core.dal.dataobject.tools.QiniuContent;
|
|
||||||
import cn.odboy.core.dal.mysql.tools.QiniuContentMapper;
|
|
||||||
import cn.odboy.core.service.tools.dto.QueryQiniuRequest;
|
|
||||||
import cn.odboy.util.PageUtil;
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.springframework.cache.annotation.CacheConfig;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
@CacheConfig(cacheNames = "qiNiu")
|
|
||||||
public class QiniuContentApiImpl implements QiniuContentApi {
|
|
||||||
private final QiniuContentMapper qiniuContentMapper;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PageResult<QiniuContent> describeQiniuContentPage(QueryQiniuRequest criteria, Page<Object> page) {
|
|
||||||
return PageUtil.toPage(qiniuContentMapper.queryQiniuContentPageByArgs(criteria, page));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<QiniuContent> describeQiniuContentList(QueryQiniuRequest criteria) {
|
|
||||||
return qiniuContentMapper.queryQiniuContentPageByArgs(criteria, PageUtil.getCount(qiniuContentMapper)).getRecords();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-13
@@ -1,13 +0,0 @@
|
|||||||
package cn.odboy.core.cache.api;
|
|
||||||
|
|
||||||
import cn.odboy.core.service.system.dto.UserJwtVo;
|
|
||||||
|
|
||||||
public interface SystemUserJwtApi {
|
|
||||||
/**
|
|
||||||
* 返回用户缓存
|
|
||||||
*
|
|
||||||
* @param username 用户名
|
|
||||||
* @return UserJwtVo
|
|
||||||
*/
|
|
||||||
UserJwtVo describeUserJwtModelByUsername(String username);
|
|
||||||
}
|
|
||||||
+4
-4
@@ -1,4 +1,4 @@
|
|||||||
package cn.odboy.core.constant;
|
package cn.odboy.core.constant.system;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@@ -8,7 +8,7 @@ import lombok.Getter;
|
|||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum CaptchaBizEnum {
|
public enum SystemCaptchaBizEnum {
|
||||||
|
|
||||||
/* 通过手机号码重置邮箱 */
|
/* 通过手机号码重置邮箱 */
|
||||||
PHONE_RESET_EMAIL_CODE("10000", "phone_reset_email_code_", "通过手机号码重置邮箱"),
|
PHONE_RESET_EMAIL_CODE("10000", "phone_reset_email_code_", "通过手机号码重置邮箱"),
|
||||||
@@ -35,8 +35,8 @@ public enum CaptchaBizEnum {
|
|||||||
*/
|
*/
|
||||||
private final String description;
|
private final String description;
|
||||||
|
|
||||||
public static CaptchaBizEnum getByBizCode(String bizCode) {
|
public static SystemCaptchaBizEnum getByBizCode(String bizCode) {
|
||||||
for (CaptchaBizEnum value : CaptchaBizEnum.values()) {
|
for (SystemCaptchaBizEnum value : SystemCaptchaBizEnum.values()) {
|
||||||
if (value.getBizCode().equals(bizCode)) {
|
if (value.getBizCode().equals(bizCode)) {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
+4
-4
@@ -1,4 +1,4 @@
|
|||||||
package cn.odboy.core.constant;
|
package cn.odboy.core.constant.system;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@@ -8,7 +8,7 @@ import lombok.Getter;
|
|||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum DataScopeEnum {
|
public enum SystemDataScopeEnum {
|
||||||
|
|
||||||
/* 全部的数据权限 */
|
/* 全部的数据权限 */
|
||||||
ALL("全部", "全部的数据权限"),
|
ALL("全部", "全部的数据权限"),
|
||||||
@@ -22,8 +22,8 @@ public enum DataScopeEnum {
|
|||||||
private final String value;
|
private final String value;
|
||||||
private final String description;
|
private final String description;
|
||||||
|
|
||||||
public static DataScopeEnum find(String val) {
|
public static SystemDataScopeEnum find(String val) {
|
||||||
for (DataScopeEnum dataScopeEnum : DataScopeEnum.values()) {
|
for (SystemDataScopeEnum dataScopeEnum : SystemDataScopeEnum.values()) {
|
||||||
if (dataScopeEnum.getValue().equals(val)) {
|
if (dataScopeEnum.getValue().equals(val)) {
|
||||||
return dataScopeEnum;
|
return dataScopeEnum;
|
||||||
}
|
}
|
||||||
+18
-17
@@ -4,16 +4,16 @@ import cn.hutool.core.bean.BeanUtil;
|
|||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.odboy.annotation.AnonymousPostMapping;
|
import cn.odboy.annotation.AnonymousPostMapping;
|
||||||
import cn.odboy.constant.SystemConst;
|
import cn.odboy.constant.SystemConst;
|
||||||
import cn.odboy.core.cache.service.impl.SystemUserOnlineServiceImpl;
|
import cn.odboy.core.dal.redis.system.SystemUserOnlineServiceImpl;
|
||||||
import cn.odboy.core.constant.LoginCodeEnum;
|
import cn.odboy.core.constant.LoginCodeEnum;
|
||||||
import cn.odboy.core.constant.SystemRedisKey;
|
import cn.odboy.core.dal.redis.system.SystemRedisKey;
|
||||||
import cn.odboy.core.dal.model.UserInfoResponse;
|
import cn.odboy.core.dal.model.system.SystemUserInfoVo;
|
||||||
import cn.odboy.core.framework.permission.TokenProvider;
|
import cn.odboy.core.framework.permission.core.SecurityHelper;
|
||||||
import cn.odboy.core.framework.permission.UserDetailsServiceImpl;
|
import cn.odboy.core.framework.permission.core.handler.TokenProvider;
|
||||||
import cn.odboy.core.framework.permission.util.SecurityHelper;
|
import cn.odboy.core.framework.permission.core.handler.UserDetailsHandler;
|
||||||
import cn.odboy.core.framework.properties.AppProperties;
|
import cn.odboy.core.framework.properties.AppProperties;
|
||||||
import cn.odboy.core.service.system.dto.UserJwtVo;
|
import cn.odboy.core.dal.model.system.SystemUserJwtVo;
|
||||||
import cn.odboy.core.service.system.dto.UserLoginRequest;
|
import cn.odboy.core.dal.model.system.SystemUserLoginArgs;
|
||||||
import cn.odboy.exception.BadRequestException;
|
import cn.odboy.exception.BadRequestException;
|
||||||
import cn.odboy.redis.RedisHelper;
|
import cn.odboy.redis.RedisHelper;
|
||||||
import cn.odboy.util.RsaEncryptUtil;
|
import cn.odboy.util.RsaEncryptUtil;
|
||||||
@@ -34,6 +34,7 @@ import org.springframework.web.bind.annotation.PostMapping;
|
|||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
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;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -47,17 +48,17 @@ import java.util.concurrent.TimeUnit;
|
|||||||
@RequestMapping("/auth")
|
@RequestMapping("/auth")
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Api(tags = "系统:系统授权接口")
|
@Api(tags = "系统:系统授权接口")
|
||||||
public class AuthController {
|
public class SystemAuthController {
|
||||||
private final RedisHelper redisHelper;
|
private final RedisHelper redisHelper;
|
||||||
private final SystemUserOnlineServiceImpl onlineUserService;
|
private final SystemUserOnlineServiceImpl onlineUserService;
|
||||||
private final TokenProvider tokenProvider;
|
private final TokenProvider tokenProvider;
|
||||||
private final AppProperties properties;
|
private final AppProperties properties;
|
||||||
private final PasswordEncoder passwordEncoder;
|
private final PasswordEncoder passwordEncoder;
|
||||||
private final UserDetailsServiceImpl userDetailsService;
|
private final UserDetailsHandler userDetailsService;
|
||||||
|
|
||||||
@ApiOperation("登录授权")
|
@ApiOperation("登录授权")
|
||||||
@AnonymousPostMapping(value = "/login")
|
@AnonymousPostMapping(value = "/login")
|
||||||
public ResponseEntity<Object> login(@Validated @RequestBody UserLoginRequest loginRequest, HttpServletRequest request) throws Exception {
|
public ResponseEntity<Object> login(@Validated @RequestBody SystemUserLoginArgs loginRequest, HttpServletRequest request) throws Exception {
|
||||||
// 密码解密
|
// 密码解密
|
||||||
String password = RsaEncryptUtil.decryptByPrivateKey(properties.getRsa().getPrivateKey(), loginRequest.getPassword());
|
String password = RsaEncryptUtil.decryptByPrivateKey(properties.getRsa().getPrivateKey(), loginRequest.getPassword());
|
||||||
// 查询验证码
|
// 查询验证码
|
||||||
@@ -71,7 +72,7 @@ public class AuthController {
|
|||||||
throw new BadRequestException("验证码错误");
|
throw new BadRequestException("验证码错误");
|
||||||
}
|
}
|
||||||
// 获取用户信息
|
// 获取用户信息
|
||||||
UserJwtVo jwtUser = userDetailsService.loadUserByUsername(loginRequest.getUsername());
|
SystemUserJwtVo jwtUser = userDetailsService.loadUserByUsername(loginRequest.getUsername());
|
||||||
// 验证用户密码
|
// 验证用户密码
|
||||||
if (!passwordEncoder.matches(password, jwtUser.getPassword())) {
|
if (!passwordEncoder.matches(password, jwtUser.getPassword())) {
|
||||||
throw new BadRequestException("登录密码错误");
|
throw new BadRequestException("登录密码错误");
|
||||||
@@ -83,7 +84,7 @@ public class AuthController {
|
|||||||
// 返回 token 与 用户信息
|
// 返回 token 与 用户信息
|
||||||
Map<String, Object> authInfo = new HashMap<>(2) {{
|
Map<String, Object> authInfo = new HashMap<>(2) {{
|
||||||
put("token", String.format("%s %s", SystemConst.TOKEN_PREFIX, token));
|
put("token", String.format("%s %s", SystemConst.TOKEN_PREFIX, token));
|
||||||
put("user", BeanUtil.copyProperties(jwtUser, UserInfoResponse.class));
|
put("user", BeanUtil.copyProperties(jwtUser, SystemUserInfoVo.class));
|
||||||
}};
|
}};
|
||||||
if (properties.getLogin().isSingle()) {
|
if (properties.getLogin().isSingle()) {
|
||||||
// 踢掉之前已经登录的token
|
// 踢掉之前已经登录的token
|
||||||
@@ -97,10 +98,10 @@ public class AuthController {
|
|||||||
|
|
||||||
@ApiOperation("获取用户信息")
|
@ApiOperation("获取用户信息")
|
||||||
@PostMapping(value = "/info")
|
@PostMapping(value = "/info")
|
||||||
public ResponseEntity<UserInfoResponse> getUserInfo() {
|
public ResponseEntity<SystemUserInfoVo> getUserInfo() {
|
||||||
UserJwtVo jwtUser = (UserJwtVo) SecurityHelper.getCurrentUser();
|
SystemUserJwtVo jwtUser = (SystemUserJwtVo) SecurityHelper.getCurrentUser();
|
||||||
UserInfoResponse userInfoResponse = BeanUtil.copyProperties(jwtUser, UserInfoResponse.class);
|
SystemUserInfoVo userInfoVo = BeanUtil.copyProperties(jwtUser, SystemUserInfoVo.class);
|
||||||
return ResponseEntity.ok(userInfoResponse);
|
return ResponseEntity.ok(userInfoVo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("获取验证码")
|
@ApiOperation("获取验证码")
|
||||||
+12
-11
@@ -1,8 +1,8 @@
|
|||||||
package cn.odboy.core.controller.system;
|
package cn.odboy.core.controller.system;
|
||||||
|
|
||||||
import cn.odboy.core.constant.CaptchaBizEnum;
|
import cn.odboy.core.constant.system.SystemCaptchaBizEnum;
|
||||||
import cn.odboy.core.service.tools.CaptchaService;
|
import cn.odboy.core.service.system.SystemCaptchaService;
|
||||||
import cn.odboy.core.service.tools.EmailService;
|
import cn.odboy.core.service.system.SystemEmailService;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@@ -12,15 +12,16 @@ import org.springframework.web.bind.annotation.PostMapping;
|
|||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@RequestMapping("/api/code")
|
@RequestMapping("/api/code")
|
||||||
@Api(tags = "系统:验证码管理")
|
@Api(tags = "系统:验证码管理")
|
||||||
public class CaptchaController {
|
public class SystemCaptchaController {
|
||||||
private final CaptchaService captchaService;
|
private final SystemCaptchaService captchaService;
|
||||||
private final EmailService emailService;
|
private final SystemEmailService emailService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 除了这个其他的接口都没有用上
|
* 除了这个其他的接口都没有用上
|
||||||
@@ -30,27 +31,27 @@ public class CaptchaController {
|
|||||||
@ApiOperation("重置邮箱,发送验证码")
|
@ApiOperation("重置邮箱,发送验证码")
|
||||||
@PostMapping(value = "/sendResetEmailCaptcha")
|
@PostMapping(value = "/sendResetEmailCaptcha")
|
||||||
public ResponseEntity<Object> sendResetEmailCaptcha(@RequestParam String email) {
|
public ResponseEntity<Object> sendResetEmailCaptcha(@RequestParam String email) {
|
||||||
emailService.sendEmail(captchaService.renderCodeTemplate(email, CaptchaBizEnum.EMAIL_RESET_EMAIL_CODE.getRedisKey()));
|
emailService.sendEmail(captchaService.renderCodeTemplate(email, SystemCaptchaBizEnum.EMAIL_RESET_EMAIL_CODE.getRedisKey()));
|
||||||
return new ResponseEntity<>(HttpStatus.OK);
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("重置密码,发送验证码")
|
@ApiOperation("重置密码,发送验证码")
|
||||||
@PostMapping(value = "/sendResetPasswordCaptcha")
|
@PostMapping(value = "/sendResetPasswordCaptcha")
|
||||||
public ResponseEntity<Object> sendResetPasswordCaptcha(@RequestParam String email) {
|
public ResponseEntity<Object> sendResetPasswordCaptcha(@RequestParam String email) {
|
||||||
emailService.sendEmail(captchaService.renderCodeTemplate(email, CaptchaBizEnum.EMAIL_RESET_PWD_CODE.getRedisKey()));
|
emailService.sendEmail(captchaService.renderCodeTemplate(email, SystemCaptchaBizEnum.EMAIL_RESET_PWD_CODE.getRedisKey()));
|
||||||
return new ResponseEntity<>(HttpStatus.OK);
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("验证码验证")
|
@ApiOperation("验证码验证")
|
||||||
@PostMapping(value = "/checkCodeAvailable")
|
@PostMapping(value = "/checkCodeAvailable")
|
||||||
public ResponseEntity<Object> checkCodeAvailable(@RequestParam String email, @RequestParam String code, @RequestParam String codeBi) {
|
public ResponseEntity<Object> checkCodeAvailable(@RequestParam String email, @RequestParam String code, @RequestParam String codeBi) {
|
||||||
CaptchaBizEnum biEnum = CaptchaBizEnum.getByBizCode(codeBi);
|
SystemCaptchaBizEnum biEnum = SystemCaptchaBizEnum.getByBizCode(codeBi);
|
||||||
switch (Objects.requireNonNull(biEnum)) {
|
switch (Objects.requireNonNull(biEnum)) {
|
||||||
case EMAIL_RESET_EMAIL_CODE:
|
case EMAIL_RESET_EMAIL_CODE:
|
||||||
captchaService.checkCodeAvailable(CaptchaBizEnum.EMAIL_RESET_EMAIL_CODE.getBizCode(), email, code);
|
captchaService.checkCodeAvailable(SystemCaptchaBizEnum.EMAIL_RESET_EMAIL_CODE.getBizCode(), email, code);
|
||||||
break;
|
break;
|
||||||
case EMAIL_RESET_PWD_CODE:
|
case EMAIL_RESET_PWD_CODE:
|
||||||
captchaService.checkCodeAvailable(CaptchaBizEnum.EMAIL_RESET_PWD_CODE.getBizCode(), email, code);
|
captchaService.checkCodeAvailable(SystemCaptchaBizEnum.EMAIL_RESET_PWD_CODE.getBizCode(), email, code);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
+22
-33
@@ -1,11 +1,10 @@
|
|||||||
package cn.odboy.core.controller.system;
|
package cn.odboy.core.controller.system;
|
||||||
|
|
||||||
import cn.odboy.base.PageResult;
|
import cn.odboy.base.CsResultVo;
|
||||||
import cn.odboy.core.api.system.SystemDeptApi;
|
import cn.odboy.core.dal.dataobject.system.SystemDeptTb;
|
||||||
import cn.odboy.core.dal.dataobject.system.Dept;
|
import cn.odboy.core.service.system.ookkoko.SystemDeptService;
|
||||||
import cn.odboy.core.service.system.SystemDeptService;
|
import cn.odboy.core.dal.model.system.CreateSystemDeptArgs;
|
||||||
import cn.odboy.core.service.system.dto.CreateDeptRequest;
|
import cn.odboy.core.dal.model.system.QuerySystemDeptArgs;
|
||||||
import cn.odboy.core.service.system.dto.QueryDeptRequest;
|
|
||||||
import cn.odboy.util.PageUtil;
|
import cn.odboy.util.PageUtil;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
@@ -14,40 +13,31 @@ import org.springframework.http.HttpStatus;
|
|||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Api(tags = "系统:部门管理")
|
@Api(tags = "系统:部门管理")
|
||||||
@RequestMapping("/api/dept")
|
@RequestMapping("/api/dept")
|
||||||
public class DeptController {
|
public class SystemDeptController {
|
||||||
private final SystemDeptApi systemDeptApi;
|
|
||||||
private final SystemDeptService systemDeptService;
|
private final SystemDeptService systemDeptService;
|
||||||
|
|
||||||
@ApiOperation("导出部门数据")
|
@ApiOperation("导出部门数据")
|
||||||
@GetMapping(value = "/download")
|
@GetMapping(value = "/download")
|
||||||
@PreAuthorize("@el.check('dept:list')")
|
@PreAuthorize("@el.check('dept:list')")
|
||||||
public void exportDept(HttpServletResponse response, QueryDeptRequest criteria) throws Exception {
|
public void exportDept(HttpServletResponse response, QuerySystemDeptArgs criteria) throws Exception {
|
||||||
systemDeptService.downloadDeptExcel(systemDeptApi.describeDeptList(criteria, false), response);
|
systemDeptService.downloadDeptExcel(systemDeptService.describeDeptList(criteria, false), response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("查询部门")
|
@ApiOperation("查询部门")
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@PreAuthorize("@el.check('user:list','dept:list')")
|
@PreAuthorize("@el.check('user:list','dept:list')")
|
||||||
public ResponseEntity<PageResult<Dept>> describeDeptPage(QueryDeptRequest criteria) throws Exception {
|
public ResponseEntity<CsResultVo<List<SystemDeptTb>>> describeDeptPage(QuerySystemDeptArgs criteria) throws Exception {
|
||||||
List<Dept> depts = systemDeptApi.describeDeptList(criteria, true);
|
List<SystemDeptTb> depts = systemDeptService.describeDeptList(criteria, true);
|
||||||
return new ResponseEntity<>(PageUtil.toPage(depts), HttpStatus.OK);
|
return new ResponseEntity<>(PageUtil.toPage(depts), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,12 +45,12 @@ public class DeptController {
|
|||||||
@PostMapping("/describeDeptSuperiorTree")
|
@PostMapping("/describeDeptSuperiorTree")
|
||||||
@PreAuthorize("@el.check('user:list','dept:list')")
|
@PreAuthorize("@el.check('user:list','dept:list')")
|
||||||
public ResponseEntity<Object> describeDeptSuperiorTree(@RequestBody List<Long> ids, @RequestParam(defaultValue = "false") Boolean exclude) {
|
public ResponseEntity<Object> describeDeptSuperiorTree(@RequestBody List<Long> ids, @RequestParam(defaultValue = "false") Boolean exclude) {
|
||||||
Set<Dept> deptSet = new LinkedHashSet<>();
|
Set<SystemDeptTb> deptSet = new LinkedHashSet<>();
|
||||||
for (Long id : ids) {
|
for (Long id : ids) {
|
||||||
Dept dept = systemDeptApi.describeDeptById(id);
|
SystemDeptTb dept = systemDeptService.describeDeptById(id);
|
||||||
List<Dept> depts = systemDeptApi.describeSuperiorDeptListByPid(dept, new ArrayList<>());
|
List<SystemDeptTb> depts = systemDeptService.describeSuperiorDeptListByPid(dept, new ArrayList<>());
|
||||||
if (exclude) {
|
if (exclude) {
|
||||||
for (Dept data : depts) {
|
for (SystemDeptTb data : depts) {
|
||||||
if (data.getId().equals(dept.getPid())) {
|
if (data.getId().equals(dept.getPid())) {
|
||||||
data.setSubCount(data.getSubCount() - 1);
|
data.setSubCount(data.getSubCount() - 1);
|
||||||
}
|
}
|
||||||
@@ -70,13 +60,13 @@ public class DeptController {
|
|||||||
}
|
}
|
||||||
deptSet.addAll(depts);
|
deptSet.addAll(depts);
|
||||||
}
|
}
|
||||||
return new ResponseEntity<>(systemDeptApi.buildDeptTree(new ArrayList<>(deptSet)), HttpStatus.OK);
|
return new ResponseEntity<>(systemDeptService.buildDeptTree(new ArrayList<>(deptSet)), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("新增部门")
|
@ApiOperation("新增部门")
|
||||||
@PostMapping(value = "/saveDept")
|
@PostMapping(value = "/saveDept")
|
||||||
@PreAuthorize("@el.check('dept:add')")
|
@PreAuthorize("@el.check('dept:add')")
|
||||||
public ResponseEntity<Object> saveDept(@Validated @RequestBody CreateDeptRequest resources) {
|
public ResponseEntity<Object> saveDept(@Validated @RequestBody CreateSystemDeptArgs resources) {
|
||||||
systemDeptService.saveDept(resources);
|
systemDeptService.saveDept(resources);
|
||||||
return new ResponseEntity<>(HttpStatus.CREATED);
|
return new ResponseEntity<>(HttpStatus.CREATED);
|
||||||
}
|
}
|
||||||
@@ -84,7 +74,7 @@ public class DeptController {
|
|||||||
@ApiOperation("修改部门")
|
@ApiOperation("修改部门")
|
||||||
@PostMapping(value = "/modifyDept")
|
@PostMapping(value = "/modifyDept")
|
||||||
@PreAuthorize("@el.check('dept:edit')")
|
@PreAuthorize("@el.check('dept:edit')")
|
||||||
public ResponseEntity<Object> modifyDept(@Validated(Dept.Update.class) @RequestBody Dept resources) {
|
public ResponseEntity<Object> modifyDept(@Validated(SystemDeptTb.Update.class) @RequestBody SystemDeptTb resources) {
|
||||||
systemDeptService.modifyDept(resources);
|
systemDeptService.modifyDept(resources);
|
||||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||||
}
|
}
|
||||||
@@ -93,11 +83,10 @@ public class DeptController {
|
|||||||
@PostMapping(value = "/removeDeptByIds")
|
@PostMapping(value = "/removeDeptByIds")
|
||||||
@PreAuthorize("@el.check('dept:del')")
|
@PreAuthorize("@el.check('dept:del')")
|
||||||
public ResponseEntity<Object> removeDeptByIds(@RequestBody Set<Long> ids) {
|
public ResponseEntity<Object> removeDeptByIds(@RequestBody Set<Long> ids) {
|
||||||
Set<Dept> depts = new HashSet<>();
|
|
||||||
// 获取部门,和其所有子部门
|
// 获取部门,和其所有子部门
|
||||||
systemDeptApi.traverseDeptByIdWithPids(ids, depts);
|
Set<SystemDeptTb> depts = systemDeptService.traverseDeptByIdWithPids(ids);
|
||||||
// 验证是否被角色或用户关联
|
// 验证是否被角色或用户关联
|
||||||
systemDeptApi.verifyBindRelationByIds(depts);
|
systemDeptService.verifyBindRelationByIds(depts);
|
||||||
systemDeptService.removeDeptByIds(depts);
|
systemDeptService.removeDeptByIds(depts);
|
||||||
return new ResponseEntity<>(HttpStatus.OK);
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
}
|
}
|
||||||
+15
-18
@@ -1,11 +1,11 @@
|
|||||||
package cn.odboy.core.controller.system;
|
package cn.odboy.core.controller.system;
|
||||||
|
|
||||||
import cn.odboy.base.PageResult;
|
import cn.odboy.base.CsResultVo;
|
||||||
import cn.odboy.core.api.system.SystemDictApi;
|
import cn.odboy.core.service.system.SystemDictApi;
|
||||||
import cn.odboy.core.dal.dataobject.system.Dict;
|
import cn.odboy.core.dal.dataobject.system.SystemDictTb;
|
||||||
import cn.odboy.core.service.system.SystemDictService;
|
import cn.odboy.core.service.system.SystemDictService;
|
||||||
import cn.odboy.core.service.system.dto.CreateDictRequest;
|
import cn.odboy.core.dal.model.system.CreateSystemDictArgs;
|
||||||
import cn.odboy.core.service.system.dto.QueryDictRequest;
|
import cn.odboy.core.dal.model.system.QuerySystemDictArgs;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
@@ -14,11 +14,8 @@ import org.springframework.http.HttpStatus;
|
|||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -28,36 +25,36 @@ import java.util.Set;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Api(tags = "系统:字典管理")
|
@Api(tags = "系统:字典管理")
|
||||||
@RequestMapping("/api/dict")
|
@RequestMapping("/api/dict")
|
||||||
public class DictController {
|
public class SystemDictController {
|
||||||
private final SystemDictApi systemDictApi;
|
private final SystemDictApi systemDictApi;
|
||||||
private final SystemDictService systemDictService;
|
private final SystemDictService systemDictService;
|
||||||
|
|
||||||
@ApiOperation("导出字典数据")
|
@ApiOperation("导出字典数据")
|
||||||
@GetMapping(value = "/download")
|
@GetMapping(value = "/download")
|
||||||
@PreAuthorize("@el.check('dict:list')")
|
@PreAuthorize("@el.check('dict:list')")
|
||||||
public void exportDict(HttpServletResponse response, QueryDictRequest criteria) throws IOException {
|
public void exportDict(HttpServletResponse response, QuerySystemDictArgs criteria) throws IOException {
|
||||||
systemDictService.downloadDictExcel(systemDictApi.describeDictList(criteria), response);
|
systemDictService.downloadDictExcel(systemDictApi.describeDictList(criteria), response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("查询字典")
|
@ApiOperation("查询字典")
|
||||||
@PostMapping(value = "/queryAllDict")
|
@PostMapping(value = "/queryAllDict")
|
||||||
@PreAuthorize("@el.check('dict:list')")
|
@PreAuthorize("@el.check('dict:list')")
|
||||||
public ResponseEntity<List<Dict>> queryAllDict() {
|
public ResponseEntity<List<SystemDictTb>> queryAllDict() {
|
||||||
return new ResponseEntity<>(systemDictApi.describeDictList(new QueryDictRequest()), HttpStatus.OK);
|
return new ResponseEntity<>(systemDictApi.describeDictList(new QuerySystemDictArgs()), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("查询字典")
|
@ApiOperation("查询字典")
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@PreAuthorize("@el.check('dict:list')")
|
@PreAuthorize("@el.check('dict:list')")
|
||||||
public ResponseEntity<PageResult<Dict>> queryDict(QueryDictRequest criteria) {
|
public ResponseEntity<CsResultVo<List<SystemDictTb>>> queryDict(QuerySystemDictArgs criteria) {
|
||||||
Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
|
Page<SystemDictTb> page = new Page<>(criteria.getPage(), criteria.getSize());
|
||||||
return new ResponseEntity<>(systemDictApi.describeDictPage(criteria, page), HttpStatus.OK);
|
return new ResponseEntity<>(systemDictApi.describeDictPage(criteria, page), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("新增字典")
|
@ApiOperation("新增字典")
|
||||||
@PostMapping(value = "/saveDict")
|
@PostMapping(value = "/saveDict")
|
||||||
@PreAuthorize("@el.check('dict:add')")
|
@PreAuthorize("@el.check('dict:add')")
|
||||||
public ResponseEntity<Object> saveDict(@Validated @RequestBody CreateDictRequest resources) {
|
public ResponseEntity<Object> saveDict(@Validated @RequestBody CreateSystemDictArgs resources) {
|
||||||
systemDictService.saveDict(resources);
|
systemDictService.saveDict(resources);
|
||||||
return new ResponseEntity<>(HttpStatus.CREATED);
|
return new ResponseEntity<>(HttpStatus.CREATED);
|
||||||
}
|
}
|
||||||
@@ -65,7 +62,7 @@ public class DictController {
|
|||||||
@ApiOperation("修改字典")
|
@ApiOperation("修改字典")
|
||||||
@PostMapping(value = "/modifyDictById")
|
@PostMapping(value = "/modifyDictById")
|
||||||
@PreAuthorize("@el.check('dict:edit')")
|
@PreAuthorize("@el.check('dict:edit')")
|
||||||
public ResponseEntity<Object> modifyDictById(@Validated(Dict.Update.class) @RequestBody Dict resources) {
|
public ResponseEntity<Object> modifyDictById(@Validated(SystemDictTb.Update.class) @RequestBody SystemDictTb resources) {
|
||||||
systemDictService.modifyDictById(resources);
|
systemDictService.modifyDictById(resources);
|
||||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||||
}
|
}
|
||||||
+14
-18
@@ -1,11 +1,11 @@
|
|||||||
package cn.odboy.core.controller.system;
|
package cn.odboy.core.controller.system;
|
||||||
|
|
||||||
import cn.odboy.base.PageResult;
|
import cn.odboy.base.CsResultVo;
|
||||||
import cn.odboy.core.api.system.SystemDictDetailApi;
|
import cn.odboy.core.service.system.SystemDictDetailApi;
|
||||||
import cn.odboy.core.dal.dataobject.system.DictDetail;
|
import cn.odboy.core.dal.dataobject.system.SystemDictDetailTb;
|
||||||
import cn.odboy.core.service.system.SystemDictDetailService;
|
import cn.odboy.core.service.system.SystemDictDetailService;
|
||||||
import cn.odboy.core.service.system.dto.CreateDictDetailRequest;
|
import cn.odboy.core.dal.model.system.CreateSystemDictDetailArgs;
|
||||||
import cn.odboy.core.service.system.dto.QueryDictDetailRequest;
|
import cn.odboy.core.dal.model.system.QuerySystemDictDetailArgs;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
@@ -14,12 +14,8 @@ import org.springframework.http.HttpStatus;
|
|||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -28,22 +24,22 @@ import java.util.Map;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Api(tags = "系统:字典详情管理")
|
@Api(tags = "系统:字典详情管理")
|
||||||
@RequestMapping("/api/dictDetail")
|
@RequestMapping("/api/dictDetail")
|
||||||
public class DictDetailController {
|
public class SystemDictDetailController {
|
||||||
private final SystemDictDetailService systemDictDetailService;
|
private final SystemDictDetailService systemDictDetailService;
|
||||||
private final SystemDictDetailApi systemDictDetailApi;
|
private final SystemDictDetailApi systemDictDetailApi;
|
||||||
|
|
||||||
@ApiOperation("查询字典详情")
|
@ApiOperation("查询字典详情")
|
||||||
@GetMapping
|
@GetMapping
|
||||||
public ResponseEntity<PageResult<DictDetail>> describeDictDetailPage(QueryDictDetailRequest criteria) {
|
public ResponseEntity<CsResultVo<List<SystemDictDetailTb>>> queryDictDetailListByArgs(QuerySystemDictDetailArgs criteria) {
|
||||||
Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
|
Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
|
||||||
return new ResponseEntity<>(systemDictDetailApi.describeDictDetailPage(criteria, page), HttpStatus.OK);
|
return new ResponseEntity<>(systemDictDetailApi.queryDictDetailListByArgs(criteria, page), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("查询多个字典详情")
|
@ApiOperation("查询多个字典详情")
|
||||||
@GetMapping(value = "/getDictDetailMaps")
|
@GetMapping(value = "/getDictDetailMaps")
|
||||||
public ResponseEntity<Object> getDictDetailMaps(@RequestParam String dictName) {
|
public ResponseEntity<Object> getDictDetailMaps(@RequestParam String dictName) {
|
||||||
String[] names = dictName.split("[,,]");
|
String[] names = dictName.split("[,,]");
|
||||||
Map<String, List<DictDetail>> dictMap = new HashMap<>(16);
|
Map<String, List<SystemDictDetailTb>> dictMap = new HashMap<>(16);
|
||||||
for (String name : names) {
|
for (String name : names) {
|
||||||
dictMap.put(name, systemDictDetailApi.describeDictDetailListByName(name));
|
dictMap.put(name, systemDictDetailApi.describeDictDetailListByName(name));
|
||||||
}
|
}
|
||||||
@@ -53,7 +49,7 @@ public class DictDetailController {
|
|||||||
@ApiOperation("新增字典详情")
|
@ApiOperation("新增字典详情")
|
||||||
@PostMapping(value = "/saveDictDetail")
|
@PostMapping(value = "/saveDictDetail")
|
||||||
@PreAuthorize("@el.check('dict:add')")
|
@PreAuthorize("@el.check('dict:add')")
|
||||||
public ResponseEntity<Object> saveDictDetail(@Validated @RequestBody CreateDictDetailRequest resources) {
|
public ResponseEntity<Object> saveDictDetail(@Validated @RequestBody CreateSystemDictDetailArgs resources) {
|
||||||
systemDictDetailService.saveDictDetail(resources);
|
systemDictDetailService.saveDictDetail(resources);
|
||||||
return new ResponseEntity<>(HttpStatus.CREATED);
|
return new ResponseEntity<>(HttpStatus.CREATED);
|
||||||
}
|
}
|
||||||
@@ -61,7 +57,7 @@ public class DictDetailController {
|
|||||||
@ApiOperation("修改字典详情")
|
@ApiOperation("修改字典详情")
|
||||||
@PostMapping(value = "/modifyDictDetailById")
|
@PostMapping(value = "/modifyDictDetailById")
|
||||||
@PreAuthorize("@el.check('dict:edit')")
|
@PreAuthorize("@el.check('dict:edit')")
|
||||||
public ResponseEntity<Object> modifyDictDetailById(@Validated(DictDetail.Update.class) @RequestBody DictDetail resources) {
|
public ResponseEntity<Object> modifyDictDetailById(@Validated(SystemDictDetailTb.Update.class) @RequestBody SystemDictDetailTb resources) {
|
||||||
systemDictDetailService.modifyDictDetailById(resources);
|
systemDictDetailService.modifyDictDetailById(resources);
|
||||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||||
}
|
}
|
||||||
@@ -69,7 +65,7 @@ public class DictDetailController {
|
|||||||
@ApiOperation("删除字典详情")
|
@ApiOperation("删除字典详情")
|
||||||
@PostMapping(value = "/removeDictDetailById")
|
@PostMapping(value = "/removeDictDetailById")
|
||||||
@PreAuthorize("@el.check('dict:del')")
|
@PreAuthorize("@el.check('dict:del')")
|
||||||
public ResponseEntity<Object> removeDictDetailById(@RequestBody DictDetail args) {
|
public ResponseEntity<Object> removeDictDetailById(@RequestBody SystemDictDetailTb args) {
|
||||||
systemDictDetailService.removeDictDetailById(args.getId());
|
systemDictDetailService.removeDictDetailById(args.getId());
|
||||||
return new ResponseEntity<>(HttpStatus.OK);
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
}
|
}
|
||||||
+11
-11
@@ -1,9 +1,9 @@
|
|||||||
package cn.odboy.core.controller.tools;
|
package cn.odboy.core.controller.system;
|
||||||
|
|
||||||
import cn.odboy.core.api.tools.EmailApi;
|
import cn.odboy.core.dal.dataobject.system.SystemEmailConfigTb;
|
||||||
import cn.odboy.core.dal.dataobject.tools.EmailConfig;
|
import cn.odboy.core.service.system.SystemEmailApi;
|
||||||
import cn.odboy.core.service.tools.EmailService;
|
import cn.odboy.core.service.system.SystemEmailService;
|
||||||
import cn.odboy.core.service.tools.dto.SendEmailRequest;
|
import cn.odboy.core.dal.model.system.SendSystemEmailArgs;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@@ -22,26 +22,26 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@RequestMapping("api/email")
|
@RequestMapping("api/email")
|
||||||
@Api(tags = "工具:邮件管理")
|
@Api(tags = "工具:邮件管理")
|
||||||
public class EmailController {
|
public class SystemEmailController {
|
||||||
private final EmailApi emailApi;
|
private final SystemEmailApi emailApi;
|
||||||
private final EmailService emailService;
|
private final SystemEmailService emailService;
|
||||||
|
|
||||||
@ApiOperation("查询配置")
|
@ApiOperation("查询配置")
|
||||||
@PostMapping(value = "/describeEmailConfig")
|
@PostMapping(value = "/describeEmailConfig")
|
||||||
public ResponseEntity<EmailConfig> describeEmailConfig() {
|
public ResponseEntity<SystemEmailConfigTb> describeEmailConfig() {
|
||||||
return new ResponseEntity<>(emailApi.describeEmailConfig(), HttpStatus.OK);
|
return new ResponseEntity<>(emailApi.describeEmailConfig(), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("配置邮件")
|
@ApiOperation("配置邮件")
|
||||||
@PostMapping(value = "/modifyEmailConfig")
|
@PostMapping(value = "/modifyEmailConfig")
|
||||||
public ResponseEntity<Object> modifyEmailConfig(@Validated @RequestBody EmailConfig emailConfig) throws Exception {
|
public ResponseEntity<Object> modifyEmailConfig(@Validated @RequestBody SystemEmailConfigTb emailConfig) throws Exception {
|
||||||
emailService.modifyEmailConfigOnPassChange(emailConfig);
|
emailService.modifyEmailConfigOnPassChange(emailConfig);
|
||||||
return new ResponseEntity<>(HttpStatus.OK);
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("发送邮件")
|
@ApiOperation("发送邮件")
|
||||||
@PostMapping(value = "/sendEmail")
|
@PostMapping(value = "/sendEmail")
|
||||||
public ResponseEntity<Object> sendEmail(@Validated @RequestBody SendEmailRequest sendEmailRequest) {
|
public ResponseEntity<Object> sendEmail(@Validated @RequestBody SendSystemEmailArgs sendEmailRequest) {
|
||||||
emailService.sendEmail(sendEmailRequest);
|
emailService.sendEmail(sendEmailRequest);
|
||||||
return new ResponseEntity<>(HttpStatus.OK);
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
}
|
}
|
||||||
+14
-16
@@ -1,11 +1,11 @@
|
|||||||
package cn.odboy.core.controller.system;
|
package cn.odboy.core.controller.system;
|
||||||
|
|
||||||
import cn.odboy.base.PageResult;
|
import cn.odboy.base.CsResultVo;
|
||||||
import cn.odboy.core.api.system.SystemJobApi;
|
import cn.odboy.core.service.system.SystemJobApi;
|
||||||
import cn.odboy.core.dal.dataobject.system.Job;
|
import cn.odboy.core.dal.dataobject.system.SystemJobTb;
|
||||||
import cn.odboy.core.service.system.SystemJobService;
|
import cn.odboy.core.service.system.SystemJobService;
|
||||||
import cn.odboy.core.service.system.dto.CreateJobRequest;
|
import cn.odboy.core.dal.model.system.CreateSystemJobArgs;
|
||||||
import cn.odboy.core.service.system.dto.QueryJobRequest;
|
import cn.odboy.core.dal.model.system.QuerySystemJobArgs;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
@@ -14,13 +14,11 @@ import org.springframework.http.HttpStatus;
|
|||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
|
||||||
@@ -28,29 +26,29 @@ import java.util.Set;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Api(tags = "系统:岗位管理")
|
@Api(tags = "系统:岗位管理")
|
||||||
@RequestMapping("/api/job")
|
@RequestMapping("/api/job")
|
||||||
public class JobController {
|
public class SystemJobController {
|
||||||
private final SystemJobApi systemJobApi;
|
private final SystemJobApi systemJobApi;
|
||||||
private final SystemJobService systemJobService;
|
private final SystemJobService systemJobService;
|
||||||
|
|
||||||
@ApiOperation("导出岗位数据")
|
@ApiOperation("导出岗位数据")
|
||||||
@GetMapping(value = "/download")
|
@GetMapping(value = "/download")
|
||||||
@PreAuthorize("@el.check('job:list')")
|
@PreAuthorize("@el.check('job:list')")
|
||||||
public void exportJob(HttpServletResponse response, QueryJobRequest criteria) throws IOException {
|
public void exportJob(HttpServletResponse response, QuerySystemJobArgs criteria) throws IOException {
|
||||||
systemJobService.downloadJobExcel(systemJobApi.describeJobList(criteria), response);
|
systemJobService.downloadJobExcel(systemJobApi.describeJobList(criteria), response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("查询岗位")
|
@ApiOperation("查询岗位")
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@PreAuthorize("@el.check('job:list','user:list')")
|
@PreAuthorize("@el.check('job:list','user:list')")
|
||||||
public ResponseEntity<PageResult<Job>> queryJob(QueryJobRequest criteria) {
|
public ResponseEntity<CsResultVo<List<SystemJobTb>>> queryJob(QuerySystemJobArgs criteria) {
|
||||||
Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
|
Page<SystemJobTb> page = new Page<>(criteria.getPage(), criteria.getSize());
|
||||||
return new ResponseEntity<>(systemJobApi.describeJobPage(criteria, page), HttpStatus.OK);
|
return new ResponseEntity<>(systemJobApi.describeJobPage(criteria, page), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("新增岗位")
|
@ApiOperation("新增岗位")
|
||||||
@PostMapping(value = "/saveJob")
|
@PostMapping(value = "/saveJob")
|
||||||
@PreAuthorize("@el.check('job:add')")
|
@PreAuthorize("@el.check('job:add')")
|
||||||
public ResponseEntity<Object> saveJob(@Validated @RequestBody CreateJobRequest resources) {
|
public ResponseEntity<Object> saveJob(@Validated @RequestBody CreateSystemJobArgs resources) {
|
||||||
systemJobService.saveJob(resources);
|
systemJobService.saveJob(resources);
|
||||||
return new ResponseEntity<>(HttpStatus.CREATED);
|
return new ResponseEntity<>(HttpStatus.CREATED);
|
||||||
}
|
}
|
||||||
@@ -58,7 +56,7 @@ public class JobController {
|
|||||||
@ApiOperation("修改岗位")
|
@ApiOperation("修改岗位")
|
||||||
@PostMapping(value = "/modifyJobById")
|
@PostMapping(value = "/modifyJobById")
|
||||||
@PreAuthorize("@el.check('job:edit')")
|
@PreAuthorize("@el.check('job:edit')")
|
||||||
public ResponseEntity<Object> modifyJobById(@Validated(Job.Update.class) @RequestBody Job resources) {
|
public ResponseEntity<Object> modifyJobById(@Validated(SystemJobTb.Update.class) @RequestBody SystemJobTb resources) {
|
||||||
systemJobService.modifyJobById(resources);
|
systemJobService.modifyJobById(resources);
|
||||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||||
}
|
}
|
||||||
+18
-21
@@ -1,11 +1,11 @@
|
|||||||
package cn.odboy.core.controller.tools;
|
package cn.odboy.core.controller.system;
|
||||||
|
|
||||||
import cn.odboy.base.PageResult;
|
import cn.odboy.base.CsResultVo;
|
||||||
import cn.odboy.constant.FileTypeEnum;
|
import cn.odboy.constant.FileTypeEnum;
|
||||||
import cn.odboy.core.api.tools.LocalStorageApi;
|
import cn.odboy.core.dal.dataobject.system.SystemLocalStorageTb;
|
||||||
import cn.odboy.core.dal.dataobject.tools.LocalStorage;
|
import cn.odboy.core.service.system.SystemLocalStorageApi;
|
||||||
import cn.odboy.core.service.tools.LocalStorageService;
|
import cn.odboy.core.service.system.SystemLocalStorageService;
|
||||||
import cn.odboy.core.service.tools.dto.QueryLocalStorageRequest;
|
import cn.odboy.core.dal.model.system.QuerySystemLocalStorageArgs;
|
||||||
import cn.odboy.exception.BadRequestException;
|
import cn.odboy.exception.BadRequestException;
|
||||||
import cn.odboy.util.FileUtil;
|
import cn.odboy.util.FileUtil;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
@@ -16,36 +16,33 @@ import org.springframework.http.HttpStatus;
|
|||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Api(tags = "工具:本地存储管理")
|
@Api(tags = "工具:本地存储管理")
|
||||||
@RequestMapping("/api/localStorage")
|
@RequestMapping("/api/localStorage")
|
||||||
public class LocalStorageController {
|
public class SystemLocalStorageController {
|
||||||
private final LocalStorageService localStorageService;
|
private final SystemLocalStorageService localStorageService;
|
||||||
private final LocalStorageApi localStorageApi;
|
private final SystemLocalStorageApi localStorageApi;
|
||||||
|
|
||||||
@ApiOperation("查询文件")
|
@ApiOperation("查询文件")
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@PreAuthorize("@el.check('storage:list')")
|
@PreAuthorize("@el.check('storage:list')")
|
||||||
public ResponseEntity<PageResult<LocalStorage>> queryFile(QueryLocalStorageRequest criteria) {
|
public ResponseEntity<CsResultVo<List<SystemLocalStorageTb>>> queryFile(QuerySystemLocalStorageArgs criteria) {
|
||||||
Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
|
Page<SystemLocalStorageTb> page = new Page<>(criteria.getPage(), criteria.getSize());
|
||||||
return new ResponseEntity<>(localStorageApi.describeLocalStoragePage(criteria, page), HttpStatus.OK);
|
return new ResponseEntity<>(localStorageApi.describeLocalStoragePage(criteria, page), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("导出数据")
|
@ApiOperation("导出数据")
|
||||||
@GetMapping(value = "/download")
|
@GetMapping(value = "/download")
|
||||||
@PreAuthorize("@el.check('storage:list')")
|
@PreAuthorize("@el.check('storage:list')")
|
||||||
public void exportFile(HttpServletResponse response, QueryLocalStorageRequest criteria) throws IOException {
|
public void exportFile(HttpServletResponse response, QuerySystemLocalStorageArgs criteria) throws IOException {
|
||||||
localStorageService.downloadExcel(localStorageApi.describeLocalStorageList(criteria), response);
|
localStorageService.downloadExcel(localStorageApi.describeLocalStorageList(criteria), response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,20 +56,20 @@ public class LocalStorageController {
|
|||||||
|
|
||||||
@ApiOperation("上传图片")
|
@ApiOperation("上传图片")
|
||||||
@PostMapping("/uploadPicture")
|
@PostMapping("/uploadPicture")
|
||||||
public ResponseEntity<LocalStorage> uploadPicture(@RequestParam MultipartFile file) {
|
public ResponseEntity<SystemLocalStorageTb> uploadPicture(@RequestParam MultipartFile file) {
|
||||||
// 判断文件是否为图片
|
// 判断文件是否为图片
|
||||||
String suffix = FileUtil.getSuffix(file.getOriginalFilename());
|
String suffix = FileUtil.getSuffix(file.getOriginalFilename());
|
||||||
if (!FileTypeEnum.IMAGE.getCode().equals(FileUtil.getFileType(suffix))) {
|
if (!FileTypeEnum.IMAGE.getCode().equals(FileUtil.getFileType(suffix))) {
|
||||||
throw new BadRequestException("只能上传图片");
|
throw new BadRequestException("只能上传图片");
|
||||||
}
|
}
|
||||||
LocalStorage localStorage = localStorageService.uploadFile(null, file);
|
SystemLocalStorageTb localStorage = localStorageService.uploadFile(null, file);
|
||||||
return new ResponseEntity<>(localStorage, HttpStatus.OK);
|
return new ResponseEntity<>(localStorage, HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("修改文件")
|
@ApiOperation("修改文件")
|
||||||
@PostMapping(value = "/modifyLocalStorageById")
|
@PostMapping(value = "/modifyLocalStorageById")
|
||||||
@PreAuthorize("@el.check('storage:edit')")
|
@PreAuthorize("@el.check('storage:edit')")
|
||||||
public ResponseEntity<Object> modifyLocalStorageById(@Validated @RequestBody LocalStorage resources) {
|
public ResponseEntity<Object> modifyLocalStorageById(@Validated @RequestBody SystemLocalStorageTb resources) {
|
||||||
localStorageService.modifyLocalStorageById(resources);
|
localStorageService.modifyLocalStorageById(resources);
|
||||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||||
}
|
}
|
||||||
+30
-38
@@ -1,13 +1,13 @@
|
|||||||
package cn.odboy.core.controller.system;
|
package cn.odboy.core.controller.system;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.odboy.base.PageResult;
|
import cn.odboy.base.CsResultVo;
|
||||||
import cn.odboy.core.api.system.SystemMenuApi;
|
import cn.odboy.core.service.system.SystemMenuApi;
|
||||||
import cn.odboy.core.dal.dataobject.system.Menu;
|
import cn.odboy.core.dal.dataobject.system.SystemMenuTb;
|
||||||
import cn.odboy.core.dal.model.MenuResponse;
|
import cn.odboy.core.dal.model.system.SystemMenuVo;
|
||||||
import cn.odboy.core.framework.permission.util.SecurityHelper;
|
import cn.odboy.core.framework.permission.core.SecurityHelper;
|
||||||
import cn.odboy.core.service.system.SystemMenuService;
|
import cn.odboy.core.service.system.SystemMenuService;
|
||||||
import cn.odboy.core.service.system.dto.QueryMenuRequest;
|
import cn.odboy.core.dal.model.system.QuerySystemMenuArgs;
|
||||||
import cn.odboy.exception.BadRequestException;
|
import cn.odboy.exception.BadRequestException;
|
||||||
import cn.odboy.util.PageUtil;
|
import cn.odboy.util.PageUtil;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
@@ -17,18 +17,10 @@ import org.springframework.http.HttpStatus;
|
|||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
@@ -36,7 +28,7 @@ import java.util.stream.Collectors;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Api(tags = "系统:菜单管理")
|
@Api(tags = "系统:菜单管理")
|
||||||
@RequestMapping("/api/menus")
|
@RequestMapping("/api/menus")
|
||||||
public class MenuController {
|
public class SystemMenuController {
|
||||||
private static final String ENTITY_NAME = "menu";
|
private static final String ENTITY_NAME = "menu";
|
||||||
private final SystemMenuApi systemMenuApi;
|
private final SystemMenuApi systemMenuApi;
|
||||||
private final SystemMenuService systemMenuService;
|
private final SystemMenuService systemMenuService;
|
||||||
@@ -44,22 +36,22 @@ public class MenuController {
|
|||||||
@ApiOperation("导出菜单数据")
|
@ApiOperation("导出菜单数据")
|
||||||
@GetMapping(value = "/download")
|
@GetMapping(value = "/download")
|
||||||
@PreAuthorize("@el.check('menu:list')")
|
@PreAuthorize("@el.check('menu:list')")
|
||||||
public void exportMenu(HttpServletResponse response, QueryMenuRequest criteria) throws Exception {
|
public void exportMenu(HttpServletResponse response, QuerySystemMenuArgs criteria) throws Exception {
|
||||||
systemMenuService.downloadMenuExcel(systemMenuApi.describeMenuList(criteria, false), response);
|
systemMenuService.downloadMenuExcel(systemMenuApi.describeMenuList(criteria, false), response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping(value = "/buildMenus")
|
@PostMapping(value = "/buildMenus")
|
||||||
@ApiOperation("获取前端所需菜单")
|
@ApiOperation("获取前端所需菜单")
|
||||||
public ResponseEntity<List<MenuResponse>> buildMenus() {
|
public ResponseEntity<List<SystemMenuVo>> buildMenus() {
|
||||||
List<Menu> menuList = systemMenuApi.describeMenuListByUserId(SecurityHelper.getCurrentUserId());
|
List<SystemMenuTb> menuList = systemMenuApi.describeMenuListByUserId(SecurityHelper.getCurrentUserId());
|
||||||
List<Menu> menus = systemMenuApi.buildMenuTree(menuList);
|
List<SystemMenuTb> menus = systemMenuApi.buildMenuTree(menuList);
|
||||||
return new ResponseEntity<>(systemMenuApi.buildMenuResponse(menus), HttpStatus.OK);
|
return new ResponseEntity<>(systemMenuApi.buildMenuVo(menus), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("返回全部的菜单")
|
@ApiOperation("返回全部的菜单")
|
||||||
@PostMapping(value = "/describeMenuListByPid")
|
@PostMapping(value = "/describeMenuListByPid")
|
||||||
@PreAuthorize("@el.check('menu:list','roles:list')")
|
@PreAuthorize("@el.check('menu:list','roles:list')")
|
||||||
public ResponseEntity<List<Menu>> describeMenuListByPid(@RequestParam Long pid) {
|
public ResponseEntity<List<SystemMenuTb>> describeMenuListByPid(@RequestParam Long pid) {
|
||||||
return new ResponseEntity<>(systemMenuApi.describeMenuListByPid(pid), HttpStatus.OK);
|
return new ResponseEntity<>(systemMenuApi.describeMenuListByPid(pid), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,32 +59,32 @@ public class MenuController {
|
|||||||
@PostMapping(value = "/describeChildMenuSet")
|
@PostMapping(value = "/describeChildMenuSet")
|
||||||
@PreAuthorize("@el.check('menu:list','roles:list')")
|
@PreAuthorize("@el.check('menu:list','roles:list')")
|
||||||
public ResponseEntity<Object> describeChildMenuSet(@RequestParam Long id) {
|
public ResponseEntity<Object> describeChildMenuSet(@RequestParam Long id) {
|
||||||
Set<Menu> menuSet = new HashSet<>();
|
Set<SystemMenuTb> menuSet = new HashSet<>();
|
||||||
List<Menu> menuList = systemMenuApi.describeMenuListByPid(id);
|
List<SystemMenuTb> menuList = systemMenuApi.describeMenuListByPid(id);
|
||||||
menuSet.add(systemMenuApi.describeMenuById(id));
|
menuSet.add(systemMenuApi.describeMenuById(id));
|
||||||
menuSet = systemMenuApi.describeChildMenuSet(menuList, menuSet);
|
menuSet = systemMenuApi.describeChildMenuSet(menuList, menuSet);
|
||||||
Set<Long> ids = menuSet.stream().map(Menu::getId).collect(Collectors.toSet());
|
Set<Long> ids = menuSet.stream().map(SystemMenuTb::getId).collect(Collectors.toSet());
|
||||||
return new ResponseEntity<>(ids, HttpStatus.OK);
|
return new ResponseEntity<>(ids, HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@ApiOperation("查询菜单")
|
@ApiOperation("查询菜单")
|
||||||
@PreAuthorize("@el.check('menu:list')")
|
@PreAuthorize("@el.check('menu:list')")
|
||||||
public ResponseEntity<PageResult<Menu>> queryMenu(QueryMenuRequest criteria) throws Exception {
|
public ResponseEntity<CsResultVo<List<SystemMenuTb>>> queryMenu(QuerySystemMenuArgs criteria) throws Exception {
|
||||||
List<Menu> menuList = systemMenuApi.describeMenuList(criteria, true);
|
List<SystemMenuTb> menuList = systemMenuApi.describeMenuList(criteria, true);
|
||||||
return new ResponseEntity<>(PageUtil.toPage(menuList), HttpStatus.OK);
|
return new ResponseEntity<>(PageUtil.toPage(menuList), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("查询菜单:根据ID获取同级与上级数据")
|
@ApiOperation("查询菜单:根据ID获取同级与上级数据")
|
||||||
@PostMapping("/describeMenuSuperior")
|
@PostMapping("/describeMenuSuperior")
|
||||||
@PreAuthorize("@el.check('menu:list')")
|
@PreAuthorize("@el.check('menu:list')")
|
||||||
public ResponseEntity<List<Menu>> describeMenuSuperior(@RequestBody List<Long> ids) {
|
public ResponseEntity<List<SystemMenuTb>> describeMenuSuperior(@RequestBody List<Long> ids) {
|
||||||
Set<Menu> menus = new LinkedHashSet<>();
|
Set<SystemMenuTb> menus = new LinkedHashSet<>();
|
||||||
if (CollectionUtil.isNotEmpty(ids)) {
|
if (CollectionUtil.isNotEmpty(ids)) {
|
||||||
for (Long id : ids) {
|
for (Long id : ids) {
|
||||||
Menu menu = systemMenuApi.describeMenuById(id);
|
SystemMenuTb menu = systemMenuApi.describeMenuById(id);
|
||||||
List<Menu> menuList = systemMenuApi.describeSuperiorMenuList(menu, new ArrayList<>());
|
List<SystemMenuTb> menuList = systemMenuApi.describeSuperiorMenuList(menu, new ArrayList<>());
|
||||||
for (Menu data : menuList) {
|
for (SystemMenuTb data : menuList) {
|
||||||
if (data.getId().equals(menu.getPid())) {
|
if (data.getId().equals(menu.getPid())) {
|
||||||
data.setSubCount(data.getSubCount() - 1);
|
data.setSubCount(data.getSubCount() - 1);
|
||||||
}
|
}
|
||||||
@@ -109,7 +101,7 @@ public class MenuController {
|
|||||||
@ApiOperation("新增菜单")
|
@ApiOperation("新增菜单")
|
||||||
@PostMapping(value = "/saveMenu")
|
@PostMapping(value = "/saveMenu")
|
||||||
@PreAuthorize("@el.check('menu:add')")
|
@PreAuthorize("@el.check('menu:add')")
|
||||||
public ResponseEntity<Object> saveMenu(@Validated @RequestBody Menu resources) {
|
public ResponseEntity<Object> saveMenu(@Validated @RequestBody SystemMenuTb resources) {
|
||||||
if (resources.getId() != null) {
|
if (resources.getId() != null) {
|
||||||
throw new BadRequestException("A new " + ENTITY_NAME + " cannot already have an ID");
|
throw new BadRequestException("A new " + ENTITY_NAME + " cannot already have an ID");
|
||||||
}
|
}
|
||||||
@@ -120,7 +112,7 @@ public class MenuController {
|
|||||||
@ApiOperation("修改菜单")
|
@ApiOperation("修改菜单")
|
||||||
@PostMapping(value = "/modifyMenuById")
|
@PostMapping(value = "/modifyMenuById")
|
||||||
@PreAuthorize("@el.check('menu:edit')")
|
@PreAuthorize("@el.check('menu:edit')")
|
||||||
public ResponseEntity<Object> modifyMenuById(@Validated(Menu.Update.class) @RequestBody Menu resources) {
|
public ResponseEntity<Object> modifyMenuById(@Validated(SystemMenuTb.Update.class) @RequestBody SystemMenuTb resources) {
|
||||||
systemMenuService.modifyMenuById(resources);
|
systemMenuService.modifyMenuById(resources);
|
||||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||||
}
|
}
|
||||||
@@ -129,9 +121,9 @@ public class MenuController {
|
|||||||
@PostMapping(value = "/removeMenuByIds")
|
@PostMapping(value = "/removeMenuByIds")
|
||||||
@PreAuthorize("@el.check('menu:del')")
|
@PreAuthorize("@el.check('menu:del')")
|
||||||
public ResponseEntity<Object> removeMenuByIds(@RequestBody Set<Long> ids) {
|
public ResponseEntity<Object> removeMenuByIds(@RequestBody Set<Long> ids) {
|
||||||
Set<Menu> menuSet = new HashSet<>();
|
Set<SystemMenuTb> menuSet = new HashSet<>();
|
||||||
for (Long id : ids) {
|
for (Long id : ids) {
|
||||||
List<Menu> menuList = systemMenuApi.describeMenuListByPid(id);
|
List<SystemMenuTb> menuList = systemMenuApi.describeMenuListByPid(id);
|
||||||
menuSet.add(systemMenuApi.describeMenuById(id));
|
menuSet.add(systemMenuApi.describeMenuById(id));
|
||||||
menuSet = systemMenuApi.describeChildMenuSet(menuList, menuSet);
|
menuSet = systemMenuApi.describeChildMenuSet(menuList, menuSet);
|
||||||
}
|
}
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
package cn.odboy.core.controller.system;
|
package cn.odboy.core.controller.system;
|
||||||
|
|
||||||
import cn.odboy.core.api.system.SystemMonitorApi;
|
import cn.odboy.core.service.system.SystemMonitorApi;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Api(tags = "系统-服务监控管理")
|
@Api(tags = "系统-服务监控管理")
|
||||||
@RequestMapping("/api/monitor")
|
@RequestMapping("/api/monitor")
|
||||||
public class MonitorController {
|
public class SystemMonitorController {
|
||||||
|
|
||||||
private final SystemMonitorApi serverService;
|
private final SystemMonitorApi serverService;
|
||||||
|
|
||||||
+9
-11
@@ -1,9 +1,9 @@
|
|||||||
package cn.odboy.core.controller.system;
|
package cn.odboy.core.controller.system;
|
||||||
|
|
||||||
import cn.odboy.base.PageResult;
|
import cn.odboy.base.CsResultVo;
|
||||||
import cn.odboy.core.cache.api.SystemUserOnlineApi;
|
import cn.odboy.core.dal.redis.system.SystemUserOnlineApi;
|
||||||
import cn.odboy.core.cache.service.SystemUserOnlineService;
|
import cn.odboy.core.dal.redis.system.SystemUserOnlineService;
|
||||||
import cn.odboy.core.service.system.dto.UserOnlineVo;
|
import cn.odboy.core.dal.model.system.SystemUserOnlineVo;
|
||||||
import cn.odboy.util.DesEncryptUtil;
|
import cn.odboy.util.DesEncryptUtil;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
@@ -12,13 +12,11 @@ import org.springframework.data.domain.Pageable;
|
|||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
|
||||||
@@ -26,14 +24,14 @@ import java.util.Set;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@RequestMapping("/auth/online")
|
@RequestMapping("/auth/online")
|
||||||
@Api(tags = "系统:在线用户管理")
|
@Api(tags = "系统:在线用户管理")
|
||||||
public class OnlineController {
|
public class SystemOnlineController {
|
||||||
private final SystemUserOnlineApi systemUserOnlineApi;
|
private final SystemUserOnlineApi systemUserOnlineApi;
|
||||||
private final SystemUserOnlineService systemUserOnlineService;
|
private final SystemUserOnlineService systemUserOnlineService;
|
||||||
|
|
||||||
@ApiOperation("查询在线用户")
|
@ApiOperation("查询在线用户")
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@PreAuthorize("@el.check()")
|
@PreAuthorize("@el.check()")
|
||||||
public ResponseEntity<PageResult<UserOnlineVo>> queryOnlineUser(String username, Pageable pageable) {
|
public ResponseEntity<CsResultVo<List<SystemUserOnlineVo>>> queryOnlineUser(String username, Pageable pageable) {
|
||||||
return new ResponseEntity<>(systemUserOnlineApi.describeUserOnlineModelPage(username, pageable), HttpStatus.OK);
|
return new ResponseEntity<>(systemUserOnlineApi.describeUserOnlineModelPage(username, pageable), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
+23
-28
@@ -1,13 +1,13 @@
|
|||||||
package cn.odboy.core.controller.tools;
|
package cn.odboy.core.controller.system;
|
||||||
|
|
||||||
import cn.odboy.base.PageResult;
|
import cn.odboy.base.CsResultVo;
|
||||||
import cn.odboy.core.api.tools.QiniuConfigApi;
|
import cn.odboy.core.dal.dataobject.system.SystemQiniuConfigTb;
|
||||||
import cn.odboy.core.api.tools.QiniuContentApi;
|
import cn.odboy.core.dal.dataobject.system.SystemQiniuContentTb;
|
||||||
import cn.odboy.core.dal.dataobject.tools.QiniuConfig;
|
import cn.odboy.core.service.system.SystemQiniuConfigApi;
|
||||||
import cn.odboy.core.dal.dataobject.tools.QiniuContent;
|
import cn.odboy.core.service.system.SystemQiniuConfigService;
|
||||||
import cn.odboy.core.service.tools.QiniuConfigService;
|
import cn.odboy.core.service.system.SystemQiniuContentApi;
|
||||||
import cn.odboy.core.service.tools.QiniuContentService;
|
import cn.odboy.core.service.system.SystemQiniuContentService;
|
||||||
import cn.odboy.core.service.tools.dto.QueryQiniuRequest;
|
import cn.odboy.core.dal.model.system.QuerySystemQiniuArgs;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
@@ -16,18 +16,13 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -38,21 +33,21 @@ import java.util.Map;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@RequestMapping("/api/qiNiuContent")
|
@RequestMapping("/api/qiNiuContent")
|
||||||
@Api(tags = "工具:七牛云存储管理")
|
@Api(tags = "工具:七牛云存储管理")
|
||||||
public class QiniuController {
|
public class SystemQiniuController {
|
||||||
private final QiniuContentService qiniuContentService;
|
private final SystemQiniuContentService qiniuContentService;
|
||||||
private final QiniuConfigService qiNiuConfigService;
|
private final SystemQiniuConfigService qiNiuConfigService;
|
||||||
private final QiniuConfigApi qiniuConfigApi;
|
private final SystemQiniuConfigApi qiniuConfigApi;
|
||||||
private final QiniuContentApi qiniuContentApi;
|
private final SystemQiniuContentApi qiniuContentApi;
|
||||||
|
|
||||||
@ApiOperation("查询七牛云存储配置")
|
@ApiOperation("查询七牛云存储配置")
|
||||||
@PostMapping(value = "/describeQiniuConfig")
|
@PostMapping(value = "/describeQiniuConfig")
|
||||||
public ResponseEntity<QiniuConfig> describeQiniuConfig() {
|
public ResponseEntity<SystemQiniuConfigTb> describeQiniuConfig() {
|
||||||
return new ResponseEntity<>(qiniuConfigApi.describeQiniuConfig(), HttpStatus.OK);
|
return new ResponseEntity<>(qiniuConfigApi.describeQiniuConfig(), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("配置七牛云存储")
|
@ApiOperation("配置七牛云存储")
|
||||||
@PostMapping(value = "/modifyQiniuConfig")
|
@PostMapping(value = "/modifyQiniuConfig")
|
||||||
public ResponseEntity<Object> modifyQiniuConfig(@Validated @RequestBody QiniuConfig qiniuConfig) {
|
public ResponseEntity<Object> modifyQiniuConfig(@Validated @RequestBody SystemQiniuConfigTb qiniuConfig) {
|
||||||
qiNiuConfigService.saveQiniuConfig(qiniuConfig);
|
qiNiuConfigService.saveQiniuConfig(qiniuConfig);
|
||||||
qiNiuConfigService.modifyQiniuConfigType(qiniuConfig.getType());
|
qiNiuConfigService.modifyQiniuConfigType(qiniuConfig.getType());
|
||||||
return new ResponseEntity<>(HttpStatus.OK);
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
@@ -60,21 +55,21 @@ public class QiniuController {
|
|||||||
|
|
||||||
@ApiOperation("导出数据")
|
@ApiOperation("导出数据")
|
||||||
@GetMapping(value = "/download")
|
@GetMapping(value = "/download")
|
||||||
public void exportQiNiu(HttpServletResponse response, QueryQiniuRequest criteria) throws IOException {
|
public void exportQiNiu(HttpServletResponse response, QuerySystemQiniuArgs criteria) throws IOException {
|
||||||
qiniuContentService.downloadExcel(qiniuContentApi.describeQiniuContentList(criteria), response);
|
qiniuContentService.downloadExcel(qiniuContentApi.describeQiniuContentList(criteria), response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("查询文件")
|
@ApiOperation("查询文件")
|
||||||
@GetMapping
|
@GetMapping
|
||||||
public ResponseEntity<PageResult<QiniuContent>> queryQiNiu(QueryQiniuRequest criteria) {
|
public ResponseEntity<CsResultVo<List<SystemQiniuContentTb>>> queryQiNiu(QuerySystemQiniuArgs criteria) {
|
||||||
Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
|
Page<SystemQiniuContentTb> page = new Page<>(criteria.getPage(), criteria.getSize());
|
||||||
return new ResponseEntity<>(qiniuContentApi.describeQiniuContentPage(criteria, page), HttpStatus.OK);
|
return new ResponseEntity<>(qiniuContentApi.describeQiniuContentPage(criteria, page), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("上传文件")
|
@ApiOperation("上传文件")
|
||||||
@PostMapping
|
@PostMapping
|
||||||
public ResponseEntity<Object> uploadQiNiu(@RequestParam MultipartFile file) {
|
public ResponseEntity<Object> uploadQiNiu(@RequestParam MultipartFile file) {
|
||||||
QiniuContent qiniuContent = qiniuContentService.uploadFile(file);
|
SystemQiniuContentTb qiniuContent = qiniuContentService.uploadFile(file);
|
||||||
Map<String, Object> map = new HashMap<>(3);
|
Map<String, Object> map = new HashMap<>(3);
|
||||||
map.put("id", qiniuContent.getId());
|
map.put("id", qiniuContent.getId());
|
||||||
map.put("errno", 0);
|
map.put("errno", 0);
|
||||||
+19
-24
@@ -1,13 +1,13 @@
|
|||||||
package cn.odboy.core.controller.job;
|
package cn.odboy.core.controller.system;
|
||||||
|
|
||||||
import cn.odboy.base.PageResult;
|
import cn.odboy.base.CsResultVo;
|
||||||
import cn.odboy.context.SpringBeanHolder;
|
import cn.odboy.context.SpringBeanHolder;
|
||||||
import cn.odboy.core.api.system.SystemQuartzJobApi;
|
import cn.odboy.core.dal.dataobject.system.SystemQuartzJobTb;
|
||||||
import cn.odboy.core.dal.dataobject.job.QuartzJob;
|
import cn.odboy.core.dal.dataobject.system.SystemQuartzLogTb;
|
||||||
import cn.odboy.core.dal.dataobject.job.QuartzLog;
|
import cn.odboy.core.service.system.SystemQuartzJobApi;
|
||||||
import cn.odboy.core.service.system.SystemQuartzJobService;
|
import cn.odboy.core.service.system.SystemQuartzJobService;
|
||||||
import cn.odboy.core.service.system.dto.QueryQuartzJobRequest;
|
import cn.odboy.core.dal.model.system.QuerySystemQuartzJobArgs;
|
||||||
import cn.odboy.core.service.system.dto.UpdateQuartzJobRequest;
|
import cn.odboy.core.dal.model.system.UpdateSystemQuartzJobArgs;
|
||||||
import cn.odboy.exception.BadRequestException;
|
import cn.odboy.exception.BadRequestException;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
@@ -18,16 +18,11 @@ import org.springframework.http.HttpStatus;
|
|||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.PutMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
|
||||||
@@ -36,7 +31,7 @@ import java.util.Set;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@RequestMapping("/api/jobs")
|
@RequestMapping("/api/jobs")
|
||||||
@Api(tags = "系统:定时任务管理")
|
@Api(tags = "系统:定时任务管理")
|
||||||
public class QuartzJobController {
|
public class SystemQuartzJobController {
|
||||||
private static final String ENTITY_NAME = "quartzJob";
|
private static final String ENTITY_NAME = "quartzJob";
|
||||||
private final SystemQuartzJobService systemQuartzJobService;
|
private final SystemQuartzJobService systemQuartzJobService;
|
||||||
private final SystemQuartzJobApi systemQuartzJobApi;
|
private final SystemQuartzJobApi systemQuartzJobApi;
|
||||||
@@ -44,37 +39,37 @@ public class QuartzJobController {
|
|||||||
@ApiOperation("查询定时任务")
|
@ApiOperation("查询定时任务")
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@PreAuthorize("@el.check('timing:list')")
|
@PreAuthorize("@el.check('timing:list')")
|
||||||
public ResponseEntity<PageResult<QuartzJob>> queryQuartzJob(QueryQuartzJobRequest criteria) {
|
public ResponseEntity<CsResultVo<List<SystemQuartzJobTb>>> queryQuartzJob(QuerySystemQuartzJobArgs criteria) {
|
||||||
Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
|
Page<SystemQuartzJobTb> page = new Page<>(criteria.getPage(), criteria.getSize());
|
||||||
return new ResponseEntity<>(systemQuartzJobApi.describeQuartzJobPage(criteria, page), HttpStatus.OK);
|
return new ResponseEntity<>(systemQuartzJobApi.describeQuartzJobPage(criteria, page), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("导出任务数据")
|
@ApiOperation("导出任务数据")
|
||||||
@GetMapping(value = "/download")
|
@GetMapping(value = "/download")
|
||||||
@PreAuthorize("@el.check('timing:list')")
|
@PreAuthorize("@el.check('timing:list')")
|
||||||
public void exportQuartzJob(HttpServletResponse response, QueryQuartzJobRequest criteria) throws IOException {
|
public void exportQuartzJob(HttpServletResponse response, QuerySystemQuartzJobArgs criteria) throws IOException {
|
||||||
systemQuartzJobService.downloadQuartzJobExcel(systemQuartzJobApi.describeQuartzJobList(criteria), response);
|
systemQuartzJobService.downloadQuartzJobExcel(systemQuartzJobApi.describeQuartzJobList(criteria), response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("导出日志数据")
|
@ApiOperation("导出日志数据")
|
||||||
@GetMapping(value = "/logs/download")
|
@GetMapping(value = "/logs/download")
|
||||||
@PreAuthorize("@el.check('timing:list')")
|
@PreAuthorize("@el.check('timing:list')")
|
||||||
public void exportQuartzJobLog(HttpServletResponse response, QueryQuartzJobRequest criteria) throws IOException {
|
public void exportQuartzJobLog(HttpServletResponse response, QuerySystemQuartzJobArgs criteria) throws IOException {
|
||||||
systemQuartzJobService.downloadQuartzLogExcel(systemQuartzJobApi.describeQuartzLogList(criteria), response);
|
systemQuartzJobService.downloadQuartzLogExcel(systemQuartzJobApi.describeQuartzLogList(criteria), response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("查询任务执行日志")
|
@ApiOperation("查询任务执行日志")
|
||||||
@GetMapping(value = "/logs")
|
@GetMapping(value = "/logs")
|
||||||
@PreAuthorize("@el.check('timing:list')")
|
@PreAuthorize("@el.check('timing:list')")
|
||||||
public ResponseEntity<PageResult<QuartzLog>> queryQuartzJobLog(QueryQuartzJobRequest criteria) {
|
public ResponseEntity<CsResultVo<List<SystemQuartzLogTb>>> queryQuartzJobLog(QuerySystemQuartzJobArgs criteria) {
|
||||||
Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
|
Page<SystemQuartzLogTb> page = new Page<>(criteria.getPage(), criteria.getSize());
|
||||||
return new ResponseEntity<>(systemQuartzJobApi.describeQuartzLogPage(criteria, page), HttpStatus.OK);
|
return new ResponseEntity<>(systemQuartzJobApi.describeQuartzLogPage(criteria, page), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("新增定时任务")
|
@ApiOperation("新增定时任务")
|
||||||
@PostMapping
|
@PostMapping
|
||||||
@PreAuthorize("@el.check('timing:add')")
|
@PreAuthorize("@el.check('timing:add')")
|
||||||
public ResponseEntity<Object> createQuartzJob(@Validated @RequestBody QuartzJob resources) {
|
public ResponseEntity<Object> createQuartzJob(@Validated @RequestBody SystemQuartzJobTb resources) {
|
||||||
if (resources.getId() != null) {
|
if (resources.getId() != null) {
|
||||||
throw new BadRequestException("A new " + ENTITY_NAME + " cannot already have an ID");
|
throw new BadRequestException("A new " + ENTITY_NAME + " cannot already have an ID");
|
||||||
}
|
}
|
||||||
@@ -87,7 +82,7 @@ public class QuartzJobController {
|
|||||||
@ApiOperation("修改定时任务")
|
@ApiOperation("修改定时任务")
|
||||||
@PutMapping
|
@PutMapping
|
||||||
@PreAuthorize("@el.check('timing:edit')")
|
@PreAuthorize("@el.check('timing:edit')")
|
||||||
public ResponseEntity<Object> updateQuartzJob(@Validated(QuartzJob.Update.class) @RequestBody UpdateQuartzJobRequest resources) {
|
public ResponseEntity<Object> updateQuartzJob(@Validated(SystemQuartzJobTb.Update.class) @RequestBody UpdateSystemQuartzJobArgs resources) {
|
||||||
// 验证Bean是不是合法的,合法的定时任务 Bean 需要用 @Service 定义
|
// 验证Bean是不是合法的,合法的定时任务 Bean 需要用 @Service 定义
|
||||||
checkBean(resources.getBeanName());
|
checkBean(resources.getBeanName());
|
||||||
systemQuartzJobService.modifyQuartzJobResumeCron(resources);
|
systemQuartzJobService.modifyQuartzJobResumeCron(resources);
|
||||||
+19
-22
@@ -1,13 +1,13 @@
|
|||||||
package cn.odboy.core.controller.system;
|
package cn.odboy.core.controller.system;
|
||||||
|
|
||||||
import cn.hutool.core.lang.Dict;
|
import cn.hutool.core.lang.Dict;
|
||||||
import cn.odboy.base.PageResult;
|
import cn.odboy.base.CsResultVo;
|
||||||
import cn.odboy.core.api.system.SystemRoleApi;
|
import cn.odboy.core.service.system.SystemRoleApi;
|
||||||
import cn.odboy.core.dal.dataobject.system.Role;
|
import cn.odboy.core.dal.dataobject.system.SystemRoleTb;
|
||||||
import cn.odboy.core.framework.permission.util.SecurityHelper;
|
import cn.odboy.core.framework.permission.core.SecurityHelper;
|
||||||
import cn.odboy.core.service.system.SystemRoleService;
|
import cn.odboy.core.service.system.SystemRoleService;
|
||||||
import cn.odboy.core.service.system.dto.CreateRoleRequest;
|
import cn.odboy.core.dal.model.system.CreateSystemRoleArgs;
|
||||||
import cn.odboy.core.service.system.dto.QueryRoleRequest;
|
import cn.odboy.core.dal.model.system.QuerySystemRoleArgs;
|
||||||
import cn.odboy.exception.BadRequestException;
|
import cn.odboy.exception.BadRequestException;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
@@ -17,11 +17,8 @@ import org.springframework.http.HttpStatus;
|
|||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@@ -34,35 +31,35 @@ import java.util.stream.Collectors;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Api(tags = "系统:角色管理")
|
@Api(tags = "系统:角色管理")
|
||||||
@RequestMapping("/api/roles")
|
@RequestMapping("/api/roles")
|
||||||
public class RoleController {
|
public class SystemRoleController {
|
||||||
private final SystemRoleApi systemRoleApi;
|
private final SystemRoleApi systemRoleApi;
|
||||||
private final SystemRoleService systemRoleService;
|
private final SystemRoleService systemRoleService;
|
||||||
|
|
||||||
@ApiOperation("获取单个role")
|
@ApiOperation("获取单个role")
|
||||||
@PostMapping(value = "/describeRoleById")
|
@PostMapping(value = "/describeRoleById")
|
||||||
@PreAuthorize("@el.check('roles:list')")
|
@PreAuthorize("@el.check('roles:list')")
|
||||||
public ResponseEntity<Role> describeRoleById(@RequestBody Role args) {
|
public ResponseEntity<SystemRoleTb> describeRoleById(@RequestBody SystemRoleTb args) {
|
||||||
return new ResponseEntity<>(systemRoleApi.describeRoleById(args.getId()), HttpStatus.OK);
|
return new ResponseEntity<>(systemRoleApi.describeRoleById(args.getId()), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("导出角色数据")
|
@ApiOperation("导出角色数据")
|
||||||
@GetMapping(value = "/download")
|
@GetMapping(value = "/download")
|
||||||
@PreAuthorize("@el.check('role:list')")
|
@PreAuthorize("@el.check('role:list')")
|
||||||
public void exportRole(HttpServletResponse response, QueryRoleRequest criteria) throws IOException {
|
public void exportRole(HttpServletResponse response, QuerySystemRoleArgs criteria) throws IOException {
|
||||||
systemRoleService.downloadRoleExcel(systemRoleApi.describeRoleList(criteria), response);
|
systemRoleService.downloadRoleExcel(systemRoleApi.describeRoleList(criteria), response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("返回全部的角色")
|
@ApiOperation("返回全部的角色")
|
||||||
@PostMapping(value = "/describeRoleList")
|
@PostMapping(value = "/describeRoleList")
|
||||||
@PreAuthorize("@el.check('roles:list','user:add','user:edit')")
|
@PreAuthorize("@el.check('roles:list','user:add','user:edit')")
|
||||||
public ResponseEntity<List<Role>> describeRoleList() {
|
public ResponseEntity<List<SystemRoleTb>> describeRoleList() {
|
||||||
return new ResponseEntity<>(systemRoleApi.describeRoleList(), HttpStatus.OK);
|
return new ResponseEntity<>(systemRoleApi.describeRoleList(), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("查询角色")
|
@ApiOperation("查询角色")
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@PreAuthorize("@el.check('roles:list')")
|
@PreAuthorize("@el.check('roles:list')")
|
||||||
public ResponseEntity<PageResult<Role>> describeRolePage(QueryRoleRequest criteria) {
|
public ResponseEntity<CsResultVo<List<SystemRoleTb>>> describeRolePage(QuerySystemRoleArgs criteria) {
|
||||||
Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
|
Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
|
||||||
return new ResponseEntity<>(systemRoleApi.describeRolePage(criteria, page), HttpStatus.OK);
|
return new ResponseEntity<>(systemRoleApi.describeRolePage(criteria, page), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
@@ -76,7 +73,7 @@ public class RoleController {
|
|||||||
@ApiOperation("新增角色")
|
@ApiOperation("新增角色")
|
||||||
@PostMapping(value = "/saveRole")
|
@PostMapping(value = "/saveRole")
|
||||||
@PreAuthorize("@el.check('roles:add')")
|
@PreAuthorize("@el.check('roles:add')")
|
||||||
public ResponseEntity<Object> saveRole(@Validated @RequestBody CreateRoleRequest resources) {
|
public ResponseEntity<Object> saveRole(@Validated @RequestBody CreateSystemRoleArgs resources) {
|
||||||
checkRoleLevels(resources.getLevel());
|
checkRoleLevels(resources.getLevel());
|
||||||
systemRoleService.saveRole(resources);
|
systemRoleService.saveRole(resources);
|
||||||
return new ResponseEntity<>(HttpStatus.CREATED);
|
return new ResponseEntity<>(HttpStatus.CREATED);
|
||||||
@@ -85,7 +82,7 @@ public class RoleController {
|
|||||||
@ApiOperation("修改角色")
|
@ApiOperation("修改角色")
|
||||||
@PostMapping(value = "/modifyRoleById")
|
@PostMapping(value = "/modifyRoleById")
|
||||||
@PreAuthorize("@el.check('roles:edit')")
|
@PreAuthorize("@el.check('roles:edit')")
|
||||||
public ResponseEntity<Object> modifyRoleById(@Validated(Role.Update.class) @RequestBody Role resources) {
|
public ResponseEntity<Object> modifyRoleById(@Validated(SystemRoleTb.Update.class) @RequestBody SystemRoleTb resources) {
|
||||||
checkRoleLevels(resources.getLevel());
|
checkRoleLevels(resources.getLevel());
|
||||||
systemRoleService.modifyRoleById(resources);
|
systemRoleService.modifyRoleById(resources);
|
||||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||||
@@ -94,8 +91,8 @@ public class RoleController {
|
|||||||
@ApiOperation("修改角色菜单")
|
@ApiOperation("修改角色菜单")
|
||||||
@PostMapping(value = "/modifyBindMenuById")
|
@PostMapping(value = "/modifyBindMenuById")
|
||||||
@PreAuthorize("@el.check('roles:edit')")
|
@PreAuthorize("@el.check('roles:edit')")
|
||||||
public ResponseEntity<Object> modifyBindMenuById(@RequestBody Role resources) {
|
public ResponseEntity<Object> modifyBindMenuById(@RequestBody SystemRoleTb resources) {
|
||||||
Role role = systemRoleService.getById(resources.getId());
|
SystemRoleTb role = systemRoleService.getById(resources.getId());
|
||||||
checkRoleLevels(role.getLevel());
|
checkRoleLevels(role.getLevel());
|
||||||
systemRoleService.modifyBindMenuById(resources);
|
systemRoleService.modifyBindMenuById(resources);
|
||||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||||
@@ -106,7 +103,7 @@ public class RoleController {
|
|||||||
@PreAuthorize("@el.check('roles:del')")
|
@PreAuthorize("@el.check('roles:del')")
|
||||||
public ResponseEntity<Object> removeRoleByIds(@RequestBody Set<Long> ids) {
|
public ResponseEntity<Object> removeRoleByIds(@RequestBody Set<Long> ids) {
|
||||||
for (Long id : ids) {
|
for (Long id : ids) {
|
||||||
Role role = systemRoleService.getById(id);
|
SystemRoleTb role = systemRoleService.getById(id);
|
||||||
checkRoleLevels(role.getLevel());
|
checkRoleLevels(role.getLevel());
|
||||||
}
|
}
|
||||||
// 验证是否被用户关联
|
// 验证是否被用户关联
|
||||||
@@ -121,7 +118,7 @@ public class RoleController {
|
|||||||
* @return /
|
* @return /
|
||||||
*/
|
*/
|
||||||
private int checkRoleLevels(Integer level) {
|
private int checkRoleLevels(Integer level) {
|
||||||
List<Integer> levels = systemRoleApi.describeRoleListByUsersId(SecurityHelper.getCurrentUserId()).stream().map(Role::getLevel).collect(Collectors.toList());
|
List<Integer> levels = systemRoleApi.describeRoleListByUsersId(SecurityHelper.getCurrentUserId()).stream().map(SystemRoleTb::getLevel).collect(Collectors.toList());
|
||||||
int min = Collections.min(levels);
|
int min = Collections.min(levels);
|
||||||
if (level != null) {
|
if (level != null) {
|
||||||
if (level < min) {
|
if (level < min) {
|
||||||
+44
-56
@@ -1,22 +1,19 @@
|
|||||||
package cn.odboy.core.controller.system;
|
package cn.odboy.core.controller.system;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.odboy.base.MyMetaOption;
|
import cn.odboy.base.CsResultVo;
|
||||||
import cn.odboy.base.PageResult;
|
import cn.odboy.base.CsSelectOptionItemVo;
|
||||||
import cn.odboy.core.api.system.SystemDataApi;
|
import cn.odboy.core.service.system.*;
|
||||||
import cn.odboy.core.api.system.SystemDeptApi;
|
import cn.odboy.core.service.system.ookkoko.SystemDataService;
|
||||||
import cn.odboy.core.api.system.SystemRoleApi;
|
import cn.odboy.core.constant.system.SystemCaptchaBizEnum;
|
||||||
import cn.odboy.core.api.system.SystemUserApi;
|
import cn.odboy.core.dal.dataobject.system.SystemDeptTb;
|
||||||
import cn.odboy.core.constant.CaptchaBizEnum;
|
import cn.odboy.core.dal.dataobject.system.SystemRoleTb;
|
||||||
import cn.odboy.core.dal.dataobject.system.Dept;
|
import cn.odboy.core.dal.dataobject.system.SystemUserTb;
|
||||||
import cn.odboy.core.dal.dataobject.system.Role;
|
import cn.odboy.core.dal.model.system.UpdateSystemUserPasswordArgs;
|
||||||
import cn.odboy.core.dal.dataobject.system.User;
|
import cn.odboy.core.framework.permission.core.SecurityHelper;
|
||||||
import cn.odboy.core.dal.model.UpdateUserPasswordResponse;
|
|
||||||
import cn.odboy.core.framework.permission.util.SecurityHelper;
|
|
||||||
import cn.odboy.core.framework.properties.AppProperties;
|
import cn.odboy.core.framework.properties.AppProperties;
|
||||||
import cn.odboy.core.service.system.SystemUserService;
|
import cn.odboy.core.dal.model.system.QuerySystemUserArgs;
|
||||||
import cn.odboy.core.service.system.dto.QueryUserRequest;
|
import cn.odboy.core.service.system.ookkoko.SystemDeptService;
|
||||||
import cn.odboy.core.service.tools.CaptchaService;
|
|
||||||
import cn.odboy.exception.BadRequestException;
|
import cn.odboy.exception.BadRequestException;
|
||||||
import cn.odboy.util.PageUtil;
|
import cn.odboy.util.PageUtil;
|
||||||
import cn.odboy.util.RsaEncryptUtil;
|
import cn.odboy.util.RsaEncryptUtil;
|
||||||
@@ -32,58 +29,49 @@ import org.springframework.security.crypto.password.PasswordEncoder;
|
|||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
import org.springframework.util.ObjectUtils;
|
import org.springframework.util.ObjectUtils;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Collections;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Api(tags = "系统:用户管理")
|
@Api(tags = "系统:用户管理")
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/api/users")
|
@RequestMapping("/api/users")
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class UserController {
|
public class SystemUserController {
|
||||||
private final PasswordEncoder passwordEncoder;
|
private final PasswordEncoder passwordEncoder;
|
||||||
private final SystemUserService systemUserService;
|
private final SystemUserService systemUserService;
|
||||||
private final SystemDataApi systemDataApi;
|
private final SystemDataService systemDataService;
|
||||||
private final SystemDeptApi systemDeptApi;
|
private final SystemDeptService systemDeptService;
|
||||||
private final SystemRoleApi systemRoleApi;
|
private final SystemRoleApi systemRoleApi;
|
||||||
private final SystemUserApi systemUserApi;
|
private final SystemUserApi systemUserApi;
|
||||||
private final CaptchaService verificationCodeService;
|
private final SystemCaptchaService verificationCodeService;
|
||||||
private final AppProperties properties;
|
private final AppProperties properties;
|
||||||
|
|
||||||
@ApiOperation("导出用户数据")
|
@ApiOperation("导出用户数据")
|
||||||
@GetMapping(value = "/download")
|
@GetMapping(value = "/download")
|
||||||
@PreAuthorize("@el.check('user:list')")
|
@PreAuthorize("@el.check('user:list')")
|
||||||
public void downloadUserExcel(HttpServletResponse response, QueryUserRequest criteria) throws IOException {
|
public void downloadUserExcel(HttpServletResponse response, QuerySystemUserArgs criteria) throws IOException {
|
||||||
systemUserService.downloadUserExcel(systemUserApi.describeUserList(criteria), response);
|
systemUserService.downloadUserExcel(systemUserApi.describeUserList(criteria), response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("查询用户")
|
@ApiOperation("查询用户")
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@PreAuthorize("@el.check('user:list')")
|
@PreAuthorize("@el.check('user:list')")
|
||||||
public ResponseEntity<PageResult<User>> queryUser(QueryUserRequest criteria) {
|
public ResponseEntity<CsResultVo<List<SystemUserTb>>> queryUser(QuerySystemUserArgs criteria) {
|
||||||
Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
|
Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
|
||||||
if (!ObjectUtils.isEmpty(criteria.getDeptId())) {
|
if (!ObjectUtils.isEmpty(criteria.getDeptId())) {
|
||||||
criteria.getDeptIds().add(criteria.getDeptId());
|
criteria.getDeptIds().add(criteria.getDeptId());
|
||||||
// 先查找是否存在子节点
|
// 先查找是否存在子节点
|
||||||
List<Dept> data = systemDeptApi.describeDeptListByPid(criteria.getDeptId());
|
List<SystemDeptTb> data = systemDeptService.describeDeptListByPid(criteria.getDeptId());
|
||||||
// 然后把子节点的ID都加入到集合中
|
// 然后把子节点的ID都加入到集合中
|
||||||
criteria.getDeptIds().addAll(systemDeptApi.describeChildDeptIdListByDeptIds(data));
|
criteria.getDeptIds().addAll(systemDeptService.describeChildDeptIdListByDeptIds(data));
|
||||||
}
|
}
|
||||||
// 数据权限
|
// 数据权限
|
||||||
List<Long> dataScopes = systemDataApi.describeDeptIdListByUserIdWithDeptId(systemUserApi.describeUserByUsername(SecurityHelper.getCurrentUsername()));
|
List<Long> dataScopes = systemDataService.describeDeptIdListByUserIdWithDeptId(systemUserApi.describeUserByUsername(SecurityHelper.getCurrentUsername()));
|
||||||
// criteria.getDeptIds() 不为空并且数据权限不为空则取交集
|
// criteria.getDeptIds() 不为空并且数据权限不为空则取交集
|
||||||
if (!CollectionUtils.isEmpty(criteria.getDeptIds()) && !CollectionUtils.isEmpty(dataScopes)) {
|
if (!CollectionUtils.isEmpty(criteria.getDeptIds()) && !CollectionUtils.isEmpty(dataScopes)) {
|
||||||
// 取交集
|
// 取交集
|
||||||
@@ -96,13 +84,13 @@ public class UserController {
|
|||||||
criteria.getDeptIds().addAll(dataScopes);
|
criteria.getDeptIds().addAll(dataScopes);
|
||||||
return new ResponseEntity<>(systemUserApi.describeUserPage(criteria, page), HttpStatus.OK);
|
return new ResponseEntity<>(systemUserApi.describeUserPage(criteria, page), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
return new ResponseEntity<>(PageUtil.noData(), HttpStatus.OK);
|
return new ResponseEntity<>(PageUtil.emptyData(), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("新增用户")
|
@ApiOperation("新增用户")
|
||||||
@PostMapping(value = "/saveUser")
|
@PostMapping(value = "/saveUser")
|
||||||
@PreAuthorize("@el.check('user:add')")
|
@PreAuthorize("@el.check('user:add')")
|
||||||
public ResponseEntity<Object> saveUser(@Validated @RequestBody User resources) {
|
public ResponseEntity<Object> saveUser(@Validated @RequestBody SystemUserTb resources) {
|
||||||
checkLevel(resources);
|
checkLevel(resources);
|
||||||
// 默认密码 123456
|
// 默认密码 123456
|
||||||
resources.setPassword(passwordEncoder.encode("123456"));
|
resources.setPassword(passwordEncoder.encode("123456"));
|
||||||
@@ -113,7 +101,7 @@ public class UserController {
|
|||||||
@ApiOperation("修改用户")
|
@ApiOperation("修改用户")
|
||||||
@PostMapping(value = "/modifyUserById")
|
@PostMapping(value = "/modifyUserById")
|
||||||
@PreAuthorize("@el.check('user:edit')")
|
@PreAuthorize("@el.check('user:edit')")
|
||||||
public ResponseEntity<Object> modifyUserById(@Validated(User.Update.class) @RequestBody User resources) throws Exception {
|
public ResponseEntity<Object> modifyUserById(@Validated(SystemUserTb.Update.class) @RequestBody SystemUserTb resources) throws Exception {
|
||||||
checkLevel(resources);
|
checkLevel(resources);
|
||||||
systemUserService.modifyUserById(resources);
|
systemUserService.modifyUserById(resources);
|
||||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||||
@@ -121,7 +109,7 @@ public class UserController {
|
|||||||
|
|
||||||
@ApiOperation("修改用户:个人中心")
|
@ApiOperation("修改用户:个人中心")
|
||||||
@PostMapping(value = "modifyUserCenterInfoById")
|
@PostMapping(value = "modifyUserCenterInfoById")
|
||||||
public ResponseEntity<Object> modifyUserCenterInfoById(@Validated(User.Update.class) @RequestBody User resources) {
|
public ResponseEntity<Object> modifyUserCenterInfoById(@Validated(SystemUserTb.Update.class) @RequestBody SystemUserTb resources) {
|
||||||
if (!resources.getId().equals(SecurityHelper.getCurrentUserId())) {
|
if (!resources.getId().equals(SecurityHelper.getCurrentUserId())) {
|
||||||
throw new BadRequestException("不能修改他人资料");
|
throw new BadRequestException("不能修改他人资料");
|
||||||
}
|
}
|
||||||
@@ -134,8 +122,8 @@ public class UserController {
|
|||||||
@PreAuthorize("@el.check('user:del')")
|
@PreAuthorize("@el.check('user:del')")
|
||||||
public ResponseEntity<Object> removeUserByIds(@RequestBody Set<Long> ids) {
|
public ResponseEntity<Object> removeUserByIds(@RequestBody Set<Long> ids) {
|
||||||
for (Long id : ids) {
|
for (Long id : ids) {
|
||||||
Integer currentLevel = Collections.min(systemRoleApi.describeRoleListByUsersId(SecurityHelper.getCurrentUserId()).stream().map(Role::getLevel).collect(Collectors.toList()));
|
Integer currentLevel = Collections.min(systemRoleApi.describeRoleListByUsersId(SecurityHelper.getCurrentUserId()).stream().map(SystemRoleTb::getLevel).collect(Collectors.toList()));
|
||||||
Integer optLevel = Collections.min(systemRoleApi.describeRoleListByUsersId(id).stream().map(Role::getLevel).collect(Collectors.toList()));
|
Integer optLevel = Collections.min(systemRoleApi.describeRoleListByUsersId(id).stream().map(SystemRoleTb::getLevel).collect(Collectors.toList()));
|
||||||
if (currentLevel > optLevel) {
|
if (currentLevel > optLevel) {
|
||||||
throw new BadRequestException("角色权限不足,不能删除:" + systemUserApi.describeUserById(id).getUsername());
|
throw new BadRequestException("角色权限不足,不能删除:" + systemUserApi.describeUserById(id).getUsername());
|
||||||
}
|
}
|
||||||
@@ -146,10 +134,10 @@ public class UserController {
|
|||||||
|
|
||||||
@ApiOperation("修改密码")
|
@ApiOperation("修改密码")
|
||||||
@PostMapping(value = "/modifyUserPasswordByUsername")
|
@PostMapping(value = "/modifyUserPasswordByUsername")
|
||||||
public ResponseEntity<Object> modifyUserPasswordByUsername(@RequestBody UpdateUserPasswordResponse passVo) throws Exception {
|
public ResponseEntity<Object> modifyUserPasswordByUsername(@RequestBody UpdateSystemUserPasswordArgs passVo) throws Exception {
|
||||||
String oldPass = RsaEncryptUtil.decryptByPrivateKey(properties.getRsa().getPrivateKey(), passVo.getOldPass());
|
String oldPass = RsaEncryptUtil.decryptByPrivateKey(properties.getRsa().getPrivateKey(), passVo.getOldPass());
|
||||||
String newPass = RsaEncryptUtil.decryptByPrivateKey(properties.getRsa().getPrivateKey(), passVo.getNewPass());
|
String newPass = RsaEncryptUtil.decryptByPrivateKey(properties.getRsa().getPrivateKey(), passVo.getNewPass());
|
||||||
User user = systemUserApi.describeUserByUsername(SecurityHelper.getCurrentUsername());
|
SystemUserTb user = systemUserApi.describeUserByUsername(SecurityHelper.getCurrentUsername());
|
||||||
if (!passwordEncoder.matches(oldPass, user.getPassword())) {
|
if (!passwordEncoder.matches(oldPass, user.getPassword())) {
|
||||||
throw new BadRequestException("修改失败,旧密码错误");
|
throw new BadRequestException("修改失败,旧密码错误");
|
||||||
}
|
}
|
||||||
@@ -176,13 +164,13 @@ public class UserController {
|
|||||||
|
|
||||||
@ApiOperation("修改邮箱")
|
@ApiOperation("修改邮箱")
|
||||||
@PostMapping(value = "/modifyUserEmailByUsername/{code}")
|
@PostMapping(value = "/modifyUserEmailByUsername/{code}")
|
||||||
public ResponseEntity<Object> modifyUserEmailByUsername(@PathVariable String code, @RequestBody User resources) throws Exception {
|
public ResponseEntity<Object> modifyUserEmailByUsername(@PathVariable String code, @RequestBody SystemUserTb resources) throws Exception {
|
||||||
String password = RsaEncryptUtil.decryptByPrivateKey(properties.getRsa().getPrivateKey(), resources.getPassword());
|
String password = RsaEncryptUtil.decryptByPrivateKey(properties.getRsa().getPrivateKey(), resources.getPassword());
|
||||||
User user = systemUserApi.describeUserByUsername(SecurityHelper.getCurrentUsername());
|
SystemUserTb user = systemUserApi.describeUserByUsername(SecurityHelper.getCurrentUsername());
|
||||||
if (!passwordEncoder.matches(password, user.getPassword())) {
|
if (!passwordEncoder.matches(password, user.getPassword())) {
|
||||||
throw new BadRequestException("密码错误");
|
throw new BadRequestException("密码错误");
|
||||||
}
|
}
|
||||||
verificationCodeService.checkCodeAvailable(CaptchaBizEnum.EMAIL_RESET_EMAIL_CODE.getBizCode(), resources.getEmail(), code);
|
verificationCodeService.checkCodeAvailable(SystemCaptchaBizEnum.EMAIL_RESET_EMAIL_CODE.getBizCode(), resources.getEmail(), code);
|
||||||
systemUserService.modifyUserEmailByUsername(user.getUsername(), resources.getEmail());
|
systemUserService.modifyUserEmailByUsername(user.getUsername(), resources.getEmail());
|
||||||
return new ResponseEntity<>(HttpStatus.OK);
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
}
|
}
|
||||||
@@ -192,8 +180,8 @@ public class UserController {
|
|||||||
*
|
*
|
||||||
* @param resources /
|
* @param resources /
|
||||||
*/
|
*/
|
||||||
private void checkLevel(User resources) {
|
private void checkLevel(SystemUserTb resources) {
|
||||||
Integer currentLevel = Collections.min(systemRoleApi.describeRoleListByUsersId(SecurityHelper.getCurrentUserId()).stream().map(Role::getLevel).collect(Collectors.toList()));
|
Integer currentLevel = Collections.min(systemRoleApi.describeRoleListByUsersId(SecurityHelper.getCurrentUserId()).stream().map(SystemRoleTb::getLevel).collect(Collectors.toList()));
|
||||||
Integer optLevel = systemRoleApi.describeDeptLevelByRoles(resources.getRoles());
|
Integer optLevel = systemRoleApi.describeDeptLevelByRoles(resources.getRoles());
|
||||||
if (currentLevel > optLevel) {
|
if (currentLevel > optLevel) {
|
||||||
throw new BadRequestException("角色权限不足");
|
throw new BadRequestException("角色权限不足");
|
||||||
@@ -203,17 +191,17 @@ public class UserController {
|
|||||||
@ApiOperation("查询用户基础数据")
|
@ApiOperation("查询用户基础数据")
|
||||||
@PostMapping(value = "/describeUserMetadataOptions")
|
@PostMapping(value = "/describeUserMetadataOptions")
|
||||||
@PreAuthorize("@el.check('user:list')")
|
@PreAuthorize("@el.check('user:list')")
|
||||||
public ResponseEntity<List<MyMetaOption>> queryUserMetadataOptions(@Validated @RequestBody QueryUserRequest criteria) {
|
public ResponseEntity<List<CsSelectOptionItemVo>> queryUserMetadataOptions(@Validated @RequestBody QuerySystemUserArgs criteria) {
|
||||||
int maxPageSize = 50;
|
int maxPageSize = 50;
|
||||||
return new ResponseEntity<>(systemUserService.page(new Page<>(criteria.getPage(), maxPageSize), new LambdaQueryWrapper<User>()
|
return new ResponseEntity<>(systemUserService.page(new Page<>(criteria.getPage(), maxPageSize), new LambdaQueryWrapper<SystemUserTb>()
|
||||||
.and(c -> {
|
.and(c -> {
|
||||||
c.eq(User::getPhone, criteria.getBlurry());
|
c.eq(SystemUserTb::getPhone, criteria.getBlurry());
|
||||||
c.or();
|
c.or();
|
||||||
c.eq(User::getEmail, criteria.getBlurry());
|
c.eq(SystemUserTb::getEmail, criteria.getBlurry());
|
||||||
c.or();
|
c.or();
|
||||||
c.like(User::getUsername, criteria.getBlurry());
|
c.like(SystemUserTb::getUsername, criteria.getBlurry());
|
||||||
c.or();
|
c.or();
|
||||||
c.like(User::getNickName, criteria.getBlurry());
|
c.like(SystemUserTb::getNickName, criteria.getBlurry());
|
||||||
})
|
})
|
||||||
).getRecords().stream().map(m -> {
|
).getRecords().stream().map(m -> {
|
||||||
Map<String, Object> ext = new HashMap<>(1);
|
Map<String, Object> ext = new HashMap<>(1);
|
||||||
@@ -221,7 +209,7 @@ public class UserController {
|
|||||||
ext.put("deptId", m.getDeptId());
|
ext.put("deptId", m.getDeptId());
|
||||||
ext.put("email", m.getEmail());
|
ext.put("email", m.getEmail());
|
||||||
ext.put("phone", m.getPhone());
|
ext.put("phone", m.getPhone());
|
||||||
return MyMetaOption.builder()
|
return CsSelectOptionItemVo.builder()
|
||||||
.label(m.getNickName())
|
.label(m.getNickName())
|
||||||
.value(m.getUsername())
|
.value(m.getUsername())
|
||||||
.ext(ext)
|
.ext(ext)
|
||||||
+6
-5
@@ -1,6 +1,6 @@
|
|||||||
package cn.odboy.core.dal.dataobject.system;
|
package cn.odboy.core.dal.dataobject.system;
|
||||||
|
|
||||||
import cn.odboy.base.MyEntity;
|
import cn.odboy.base.CsBaseUserTimeTb;
|
||||||
import com.alibaba.fastjson2.annotation.JSONField;
|
import com.alibaba.fastjson2.annotation.JSONField;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
|
|||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -18,7 +19,7 @@ import java.util.Set;
|
|||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
@TableName("system_dept")
|
@TableName("system_dept")
|
||||||
public class Dept extends MyEntity {
|
public class SystemDeptTb extends CsBaseUserTimeTb {
|
||||||
|
|
||||||
@NotNull(groups = Update.class)
|
@NotNull(groups = Update.class)
|
||||||
@TableId(value = "dept_id", type = IdType.AUTO)
|
@TableId(value = "dept_id", type = IdType.AUTO)
|
||||||
@@ -28,11 +29,11 @@ public class Dept extends MyEntity {
|
|||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
@JSONField(serialize = false)
|
@JSONField(serialize = false)
|
||||||
@ApiModelProperty(value = "角色")
|
@ApiModelProperty(value = "角色")
|
||||||
private Set<Role> roles;
|
private Set<SystemRoleTb> roles;
|
||||||
|
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
@ApiModelProperty(value = "子部门")
|
@ApiModelProperty(value = "子部门")
|
||||||
private List<Dept> children;
|
private List<SystemDeptTb> children;
|
||||||
|
|
||||||
@ApiModelProperty(value = "排序")
|
@ApiModelProperty(value = "排序")
|
||||||
private Integer deptSort;
|
private Integer deptSort;
|
||||||
@@ -59,7 +60,7 @@ public class Dept extends MyEntity {
|
|||||||
if (o == null || getClass() != o.getClass()) {
|
if (o == null || getClass() != o.getClass()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Dept dept = (Dept) o;
|
SystemDeptTb dept = (SystemDeptTb) o;
|
||||||
return Objects.equals(id, dept.id) &&
|
return Objects.equals(id, dept.id) &&
|
||||||
Objects.equals(name, dept.name);
|
Objects.equals(name, dept.name);
|
||||||
}
|
}
|
||||||
+4
-3
@@ -1,6 +1,6 @@
|
|||||||
package cn.odboy.core.dal.dataobject.system;
|
package cn.odboy.core.dal.dataobject.system;
|
||||||
|
|
||||||
import cn.odboy.base.MyEntity;
|
import cn.odboy.base.CsBaseUserTimeTb;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
@@ -8,12 +8,13 @@ import com.baomidou.mybatisplus.annotation.TableName;
|
|||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
@TableName("system_dict_detail")
|
@TableName("system_dict_detail")
|
||||||
public class DictDetail extends MyEntity {
|
public class SystemDictDetailTb extends CsBaseUserTimeTb {
|
||||||
|
|
||||||
@NotNull(groups = Update.class)
|
@NotNull(groups = Update.class)
|
||||||
@ApiModelProperty(value = "ID", hidden = true)
|
@ApiModelProperty(value = "ID", hidden = true)
|
||||||
@@ -26,7 +27,7 @@ public class DictDetail extends MyEntity {
|
|||||||
|
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
@ApiModelProperty(value = "字典")
|
@ApiModelProperty(value = "字典")
|
||||||
private Dict dict;
|
private SystemDictTb dict;
|
||||||
|
|
||||||
@ApiModelProperty(value = "字典标签")
|
@ApiModelProperty(value = "字典标签")
|
||||||
private String label;
|
private String label;
|
||||||
+4
-7
@@ -1,14 +1,11 @@
|
|||||||
package cn.odboy.core.dal.dataobject.system;
|
package cn.odboy.core.dal.dataobject.system;
|
||||||
|
|
||||||
import cn.odboy.base.MyEntity;
|
import cn.odboy.base.CsBaseUserTimeTb;
|
||||||
import com.baomidou.mybatisplus.annotation.FieldStrategy;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
@@ -16,7 +13,7 @@ import javax.validation.constraints.NotNull;
|
|||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
@TableName("system_dict")
|
@TableName("system_dict")
|
||||||
public class Dict extends MyEntity {
|
public class SystemDictTb extends CsBaseUserTimeTb {
|
||||||
|
|
||||||
@NotNull(groups = Update.class)
|
@NotNull(groups = Update.class)
|
||||||
@ApiModelProperty(value = "ID", hidden = true)
|
@ApiModelProperty(value = "ID", hidden = true)
|
||||||
+5
-4
@@ -1,20 +1,21 @@
|
|||||||
package cn.odboy.core.dal.dataobject.tools;
|
package cn.odboy.core.dal.dataobject.system;
|
||||||
|
|
||||||
import cn.odboy.base.MyObject;
|
import cn.odboy.base.CsSerializeObject;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 邮件配置类,数据存覆盖式存入数据存
|
* 邮件配置类,数据存覆盖式存入数据存
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@TableName("tool_email_config")
|
@TableName("system_email_config")
|
||||||
@EqualsAndHashCode(callSuper = false)
|
@EqualsAndHashCode(callSuper = false)
|
||||||
public class EmailConfig extends MyObject {
|
public class SystemEmailConfigTb extends CsSerializeObject {
|
||||||
|
|
||||||
@TableId("config_id")
|
@TableId("config_id")
|
||||||
private Long id;
|
private Long id;
|
||||||
+4
-3
@@ -1,12 +1,13 @@
|
|||||||
package cn.odboy.core.dal.dataobject.system;
|
package cn.odboy.core.dal.dataobject.system;
|
||||||
|
|
||||||
import cn.odboy.base.MyEntity;
|
import cn.odboy.base.CsBaseUserTimeTb;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -15,7 +16,7 @@ import java.util.Objects;
|
|||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
@TableName("system_job")
|
@TableName("system_job")
|
||||||
public class Job extends MyEntity {
|
public class SystemJobTb extends CsBaseUserTimeTb {
|
||||||
|
|
||||||
@NotNull(groups = Update.class)
|
@NotNull(groups = Update.class)
|
||||||
@TableId(value = "id", type = IdType.AUTO)
|
@TableId(value = "id", type = IdType.AUTO)
|
||||||
@@ -42,7 +43,7 @@ public class Job extends MyEntity {
|
|||||||
if (o == null || getClass() != o.getClass()) {
|
if (o == null || getClass() != o.getClass()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Job job = (Job) o;
|
SystemJobTb job = (SystemJobTb) o;
|
||||||
return Objects.equals(id, job.id);
|
return Objects.equals(id, job.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user