This commit is contained in:
2025-06-20 18:58:09 +08:00
parent e9f4a9c3e2
commit f5781a7282
293 changed files with 3535 additions and 3637 deletions
+18
View File
@@ -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`结尾
#### 主要特性 #### 主要特性
- 使用最新技术栈,社区资源丰富。 - 使用最新技术栈,社区资源丰富。
+1 -1
View File
@@ -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;
/** /**
* 用于标记匿名访问方法 * 用于标记匿名访问方法
@@ -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
@@ -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
@@ -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
@@ -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)
@@ -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)
@@ -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")
@@ -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;
} }
@@ -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;
@@ -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;
}
@@ -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都加载完毕了");
@@ -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();
@@ -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;
/** /**
@@ -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
@@ -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;
/** /**
* 就绪检查 * 就绪检查
@@ -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;
@@ -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() {
@@ -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);
} }
} }
@@ -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();
} }
@@ -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));
} }
} }
@@ -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);
} }
} }
@@ -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 {
/** /**
* 替换字符串中的占位符 {} 为传入的参数 * 替换字符串中的占位符 {} 为传入的参数
* *
@@ -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;
@@ -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,7 +1,7 @@
package cn.odboy.websocket.constant; package cn.odboy.websocket.constant;
public enum WebSocketMessageBizTypeEnum { public enum CsWebSocketBizTypeEnum {
/** /**
* 连接 * 连接
*/ */
@@ -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对象。(分布式必出问题)
*/ */
@@ -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;
}
}
@@ -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) {
} }
@@ -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;
}
}
+2 -2
View File
@@ -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",
)); ));
@@ -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:带参跳转)
*/ */
+9 -3
View File
@@ -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);
}
@@ -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);
}
@@ -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);
}
@@ -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);
}
}
}
}
@@ -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();
}
}
@@ -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;
}
}
@@ -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();
}
}
@@ -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;
}
}
@@ -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();
}
}
@@ -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);
}
@@ -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;
} }
@@ -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;
} }
@@ -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("获取验证码")
@@ -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;
@@ -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);
} }
@@ -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);
} }
@@ -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);
} }
@@ -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);
} }
@@ -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);
} }
@@ -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);
} }
@@ -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);
} }
@@ -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;
@@ -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);
} }
@@ -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);
@@ -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);
@@ -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) {
@@ -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)
@@ -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);
} }
@@ -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;
@@ -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)
@@ -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;
@@ -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