From af486836918917f9b4824c2af685e1d7c5d077e6 Mon Sep 17 00:00:00 2001 From: zhuoda Date: Thu, 23 Sep 2021 20:46:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=B1=BB=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/common/constant/CommonConst.java | 286 ++++++++++++++---- .../constant/SystemEnvironmentEnum.java | 25 +- .../common/domain/SystemEnvironmentBO.java | 44 +++ .../BigDecimalNullZeroSerializer.java | 2 +- .../FileKeySerializer.java | 2 +- .../FileKeyVoSerializer.java | 2 +- .../serializer/LongJsonDeserializer.java | 21 ++ .../common/serializer/LongJsonSerializer.java | 19 ++ .../swagger/Swagger2MapperImplExtension.java | 88 ++++++ ...=> SwaggerApiModelPropertyEnumPlugin.java} | 2 +- .../validator/BigDecimalSymbolEnum.java | 40 --- .../common/validator/BigDecimalValidator.java | 73 ----- .../common/validator/CheckBigDecimal.java | 53 ---- .../common/validator/{ => en}/CheckEnum.java | 7 +- .../EnumValidator.java} | 8 +- .../validator/{ => list}/ValidateList.java | 2 +- .../service/config/AdminWebAppConfig.java | 34 +++ ...SmartAsyncConfig.java => AsyncConfig.java} | 16 +- ...heConfig.java => CaffeineCacheConfig.java} | 24 +- ...ourceConfig.java => DataSourceConfig.java} | 64 ++-- .../smartadmin/service/config/DateConfig.java | 117 +++++++ .../service/config/KaptchaConfig.java | 156 ++++++++++ ...PlusConfig.java => MybatisPlusConfig.java} | 10 +- ...SmartRedisConfig.java => RedisConfig.java} | 5 +- ...ateConfig.java => RestTemplateConfig.java} | 25 +- ...edulingConfig.java => ScheduleConfig.java} | 18 +- .../service/config/SecurityConfig.java | 4 +- .../service/config/SecurityMethodConfig.java | 2 +- .../service/config/SecurityUrlConfig.java | 2 +- .../service/config/SmartCaptchaConfig.java | 51 ---- .../SmartConverterStringToLocalDate.java | 34 --- .../SmartConverterStringToLocalDateTime.java | 37 --- .../service/config/SmartHeartBeatConfig.java | 40 --- .../service/config/SmartRedisMqConfig.java | 68 ----- .../config/SmartRepeatSubmitAspectConfig.java | 43 --- .../SmartResponseEncryptAspectConfig.java | 45 --- .../SmartSerializerLocalDateTimeConfig.java | 31 -- .../config/SmartStorageCloudConfig.java | 64 ---- .../service/config/SmartWebAppConfig.java | 31 -- ...micGroupConfig.java => SwaggerConfig.java} | 148 ++++++--- ...tion.java => SystemEnvironmentConfig.java} | 18 +- .../service/constant/SwaggerTagConst.java | 55 ++++ .../category/domain/CategoryBaseDTO.java | 3 +- .../category/domain/CategoryTreeQueryDTO.java | 2 - .../business/goods/domain/GoodsBaseDTO.java | 4 +- .../business/goods/domain/GoodsQueryDTO.java | 2 - .../domain/DataTracerQueryForm.java | 2 - .../support/file/domain/dto/FileQueryDTO.java | 2 - .../file/domain/dto/FileUrlUploadDTO.java | 2 - .../service/FileStorageCloudServiceImpl.java | 1 - .../employee/domain/dto/EmployeeAddDTO.java | 2 - .../system/menu/domain/MenuBasicDTO.java | 2 - .../src/router/index.ts | 1 - 53 files changed, 976 insertions(+), 863 deletions(-) create mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/domain/SystemEnvironmentBO.java rename admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/{json => serializer}/BigDecimalNullZeroSerializer.java (92%) rename admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/{json => serializer}/FileKeySerializer.java (95%) rename admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/{json => serializer}/FileKeyVoSerializer.java (95%) create mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/serializer/LongJsonDeserializer.java create mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/serializer/LongJsonSerializer.java create mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/swagger/Swagger2MapperImplExtension.java rename admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/swagger/{ApiModelPropertyEnumPlugin.java => SwaggerApiModelPropertyEnumPlugin.java} (97%) delete mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/BigDecimalSymbolEnum.java delete mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/BigDecimalValidator.java delete mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/CheckBigDecimal.java rename admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/{ => en}/CheckEnum.java (84%) rename admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/{CheckEnumValidator.java => en/EnumValidator.java} (90%) rename admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/{ => list}/ValidateList.java (97%) create mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/AdminWebAppConfig.java rename admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/{SmartAsyncConfig.java => AsyncConfig.java} (80%) rename admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/{SmartCacheConfig.java => CaffeineCacheConfig.java} (70%) rename admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/{SmartDruidDataSourceConfig.java => DataSourceConfig.java} (82%) create mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/DateConfig.java create mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/KaptchaConfig.java rename admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/{SmartMybatisPlusConfig.java => MybatisPlusConfig.java} (88%) rename admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/{SmartRedisConfig.java => RedisConfig.java} (97%) rename admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/{SmartRestTemplateConfig.java => RestTemplateConfig.java} (85%) rename admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/{SmartSchedulingConfig.java => ScheduleConfig.java} (84%) delete mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartCaptchaConfig.java delete mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartConverterStringToLocalDate.java delete mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartConverterStringToLocalDateTime.java delete mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartHeartBeatConfig.java delete mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartRedisMqConfig.java delete mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartRepeatSubmitAspectConfig.java delete mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartResponseEncryptAspectConfig.java delete mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartSerializerLocalDateTimeConfig.java delete mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartStorageCloudConfig.java delete mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartWebAppConfig.java rename admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/{SmartSwaggerDynamicGroupConfig.java => SwaggerConfig.java} (57%) rename admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/{SmartSystemEnvNotProdCondition.java => SystemEnvironmentConfig.java} (59%) create mode 100644 admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/constant/SwaggerTagConst.java diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/constant/CommonConst.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/constant/CommonConst.java index 3c496370..ce4439ea 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/constant/CommonConst.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/constant/CommonConst.java @@ -1,25 +1,36 @@ package net.lab1024.smartadmin.service.common.constant; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Interner; +import com.google.common.collect.Interners; import org.springframework.util.CollectionUtils; +import java.math.BigDecimal; import java.util.*; /** - * [ ] + * [ 通用常量 ] * - * @author 罗伊 - * @date 2020/9/14 15:48 + * @author zhuoda */ public class CommonConst { + public static final int ZERO = 0; + + public static final long ONE = 1; + /** * 全局通用分隔符 */ public static final String SEPARATOR = ","; /** - * 全局通用分隔符 逗号 + * 全局通用分隔符 下划线 + */ + public static final String UNDERLINE = "_"; + + /** + * 全局通用分隔符 */ public static final Character SEPARATOR_CHAR = ','; @@ -28,88 +39,42 @@ public class CommonConst { */ public static final String SEPARATOR_SLASH = "/"; - /** - * 全局通用分隔符 下划线 - */ - public static final String UNDERLINE = "_"; - /** * 空字符串 */ public static final String EMPTY_STR = ""; /** - * 空 MaP - * 注意:放入元素会抛异常 + * 空MaP */ public static final Map EMPTY_MAP = Collections.unmodifiableMap(new HashMap<>(0)); /** * 空 list - * 注意:放入元素会抛异常 */ public static final List EMPTY_LIST = Collections.unmodifiableList(new ArrayList<>(0)); /** - * 空字符串 + * 全局通用 默认id */ - public static final long DEFAULT_PARENT_ID = 0L; + public static final long DEFAULT_ID = 0L; /** - * 空字符串 + * 100 常量 */ - public static final int ZERO = 0; - - - public static final class Token { - - public static final String DEFAULT_TOKEN = "default-token-"; - - public static final String INNER_TOKEN_NAME = "inner-token"; - - public static final String OUTER_TOKEN_NAME = "x-access-token"; - - } - - public static final class FileFolderConst { - - /** - * 公用读取文件夹 public - */ - public static final String FOLDER_PUBLIC = "pu"; - - /** - * 私有读取文件夹 private - */ - public static final String FOLDER_PRIVATE = "pr"; - - /** - * 文件夹格式 - */ - public static final String FOLDER_FORMAT = "folder"; - - } - - public static final class System { - /** - * oss url redis 过期时间 - */ - public static final int FILE_URL_EXPIRE_SECOND = 3600; - - public static final int FILE_VO_EXPIRE_SECOND = 86400; - - } + public static final Integer ONE_HUNDRED = 100; /** - * 长度类常量 + * 100 常量 */ - public static final class NumberLimit { - /** - * 文件名称长度 - */ - public static final int FILE_NAME = 100; + public static final BigDecimal ONE_HUNDRED_DECIMAL = new BigDecimal(100); - } + /** + * 全局通用 默认父级id 最顶级 + */ + public static final Long DEFAULT_PARENT_ID = 0L; + + public static final Interner STRING_POOL = Interners.newWeakInterner(); public static final class ApiUrl { /** @@ -122,18 +87,112 @@ public class CommonConst { */ public static final String API_PREFIX_ADMIN = "/admin"; + /** + * app 业务 api 前缀 + */ + public static final String API_PREFIX_APP = "/app"; + + /** + * PC 业务 api 前缀 + */ + public static final String API_PREFIX_PC = "/pc"; + + /** + * 开放平台 api 前缀 + */ + public static final String API_PREFIX_OPEN = "/open"; + + } + + public static final String IGNORE_H5_URL_MAPPING = "/h5/api"; + + public static final class FileServiceConst { + + /** + * 公用读取文件夹 public + */ + public static final String FOLDER_PUBLIC = "xmf-crm/pu"; + + /** + * 私有读取文件夹 private + */ + public static final String FOLDER_PRIVATE = "xmf-crm/pr"; + + /** + * 文件夹格式 + */ + public static final String FOLDER_FORMAT = "folder"; + } + + public static final class System { + + /** + * oss url redis 过期时间 + */ + public static final int FILE_URL_EXPIRE_SECOND = 7100; + + public static final int FILE_VO_EXPIRE_SECOND = 86400; + + /** + * 系统 id + */ + public static final Long SYSTEM_ID = 0L; + + /** + * 系统 名称 + */ + public static final String SYSTEM_NAME = "小蜜蜂CRM系统"; + } + + /** + * 长度类常量 + */ + public static final class NumberLimit { + + /** + * 用户昵称 + */ + public static final int USER_NICKNAME = 15; + + /** + * 短信验证码长度 + */ + public static final int SMS_CODE = 6; + + /** + * 短信发送间隔 秒 + */ + public static final int SMS_SEND_INTERVAL = 60; + + /** + * 短信有效期 秒 + */ + public static final int SMS_VALID_SECOND = 300; + + /** + * 验证码短信 每天的限制 + */ + public static final int SMS_DAY_LIMIT = 10; + + /** + * 文件名称长度 + */ + public static final int FILE_NAME = 100; + } public static final class Password { public static final String DEFAULT = "123456"; - public static final String SALT_FORMAT = "smart_%s_admin"; + public static final String SALT_FORMAT = "xiaomifeng_%s_crm"; } public static final class CommonCollection { - public static final Set IGNORE_URL = ImmutableSet.of("/swagger", "Excel", "/h5/api"); + public static final Set IGNORE_URL = ImmutableSet.of("/swagger", "Excel"); + + public static final Set IGNORE_URL_MAPPING = ImmutableSet.of(IGNORE_H5_URL_MAPPING); public static Boolean contain(Set ignores, String uri) { if (CollectionUtils.isEmpty(ignores)) { @@ -147,4 +206,101 @@ public class CommonConst { return false; } } + + /** + * 用户类型 + */ + public static class UserType { + + /** + * 用户 + */ + public static final Integer USER = 1; + + /** + * 管理端 + */ + public static final Integer ADMIN = 3; + + /** + * 系统 + */ + public static final Integer SYSTEM = 4; + + /** + * 游客 + */ + public static final Integer NO_LOGIN = 5; + } + + /** + * 请求头常量 + */ + public static class RequestHeader { + + public static final String TOKEN = "x-access-token"; + + public static final String USER_AGENT = "user-agent"; + + /** + * 用户唯一标识 + */ + public static final String USER_IDENTITY = "user-identity"; + + /** + * 经纬度 + */ + public static final String USER_GEO = "user-geo"; + + /** + * 位置 + */ + public static final String USER_LOCATION = "user-location"; + + } + + /** + * 系统类型 + */ + public static class SystemType { + + public static final int XMF_CRM = 100; + + public static final int REN_MIN = 200; + + public static final int ZHI_KAO = 300; + + public static final int XIAO_YING_YI = 400; + + } + + /** + * 支付方式 + */ + public static class PayType { + + public static final int WX = 10; + + public static final int ZFB = 15; + + /** + * 20 线下支付 + */ + public static final int OFFLINE = 20; + + /** + * 21 银行卡 + */ + public static final int BANK = 21; + + } + + public static final class Token { + + public static final String DEFAULT_TOKEN = "default-token-id-"; + + public static final String INNER_TOKEN_NAME = "inner-token"; + + public static final String OUTER_TOKEN_NAME = "x-access-token"; + } } diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/constant/SystemEnvironmentEnum.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/constant/SystemEnvironmentEnum.java index 7e994fec..448a0f37 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/constant/SystemEnvironmentEnum.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/constant/SystemEnvironmentEnum.java @@ -1,41 +1,41 @@ package net.lab1024.smartadmin.service.common.constant; + /** * 系统环境枚举类 * - * @author listen - * @date 2019年4月11日 17:34:59 + * @author zhuoda */ public enum SystemEnvironmentEnum implements BaseEnum { - /** * dev */ - DEV("dev", "开发环境"), + DEV(SystemEnvironmentNameConst.DEV, "开发环境"), /** * sit */ - SIT("sit", "测试环境"), + SIT(SystemEnvironmentNameConst.SIT, "测试环境"), /** * pre */ - PRE("pre", "预发布环境"), + PRE(SystemEnvironmentNameConst.PRE, "预发布环境"), /** * prod */ - PROD("prod", "生产环境"); + PROD(SystemEnvironmentNameConst.PROD, "生产环境"); - private final String value; + private String value; - private final String desc; + private String desc; SystemEnvironmentEnum(String value, String desc) { this.value = value; this.desc = desc; } + /** * 获取定义枚举value值 * @@ -56,4 +56,11 @@ public enum SystemEnvironmentEnum implements BaseEnum { return desc; } + public static final class SystemEnvironmentNameConst { + public static final String DEV = "dev"; + public static final String SIT = "sit"; + public static final String PRE = "pre"; + public static final String PROD = "prod"; + } + } diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/domain/SystemEnvironmentBO.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/domain/SystemEnvironmentBO.java new file mode 100644 index 00000000..d746523c --- /dev/null +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/domain/SystemEnvironmentBO.java @@ -0,0 +1,44 @@ +package net.lab1024.smartadmin.service.common.domain; + + +import net.lab1024.smartadmin.service.common.constant.SystemEnvironmentEnum; + +/** + * + * 系统环境 + * + * @author zhuoda + * @Date 2021/8/13 + */ +public class SystemEnvironmentBO { + + /** + * 是否位生产环境 + */ + private boolean isProd; + + /** + * 当前环境 + */ + private SystemEnvironmentEnum currentEnvironment; + + public SystemEnvironmentBO(boolean isProd, SystemEnvironmentEnum currentEnvironment) { + this.isProd = isProd; + this.currentEnvironment = currentEnvironment; + } + + /** + * @return + */ + public boolean isProd() { + return isProd; + } + + /** + * 当前环境 + * @return + */ + public SystemEnvironmentEnum getCurrentEnvironment() { + return currentEnvironment; + } +} diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/json/BigDecimalNullZeroSerializer.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/serializer/BigDecimalNullZeroSerializer.java similarity index 92% rename from admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/json/BigDecimalNullZeroSerializer.java rename to admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/serializer/BigDecimalNullZeroSerializer.java index 532c45b5..874b9db2 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/json/BigDecimalNullZeroSerializer.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/serializer/BigDecimalNullZeroSerializer.java @@ -1,4 +1,4 @@ -package net.lab1024.smartadmin.service.common.json; +package net.lab1024.smartadmin.service.common.serializer; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/json/FileKeySerializer.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/serializer/FileKeySerializer.java similarity index 95% rename from admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/json/FileKeySerializer.java rename to admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/serializer/FileKeySerializer.java index 557d2487..1446d207 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/json/FileKeySerializer.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/serializer/FileKeySerializer.java @@ -1,4 +1,4 @@ -package net.lab1024.smartadmin.service.common.json; +package net.lab1024.smartadmin.service.common.serializer; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/json/FileKeyVoSerializer.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/serializer/FileKeyVoSerializer.java similarity index 95% rename from admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/json/FileKeyVoSerializer.java rename to admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/serializer/FileKeyVoSerializer.java index a0af56bf..86426ea9 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/json/FileKeyVoSerializer.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/serializer/FileKeyVoSerializer.java @@ -1,4 +1,4 @@ -package net.lab1024.smartadmin.service.common.json; +package net.lab1024.smartadmin.service.common.serializer; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/serializer/LongJsonDeserializer.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/serializer/LongJsonDeserializer.java new file mode 100644 index 00000000..4c3a5388 --- /dev/null +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/serializer/LongJsonDeserializer.java @@ -0,0 +1,21 @@ +package net.lab1024.smartadmin.service.common.serializer; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; + +import java.io.IOException; + +public class LongJsonDeserializer extends JsonDeserializer { + + @Override + public Long deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException { + String value = jsonParser.getText(); + try { + return value == null ? null : Long.parseLong(value); + } catch (NumberFormatException e) { + return null; + } + } +} \ No newline at end of file diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/serializer/LongJsonSerializer.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/serializer/LongJsonSerializer.java new file mode 100644 index 00000000..70cf72bf --- /dev/null +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/serializer/LongJsonSerializer.java @@ -0,0 +1,19 @@ +package net.lab1024.smartadmin.service.common.serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; + +public class LongJsonSerializer extends JsonSerializer { + + @Override + public void serialize(Long value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { + String text = (value == null ? null : String.valueOf(value)); + if (text != null) { + jsonGenerator.writeString(text); + } + } +} \ No newline at end of file diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/swagger/Swagger2MapperImplExtension.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/swagger/Swagger2MapperImplExtension.java new file mode 100644 index 00000000..2fc932c2 --- /dev/null +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/swagger/Swagger2MapperImplExtension.java @@ -0,0 +1,88 @@ +package net.lab1024.smartadmin.service.common.swagger; + +import com.google.common.collect.LinkedListMultimap; +import com.google.common.collect.Multimap; +import io.swagger.models.Operation; +import io.swagger.models.Path; +import net.lab1024.smartadmin.service.config.SystemEnvironmentConfig; +import org.springframework.context.annotation.Conditional; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; +import springfox.documentation.service.ApiDescription; +import springfox.documentation.service.ApiListing; +import springfox.documentation.swagger2.mappers.ServiceModelToSwagger2MapperImpl; + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.*; + +import static springfox.documentation.builders.BuilderDefaults.nullToEmptyList; + +/** + * 修改 api 顺序 + * + * @author Turbolisten + * @date 2021/8/11 16:05 + */ +@Conditional(SystemEnvironmentConfig.class) +@Component +@Primary +public class Swagger2MapperImplExtension extends ServiceModelToSwagger2MapperImpl { + + @Override + protected Map mapApiListings(Multimap apiListings) { + Map paths = new LinkedHashMap<>(); + Multimap apiListingMap = LinkedListMultimap.create(); + Iterator iter = apiListings.entries().iterator(); + while (iter.hasNext()) { + Map.Entry entry = (Map.Entry) iter.next(); + ApiListing apis = entry.getValue(); + List apiList = apis.getApis(); + apiList.sort((left, right) -> { + int position1 = left.getOperations().get(0).getPosition(); + int position2 = right.getOperations().get(0).getPosition(); + if (position1 == position2) { + return String.CASE_INSENSITIVE_ORDER.compare(left.getPath(), right.getPath()); + } + return Integer.compare(position1, position2); + }); + try { + // 因ApiListing的属性都是final故需要通过反射来修改值 + modify(apis, "apis", apiList); + } catch (Exception e) { + e.printStackTrace(); + } + apiListingMap.put(entry.getKey(), apis); + } + + for (ApiListing each : apiListingMap.values()) { + for (ApiDescription api : each.getApis()) { + paths.put(api.getPath(), mapOperations(api, Optional.ofNullable(paths.get(api.getPath())))); + } + } + return paths; + } + + private Path mapOperations(ApiDescription api, Optional existingPath) { + Path path = existingPath.orElse(new Path()); + for (springfox.documentation.service.Operation each : nullToEmptyList(api.getOperations())) { + Operation operation = mapOperation(each); + path.set(each.getMethod().toString().toLowerCase(), operation); + } + return path; + } + + public static void modify(Object object, String fieldName, Object newFieldValue) throws Exception { + Field field = object.getClass().getDeclaredField(fieldName); + + Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setAccessible(true); + modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); + + if (!field.isAccessible()) { + field.setAccessible(true); + } + + field.set(object, newFieldValue); + } +} diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/swagger/ApiModelPropertyEnumPlugin.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/swagger/SwaggerApiModelPropertyEnumPlugin.java similarity index 97% rename from admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/swagger/ApiModelPropertyEnumPlugin.java rename to admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/swagger/SwaggerApiModelPropertyEnumPlugin.java index f4a8af4b..afc5e670 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/swagger/ApiModelPropertyEnumPlugin.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/swagger/SwaggerApiModelPropertyEnumPlugin.java @@ -25,7 +25,7 @@ import static springfox.documentation.schema.Annotations.findPropertyAnnotation; */ @Component @Order(SwaggerPluginSupport.SWAGGER_PLUGIN_ORDER + 1) -public class ApiModelPropertyEnumPlugin implements ModelPropertyBuilderPlugin { +public class SwaggerApiModelPropertyEnumPlugin implements ModelPropertyBuilderPlugin { @Override public void apply(ModelPropertyContext context) { diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/BigDecimalSymbolEnum.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/BigDecimalSymbolEnum.java deleted file mode 100644 index 2adcb648..00000000 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/BigDecimalSymbolEnum.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.lab1024.smartadmin.service.common.validator; - -/** - * 比较符枚举类 - * - * @author listen - * @date 2018/03/20 14:01 - */ -public enum BigDecimalSymbolEnum { - - /** - * 等于 - */ - EQUAL, - - /** - * 不等于 - */ - NOT_EQUAL, - - /** - * 小于 - */ - LESS_THAN, - - /** - * 小于等于 - */ - LESS_THAN_OR_EQUAL, - - /** - * 大于 - */ - GREATER_THAN, - - /** - * 大于等于 - */ - GREATER_THAN_OR_EQUAL, -} diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/BigDecimalValidator.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/BigDecimalValidator.java deleted file mode 100644 index 507c7436..00000000 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/BigDecimalValidator.java +++ /dev/null @@ -1,73 +0,0 @@ -package net.lab1024.smartadmin.service.common.validator; - -import net.lab1024.smartadmin.service.util.SmartBigDecimalUtil; - -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; -import java.math.BigDecimal; - -/** - * BigDecimal 类校验器 - * - * @author listen - * @date 2018年3月20日 13:51:46 - */ -public class BigDecimalValidator implements ConstraintValidator { - - /** - * 获取定义的数值 - */ - private BigDecimal value; - - /** - * 获取比较符 - */ - private BigDecimalSymbolEnum symbolEnum; - - /** - * 是否必须 - */ - private boolean required; - - @Override - public void initialize(CheckBigDecimal constraintAnnotation) { - // 初始化属性 - value = new BigDecimal(constraintAnnotation.value()); - symbolEnum = constraintAnnotation.symbolEnum(); - required = constraintAnnotation.required(); - } - - @Override - public boolean isValid(BigDecimal decimal, ConstraintValidatorContext constraintValidatorContext) { - - // 如果数值为空,校验是否必须 - if (null == decimal) { - return ! required; - } - - // 根据操作符,校验结果 - switch (symbolEnum) { - // 等于 - case EQUAL: - return SmartBigDecimalUtil.equals(decimal, value); - // 不等于 - case NOT_EQUAL: - return ! SmartBigDecimalUtil.equals(decimal, value); - // 小于 - case LESS_THAN: - return SmartBigDecimalUtil.isLessThan(decimal, value); - // 小于等于 - case LESS_THAN_OR_EQUAL: - return SmartBigDecimalUtil.isLessThan(decimal, value) || SmartBigDecimalUtil.equals(decimal, value); - // 大于 - case GREATER_THAN: - return SmartBigDecimalUtil.isGreaterThan(decimal, value); - // 大于等于 - case GREATER_THAN_OR_EQUAL: - return SmartBigDecimalUtil.isGreaterThan(decimal, value) || SmartBigDecimalUtil.equals(decimal, value); - default: - } - - return false; - } -} diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/CheckBigDecimal.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/CheckBigDecimal.java deleted file mode 100644 index 717377b1..00000000 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/CheckBigDecimal.java +++ /dev/null @@ -1,53 +0,0 @@ -package net.lab1024.smartadmin.service.common.validator; - -import javax.validation.Constraint; -import javax.validation.Payload; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * 自定义的属性校验注解 - * - * @author listen - * @date 2018年3月20日 13:53:33 - */ -@Target(ElementType.FIELD) -@Retention(RetentionPolicy.RUNTIME) -@Constraint(validatedBy = BigDecimalValidator.class)// 自定义验证的处理类 -public @interface CheckBigDecimal { - - /** - * 与这个数值校验 - * - * @return - */ - String value(); - - /** - * 比较符 请使用 ComparisonSymbolEnum 枚举类 - * - * @return - */ - BigDecimalSymbolEnum symbolEnum(); - - /** - * 默认的错误提示信息 - * - * @return String - */ - String message() default "非法的数值"; - - /** - * 是否必须 : 默认 true - * - * @return boolean - */ - boolean required() default true; - - //下面这两个属性必须添加 :不然会报错 - Class[] groups() default {}; - - Class[] payload() default {}; -} diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/CheckEnum.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/en/CheckEnum.java similarity index 84% rename from admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/CheckEnum.java rename to admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/en/CheckEnum.java index 0af156b7..e35e7757 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/CheckEnum.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/en/CheckEnum.java @@ -1,4 +1,5 @@ -package net.lab1024.smartadmin.service.common.validator; +package net.lab1024.smartadmin.service.common.validator.en; + import net.lab1024.smartadmin.service.common.constant.BaseEnum; @@ -18,7 +19,7 @@ import java.lang.annotation.Target; */ @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) -@Constraint(validatedBy = CheckEnumValidator.class)// 自定义验证的处理类 +@Constraint(validatedBy = EnumValidator.class)// 自定义验证的处理类 public @interface CheckEnum { /** @@ -33,7 +34,7 @@ public @interface CheckEnum { * * @return */ - Class enumClazz(); + Class value(); /** * 是否必须 diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/CheckEnumValidator.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/en/EnumValidator.java similarity index 90% rename from admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/CheckEnumValidator.java rename to admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/en/EnumValidator.java index fbebc2a5..ce1f948b 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/CheckEnumValidator.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/en/EnumValidator.java @@ -1,4 +1,5 @@ -package net.lab1024.smartadmin.service.common.validator; +package net.lab1024.smartadmin.service.common.validator.en; + import net.lab1024.smartadmin.service.common.constant.BaseEnum; @@ -13,9 +14,8 @@ import java.util.stream.Stream; * * @author listen * @date 2017/11/11 15:34 - * @update 2021年1月20日 15:32:16 */ -public class CheckEnumValidator implements ConstraintValidator { +public class EnumValidator implements ConstraintValidator { /** * 枚举类实例集合 @@ -31,7 +31,7 @@ public class CheckEnumValidator implements ConstraintValidator enumClass = constraintAnnotation.enumClazz(); + Class enumClass = constraintAnnotation.value(); enumValList = Stream.of(enumClass.getEnumConstants()).map(BaseEnum::getValue).collect(Collectors.toList()); } diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/ValidateList.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/list/ValidateList.java similarity index 97% rename from admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/ValidateList.java rename to admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/list/ValidateList.java index c4b82873..8118144e 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/ValidateList.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/common/validator/list/ValidateList.java @@ -1,4 +1,4 @@ -package net.lab1024.smartadmin.service.common.validator; +package net.lab1024.smartadmin.service.common.validator.list; import javax.validation.Valid; import javax.validation.constraints.NotEmpty; diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/AdminWebAppConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/AdminWebAppConfig.java new file mode 100644 index 00000000..3c6115d9 --- /dev/null +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/AdminWebAppConfig.java @@ -0,0 +1,34 @@ +package net.lab1024.smartadmin.service.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.util.Map; + +/** + * @Description + * @Author zhuoda + */ +@Configuration +public class AdminWebAppConfig implements WebMvcConfigurer { + + @Autowired + private Map interceptorMap; + + @Override + public void addInterceptors(InterceptorRegistry registry) { + for(Map.Entry entry : interceptorMap.entrySet()){ + registry.addInterceptor(entry.getValue()).addPathPatterns(entry.getKey() + "/**"); + } + } + + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/druidMonitor").setViewName("redirect:druid/index.html"); + registry.addViewController("/swaggerApi").setViewName("redirect:swagger-ui.html"); + } +} diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartAsyncConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/AsyncConfig.java similarity index 80% rename from admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartAsyncConfig.java rename to admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/AsyncConfig.java index 3c52c056..fe8bf3ea 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartAsyncConfig.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/AsyncConfig.java @@ -14,31 +14,31 @@ import java.util.Arrays; /** * 异步调用线程配置 * - * @author 胡克 - * @date 2019/12/26 11:54 + * @author zhuoda */ @Slf4j @Configuration -public class SmartAsyncConfig { +public class AsyncConfig { /** * 线程池 配置bean名称 */ - public static final String ASYNC_EXECUTOR = "asyncExecutor"; + public static final String ASYNC_EXECUTOR_THREAD_NAME = "smart-admin-async-executor"; /** * 配置线程池 * * @return */ - @Bean(name = ASYNC_EXECUTOR) + @Bean(name = ASYNC_EXECUTOR_THREAD_NAME) public AsyncTaskExecutor executor() { + int processors = Runtime.getRuntime().availableProcessors(); ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); // 核心线程数量 - taskExecutor.setCorePoolSize(Runtime.getRuntime().availableProcessors()); + taskExecutor.setCorePoolSize(processors); // 最大线程数量 - taskExecutor.setMaxPoolSize(Runtime.getRuntime().availableProcessors()); - taskExecutor.setThreadNamePrefix(ASYNC_EXECUTOR); + taskExecutor.setMaxPoolSize(processors); + taskExecutor.setThreadNamePrefix(ASYNC_EXECUTOR_THREAD_NAME); taskExecutor.initialize(); return taskExecutor; } diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartCacheConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/CaffeineCacheConfig.java similarity index 70% rename from admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartCacheConfig.java rename to admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/CaffeineCacheConfig.java index 0a63ced3..04ae42f8 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartCacheConfig.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/CaffeineCacheConfig.java @@ -1,36 +1,23 @@ package net.lab1024.smartadmin.service.config; import com.github.benmanes.caffeine.cache.LoadingCache; -import com.google.common.collect.Maps; import net.lab1024.smartadmin.service.module.support.beancache.cache.AbstractCaffeineCache; import net.lab1024.smartadmin.service.module.support.beancache.cache.AbstractDisableCache; import net.lab1024.smartadmin.service.module.support.beancache.cache.IBeanCache; import net.lab1024.smartadmin.service.module.support.beancache.domain.CacheData; -import net.lab1024.smartadmin.service.module.support.beancache.load.CacheLoad; -import net.lab1024.smartadmin.service.module.support.beancache.load.CacheLoadMethod; -import org.reflections.Reflections; -import org.reflections.scanners.MethodAnnotationsScanner; -import org.reflections.util.ConfigurationBuilder; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; -import java.lang.reflect.Method; -import java.util.Map; -import java.util.Set; - /** * [ ] * - * @author 罗伊 - * @date 2020/9/6 16:01 + * @author zhuoda */ @Configuration -public class SmartCacheConfig { - +public class CaffeineCacheConfig { @Value("${cache.maximumSize:5000}") private Integer cacheMaximumSize; @@ -44,7 +31,8 @@ public class SmartCacheConfig { @Primary public IBeanCache beanCache() { return new AbstractCaffeineCache() { - LoadingCache cache = this.initCache(cacheMaximumSize,expireDays, scanPath); + LoadingCache cache = this.initCache(cacheMaximumSize, expireDays, scanPath); + @Override public LoadingCache getCache() { return cache; @@ -57,7 +45,5 @@ public class SmartCacheConfig { public IBeanCache beanDisableCache() { return new AbstractDisableCache(scanPath); } - - - } + diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartDruidDataSourceConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/DataSourceConfig.java similarity index 82% rename from admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartDruidDataSourceConfig.java rename to admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/DataSourceConfig.java index c476a87b..874b372e 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartDruidDataSourceConfig.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/DataSourceConfig.java @@ -10,13 +10,13 @@ import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; import lombok.extern.slf4j.Slf4j; +import net.lab1024.smartadmin.service.module.system.datascope.MyBatisPlugin; import org.apache.ibatis.plugin.Interceptor; import org.apache.ibatis.session.SqlSessionFactory; import org.springframework.aop.support.DefaultPointcutAdvisor; import org.springframework.aop.support.JdkRegexpMethodPointcut; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; @@ -33,59 +33,55 @@ import java.util.HashMap; import java.util.Map; /** - * [ ] + * [ 数据源配置 ] * - * @author 罗伊 - * @date 2020/8/25 11:57 + * @author zhuoda */ @Slf4j @Configuration -public class SmartDruidDataSourceConfig { +public class DataSourceConfig { @Value("${spring.datasource.driver-class-name}") - private String driver; + String driver; @Value("${spring.datasource.url}") - private String url; + String url; @Value("${spring.datasource.username}") - private String username; + String username; @Value("${spring.datasource.password}") - private String password; + String password; @Value("${spring.datasource.initial-size}") - private int initialSize; + int initialSize; @Value("${spring.datasource.min-idle}") - private int minIdle; + int minIdle; @Value("${spring.datasource.max-active}") - private int maxActive; + int maxActive; @Value("${spring.datasource.max-wait}") - private long maxWait; + long maxWait; @Value("${spring.datasource.time-between-eviction-runs-millis}") - private long timeBetweenEvictionRunsMillis; + long timeBetweenEvictionRunsMillis; @Value("${spring.datasource.min-evictable-idle-time-millis}") - private long minEvictableIdleTimeMillis; + long minEvictableIdleTimeMillis; @Value("${spring.datasource.filters}") - private String filters; + String filters; @Value("${spring.datasource.druid.username}") - private String druidUserName; + String druidUserName; @Value("${spring.datasource.druid.password}") - private String druidPassword; + String druidPassword; @Value("${spring.datasource.druid.login.enabled}") - private boolean druidLoginEnable; - - @Value("${spring.datasource.druid.service.scanner}") - private String serviceScanner; + boolean druidLoginEnable; @Autowired private StatFilter logSlowSql; @@ -94,7 +90,10 @@ public class SmartDruidDataSourceConfig { private DruidStatInterceptor druidStatInterceptor; @Autowired - private MybatisPlusInterceptor mybatisPlusInterceptor; + private MybatisPlusInterceptor paginationInterceptor; + + @Autowired + private MyBatisPlugin myBatisPlugin; @Bean @Primary @@ -130,29 +129,29 @@ public class SmartDruidDataSourceConfig { MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean(); factoryBean.setDataSource(druidDataSource()); PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); - Resource[] resources = resolver.getResources("classpath*:/mapper/**/*.xml"); + Resource[] resources = resolver.getResources("classpath:/mapper/**/*.xml"); factoryBean.setMapperLocations(resources); - // 设置 MyBatis-Plus 分页插件 - Interceptor[] plugins = {mybatisPlusInterceptor}; + // 设置 MyBatis-Plus 分页插件 注意此处myBatisPlugin一定要放在后面 + Interceptor[] plugins = {paginationInterceptor,myBatisPlugin}; factoryBean.setPlugins(plugins); return factoryBean.getObject(); } /** - * 非正式环境 加载 + * 非正式环境 才加载 * * @return */ + @Conditional(SystemEnvironmentConfig.class) @Bean - @Conditional(SmartSystemEnvNotProdCondition.class) public ServletRegistrationBean druidServlet() { - ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(); + ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean<>(); servletRegistrationBean.setServlet(new StatViewServlet()); servletRegistrationBean.addUrlMappings("/druid/*"); Map initParameters = new HashMap(); - // 不设置用户名密码可以直接通过druid/index.html访问 + //不设置用户名密码可以直接通过druid/index.html访问 if (druidLoginEnable) { initParameters.put("loginUsername", druidUserName); initParameters.put("loginPassword", druidPassword); @@ -182,13 +181,14 @@ public class SmartDruidDataSourceConfig { @Bean(name = "druid-stat-interceptor") public DruidStatInterceptor druidStatInterceptor() { - return new DruidStatInterceptor(); + DruidStatInterceptor dsInterceptor = new DruidStatInterceptor(); + return dsInterceptor; } @Bean public JdkRegexpMethodPointcut jdkRegexpMethodPointcut() { JdkRegexpMethodPointcut jdkRegexpMethodPointcut = new JdkRegexpMethodPointcut(); - jdkRegexpMethodPointcut.setPatterns(serviceScanner); + jdkRegexpMethodPointcut.setPatterns("com.renminyixue.core.service.module..*Service.*"); return jdkRegexpMethodPointcut; } diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/DateConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/DateConfig.java new file mode 100644 index 00000000..4c862680 --- /dev/null +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/DateConfig.java @@ -0,0 +1,117 @@ +package net.lab1024.smartadmin.service.config; + +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import net.lab1024.smartadmin.service.util.date.SmartDateFormatterEnum; +import net.lab1024.smartadmin.service.util.date.SmartLocalDateUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.convert.converter.Converter; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeParseException; + +/** + * java8 localDate 时间类格式化配置 + * + * @author listen + * @date 2019年10月18日 19:02:55 + */ +@Configuration +public class DateConfig { + + @Bean + public LocalDateTimeSerializer localDateTimeSerializer() { + return new LocalDateTimeSerializer(SmartDateFormatterEnum.YMD_HMS.getFormatter()); + } + + @Bean + public Jackson2ObjectMapperBuilderCustomizer localDateTimeSerializerCustomizer() { + return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeSerializer()); + } + + @Bean + public LocalDateTimeDeserializer localDateTimeDeserializer() { + return new LocalDateTimeDeserializer(SmartDateFormatterEnum.YMD_HMS.getFormatter()); + } + + @Bean + public Jackson2ObjectMapperBuilderCustomizer localDateTimeDeserializerCustomizer() { + return builder -> builder.deserializerByType(LocalDateTime.class, localDateTimeDeserializer()); + } + + @Bean + public LocalDateSerializer localDateSerializer() { + return new LocalDateSerializer(SmartDateFormatterEnum.YMD.getFormatter()); + } + + @Bean + public Jackson2ObjectMapperBuilderCustomizer localDateSerializerCustomizer() { + return builder -> builder.serializerByType(LocalDate.class, localDateSerializer()); + } + + @Bean + public LocalDateDeserializer localDateDeserializer() { + return new LocalDateDeserializer(SmartDateFormatterEnum.YMD.getFormatter()); + } + + @Bean + public Jackson2ObjectMapperBuilderCustomizer localDateDeserializerCustomizer() { + return builder -> builder.deserializerByType(LocalDate.class, localDateDeserializer()); + } + + /** + * string 转为 LocalDate 配置类 + * + * @author Turbolisten + * @date 2020/3/6 14:34 + */ + @Configuration + public static class SmartConverterStringToLocalDateTime implements Converter { + + @Override + public LocalDateTime convert(String str) { + if (StringUtils.isBlank(str)) { + return null; + } + LocalDateTime localDateTime; + try { + localDateTime = SmartLocalDateUtil.parse(str, SmartDateFormatterEnum.YMD_HMS); + } catch (DateTimeParseException e) { + throw new RuntimeException("请输入正确的日期格式:yyyy-MM-dd HH:mm:ss"); + } + return localDateTime; + } + + + } + + /** + * string 转为 LocalDate 配置类 + * + * @author Turbolisten + * @date 2020/3/6 14:34 + */ + @Configuration + public static class SmartConverterStringToLocalDate implements Converter { + + @Override + public LocalDate convert(String str) { + if (StringUtils.isBlank(str)) { + return null; + } + LocalDate localDate; + try { + localDate = SmartLocalDateUtil.parseDate(str, SmartDateFormatterEnum.YMD); + } catch (DateTimeParseException e) { + throw new RuntimeException("请输入正确的日期格式:yyyy-MM-dd"); + } + return localDate; + } + } +} \ No newline at end of file diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/KaptchaConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/KaptchaConfig.java new file mode 100644 index 00000000..fb6bbd24 --- /dev/null +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/KaptchaConfig.java @@ -0,0 +1,156 @@ +package net.lab1024.smartadmin.service.config; + +import com.google.code.kaptcha.NoiseProducer; +import com.google.code.kaptcha.impl.DefaultKaptcha; +import com.google.code.kaptcha.text.WordRenderer; +import com.google.code.kaptcha.util.Config; +import com.google.code.kaptcha.util.Configurable; +import com.google.common.collect.Lists; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.awt.*; +import java.awt.font.FontRenderContext; +import java.awt.font.GlyphVector; +import java.awt.image.BufferedImage; +import java.util.List; +import java.util.Properties; +import java.util.Random; + +/** + * [ 验证码配置 ] + * + * @author zhuoda + */ +@Configuration +public class KaptchaConfig { + + @Bean + public DefaultKaptcha getDefaultKaptcha() { + DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); + Properties properties = new Properties(); + properties.setProperty("kaptcha.border", "no"); + properties.setProperty("kaptcha.border.color", "34,114,200"); + properties.setProperty("kaptcha.image.width", "125"); + properties.setProperty("kaptcha.image.height", "45"); + properties.setProperty("kaptcha.textproducer.char.string", "123456789"); + properties.setProperty("kaptcha.textproducer.char.length", "4"); + properties.setProperty("kaptcha.textproducer.font.names", "Arial,Arial Narrow,Serif,Helvetica,Tahoma,Times New Roman,Verdana"); + properties.setProperty("kaptcha.textproducer.font.size", "38"); + + properties.setProperty("kaptcha.background.clear.from", "white"); + properties.setProperty("kaptcha.background.clear.to", "white"); + + properties.setProperty("kaptcha.word.impl", KaptchaWordRenderer.class.getName()); + properties.setProperty("kaptcha.noise.impl", KaptchaNoise.class.getName()); + + Config config = new Config(properties); + defaultKaptcha.setConfig(config); + return defaultKaptcha; + } + + + public static class KaptchaColor { + + public static Color getColor() { + + List colors = Lists.newArrayList(); + colors.add(new Color(0, 135, 255)); + colors.add(new Color(51, 153, 51)); + colors.add(new Color(255, 102, 102)); + colors.add(new Color(255, 153, 0)); + colors.add(new Color(153, 102, 0)); + colors.add(new Color(153, 102, 153)); + colors.add(new Color(51, 153, 153)); + colors.add(new Color(102, 102, 255)); + colors.add(new Color(0, 102, 204)); + colors.add(new Color(204, 51, 51)); + colors.add(new Color(128, 153, 65)); + Random random = new Random(); + int colorIndex = random.nextInt(10); + return colors.get(colorIndex); + } + } + + public class KaptchaNoise extends Configurable implements NoiseProducer { + + public KaptchaNoise() { + } + + @Override + public void makeNoise(BufferedImage image, float factorOne, float factorTwo, float factorThree, float factorFour) { + + int width = image.getWidth(); + int height = image.getHeight(); + Graphics2D graph = (Graphics2D) image.getGraphics(); + graph.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)); + graph.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)); + Random random = new Random(); + int noiseLineNum = random.nextInt(3); + if (noiseLineNum == 0) { + noiseLineNum = 1; + } + for (int i = 0; i < noiseLineNum; i++) { + graph.setColor(KaptchaColor.getColor()); + graph.drawLine(random.nextInt(width), random.nextInt(height), 10 + random.nextInt(20), 10 + random.nextInt(20)); + } + + graph.dispose(); + } + } + + public class KaptchaWordRenderer extends Configurable implements WordRenderer { + + public KaptchaWordRenderer() { + } + + @Override + public BufferedImage renderWord(String word, int width, int height) { + int fontSize = this.getConfig().getTextProducerFontSize(); + Font[] fonts = this.getConfig().getTextProducerFonts(fontSize); + int charSpace = this.getConfig().getTextProducerCharSpace(); + BufferedImage image = new BufferedImage(width, height, 2); + + Graphics2D g2D = image.createGraphics(); + g2D.setColor(Color.WHITE); + RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + hints.add(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY)); + g2D.setRenderingHints(hints); + g2D.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)); + + FontRenderContext frc = g2D.getFontRenderContext(); + Random random = new Random(); + int startPosY = (height - fontSize) / 5 + fontSize; + char[] wordChars = word.toCharArray(); + Font[] chosenFonts = new Font[wordChars.length]; + int[] charWidths = new int[wordChars.length]; + int widthNeeded = 0; + + int startPosX; + for (startPosX = 0; startPosX < wordChars.length; ++startPosX) { + chosenFonts[startPosX] = fonts[random.nextInt(fonts.length)]; + char[] charToDraw = new char[]{wordChars[startPosX]}; + GlyphVector gv = chosenFonts[startPosX].createGlyphVector(frc, charToDraw); + charWidths[startPosX] = (int) gv.getVisualBounds().getWidth(); + if (startPosX > 0) { + widthNeeded += 2; + } + + widthNeeded += charWidths[startPosX]; + } + + startPosX = (width - widthNeeded) / 2; + + for (int i = 0; i < wordChars.length; ++i) { + g2D.setColor(KaptchaColor.getColor()); + g2D.setFont(chosenFonts[i].deriveFont(Font.PLAIN)); + char[] charToDraw = new char[]{wordChars[i]}; + g2D.drawChars(charToDraw, 0, charToDraw.length, startPosX, startPosY); + startPosX = startPosX + charWidths[i] + charSpace; + } + + return image; + } + + } +} diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartMybatisPlusConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/MybatisPlusConfig.java similarity index 88% rename from admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartMybatisPlusConfig.java rename to admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/MybatisPlusConfig.java index a9454bc5..511bc5a3 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartMybatisPlusConfig.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/MybatisPlusConfig.java @@ -8,15 +8,13 @@ import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; /** - * MybatisPlus 配置 + * description * - * @author listen - * @date 2021/06/06 19:30 + * @author zhuoda */ -@Configuration @EnableTransactionManagement -public class SmartMybatisPlusConfig { - +@Configuration +public class MybatisPlusConfig { /** * 分页插件 */ diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartRedisConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/RedisConfig.java similarity index 97% rename from admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartRedisConfig.java rename to admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/RedisConfig.java index 1d57b412..d307eb78 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartRedisConfig.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/RedisConfig.java @@ -14,11 +14,10 @@ import org.springframework.data.redis.serializer.StringRedisSerializer; /** * [ redis配置 ] * - * @author 罗伊 - * @date 2020/8/25 11:57 + * @author zhuoda */ @Configuration -public class SmartRedisConfig { +public class RedisConfig { @Autowired private RedisConnectionFactory factory; diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartRestTemplateConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/RestTemplateConfig.java similarity index 85% rename from admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartRestTemplateConfig.java rename to admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/RestTemplateConfig.java index bc671e69..c4936039 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartRestTemplateConfig.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/RestTemplateConfig.java @@ -29,11 +29,10 @@ import java.util.concurrent.TimeUnit; /** * [ ] * - * @author 罗伊 - * @date 2020/8/25 11:57 + * @author zhuoda */ @Configuration -public class SmartRestTemplateConfig { +public class RestTemplateConfig { @Value("${http.pool.max-total}") private Integer maxTotal; @@ -55,8 +54,8 @@ public class SmartRestTemplateConfig { RestTemplate restTemplate = new RestTemplate(); restTemplate.setRequestFactory(this.clientHttpRequestFactory()); List> messageConverterList = restTemplate.getMessageConverters(); - messageConverterList.add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8)); - messageConverterList.addAll(converters()); + messageConverterList.add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8)); + messageConverterList.addAll(this.converters()); return restTemplate; } @@ -75,16 +74,17 @@ public class SmartRestTemplateConfig { public OkHttp3ClientHttpRequestFactory clientHttpRequestFactory() { - return new OkHttp3ClientHttpRequestFactory(httpClientBuilder()); + OkHttp3ClientHttpRequestFactory okHttp3ClientHttpRequestFactory = new OkHttp3ClientHttpRequestFactory(httpClientBuilder()); + return okHttp3ClientHttpRequestFactory; } public OkHttpClient httpClientBuilder() { return new OkHttpClient.Builder() - .retryOnConnectionFailure(false) + .retryOnConnectionFailure(true) .connectionPool(this.pool()) .connectTimeout(connectTimeout, TimeUnit.MILLISECONDS) - .readTimeout(readTimeout,TimeUnit.MILLISECONDS) - .writeTimeout(writeTimeout,TimeUnit.MILLISECONDS) + .readTimeout(readTimeout, TimeUnit.MILLISECONDS) + .writeTimeout(writeTimeout, TimeUnit.MILLISECONDS) .build(); } @@ -99,9 +99,11 @@ public class SmartRestTemplateConfig { @Override public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } + @Override public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } + @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; @@ -116,11 +118,12 @@ public class SmartRestTemplateConfig { SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, new TrustManager[]{x509TrustManager()}, new SecureRandom()); return sslContext.getSocketFactory(); - } catch (NoSuchAlgorithmException | KeyManagementException e) { + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (KeyManagementException e) { e.printStackTrace(); } return null; } - } diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartSchedulingConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/ScheduleConfig.java similarity index 84% rename from admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartSchedulingConfig.java rename to admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/ScheduleConfig.java index dd7e20c2..9b4045c5 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartSchedulingConfig.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/ScheduleConfig.java @@ -12,22 +12,20 @@ import java.util.List; import java.util.stream.Collectors; /** - * @author 卓大 + * @author zhuoda * @Date 2020/5/22 */ @Slf4j @Configuration -public class SmartSchedulingConfig implements SchedulingConfigurer { +public class ScheduleConfig implements SchedulingConfigurer { private ScheduledTaskRegistrar taskRegistrar; - public ScheduledTaskRegistrar getTaskRegistrar() { - return taskRegistrar; + @Override + public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { + this.taskRegistrar = taskRegistrar; } - /** - * 结束定时任务 - */ public void destroy() { List taskList = new ArrayList<>(); taskList.addAll(taskRegistrar.getCronTaskList()); @@ -42,10 +40,4 @@ public class SmartSchedulingConfig implements SchedulingConfigurer { log.warn("已结束定时任务:\n{}", Strings.join(taskName, '\n')); } - @Override - public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { - this.taskRegistrar = taskRegistrar; - } - - } diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SecurityConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SecurityConfig.java index 9200738f..ef9d8c8b 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SecurityConfig.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SecurityConfig.java @@ -1,7 +1,7 @@ package net.lab1024.smartadmin.service.config; -import net.lab1024.smartadmin.service.filter.SmartSecurityTokenFilter; import net.lab1024.smartadmin.service.common.security.SmartSecurityUrlMatchers; +import net.lab1024.smartadmin.service.filter.SmartSecurityTokenFilter; import net.lab1024.smartadmin.service.handler.AuthenticationFailHandler; import net.lab1024.smartadmin.service.module.system.login.EmployeeLoginTokenService; import org.springframework.beans.factory.annotation.Autowired; @@ -23,7 +23,7 @@ import java.util.List; /** * Spring Security * - * @author 罗伊 + * @author zhuoda * @date 2021/8/3 17:50 */ @Configuration diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SecurityMethodConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SecurityMethodConfig.java index 3241658f..b28a2dab 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SecurityMethodConfig.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SecurityMethodConfig.java @@ -12,7 +12,7 @@ import org.springframework.security.config.annotation.method.configuration.Globa /** * 此类用于注入自己的 method校验 * SmartSecurityMetadataSource - * @author 罗伊 + * @author zhuoda * @date 2021-08-31 0:01 */ @EnableGlobalMethodSecurity(prePostEnabled = true) diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SecurityUrlConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SecurityUrlConfig.java index d5ebf4a7..0f5fc141 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SecurityUrlConfig.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SecurityUrlConfig.java @@ -8,7 +8,7 @@ import org.springframework.context.annotation.Configuration; /** * [ ] * - * @author 罗伊 + * @author zhuoda * @date 2021/9/1 21:40 */ @Configuration diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartCaptchaConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartCaptchaConfig.java deleted file mode 100644 index 2415bd32..00000000 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartCaptchaConfig.java +++ /dev/null @@ -1,51 +0,0 @@ -package net.lab1024.smartadmin.service.config; - -import com.google.code.kaptcha.impl.DefaultKaptcha; -import com.google.code.kaptcha.util.Config; -import net.lab1024.smartadmin.service.module.support.captcha.render.CaptchaNoise; -import net.lab1024.smartadmin.service.module.support.captcha.render.CaptchaWordRenderer; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.Properties; - -/** - * [ 验证码配置 ] - * - * @author 罗伊 - * @version 1.0 - * @since JDK1.8 - */ -@Configuration -public class SmartCaptchaConfig { - - /** - * 图形验证码配置 - * - * @return - */ - @Bean - public DefaultKaptcha getDefaultCaptcha() { - DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); - Properties properties = new Properties(); - properties.setProperty("kaptcha.border", "no" ); - properties.setProperty("kaptcha.border.color", "34,114,200" ); - properties.setProperty("kaptcha.image.width", "125" ); - properties.setProperty("kaptcha.image.height", "45" ); - properties.setProperty("kaptcha.textproducer.char.string", "123456789" ); - properties.setProperty("kaptcha.textproducer.char.length", "4" ); - properties.setProperty("kaptcha.textproducer.font.names", "Arial,Arial Narrow,Serif,Helvetica,Tahoma,Times New Roman,Verdana" ); - properties.setProperty("kaptcha.textproducer.font.size", "38" ); - - properties.setProperty("kaptcha.background.clear.from", "white" ); - properties.setProperty("kaptcha.background.clear.to", "white" ); - - properties.setProperty("kaptcha.word.impl", CaptchaWordRenderer.class.getName()); - properties.setProperty("kaptcha.noise.impl", CaptchaNoise.class.getName()); - - Config config = new Config(properties); - defaultKaptcha.setConfig(config); - return defaultKaptcha; - } - -} diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartConverterStringToLocalDate.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartConverterStringToLocalDate.java deleted file mode 100644 index 1eb1a1f1..00000000 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartConverterStringToLocalDate.java +++ /dev/null @@ -1,34 +0,0 @@ -package net.lab1024.smartadmin.service.config; - -import net.lab1024.smartadmin.service.util.date.SmartDateFormatterEnum; -import net.lab1024.smartadmin.service.util.date.SmartLocalDateUtil; -import org.apache.commons.lang3.StringUtils; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.convert.converter.Converter; - -import java.time.LocalDate; -import java.time.format.DateTimeParseException; - -/** - * string 转为 LocalDate 配置类 - * - * @author 胡克 - * @date 2020/3/6 14:34 - */ -@Configuration -public class SmartConverterStringToLocalDate implements Converter { - - @Override - public LocalDate convert(String str) { - if (StringUtils.isBlank(str)) { - return null; - } - LocalDate localDate; - try { - localDate = SmartLocalDateUtil.parseDate(str, SmartDateFormatterEnum.YMD); - } catch (DateTimeParseException e) { - throw new RuntimeException("请输入正确的日期格式:yyyy-MM-dd"); - } - return localDate; - } -} diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartConverterStringToLocalDateTime.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartConverterStringToLocalDateTime.java deleted file mode 100644 index 4bdbf494..00000000 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartConverterStringToLocalDateTime.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.lab1024.smartadmin.service.config; - -import net.lab1024.smartadmin.service.util.date.SmartDateFormatterEnum; -import net.lab1024.smartadmin.service.util.date.SmartLocalDateUtil; -import org.apache.commons.lang3.StringUtils; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.convert.converter.Converter; - -import java.time.LocalDateTime; -import java.time.format.DateTimeParseException; - -/** - * string 转为 LocalDate 配置类 - * - * @author 胡克 - * @date 2020/3/6 14:34 - */ -@Configuration -public class SmartConverterStringToLocalDateTime implements Converter { - - - @Override - public LocalDateTime convert(String str) { - if (StringUtils.isBlank(str)) { - return null; - } - LocalDateTime localDateTime; - try { - localDateTime = SmartLocalDateUtil.parse(str, SmartDateFormatterEnum.YMD_HMS); - } catch (DateTimeParseException e) { - throw new RuntimeException("请输入正确的日期格式:yyyy-MM-dd HH:mm:ss"); - } - return localDateTime; - } - - -} diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartHeartBeatConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartHeartBeatConfig.java deleted file mode 100644 index 27b21521..00000000 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartHeartBeatConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.lab1024.smartadmin.service.config; - -import net.lab1024.smartadmin.service.module.support.heartbeat.HeartBeatRecordHandler; -import net.lab1024.smartadmin.service.module.support.heartbeat.core.HeartBeatManager; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * [ 服务心跳配置 ] - * - * @author 罗伊 - * @date 2021/1/9 14:13 - */ -@Configuration -public class SmartHeartBeatConfig { - - /** - * 延迟执行时间 - */ - @Value("${heart-beat.delayHandlerTime}") - private Long delayHandlerTime; - - /** - * 间隔执行时间 - */ - @Value("${heart-beat.intervalTime}") - private Long intervalTime; - - @Autowired - private HeartBeatRecordHandler heartBeatRecordHandler; - - - @Bean - public HeartBeatManager heartBeatManager(){ - return new HeartBeatManager(delayHandlerTime,intervalTime,heartBeatRecordHandler); - } -} \ No newline at end of file diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartRedisMqConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartRedisMqConfig.java deleted file mode 100644 index f0f8f919..00000000 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartRedisMqConfig.java +++ /dev/null @@ -1,68 +0,0 @@ -package net.lab1024.smartadmin.service.config; - -import lombok.extern.slf4j.Slf4j; -import net.lab1024.smartadmin.service.module.support.redismq.RedisMqTopicEnum; -import net.lab1024.smartadmin.service.module.support.redismq.RedisMsgHandler; -import net.lab1024.smartadmin.service.util.SmartBaseEnumUtil; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.listener.PatternTopic; -import org.springframework.data.redis.listener.RedisMessageListenerContainer; -import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; - -/** - * [ ] - * - * @author 罗伊 - * @date - */ -@Slf4j -@Configuration -public class SmartRedisMqConfig { - - @Value("${redis.mq.topic:SmartAdmin}") - private String topic; - @Value("${redis.mq.scanPath:net.lab1024.smartadmin.service}") - private String scanPath; - - /** - * redis topic - * @param connectionFactory - * @param listenerAdapter - * @return - */ - @Bean - public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) { - RedisMessageListenerContainer container = new RedisMessageListenerContainer(); - container.setConnectionFactory(connectionFactory); - boolean checkEnum = SmartBaseEnumUtil.checkEnum(topic, RedisMqTopicEnum.class); - if (!checkEnum) { - log.error("topic:{},系统暂未定义", topic); - throw new RuntimeException("无效的redis topic"); - } - container.addMessageListener(listenerAdapter, new PatternTopic(topic)); - return container; - } - - /** - * redis消息处理类 - * @return - */ - @Bean - public RedisMsgHandler redisMsgHandler() { - return new RedisMsgHandler(scanPath); - } - - /** - * redis消息处理方法 - * @param receiver - * @return - */ - @Bean - public MessageListenerAdapter listenerAdapter(RedisMsgHandler receiver) { - return new MessageListenerAdapter(receiver, RedisMsgHandler.METHOD_NAME); - } -} diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartRepeatSubmitAspectConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartRepeatSubmitAspectConfig.java deleted file mode 100644 index f8d81b85..00000000 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartRepeatSubmitAspectConfig.java +++ /dev/null @@ -1,43 +0,0 @@ -package net.lab1024.smartadmin.service.config; - -import com.alibaba.fastjson.JSON; -import net.lab1024.smartadmin.service.module.support.repeatsubmit.SmartRepeatSubmitAspect; -import net.lab1024.smartadmin.service.module.support.repeatsubmit.SmartRepeatSubmitUserDTO; -import net.lab1024.smartadmin.service.module.system.login.domain.EmployeeLoginInfoDTO; -import net.lab1024.smartadmin.service.util.SmartEmployeeTokenUtil; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import javax.servlet.http.HttpServletRequest; - -/** - * [ 接口重复提交配置 ] - * - * @author 罗伊 - * @date 2021/1/27 11:22 - */ -@Configuration -public class SmartRepeatSubmitAspectConfig { - - @Bean - public SmartRepeatSubmitAspect repeatSubmitAspect() { - return new SmartRepeatSubmitAspect(this::userFunction); - } - - /** - * 请求用户信息 - * - * @return - */ - private SmartRepeatSubmitUserDTO userFunction(HttpServletRequest request) { - EmployeeLoginInfoDTO requestEmployee = SmartEmployeeTokenUtil.getRequestEmployee(); - if(requestEmployee == null){ - return null; - } - SmartRepeatSubmitUserDTO repeatSubmitUserDTO = new SmartRepeatSubmitUserDTO(); - repeatSubmitUserDTO.setUserId(requestEmployee.getEmployeeId()); - repeatSubmitUserDTO.setUserName(requestEmployee.getActualName()); - repeatSubmitUserDTO.setExtData(JSON.toJSONString(requestEmployee)); - return repeatSubmitUserDTO; - } -} diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartResponseEncryptAspectConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartResponseEncryptAspectConfig.java deleted file mode 100644 index e203bbdf..00000000 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartResponseEncryptAspectConfig.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.lab1024.smartadmin.service.config; - -import com.alibaba.fastjson.JSON; -import net.lab1024.smartadmin.service.module.support.responseencrypt.ResponseEncryptDecryptAspect; -import net.lab1024.smartadmin.service.module.support.responseencrypt.ResponseEncryptDecryptUserDTO; -import net.lab1024.smartadmin.service.module.system.login.domain.EmployeeLoginInfoDTO; -import net.lab1024.smartadmin.service.util.SmartEmployeeTokenUtil; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import javax.servlet.http.HttpServletRequest; - -/** - * [ 接口加解密配置 ] - * - * @author 罗伊 - * @date 2021/1/27 11:22 - */ -@Configuration -public class SmartResponseEncryptAspectConfig { - - - @Bean - public ResponseEncryptDecryptAspect responseEncryptAspect() { - return new ResponseEncryptDecryptAspect(this::employeeFunction); - } - - /** - * 请求用户信息 - * @param request - * @return - */ - private ResponseEncryptDecryptUserDTO employeeFunction(HttpServletRequest request){ - EmployeeLoginInfoDTO employeeLoginInfoDTO = SmartEmployeeTokenUtil.getRequestEmployee(); - if(employeeLoginInfoDTO == null){ - return null; - } - ResponseEncryptDecryptUserDTO responseEncryptDecryptUserDTO = new ResponseEncryptDecryptUserDTO(); - responseEncryptDecryptUserDTO.setUserId(employeeLoginInfoDTO.getEmployeeId()); - responseEncryptDecryptUserDTO.setUserName(employeeLoginInfoDTO.getActualName()); - responseEncryptDecryptUserDTO.setExtData(JSON.toJSONString(employeeLoginInfoDTO)); - return responseEncryptDecryptUserDTO; - } - -} diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartSerializerLocalDateTimeConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartSerializerLocalDateTimeConfig.java deleted file mode 100644 index 3891eaad..00000000 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartSerializerLocalDateTimeConfig.java +++ /dev/null @@ -1,31 +0,0 @@ -package net.lab1024.smartadmin.service.config; - -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; -import net.lab1024.smartadmin.service.util.date.SmartDateFormatterEnum; -import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * java8 localDate 时间类格式化配置 - * - * @author listen - * @date 2021年8月31日 21:19 - */ -@Configuration -public class SmartSerializerLocalDateTimeConfig { - - @Bean - public Jackson2ObjectMapperBuilderCustomizer customizer() { - return builder -> { - builder.deserializers(new LocalDateDeserializer(SmartDateFormatterEnum.YMD.getFormatter())); - builder.deserializers(new LocalDateTimeDeserializer(SmartDateFormatterEnum.YMD_HMS.getFormatter())); - builder.serializers(new LocalDateSerializer(SmartDateFormatterEnum.YMD.getFormatter())); - builder.serializers(new LocalDateTimeSerializer(SmartDateFormatterEnum.YMD_HMS.getFormatter())); - }; - } - -} \ No newline at end of file diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartStorageCloudConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartStorageCloudConfig.java deleted file mode 100644 index e76f5e96..00000000 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartStorageCloudConfig.java +++ /dev/null @@ -1,64 +0,0 @@ -package net.lab1024.smartadmin.service.config; - -import com.amazonaws.ClientConfiguration; -import com.amazonaws.Protocol; -import com.amazonaws.auth.AWSStaticCredentialsProvider; -import com.amazonaws.auth.BasicAWSCredentials; -import com.amazonaws.client.builder.AwsClientBuilder; -import com.amazonaws.services.s3.AmazonS3; -import com.amazonaws.services.s3.AmazonS3ClientBuilder; -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - - -/** - * @author Administrator - */ -@Data -@Configuration -@ConditionalOnProperty(prefix = "file.storage", name = {"mode"}, havingValue = "cloud") -public class SmartStorageCloudConfig { - - @Value("${file.storage.cloud.region}") - private String region; - - @Value("${file.storage.cloud.endpoint}") - private String endpoint; - - @Value("${file.storage.cloud.bucket-name}") - private String bucketName; - - @Value("${file.storage.cloud.access-key}") - private String accessKey; - - @Value("${file.storage.cloud.secret-key}") - private String secretKey; - - @Value("${file.storage.cloud.url.expire}") - private Long urlExpire; - - @Value("${file.storage.cloud.url.public}") - private String publicUrl; - - /** - * 初始化 云oss client 配置 - * - * @return - */ - @Bean - public AmazonS3 initAmazonS3() { - ClientConfiguration clientConfig = new ClientConfiguration(); - clientConfig.setProtocol(Protocol.HTTPS); - AmazonS3 s3Client = AmazonS3ClientBuilder.standard() - .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey))) - .withClientConfiguration(clientConfig) - .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endpoint, region)) - .withPathStyleAccessEnabled(false) - .build(); - return s3Client; - } - -} diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartWebAppConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartWebAppConfig.java deleted file mode 100644 index 9b14acfe..00000000 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartWebAppConfig.java +++ /dev/null @@ -1,31 +0,0 @@ -package net.lab1024.smartadmin.service.config; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -/** - * @Description - * @Author 善逸 - * @Date Created in 2017/10/24 13:48 - */ -@Configuration -public class SmartWebAppConfig implements WebMvcConfigurer { - - @Value("${file.storage.local.path}") - private String localPath; - - @Override - public void addViewControllers(ViewControllerRegistry registry) { - registry.addViewController("/druidMonitor").setViewName("redirect:druid/index.html"); - registry.addViewController("/swaggerApi").setViewName("redirect:swagger-ui.html"); - } - - @Override - public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("/**") - .addResourceLocations("classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "file:" + localPath); - } -} diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartSwaggerDynamicGroupConfig.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SwaggerConfig.java similarity index 57% rename from admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartSwaggerDynamicGroupConfig.java rename to admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SwaggerConfig.java index 21bc6c1d..fbf231b9 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartSwaggerDynamicGroupConfig.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SwaggerConfig.java @@ -8,6 +8,9 @@ import com.google.common.collect.Maps; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import net.lab1024.smartadmin.service.common.constant.CommonConst; +import net.lab1024.smartadmin.service.common.constant.SwaggerTagConst; +import net.lab1024.smartadmin.service.common.constant.SystemEnvironmentEnum; +import net.lab1024.smartadmin.service.common.swagger.SwaggerApiModelPropertyEnumPlugin; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanDefinition; @@ -16,9 +19,10 @@ import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor; import org.springframework.context.EnvironmentAware; -import org.springframework.context.annotation.Conditional; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; +import org.springframework.core.annotation.Order; import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.RestController; import springfox.documentation.RequestHandler; @@ -28,8 +32,10 @@ import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.schema.ModelRef; import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Parameter; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger.common.SwaggerPluginSupport; import springfox.documentation.swagger2.annotations.EnableSwagger2; import java.lang.reflect.Field; @@ -39,16 +45,24 @@ import java.util.List; import java.util.Map; /** - * [ 根据SwaggerTagConst内部类动态生成Swagger ] + * [ 根据SwaggerTagConst内部类动态生成Swagger group ] * - * @author 罗伊 - * @date 2020/8/25 11:57 + * @author zhuoda */ @Slf4j @EnableSwagger2 @Configuration -@Conditional(SmartSystemEnvNotProdCondition.class) -public class SmartSwaggerDynamicGroupConfig implements EnvironmentAware, BeanDefinitionRegistryPostProcessor { +@Profile({ + SystemEnvironmentEnum.SystemEnvironmentNameConst.DEV, + SystemEnvironmentEnum.SystemEnvironmentNameConst.SIT, + SystemEnvironmentEnum.SystemEnvironmentNameConst.PRE +}) +public class SwaggerConfig implements EnvironmentAware, BeanDefinitionRegistryPostProcessor { + + /** + * 分组名称 + */ + private String apiGroupName; /** * 文档标题 @@ -80,28 +94,30 @@ public class SmartSwaggerDynamicGroupConfig implements EnvironmentAware, BeanDef */ private String host; - /** - * 接口Tag类 - */ - private String swaggerTagClass; - private int groupIndex = 0; private String groupName = "default"; - private final List groupList = Lists.newArrayList(); + private List groupList = Lists.newArrayList(); - private final Map> groupMap = Maps.newHashMap(); + private Map> groupMap = Maps.newHashMap(); + + + @Bean + @Order(SwaggerPluginSupport.SWAGGER_PLUGIN_ORDER + 1) + public SwaggerApiModelPropertyEnumPlugin swaggerEnum() { + return new SwaggerApiModelPropertyEnumPlugin(); + } @Override public void setEnvironment(Environment environment) { - this.title = environment.getProperty("swagger.title" ); - this.description = environment.getProperty("swagger.description" ); - this.version = environment.getProperty("swagger.version" ); - this.serviceUrl = environment.getProperty("swagger.serviceUrl" ); - this.packAge = environment.getProperty("swagger.packAge" ); - this.host = environment.getProperty("swagger.host" ); - this.swaggerTagClass = environment.getProperty("swagger.tagClass" ); + this.apiGroupName = environment.getProperty("swagger.apiGroupName"); + this.title = environment.getProperty("swagger.title"); + this.description = environment.getProperty("swagger.description"); + this.version = environment.getProperty("swagger.version"); + this.serviceUrl = environment.getProperty("swagger.serviceUrl"); + this.packAge = environment.getProperty("swagger.packAge"); + this.host = environment.getProperty("swagger.host"); } @Override @@ -116,15 +132,8 @@ public class SmartSwaggerDynamicGroupConfig implements EnvironmentAware, BeanDef } private void groupBuild() { - Class clazz = null; - try { - clazz = Class.forName(swaggerTagClass); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - log.error("swaggerTagClass unfounded :{}", swaggerTagClass); - return; - } - Class[] innerClazz = clazz.getClasses(); + Class clazz = SwaggerTagConst.class; + Class[] innerClazz = clazz.getDeclaredClasses(); for (Class cls : innerClazz) { String group = cls.getSimpleName(); List apiTags = Lists.newArrayList(); @@ -145,33 +154,31 @@ public class SmartSwaggerDynamicGroupConfig implements EnvironmentAware, BeanDef } private Docket baseDocket() { - // 配置全局参数 token header - ParameterBuilder tokenPar = new ParameterBuilder(); - tokenPar.name(CommonConst.Token.OUTER_TOKEN_NAME) - .description("token" ) - .modelRef(new ModelRef("string" )) - .parameterType("header" ).defaultValue("1" ) - .required(false) - .build(); - // 此行必须放在配置前面执行 因为要初始化groupName - Predicate controllerPredicate = this.getControllerPredicate(); - // swagger配置 + // 配置全局参数 + List parameterList = this.generateParameter(); + + // 请求类型过滤规则 + Predicate controllerPredicate = getControllerPredicate(); + // controller 包路径 + Predicate controllerPackage = RequestHandlerSelectors.basePackage(packAge); + Docket docket = new Docket(DocumentationType.SWAGGER_2) .groupName(groupName) .forCodeGeneration(true) .select() - .apis(RequestHandlerSelectors.basePackage(packAge)) + .apis(controllerPackage) .apis(controllerPredicate) .paths(PathSelectors.any()) .build().apiInfo(this.serviceApiInfo()) - .globalOperationParameters(Lists.newArrayList(tokenPar.build())); + .globalOperationParameters(parameterList); if (StringUtils.isNotBlank(host)) { docket = docket.host(host); } return docket; + } private Predicate getControllerPredicate() { @@ -184,18 +191,71 @@ public class SmartSwaggerDynamicGroupConfig implements EnvironmentAware, BeanDef api = apiOptional.get(); } List tags = Arrays.asList(api.tags()); - return apiTags.containsAll(tags); + if (apiTags.containsAll(tags)) { + return true; + } + return false; }; groupIndex++; return Predicates.and(RequestHandlerSelectors.withClassAnnotation(RestController.class), methodPredicate); } private ApiInfo serviceApiInfo() { - return new ApiInfoBuilder().title(title).description(description).version(version).termsOfServiceUrl(serviceUrl).build(); + return new ApiInfoBuilder() + .title(title) + .description(description) + .version(version) + .termsOfServiceUrl(serviceUrl) + .build(); } @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException { } + + /** + * 生成共用请求参数 + * + * @return + */ + private List generateParameter() { + // 配置全局参数 token + Parameter token = new ParameterBuilder().name(CommonConst.RequestHeader.TOKEN) + .description("token") + .modelRef(new ModelRef("string")) + .parameterType("header").defaultValue("1") + .required(false) + .build(); + + Parameter agent = new ParameterBuilder().name(CommonConst.RequestHeader.USER_AGENT) + .description("agent") + .modelRef(new ModelRef("string")) + .parameterType("header").defaultValue("") + .required(false) + .build(); + + Parameter identity = new ParameterBuilder().name(CommonConst.RequestHeader.USER_IDENTITY) + .description("用户唯一标识") + .modelRef(new ModelRef("string")) + .parameterType("header").defaultValue("") + .required(false) + .build(); + + Parameter geo = new ParameterBuilder().name(CommonConst.RequestHeader.USER_GEO) + .description("定位") + .modelRef(new ModelRef("string")) + .parameterType("header").defaultValue("") + .required(false) + .build(); + + Parameter location = new ParameterBuilder().name(CommonConst.RequestHeader.USER_LOCATION) + .description("位置") + .modelRef(new ModelRef("string")) + .parameterType("header").defaultValue("") + .required(false) + .build(); + + return Lists.newArrayList(token, agent, identity, geo, location); + } } diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartSystemEnvNotProdCondition.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SystemEnvironmentConfig.java similarity index 59% rename from admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartSystemEnvNotProdCondition.java rename to admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SystemEnvironmentConfig.java index 46ab0be6..01036a9b 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SmartSystemEnvNotProdCondition.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/config/SystemEnvironmentConfig.java @@ -1,6 +1,7 @@ package net.lab1024.smartadmin.service.config; import net.lab1024.smartadmin.service.common.constant.SystemEnvironmentEnum; +import net.lab1024.smartadmin.service.common.domain.SystemEnvironmentBO; import net.lab1024.smartadmin.service.util.SmartBaseEnumUtil; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; @@ -11,13 +12,13 @@ import org.springframework.context.annotation.Configuration; import org.springframework.core.type.AnnotatedTypeMetadata; /** - * 当前系统环境 + * 系统环境 * - * @author listen - * @date 2019/08/27 08:56 + * @author zhuoda + * @date 2021/08/13 18:56 */ @Configuration -public class SmartSystemEnvNotProdCondition implements Condition { +public class SystemEnvironmentConfig implements Condition { @Value("${spring.profiles.active}") private String systemEnvironment; @@ -29,7 +30,12 @@ public class SmartSystemEnvNotProdCondition implements Condition { } @Bean - public SystemEnvironmentEnum initEnvironment() { - return SmartBaseEnumUtil.getEnumByValue(systemEnvironment, SystemEnvironmentEnum.class); + public SystemEnvironmentBO initEnvironment() { + SystemEnvironmentEnum currentEnvironment = SmartBaseEnumUtil.getEnumByValue(systemEnvironment, SystemEnvironmentEnum.class); + if (currentEnvironment == null) { + throw new ExceptionInInitializerError("无法获取当前环境!请在 application.properties 或者 application.yaml 配置好参数:spring.profiles.active"); + } + return new SystemEnvironmentBO(currentEnvironment == SystemEnvironmentEnum.PROD, currentEnvironment); + } } diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/constant/SwaggerTagConst.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/constant/SwaggerTagConst.java new file mode 100644 index 00000000..4af160e1 --- /dev/null +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/constant/SwaggerTagConst.java @@ -0,0 +1,55 @@ +package net.lab1024.smartadmin.service.constant; + +/** + * [ ] + * + * @author 罗伊 + * @date 2021/1/9 11:45 + */ +public class SwaggerTagConst { + + public static class Support { + + public static final String FILE = "基础-文件服务"; + + public static final String CACHE = "基础-缓存"; + + public static final String SYSTEM_CONFIG = "基础-系统参数"; + + public static final String ID_GENERATOR = "基础-ID生成器"; + + public static final String SMART_RELOAD = "基础-Reload"; + + public static final String TASK_SCHEDULER = "基础-任务调度"; + + public static final String USER_OPERATE_LOG = "基础-用户操作日志"; + + public static final String HEART_BEAT = "基础-心跳日志"; + + public static final String CAPTCHA = "基础-图形验证码"; + + } + + public static class Admin { + + public static final String MANAGER_EMPLOYEE = "管理端-员工"; + + public static final String MANAGER_EMPLOYEE_LOGIN = "管理端-员工登录"; + + public static final String MANAGER_DEPARTMENT = "管理端-部门"; + + public static final String MANAGER_ROLE = "管理端-角色"; + + public static final String MANAGER_NOTICE = "管理端-系统通知"; + + public static final String MANAGER_MENU = "管理端-菜单"; + + public static final String MANAGER_ROLE_MENU = "管理端-角色-菜单"; + + public static final String MANAGER_DATA_TRACER = "管理端-数据变动跟踪"; + + public static final String MANAGER_CATEGORY = "管理端-分类"; + + public static final String MANAGER_GOODS = "管理端-商品业务"; + } +} diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/business/category/domain/CategoryBaseDTO.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/business/category/domain/CategoryBaseDTO.java index 45094438..3b488397 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/business/category/domain/CategoryBaseDTO.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/business/category/domain/CategoryBaseDTO.java @@ -3,10 +3,10 @@ package net.lab1024.smartadmin.service.module.business.category.domain; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import net.lab1024.smartadmin.service.common.swagger.ApiModelPropertyEnum; -import net.lab1024.smartadmin.service.common.validator.CheckEnum; import net.lab1024.smartadmin.service.module.business.category.constant.CategoryTypeEnum; import org.hibernate.validator.constraints.Length; +import javax.validation.constraints.DecimalMax; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @@ -25,7 +25,6 @@ public class CategoryBaseDTO { private String categoryName; @ApiModelPropertyEnum(desc = "分类类型", value = CategoryTypeEnum.class) - @CheckEnum(enumClazz = CategoryTypeEnum.class, required = true, message = "分类类型错误") private Integer categoryType; @ApiModelProperty("父级类目id|可选") diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/business/category/domain/CategoryTreeQueryDTO.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/business/category/domain/CategoryTreeQueryDTO.java index 096079ce..0dcc317e 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/business/category/domain/CategoryTreeQueryDTO.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/business/category/domain/CategoryTreeQueryDTO.java @@ -3,7 +3,6 @@ package net.lab1024.smartadmin.service.module.business.category.domain; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import net.lab1024.smartadmin.service.common.swagger.ApiModelPropertyEnum; -import net.lab1024.smartadmin.service.common.validator.CheckEnum; import net.lab1024.smartadmin.service.module.business.category.constant.CategoryTypeEnum; /** @@ -16,7 +15,6 @@ import net.lab1024.smartadmin.service.module.business.category.constant.Category public class CategoryTreeQueryDTO { @ApiModelPropertyEnum(desc = "分类类型|可选", value = CategoryTypeEnum.class) - @CheckEnum(enumClazz = CategoryTypeEnum.class, message = "分类类型错误") private Integer categoryType; @ApiModelProperty("父级类目id|可选") diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/business/goods/domain/GoodsBaseDTO.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/business/goods/domain/GoodsBaseDTO.java index a6d1b657..c9271137 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/business/goods/domain/GoodsBaseDTO.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/business/goods/domain/GoodsBaseDTO.java @@ -3,9 +3,8 @@ package net.lab1024.smartadmin.service.module.business.goods.domain; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import net.lab1024.smartadmin.service.common.json.FileKeySerializer; +import net.lab1024.smartadmin.service.common.serializer.FileKeySerializer; import net.lab1024.smartadmin.service.common.swagger.ApiModelPropertyEnum; -import net.lab1024.smartadmin.service.common.validator.CheckEnum; import net.lab1024.smartadmin.service.module.business.goods.constant.GoodsTypeEnum; import org.hibernate.validator.constraints.Length; @@ -24,7 +23,6 @@ import java.math.BigDecimal; public class GoodsBaseDTO { @ApiModelPropertyEnum(desc = "商品类型", value = GoodsTypeEnum.class) - @CheckEnum(enumClazz = GoodsTypeEnum.class, message = "商品类型错误") private Integer goodsType; @ApiModelProperty("商品分类") diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/business/goods/domain/GoodsQueryDTO.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/business/goods/domain/GoodsQueryDTO.java index 6f035229..3ec03daa 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/business/goods/domain/GoodsQueryDTO.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/business/goods/domain/GoodsQueryDTO.java @@ -4,7 +4,6 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import net.lab1024.smartadmin.service.common.domain.PageBaseDTO; import net.lab1024.smartadmin.service.common.swagger.ApiModelPropertyEnum; -import net.lab1024.smartadmin.service.common.validator.CheckEnum; import net.lab1024.smartadmin.service.module.business.goods.constant.GoodsTypeEnum; import org.hibernate.validator.constraints.Length; @@ -18,7 +17,6 @@ import org.hibernate.validator.constraints.Length; public class GoodsQueryDTO extends PageBaseDTO { @ApiModelPropertyEnum(desc = "商品类型|可选", value = GoodsTypeEnum.class) - @CheckEnum(enumClazz = GoodsTypeEnum.class, message = "商品类型错误") private Integer goodsType; @ApiModelProperty("商品分类") diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/support/datatracer/domain/DataTracerQueryForm.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/support/datatracer/domain/DataTracerQueryForm.java index c61f5b4c..7d6f1025 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/support/datatracer/domain/DataTracerQueryForm.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/support/datatracer/domain/DataTracerQueryForm.java @@ -4,7 +4,6 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import net.lab1024.smartadmin.service.common.domain.PageBaseDTO; import net.lab1024.smartadmin.service.common.swagger.ApiModelPropertyEnum; -import net.lab1024.smartadmin.service.common.validator.CheckEnum; import net.lab1024.smartadmin.service.module.support.datatracer.constant.DataTracerBusinessTypeEnum; import javax.validation.constraints.NotNull; @@ -19,7 +18,6 @@ import javax.validation.constraints.NotNull; public class DataTracerQueryForm extends PageBaseDTO { @ApiModelPropertyEnum(DataTracerBusinessTypeEnum.class) - @CheckEnum(enumClazz = DataTracerBusinessTypeEnum.class, required = true, message = "业务类型错误") private Integer businessType; @ApiModelProperty("业务id") diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/support/file/domain/dto/FileQueryDTO.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/support/file/domain/dto/FileQueryDTO.java index dbe227dc..ac37440c 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/support/file/domain/dto/FileQueryDTO.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/support/file/domain/dto/FileQueryDTO.java @@ -2,7 +2,6 @@ package net.lab1024.smartadmin.service.module.support.file.domain.dto; import net.lab1024.smartadmin.service.common.domain.PageBaseDTO; import net.lab1024.smartadmin.service.common.swagger.ApiModelPropertyEnum; -import net.lab1024.smartadmin.service.common.validator.CheckEnum; import net.lab1024.smartadmin.service.module.support.file.domain.FileFolderTypeEnum; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -21,7 +20,6 @@ public class FileQueryDTO extends PageBaseDTO { @ApiModelProperty(value = "业务类型") @ApiModelPropertyEnum(FileFolderTypeEnum.class) - @CheckEnum(enumClazz = FileFolderTypeEnum.class, message = "文件业务类型错误") private Integer folderType; } diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/support/file/domain/dto/FileUrlUploadDTO.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/support/file/domain/dto/FileUrlUploadDTO.java index be5394ed..70c3d242 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/support/file/domain/dto/FileUrlUploadDTO.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/support/file/domain/dto/FileUrlUploadDTO.java @@ -1,7 +1,6 @@ package net.lab1024.smartadmin.service.module.support.file.domain.dto; import net.lab1024.smartadmin.service.common.swagger.ApiModelPropertyEnum; -import net.lab1024.smartadmin.service.common.validator.CheckEnum; import net.lab1024.smartadmin.service.module.support.file.domain.FileFolderTypeEnum; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; @@ -23,7 +22,6 @@ import javax.validation.constraints.NotNull; public class FileUrlUploadDTO { @ApiModelPropertyEnum(FileFolderTypeEnum.class) - @CheckEnum(enumClazz = FileFolderTypeEnum.class, required = true, message = "文件夹类型错误") private Integer folder; @ApiModelProperty("文件url") diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/support/file/service/FileStorageCloudServiceImpl.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/support/file/service/FileStorageCloudServiceImpl.java index 52901b91..107c5dea 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/support/file/service/FileStorageCloudServiceImpl.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/support/file/service/FileStorageCloudServiceImpl.java @@ -9,7 +9,6 @@ import net.lab1024.smartadmin.service.common.codeconst.FileResponseCodeConst; import net.lab1024.smartadmin.service.common.codeconst.ResponseCodeConst; import net.lab1024.smartadmin.service.common.constant.CommonConst; import net.lab1024.smartadmin.service.common.domain.ResponseDTO; -import net.lab1024.smartadmin.service.config.SmartStorageCloudConfig; import net.lab1024.smartadmin.service.module.support.file.domain.dto.FileDownloadDTO; import net.lab1024.smartadmin.service.module.support.file.domain.dto.FileMetadataDTO; import net.lab1024.smartadmin.service.module.support.file.domain.vo.FileUploadVO; diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/system/employee/domain/dto/EmployeeAddDTO.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/system/employee/domain/dto/EmployeeAddDTO.java index 2bf4e3e1..b19307fd 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/system/employee/domain/dto/EmployeeAddDTO.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/system/employee/domain/dto/EmployeeAddDTO.java @@ -4,7 +4,6 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import net.lab1024.smartadmin.service.common.constant.GenderEnum; import net.lab1024.smartadmin.service.common.swagger.ApiModelPropertyEnum; -import net.lab1024.smartadmin.service.common.validator.CheckEnum; import net.lab1024.smartadmin.service.util.SmartVerificationUtil; import org.hibernate.validator.constraints.Length; @@ -32,7 +31,6 @@ public class EmployeeAddDTO { private String loginName; @ApiModelPropertyEnum(GenderEnum.class) - @CheckEnum(enumClazz = GenderEnum.class, message = "性别错误") private Integer gender; @ApiModelProperty("部门id") diff --git a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/system/menu/domain/MenuBasicDTO.java b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/system/menu/domain/MenuBasicDTO.java index 921bd2f1..34eca341 100644 --- a/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/system/menu/domain/MenuBasicDTO.java +++ b/admin-api/java-api/src/main/java/net/lab1024/smartadmin/service/module/system/menu/domain/MenuBasicDTO.java @@ -3,7 +3,6 @@ package net.lab1024.smartadmin.service.module.system.menu.domain; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import net.lab1024.smartadmin.service.common.swagger.ApiModelPropertyEnum; -import net.lab1024.smartadmin.service.common.validator.CheckEnum; import net.lab1024.smartadmin.service.module.system.menu.constant.MenuTypeEnum; import org.hibernate.validator.constraints.Length; @@ -26,7 +25,6 @@ public class MenuBasicDTO { private String menuName; @ApiModelPropertyEnum(value = MenuTypeEnum.class, desc = "类型") - @CheckEnum(enumClazz = MenuTypeEnum.class, message = "类型错误") private Integer menuType; @ApiModelProperty("父菜单ID 无上级可传0") diff --git a/admin-web/typescript-ant-design-vue/src/router/index.ts b/admin-web/typescript-ant-design-vue/src/router/index.ts index 84528cf4..9a490a06 100644 --- a/admin-web/typescript-ant-design-vue/src/router/index.ts +++ b/admin-web/typescript-ant-design-vue/src/router/index.ts @@ -47,7 +47,6 @@ router.beforeEach(async (to, from, next) => { return; } - // 设置tagNav useUserStore().setTagNav(to, from);