mirror of https://gitee.com/stylefeng/roses
【7.1.6】
1.@ChinesDescription注解迁移到rule包下,方便调用 2.ResponseData改为泛型形式,因为接口扫描需要读取字段 3.从新整理类字段解析的方法,考虑多种情况pull/25/head
parent
7945745ac5
commit
3f7ea50f84
|
@ -22,7 +22,7 @@
|
||||||
* 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
|
* 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||||
* 6.若您的项目无法满足以上几点,可申请商业授权
|
* 6.若您的项目无法满足以上几点,可申请商业授权
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.scanner.api.annotation.field;
|
package cn.stylefeng.roses.kernel.rule.annotation;
|
||||||
|
|
||||||
import java.lang.annotation.*;
|
import java.lang.annotation.*;
|
||||||
|
|
|
@ -35,7 +35,7 @@ import lombok.EqualsAndHashCode;
|
||||||
*/
|
*/
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
public class ErrorResponseData extends ResponseData {
|
public class ErrorResponseData<T> extends ResponseData<T> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 异常的具体类名称
|
* 异常的具体类名称
|
||||||
|
@ -58,7 +58,7 @@ public class ErrorResponseData extends ResponseData {
|
||||||
super(Boolean.FALSE, code, message, null);
|
super(Boolean.FALSE, code, message, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ErrorResponseData(String code, String message, Object object) {
|
public ErrorResponseData(String code, String message, T object) {
|
||||||
super(Boolean.FALSE, code, message, object);
|
super(Boolean.FALSE, code, message, object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.rule.pojo.response;
|
package cn.stylefeng.roses.kernel.rule.pojo.response;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -33,32 +34,36 @@ import lombok.Data;
|
||||||
* @date 2020/10/17 17:33
|
* @date 2020/10/17 17:33
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class ResponseData {
|
public class ResponseData<T> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 请求是否成功
|
* 请求是否成功
|
||||||
*/
|
*/
|
||||||
|
@ChineseDescription("请求是否成功")
|
||||||
private Boolean success;
|
private Boolean success;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 响应状态码
|
* 响应状态码
|
||||||
*/
|
*/
|
||||||
|
@ChineseDescription("响应状态码")
|
||||||
private String code;
|
private String code;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 响应信息
|
* 响应信息
|
||||||
*/
|
*/
|
||||||
|
@ChineseDescription("响应信息")
|
||||||
private String message;
|
private String message;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 响应对象
|
* 响应对象
|
||||||
*/
|
*/
|
||||||
private Object data;
|
@ChineseDescription("响应对象")
|
||||||
|
private T data;
|
||||||
|
|
||||||
public ResponseData() {
|
public ResponseData() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public ResponseData(Boolean success, String code, String message, Object data) {
|
public ResponseData(Boolean success, String code, String message, T data) {
|
||||||
this.success = success;
|
this.success = success;
|
||||||
this.code = code;
|
this.code = code;
|
||||||
this.message = message;
|
this.message = message;
|
||||||
|
|
|
@ -32,17 +32,17 @@ import cn.stylefeng.roses.kernel.rule.constants.RuleConstants;
|
||||||
* @author fengshuonan
|
* @author fengshuonan
|
||||||
* @date 2020/10/16 16:23
|
* @date 2020/10/16 16:23
|
||||||
*/
|
*/
|
||||||
public class SuccessResponseData extends ResponseData {
|
public class SuccessResponseData<T> extends ResponseData<T> {
|
||||||
|
|
||||||
public SuccessResponseData() {
|
public SuccessResponseData() {
|
||||||
super(Boolean.TRUE, RuleConstants.SUCCESS_CODE, RuleConstants.SUCCESS_MESSAGE, null);
|
super(Boolean.TRUE, RuleConstants.SUCCESS_CODE, RuleConstants.SUCCESS_MESSAGE, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SuccessResponseData(Object object) {
|
public SuccessResponseData(T object) {
|
||||||
super(Boolean.TRUE, RuleConstants.SUCCESS_CODE, RuleConstants.SUCCESS_MESSAGE, object);
|
super(Boolean.TRUE, RuleConstants.SUCCESS_CODE, RuleConstants.SUCCESS_MESSAGE, object);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SuccessResponseData(String code, String message, Object object) {
|
public SuccessResponseData(String code, String message, T object) {
|
||||||
super(Boolean.TRUE, code, message, object);
|
super(Boolean.TRUE, code, message, object);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.auth.api.pojo.auth;
|
package cn.stylefeng.roses.kernel.auth.api.pojo.auth;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ package cn.stylefeng.roses.kernel.auth.api.pojo.auth;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser;
|
import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -30,8 +30,8 @@ import cn.hutool.core.util.StrUtil;
|
||||||
import cn.stylefeng.roses.kernel.auth.api.enums.DataScopeTypeEnum;
|
import cn.stylefeng.roses.kernel.auth.api.enums.DataScopeTypeEnum;
|
||||||
import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo;
|
import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo;
|
||||||
import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleUserInfo;
|
import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleUserInfo;
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.constants.RuleConstants;
|
import cn.stylefeng.roses.kernel.rule.constants.RuleConstants;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ package cn.stylefeng.roses.kernel.scanner.api.enums;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 字段类型
|
* 解析字段元数据时,各种情况的枚举
|
||||||
*
|
*
|
||||||
* @author fengshuonan
|
* @author fengshuonan
|
||||||
* @date 2022/1/13 16:37
|
* @date 2022/1/13 16:37
|
||||||
|
@ -41,19 +41,44 @@ public enum FieldTypeEnum {
|
||||||
BASIC(1),
|
BASIC(1),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数组类型,描述java中的数组、Collection等
|
* 基础数组类型,描述java中的数组,例如long[]
|
||||||
*/
|
*/
|
||||||
ARRAY(2),
|
BASE_ARRAY(2),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 对象类型,描述java中的自定义实体实体类型等
|
* 实体类型的数组(需要解析其中具体字段),例如SysUser[]
|
||||||
*/
|
*/
|
||||||
OBJECT(3),
|
ARRAY_WITH_OBJECT(3),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基础集合类型,Collection等,单纯的集合,没带泛型,不需要再解析实体,例如List
|
||||||
|
*/
|
||||||
|
BASE_COLLECTION(4),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集合类型,Collection携带泛型的,需要具体解析泛型中实体的,例如List<SysUser>,List<String>
|
||||||
|
*/
|
||||||
|
COLLECTION_WITH_OBJECT(5),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单纯对象类型,不带泛型,例如SysUser
|
||||||
|
*/
|
||||||
|
OBJECT(6),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对象类型携带泛型的,需要再解析泛型中的实体,例如ResponseData<SysUser>
|
||||||
|
*/
|
||||||
|
OBJECT_WITH_GENERIC(7),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 带T类型的泛型对象,需要从所属类上拿到具体泛型,例如字段SomeEntity<T>,List<T>,T
|
||||||
|
*/
|
||||||
|
WITH_UNKNOWN_GENERIC(8),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 其他类型,未知
|
* 其他类型,未知
|
||||||
*/
|
*/
|
||||||
OTHER(4);
|
OTHER(9);
|
||||||
|
|
||||||
FieldTypeEnum(Integer code) {
|
FieldTypeEnum(Integer code) {
|
||||||
this.code = code;
|
this.code = code;
|
||||||
|
|
|
@ -0,0 +1,137 @@
|
||||||
|
package cn.stylefeng.roses.kernel.scanner.api.factory;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.scanner.api.enums.FieldTypeEnum;
|
||||||
|
import cn.stylefeng.roses.kernel.scanner.api.factory.description.ClassDescriptionUtil;
|
||||||
|
import cn.stylefeng.roses.kernel.scanner.api.factory.description.FieldDescriptionUtil;
|
||||||
|
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.FieldMetadata;
|
||||||
|
import cn.stylefeng.roses.kernel.scanner.api.util.ClassTypeUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.ParameterizedType;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 字段信息创建工具
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/1/13 13:49
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class ClassDetailMetadataFactory {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据传入的类型,解析出这个类型的所有子字段类型
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/1/14 14:31
|
||||||
|
*/
|
||||||
|
public static Set<FieldMetadata> createFieldDetailMetadataSet(Type fieldType) {
|
||||||
|
|
||||||
|
// 获取参数的类型枚举
|
||||||
|
FieldTypeEnum classFieldType = ClassTypeUtil.getClassFieldType(fieldType);
|
||||||
|
|
||||||
|
// 设置响应结果
|
||||||
|
Set<FieldMetadata> fieldMetadata = null;
|
||||||
|
|
||||||
|
// 根据字段类型的不同进行响应的处理
|
||||||
|
switch (classFieldType) {
|
||||||
|
case BASIC:
|
||||||
|
// 基本类型不需要填充子类型信息
|
||||||
|
fieldMetadata = null;
|
||||||
|
break;
|
||||||
|
case BASE_ARRAY:
|
||||||
|
// 如果是简单数组类型,则描述一下这个基本类型的信息
|
||||||
|
Class<?> baseArrayFieldClazz = (Class<?>) fieldType;
|
||||||
|
Class<?> baseArrayComponentType = baseArrayFieldClazz.getComponentType();
|
||||||
|
FieldMetadata baseMetadata = ClassDescriptionUtil.createClassMetadata(baseArrayComponentType, FieldTypeEnum.BASIC);
|
||||||
|
fieldMetadata = new LinkedHashSet<>();
|
||||||
|
fieldMetadata.add(baseMetadata);
|
||||||
|
break;
|
||||||
|
case ARRAY_WITH_OBJECT:
|
||||||
|
// 如果是带实体的数组,则加上实体对应的字段信息
|
||||||
|
Class<?> objArrayClass = (Class<?>) fieldType;
|
||||||
|
Class<?> objArrayComponentType = objArrayClass.getComponentType();
|
||||||
|
fieldMetadata = ClassDetailMetadataFactory.createFieldDetailMetadataSet(objArrayComponentType);
|
||||||
|
break;
|
||||||
|
case BASE_COLLECTION:
|
||||||
|
// 如果是基础集合,因为不确定集合的内容,所以使用Object来描述一下集合的具体内容
|
||||||
|
FieldMetadata collectionFieldMetadata = ClassDescriptionUtil.createClassMetadata(Object.class, FieldTypeEnum.OBJECT);
|
||||||
|
fieldMetadata = new LinkedHashSet<>();
|
||||||
|
fieldMetadata.add(collectionFieldMetadata);
|
||||||
|
break;
|
||||||
|
case COLLECTION_WITH_OBJECT:
|
||||||
|
// 如果是集合里带的具体实体对象,则描述一下具体实体的数据结构
|
||||||
|
ParameterizedType collectionParameterizedType = (ParameterizedType) fieldType;
|
||||||
|
Type[] actualTypeArguments = collectionParameterizedType.getActualTypeArguments();
|
||||||
|
fieldMetadata = ClassDetailMetadataFactory.createFieldDetailMetadataSet(actualTypeArguments[0]);
|
||||||
|
break;
|
||||||
|
case OBJECT:
|
||||||
|
// 如果是实体对象,则描述实体对象的所有字段信息
|
||||||
|
Class<?> objectClass = (Class<?>) fieldType;
|
||||||
|
Field[] fields = objectClass.getDeclaredFields();
|
||||||
|
fieldMetadata = new LinkedHashSet<>();
|
||||||
|
for (Field field : fields) {
|
||||||
|
// 获取字段的具体属性
|
||||||
|
FieldMetadata fieldInfo = FieldDescriptionUtil.createFieldMetadata(field);
|
||||||
|
fieldMetadata.add(fieldInfo);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case OBJECT_WITH_GENERIC:
|
||||||
|
// 如果是带泛型的Object实体类型
|
||||||
|
ParameterizedType objWithGenericParameterizedType = (ParameterizedType) fieldType;
|
||||||
|
// 先获取主体类型
|
||||||
|
Type rawType = objWithGenericParameterizedType.getRawType();
|
||||||
|
// 获取具体泛型
|
||||||
|
Type genericType = objWithGenericParameterizedType.getActualTypeArguments()[0];
|
||||||
|
// 获取主体的所有字段信息
|
||||||
|
fieldMetadata = getEntityWithGenericFieldMetadataList(rawType, genericType);
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
|
||||||
|
return fieldMetadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取实体带泛型类型的字段填充详情
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/1/14 18:51
|
||||||
|
*/
|
||||||
|
public static Set<FieldMetadata> getEntityWithGenericFieldMetadataList(Type fieldType, Type genericType) {
|
||||||
|
if (fieldType instanceof Class<?>) {
|
||||||
|
Class<?> clazz = (Class<?>) fieldType;
|
||||||
|
// 获取主类型的所有带泛型的属性
|
||||||
|
Set<FieldMetadata> fieldDetailMetadataSet = createFieldDetailMetadataSet(clazz);
|
||||||
|
for (FieldMetadata fieldMetadata : fieldDetailMetadataSet) {
|
||||||
|
// 如果是带泛型集合,如下情况List<T>,又或是直接 T 这种形式
|
||||||
|
if (FieldTypeEnum.COLLECTION_WITH_OBJECT.getCode().equals(fieldMetadata.getFieldType())
|
||||||
|
|| FieldTypeEnum.WITH_UNKNOWN_GENERIC.getCode().equals(fieldMetadata.getFieldType())) {
|
||||||
|
// 设置这个字段的子字段描述
|
||||||
|
fieldMetadata.setGenericFieldMetadata(createFieldDetailMetadataSet(genericType));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果T在携带在一个实体类上,例如ResponseData<T>这种形式
|
||||||
|
else if (FieldTypeEnum.OBJECT_WITH_GENERIC.getCode().equals(fieldMetadata.getFieldType())) {
|
||||||
|
// 设置这个字段的子字段描述
|
||||||
|
Set<FieldMetadata> current = null;
|
||||||
|
try {
|
||||||
|
current = getEntityWithGenericFieldMetadataList(Class.forName(fieldMetadata.getFieldClassPath()), genericType);
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
log.error("类无法找到" + fieldMetadata.getFieldClassPath(), e);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
fieldMetadata.setGenericFieldMetadata(current);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return fieldDetailMetadataSet;
|
||||||
|
} else {
|
||||||
|
log.info("带泛型的实体主题rawType非Class类型" + fieldType);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
package cn.stylefeng.roses.kernel.scanner.api.factory;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.scanner.api.enums.FieldTypeEnum;
|
||||||
|
import cn.stylefeng.roses.kernel.scanner.api.factory.description.ClassDescriptionUtil;
|
||||||
|
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.FieldMetadata;
|
||||||
|
import cn.stylefeng.roses.kernel.scanner.api.util.ClassTypeUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import java.lang.reflect.ParameterizedType;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 字段信息创建工具
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/1/13 13:49
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class ClassMetadataFactory {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过传入的类型(Class或ParameterizedType)进行字段校验,解析出字段的元数据
|
||||||
|
*
|
||||||
|
* @param type 类型
|
||||||
|
* @return 传入类型的字段元数据信息
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/1/13 13:51
|
||||||
|
*/
|
||||||
|
public static FieldMetadata beginCreateFieldMetadata(Type type) {
|
||||||
|
|
||||||
|
// 获取类型的枚举
|
||||||
|
FieldTypeEnum classFieldType = ClassTypeUtil.getClassFieldType(type);
|
||||||
|
|
||||||
|
// 设置响应结果
|
||||||
|
FieldMetadata fieldMetadata = null;
|
||||||
|
|
||||||
|
// 组装类的基本信息
|
||||||
|
if (type instanceof Class<?>) {
|
||||||
|
Class<?> clazz = (Class<?>) type;
|
||||||
|
|
||||||
|
// 创建类型的基本信息
|
||||||
|
fieldMetadata = ClassDescriptionUtil.createClassMetadata(clazz, classFieldType);
|
||||||
|
|
||||||
|
// 补充类型的子信息
|
||||||
|
Set<FieldMetadata> fieldDetailMetadataSet = ClassDetailMetadataFactory.createFieldDetailMetadataSet(clazz);
|
||||||
|
fieldMetadata.setGenericFieldMetadata(fieldDetailMetadataSet);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果是带泛型的
|
||||||
|
else if (type instanceof ParameterizedType) {
|
||||||
|
ParameterizedType parameterizedType = (ParameterizedType) type;
|
||||||
|
|
||||||
|
// 创建类型的基本信息
|
||||||
|
FieldMetadata baseMetadata = ClassDescriptionUtil.createParameterizedMetadata(parameterizedType, classFieldType);
|
||||||
|
|
||||||
|
// 补充类型的子信息
|
||||||
|
Set<FieldMetadata> fieldDetailMetadataSet = ClassDetailMetadataFactory.createFieldDetailMetadataSet(type);
|
||||||
|
baseMetadata.setGenericFieldMetadata(fieldDetailMetadataSet);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 其他情况
|
||||||
|
else {
|
||||||
|
log.info("未知类型的处理,既不是class也不是ParameterizedType,打印出类的信息如下:{}", type.getTypeName());
|
||||||
|
}
|
||||||
|
|
||||||
|
return fieldMetadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,279 +0,0 @@
|
||||||
package cn.stylefeng.roses.kernel.scanner.api.factory;
|
|
||||||
|
|
||||||
import cn.hutool.core.collection.ListUtil;
|
|
||||||
import cn.hutool.core.util.ClassUtil;
|
|
||||||
import cn.hutool.core.util.IdUtil;
|
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.enums.FieldMetadataTypeEnum;
|
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.enums.FieldTypeEnum;
|
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.FieldMetadata;
|
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.util.ClassReflectUtil;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
|
|
||||||
import java.lang.annotation.Annotation;
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.lang.reflect.ParameterizedType;
|
|
||||||
import java.lang.reflect.Type;
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 字段信息创建工具
|
|
||||||
*
|
|
||||||
* @author fengshuonan
|
|
||||||
* @date 2022/1/13 13:49
|
|
||||||
*/
|
|
||||||
@Slf4j
|
|
||||||
public class FieldMetadataFactory {
|
|
||||||
|
|
||||||
private List<String> entityScanPackage = ListUtil.list(false, "cn.stylefeng");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 通过传入的类型(Class或ParameterizedType)进行字段校验,解析出字段的元数据
|
|
||||||
*
|
|
||||||
* @param type 类型
|
|
||||||
* @return 传入类型的字段元数据信息
|
|
||||||
* @author fengshuonan
|
|
||||||
* @date 2022/1/13 13:51
|
|
||||||
*/
|
|
||||||
public FieldMetadata beginCreateFieldMetadata(Type type) {
|
|
||||||
if (type instanceof Class) {
|
|
||||||
return this.processClass((Class<?>) type);
|
|
||||||
} else if (type instanceof ParameterizedType) {
|
|
||||||
return this.processParameterizedType((ParameterizedType) type);
|
|
||||||
}
|
|
||||||
// 其他情况,暂不处理
|
|
||||||
return new FieldMetadata();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 处理class类型
|
|
||||||
*
|
|
||||||
* @author fengshuonan
|
|
||||||
* @date 2022/1/13 13:56
|
|
||||||
*/
|
|
||||||
private FieldMetadata processClass(Class<?> clazz) {
|
|
||||||
|
|
||||||
// 如果是基本类型
|
|
||||||
if (ClassUtil.isSimpleValueType(clazz)) {
|
|
||||||
return createClassMetadata(clazz, FieldTypeEnum.BASIC);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果是基本数组类型
|
|
||||||
else if (clazz.isArray()) {
|
|
||||||
FieldMetadata classMetadata = createClassMetadata(clazz, FieldTypeEnum.ARRAY);
|
|
||||||
// 数组元素真实类型
|
|
||||||
Class<?> componentType = clazz.getComponentType();
|
|
||||||
FieldMetadata fieldMetadata = processClass(componentType);
|
|
||||||
classMetadata.addOneSubFieldMetadata(fieldMetadata);
|
|
||||||
return classMetadata;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果是集合类型,纯集合类型,不带泛型
|
|
||||||
else if (Collection.class.isAssignableFrom(clazz)) {
|
|
||||||
return createClassMetadata(clazz, FieldTypeEnum.ARRAY);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果是实体对象类型
|
|
||||||
else if (this.ensureEntityFlag(clazz)) {
|
|
||||||
FieldMetadata classMetadata = createClassMetadata(clazz, FieldTypeEnum.OBJECT);
|
|
||||||
|
|
||||||
// 获取每个字段的元数据信息,开始组装
|
|
||||||
Field[] fields = clazz.getFields();
|
|
||||||
HashSet<FieldMetadata> fieldMetadataSet = new HashSet<>();
|
|
||||||
for (Field field : fields) {
|
|
||||||
// 获取字段的具体属性
|
|
||||||
FieldMetadata fieldMetadata = this.createFieldMetadata(field);
|
|
||||||
fieldMetadataSet.add(fieldMetadata);
|
|
||||||
}
|
|
||||||
classMetadata.setGenericFieldMetadata(fieldMetadataSet);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 其他类型,暂不处理
|
|
||||||
else {
|
|
||||||
log.info("未知类型的处理,打印出类的信息如下:{}", clazz.toGenericString());
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 处理带泛型的类型
|
|
||||||
*
|
|
||||||
* @author fengshuonan
|
|
||||||
* @date 2022/1/13 13:56
|
|
||||||
*/
|
|
||||||
private FieldMetadata processParameterizedType(ParameterizedType parameterizedType) {
|
|
||||||
|
|
||||||
// 获取泛型的主体
|
|
||||||
Type rawType = parameterizedType.getRawType();
|
|
||||||
|
|
||||||
// 获取泛型的具体参数,只处理带一个泛型的
|
|
||||||
Type actualTypeArgument = parameterizedType.getActualTypeArguments()[0];
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 判断类类型是否是扫描的包范围之内
|
|
||||||
*
|
|
||||||
* @author fengshuonan
|
|
||||||
* @date 2022/1/13 17:49
|
|
||||||
*/
|
|
||||||
private boolean ensureEntityFlag(Class<?> clazz) {
|
|
||||||
for (String packageName : entityScanPackage) {
|
|
||||||
if (clazz.getName().startsWith(packageName)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取类类型的类别
|
|
||||||
*
|
|
||||||
* @author fengshuonan
|
|
||||||
* @date 2022/1/14 0:25
|
|
||||||
*/
|
|
||||||
private FieldTypeEnum getClassFieldType(Class<?> clazz) {
|
|
||||||
// 如果是基本类型
|
|
||||||
if (ClassUtil.isSimpleValueType(clazz)) {
|
|
||||||
return FieldTypeEnum.BASIC;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果是基本数组类型
|
|
||||||
else if (clazz.isArray()) {
|
|
||||||
return FieldTypeEnum.ARRAY;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果是集合类型,纯集合类型,不带泛型
|
|
||||||
else if (Collection.class.isAssignableFrom(clazz)) {
|
|
||||||
return FieldTypeEnum.ARRAY;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果是实体对象类型
|
|
||||||
else if (this.ensureEntityFlag(clazz)) {
|
|
||||||
return FieldTypeEnum.OBJECT;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 其他类型,暂不处理
|
|
||||||
else {
|
|
||||||
log.info("未知类型的处理,打印出类的信息如下:{}", clazz.toGenericString());
|
|
||||||
return FieldTypeEnum.OTHER;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建类或数组的元数据
|
|
||||||
*
|
|
||||||
* @author fengshuonan
|
|
||||||
* @date 2022/1/13 18:06
|
|
||||||
*/
|
|
||||||
private FieldMetadata createClassMetadata(Class<?> clazz, FieldTypeEnum fieldTypeEnum) {
|
|
||||||
FieldMetadata fieldMetadataItem = new FieldMetadata();
|
|
||||||
// 设置唯一id
|
|
||||||
fieldMetadataItem.setMetadataId(IdUtil.fastSimpleUUID());
|
|
||||||
// 设置字段中文含义
|
|
||||||
fieldMetadataItem.setChineseName(clazz.getSimpleName());
|
|
||||||
// 设置字段类类型
|
|
||||||
fieldMetadataItem.setFieldClassType(clazz.getSimpleName());
|
|
||||||
// 设置类的全路径
|
|
||||||
fieldMetadataItem.setFieldClassPath(clazz.getName());
|
|
||||||
// 设置对应字段名称,无字段名称则填写类的简称
|
|
||||||
fieldMetadataItem.setFieldName(clazz.getSimpleName());
|
|
||||||
// 设置是否带泛型
|
|
||||||
fieldMetadataItem.setGenericFieldMetadataType(FieldMetadataTypeEnum.FIELD.getCode());
|
|
||||||
// 设置字段类型,基本、数组、还是object
|
|
||||||
fieldMetadataItem.setFieldType(fieldTypeEnum.getCode());
|
|
||||||
// 设置字段
|
|
||||||
return fieldMetadataItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建类内字段的元数据
|
|
||||||
*
|
|
||||||
* @author fengshuonan
|
|
||||||
* @date 2022/1/13 18:06
|
|
||||||
*/
|
|
||||||
private FieldMetadata createFieldMetadata(Field field) {
|
|
||||||
FieldMetadata fieldMetadataItem = new FieldMetadata();
|
|
||||||
// 设置唯一id
|
|
||||||
fieldMetadataItem.setMetadataId(IdUtil.fastSimpleUUID());
|
|
||||||
// 设置字段中文含义
|
|
||||||
ChineseDescription annotation = field.getAnnotation(ChineseDescription.class);
|
|
||||||
if (annotation != null) {
|
|
||||||
fieldMetadataItem.setChineseName(annotation.value());
|
|
||||||
}
|
|
||||||
// 设置字段类类型
|
|
||||||
Class<?> fieldType = field.getType();
|
|
||||||
fieldMetadataItem.setFieldClassType(fieldType.getSimpleName());
|
|
||||||
// 设置类的全路径
|
|
||||||
fieldMetadataItem.setFieldClassPath(fieldType.getName());
|
|
||||||
// 设置对应字段名称
|
|
||||||
fieldMetadataItem.setFieldName(field.getName());
|
|
||||||
// 处理注解信息
|
|
||||||
parsingAnnotation(field, fieldMetadataItem);
|
|
||||||
// 设置是否带泛型
|
|
||||||
Type genericType = field.getGenericType();
|
|
||||||
if (genericType instanceof ParameterizedType) {
|
|
||||||
fieldMetadataItem.setGenericFieldMetadataType(FieldMetadataTypeEnum.GENERIC.getCode());
|
|
||||||
} else {
|
|
||||||
fieldMetadataItem.setGenericFieldMetadataType(FieldMetadataTypeEnum.FIELD.getCode());
|
|
||||||
}
|
|
||||||
// 设置字段类型,基本、数组、还是object
|
|
||||||
fieldMetadataItem.setFieldType(getClassFieldType(fieldType).getCode());
|
|
||||||
// 处理本字段的子字段信息
|
|
||||||
fieldMetadataItem.setGenericFieldMetadata(getFieldSubMetadataSet(field));
|
|
||||||
// 设置字段
|
|
||||||
return fieldMetadataItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取一个字段的子类型集合,如果改字段没有子类型则返回null即可
|
|
||||||
*
|
|
||||||
* @author fengshuonan
|
|
||||||
* @date 2022/1/14 0:45
|
|
||||||
*/
|
|
||||||
private static Set<FieldMetadata> getFieldSubMetadataSet(Field field) {
|
|
||||||
|
|
||||||
Type genericType = field.getGenericType();
|
|
||||||
|
|
||||||
if (genericType instanceof Class<?>) {
|
|
||||||
|
|
||||||
} else if (genericType instanceof ParameterizedType) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 解析所有注解
|
|
||||||
*
|
|
||||||
* @author majianguo
|
|
||||||
* @date 2022/1/7 18:26
|
|
||||||
**/
|
|
||||||
private static void parsingAnnotation(Field declaredField, FieldMetadata fieldDescription) {
|
|
||||||
Annotation[] annotations = declaredField.getAnnotations();
|
|
||||||
if (annotations != null && annotations.length > 0) {
|
|
||||||
|
|
||||||
// 设置字段的所有注解
|
|
||||||
fieldDescription.setAnnotations(ClassReflectUtil.annotationsToStrings(annotations));
|
|
||||||
|
|
||||||
// 遍历字段上的所有注解,找到带groups属性的,按group分类组装注解
|
|
||||||
Map<String, Set<String>> groupAnnotations = new HashMap<>();
|
|
||||||
for (Annotation annotation : annotations) {
|
|
||||||
Class<?>[] validateGroupsClasses = ClassReflectUtil.invokeAnnotationMethodIgnoreError(annotation, "groups", Class[].class);
|
|
||||||
if (validateGroupsClasses != null) {
|
|
||||||
for (Class<?> validateGroupsClass : validateGroupsClasses) {
|
|
||||||
ClassReflectUtil.addGroupValidateAnnotation(annotation, validateGroupsClass, groupAnnotations);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 设置分组注解
|
|
||||||
fieldDescription.setGroupValidationMessage(groupAnnotations);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
package cn.stylefeng.roses.kernel.scanner.api.factory.description;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.IdUtil;
|
||||||
|
import cn.stylefeng.roses.kernel.scanner.api.enums.FieldMetadataTypeEnum;
|
||||||
|
import cn.stylefeng.roses.kernel.scanner.api.enums.FieldTypeEnum;
|
||||||
|
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.FieldMetadata;
|
||||||
|
|
||||||
|
import java.lang.reflect.ParameterizedType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类的元数据描述
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/1/14 10:59
|
||||||
|
*/
|
||||||
|
public class ClassDescriptionUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建针对类的基础描述
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/1/13 18:06
|
||||||
|
*/
|
||||||
|
public static FieldMetadata createClassMetadata(Class<?> clazz, FieldTypeEnum fieldTypeEnum) {
|
||||||
|
FieldMetadata fieldMetadataItem = new FieldMetadata();
|
||||||
|
// 设置唯一id
|
||||||
|
fieldMetadataItem.setMetadataId(IdUtil.fastSimpleUUID());
|
||||||
|
// 设置字段中文含义
|
||||||
|
fieldMetadataItem.setChineseName(clazz.getSimpleName());
|
||||||
|
// 设置字段类类型
|
||||||
|
fieldMetadataItem.setFieldClassType(clazz.getSimpleName());
|
||||||
|
// 设置类的全路径
|
||||||
|
fieldMetadataItem.setFieldClassPath(clazz.getName());
|
||||||
|
// 设置对应字段名称,无字段名称则填写类的简称
|
||||||
|
fieldMetadataItem.setFieldName(null);
|
||||||
|
// 设置是否带泛型
|
||||||
|
fieldMetadataItem.setGenericFieldMetadataType(FieldMetadataTypeEnum.FIELD.getCode());
|
||||||
|
// 设置字段类型,基本、数组、还是object
|
||||||
|
fieldMetadataItem.setFieldType(fieldTypeEnum.getCode());
|
||||||
|
// 设置字段
|
||||||
|
return fieldMetadataItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建针对类的基础描述
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/1/13 18:06
|
||||||
|
*/
|
||||||
|
public static FieldMetadata createParameterizedMetadata(ParameterizedType parameterizedType, FieldTypeEnum fieldTypeEnum) {
|
||||||
|
Class<?> rawType = (Class<?>) parameterizedType.getRawType();
|
||||||
|
return createClassMetadata(rawType, fieldTypeEnum);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,96 @@
|
||||||
|
package cn.stylefeng.roses.kernel.scanner.api.factory.description;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.IdUtil;
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
|
import cn.stylefeng.roses.kernel.scanner.api.enums.FieldMetadataTypeEnum;
|
||||||
|
import cn.stylefeng.roses.kernel.scanner.api.enums.FieldTypeEnum;
|
||||||
|
import cn.stylefeng.roses.kernel.scanner.api.factory.ClassDetailMetadataFactory;
|
||||||
|
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.FieldMetadata;
|
||||||
|
import cn.stylefeng.roses.kernel.scanner.api.util.ClassReflectUtil;
|
||||||
|
import cn.stylefeng.roses.kernel.scanner.api.util.ClassTypeUtil;
|
||||||
|
|
||||||
|
import java.lang.annotation.Annotation;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.ParameterizedType;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 字段的元数据描述
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/1/14 10:59
|
||||||
|
*/
|
||||||
|
public class FieldDescriptionUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建类内字段的元数据
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/1/13 18:06
|
||||||
|
*/
|
||||||
|
public static FieldMetadata createFieldMetadata(Field field) {
|
||||||
|
FieldMetadata fieldMetadataItem = new FieldMetadata();
|
||||||
|
// 设置唯一id
|
||||||
|
fieldMetadataItem.setMetadataId(IdUtil.fastSimpleUUID());
|
||||||
|
// 设置字段中文含义
|
||||||
|
ChineseDescription annotation = field.getAnnotation(ChineseDescription.class);
|
||||||
|
if (annotation != null) {
|
||||||
|
fieldMetadataItem.setChineseName(annotation.value());
|
||||||
|
}
|
||||||
|
// 设置字段类类型
|
||||||
|
Class<?> classType = field.getType();
|
||||||
|
fieldMetadataItem.setFieldClassType(classType.getSimpleName());
|
||||||
|
// 设置类的全路径
|
||||||
|
fieldMetadataItem.setFieldClassPath(classType.getName());
|
||||||
|
// 设置对应字段名称
|
||||||
|
fieldMetadataItem.setFieldName(field.getName());
|
||||||
|
// 处理注解信息
|
||||||
|
parsingAnnotation(field, fieldMetadataItem);
|
||||||
|
// 设置是否带泛型
|
||||||
|
Type genericType = field.getGenericType();
|
||||||
|
if (genericType instanceof ParameterizedType) {
|
||||||
|
fieldMetadataItem.setGenericFieldMetadataType(FieldMetadataTypeEnum.GENERIC.getCode());
|
||||||
|
} else {
|
||||||
|
fieldMetadataItem.setGenericFieldMetadataType(FieldMetadataTypeEnum.FIELD.getCode());
|
||||||
|
}
|
||||||
|
// 设置字段类型,基本、数组、还是object
|
||||||
|
FieldTypeEnum classFieldType = ClassTypeUtil.getClassFieldType(genericType);
|
||||||
|
fieldMetadataItem.setFieldType(classFieldType.getCode());
|
||||||
|
// 根据情况,获取字段的具体子数据描述
|
||||||
|
Set<FieldMetadata> fieldDetailMetadataSet = ClassDetailMetadataFactory.createFieldDetailMetadataSet(genericType);
|
||||||
|
fieldMetadataItem.setGenericFieldMetadata(fieldDetailMetadataSet);
|
||||||
|
return fieldMetadataItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解析字段上的注解
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/1/14 11:57
|
||||||
|
*/
|
||||||
|
private static void parsingAnnotation(Field declaredField, FieldMetadata fieldDescription) {
|
||||||
|
Annotation[] annotations = declaredField.getAnnotations();
|
||||||
|
if (annotations != null && annotations.length > 0) {
|
||||||
|
|
||||||
|
// 设置字段的所有注解
|
||||||
|
fieldDescription.setAnnotations(ClassReflectUtil.annotationsToStrings(annotations));
|
||||||
|
|
||||||
|
// 遍历字段上的所有注解,找到带groups属性的,按group分类组装注解
|
||||||
|
Map<String, Set<String>> groupAnnotations = new HashMap<>();
|
||||||
|
for (Annotation annotation : annotations) {
|
||||||
|
Class<?>[] validateGroupsClasses = ClassReflectUtil.invokeAnnotationMethodIgnoreError(annotation, "groups", Class[].class);
|
||||||
|
if (validateGroupsClasses != null) {
|
||||||
|
for (Class<?> validateGroupsClass : validateGroupsClasses) {
|
||||||
|
ClassReflectUtil.addGroupValidateAnnotation(annotation, validateGroupsClass, groupAnnotations);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 设置分组注解
|
||||||
|
fieldDescription.setGroupValidationMessage(groupAnnotations);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -24,11 +24,9 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.scanner.api.pojo.resource;
|
package cn.stylefeng.roses.kernel.scanner.api.pojo.resource;
|
||||||
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
@ -112,20 +110,4 @@ public class FieldMetadata {
|
||||||
@ChineseDescription("泛型或object类型的字段的描述")
|
@ChineseDescription("泛型或object类型的字段的描述")
|
||||||
private Set<FieldMetadata> genericFieldMetadata;
|
private Set<FieldMetadata> genericFieldMetadata;
|
||||||
|
|
||||||
/**
|
|
||||||
* 添加一个子数据
|
|
||||||
*
|
|
||||||
* @author fengshuonan
|
|
||||||
* @date 2022/1/14 0:02
|
|
||||||
*/
|
|
||||||
public void addOneSubFieldMetadata(FieldMetadata fieldMetadata) {
|
|
||||||
if (ObjectUtil.isEmpty(this.genericFieldMetadata)) {
|
|
||||||
HashSet<FieldMetadata> subMetadataSet = new HashSet<>();
|
|
||||||
subMetadataSet.add(fieldMetadata);
|
|
||||||
this.genericFieldMetadata = subMetadataSet;
|
|
||||||
} else {
|
|
||||||
this.genericFieldMetadata.add(fieldMetadata);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.scanner.api.pojo.resource;
|
package cn.stylefeng.roses.kernel.scanner.api.pojo.resource;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.scanner.api.pojo.resource;
|
package cn.stylefeng.roses.kernel.scanner.api.pojo.resource;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -29,7 +29,7 @@ import cn.hutool.core.util.ClassUtil;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.TypeUtil;
|
import cn.hutool.core.util.TypeUtil;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.enums.FieldMetadataTypeEnum;
|
import cn.stylefeng.roses.kernel.scanner.api.enums.FieldMetadataTypeEnum;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.FieldMetadata;
|
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.FieldMetadata;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,145 @@
|
||||||
|
package cn.stylefeng.roses.kernel.scanner.api.util;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.ListUtil;
|
||||||
|
import cn.hutool.core.util.ClassUtil;
|
||||||
|
import cn.stylefeng.roses.kernel.scanner.api.enums.FieldTypeEnum;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import sun.reflect.generics.reflectiveObjects.TypeVariableImpl;
|
||||||
|
|
||||||
|
import java.lang.reflect.ParameterizedType;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取类类型的工具
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/1/14 16:42
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class ClassTypeUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 认定为实体对象的包结构,如果属于此包结构,则会被认定为实体结构
|
||||||
|
*/
|
||||||
|
public static List<String> entityScanPackage = ListUtil.list(false, "cn.stylefeng");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断类类型是否是扫描的包范围之内
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/1/13 17:49
|
||||||
|
*/
|
||||||
|
public static boolean ensureEntityFlag(Class<?> clazz) {
|
||||||
|
for (String packageName : entityScanPackage) {
|
||||||
|
if (clazz.getName().startsWith(packageName)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取类类型的类别
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/1/14 0:25
|
||||||
|
*/
|
||||||
|
public static FieldTypeEnum getClassFieldType(Type type) {
|
||||||
|
|
||||||
|
// 如果是具体类,不带泛型
|
||||||
|
if (type instanceof Class) {
|
||||||
|
|
||||||
|
Class<?> clazz = (Class<?>) type;
|
||||||
|
|
||||||
|
// 判断是否是基本类型,如果是Map或者Object,也认定为基本类型,不解析他们的字段
|
||||||
|
if (ClassUtil.isSimpleValueType(clazz)) {
|
||||||
|
return FieldTypeEnum.BASIC;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断是否是数组类型
|
||||||
|
else if (clazz.isArray()) {
|
||||||
|
// 获取array的具体类型
|
||||||
|
Class<?> componentType = clazz.getComponentType();
|
||||||
|
if (ClassUtil.isSimpleValueType(componentType)) {
|
||||||
|
return FieldTypeEnum.BASE_ARRAY;
|
||||||
|
} else {
|
||||||
|
return FieldTypeEnum.ARRAY_WITH_OBJECT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果是集合类型,纯集合类型,不带泛型
|
||||||
|
else if (Collection.class.isAssignableFrom(clazz)) {
|
||||||
|
return FieldTypeEnum.BASE_COLLECTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果是实体对象类型
|
||||||
|
else if (ClassTypeUtil.ensureEntityFlag(clazz)) {
|
||||||
|
return FieldTypeEnum.OBJECT;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果是Object类型,则认定为基本类型,不解析他的具体内容
|
||||||
|
else if (Object.class.equals(clazz)) {
|
||||||
|
return FieldTypeEnum.BASIC;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 其他类型,暂不处理
|
||||||
|
else {
|
||||||
|
log.info("类型是Class,但有处理不到的情况,打印出类的信息如下:{}", clazz.toGenericString());
|
||||||
|
return FieldTypeEnum.OTHER;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果带具体泛型的类
|
||||||
|
else if (type instanceof ParameterizedType) {
|
||||||
|
|
||||||
|
ParameterizedType parameterizedType = (ParameterizedType) type;
|
||||||
|
|
||||||
|
// 泛型类的主体
|
||||||
|
Type rawType = parameterizedType.getRawType();
|
||||||
|
|
||||||
|
if (rawType instanceof Class<?>) {
|
||||||
|
Class<?> rawTypeClass = (Class<?>) rawType;
|
||||||
|
|
||||||
|
// 如果泛型主体是集合
|
||||||
|
if (Collection.class.isAssignableFrom(rawTypeClass)) {
|
||||||
|
return FieldTypeEnum.COLLECTION_WITH_OBJECT;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果泛型的主体是实体包装类
|
||||||
|
else if (ClassTypeUtil.ensureEntityFlag(rawTypeClass)) {
|
||||||
|
return FieldTypeEnum.OBJECT_WITH_GENERIC;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果是map类型,则认定为基本类型,不做处理,不解析他的元数据
|
||||||
|
else if (Map.class.isAssignableFrom(rawTypeClass)) {
|
||||||
|
return FieldTypeEnum.BASIC;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 泛型的主体情况不确定,不处理
|
||||||
|
else {
|
||||||
|
log.info("泛型的主体情况不确定,不处理,打印出rawTypeClass:{}", rawTypeClass.getName());
|
||||||
|
return FieldTypeEnum.OTHER;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 泛型的主体是别的类型
|
||||||
|
log.info("rawType为非Class类型?打印出rawType:{}", rawType.getTypeName());
|
||||||
|
return FieldTypeEnum.OTHER;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 带T的参数,例如解析到ResponseData<T>中的data字段是带T的
|
||||||
|
else if (type instanceof TypeVariableImpl<?>) {
|
||||||
|
return FieldTypeEnum.WITH_UNKNOWN_GENERIC;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 其他情况,既不是class也不是ParameterizedType
|
||||||
|
else {
|
||||||
|
log.info("未知类型的处理,既不是class也不是ParameterizedType,打印出类的信息如下:{}", type.getTypeName());
|
||||||
|
return FieldTypeEnum.OTHER;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.security.api.pojo;
|
package cn.stylefeng.roses.kernel.security.api.pojo;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package cn.stylefeng.roses.kernel.customer.modular.entity;
|
package cn.stylefeng.roses.kernel.customer.modular.entity;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package cn.stylefeng.roses.kernel.customer.modular.request;
|
package cn.stylefeng.roses.kernel.customer.modular.request;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.app;
|
package cn.stylefeng.roses.kernel.system.api.pojo.app;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import cn.stylefeng.roses.kernel.validator.api.validators.status.StatusValue;
|
import cn.stylefeng.roses.kernel.validator.api.validators.status.StatusValue;
|
||||||
import cn.stylefeng.roses.kernel.validator.api.validators.unique.TableUniqueValue;
|
import cn.stylefeng.roses.kernel.validator.api.validators.unique.TableUniqueValue;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.app;
|
package cn.stylefeng.roses.kernel.system.api.pojo.app;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.login;
|
package cn.stylefeng.roses.kernel.system.api.pojo.login;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.menu;
|
package cn.stylefeng.roses.kernel.system.api.pojo.menu;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
|
import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.menu;
|
package cn.stylefeng.roses.kernel.system.api.pojo.menu;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import cn.stylefeng.roses.kernel.validator.api.validators.unique.TableUniqueValue;
|
import cn.stylefeng.roses.kernel.validator.api.validators.unique.TableUniqueValue;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.menu;
|
package cn.stylefeng.roses.kernel.system.api.pojo.menu;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import cn.stylefeng.roses.kernel.validator.api.validators.flag.FlagValue;
|
import cn.stylefeng.roses.kernel.validator.api.validators.flag.FlagValue;
|
||||||
import cn.stylefeng.roses.kernel.validator.api.validators.unique.TableUniqueValue;
|
import cn.stylefeng.roses.kernel.validator.api.validators.unique.TableUniqueValue;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.menu;
|
package cn.stylefeng.roses.kernel.system.api.pojo.menu;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.menu.antd;
|
package cn.stylefeng.roses.kernel.system.api.pojo.menu.antd;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
|
import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.menu.antd;
|
package cn.stylefeng.roses.kernel.system.api.pojo.menu.antd;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.menu.layui;
|
package cn.stylefeng.roses.kernel.system.api.pojo.menu.layui;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
|
import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.notice;
|
package cn.stylefeng.roses.kernel.system.api.pojo.notice;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.organization;
|
package cn.stylefeng.roses.kernel.system.api.pojo.organization;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import cn.stylefeng.roses.kernel.validator.api.validators.status.StatusValue;
|
import cn.stylefeng.roses.kernel.validator.api.validators.status.StatusValue;
|
||||||
import cn.stylefeng.roses.kernel.validator.api.validators.unique.TableUniqueValue;
|
import cn.stylefeng.roses.kernel.validator.api.validators.unique.TableUniqueValue;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.organization;
|
package cn.stylefeng.roses.kernel.system.api.pojo.organization;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import cn.stylefeng.roses.kernel.validator.api.validators.status.StatusValue;
|
import cn.stylefeng.roses.kernel.validator.api.validators.status.StatusValue;
|
||||||
import cn.stylefeng.roses.kernel.validator.api.validators.unique.TableUniqueValue;
|
import cn.stylefeng.roses.kernel.validator.api.validators.unique.TableUniqueValue;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
|
@ -24,9 +24,9 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.organization;
|
package cn.stylefeng.roses.kernel.system.api.pojo.organization;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
|
import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
|
||||||
import cn.stylefeng.roses.kernel.rule.tree.xmtree.base.AbstractXmSelectNode;
|
import cn.stylefeng.roses.kernel.rule.tree.xmtree.base.AbstractXmSelectNode;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.resource;
|
package cn.stylefeng.roses.kernel.system.api.pojo.resource;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
|
import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
|
@ -24,10 +24,8 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.resource;
|
package cn.stylefeng.roses.kernel.system.api.pojo.resource;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
|
|
@ -25,8 +25,8 @@
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.role.dto;
|
package cn.stylefeng.roses.kernel.system.api.pojo.role.dto;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.auth.api.enums.DataScopeTypeEnum;
|
import cn.stylefeng.roses.kernel.auth.api.enums.DataScopeTypeEnum;
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.role.request;
|
package cn.stylefeng.roses.kernel.system.api.pojo.role.request;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import cn.stylefeng.roses.kernel.validator.api.validators.unique.TableUniqueValue;
|
import cn.stylefeng.roses.kernel.validator.api.validators.unique.TableUniqueValue;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.theme;
|
package cn.stylefeng.roses.kernel.system.api.pojo.theme;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.theme;
|
package cn.stylefeng.roses.kernel.system.api.pojo.theme;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.theme;
|
package cn.stylefeng.roses.kernel.system.api.pojo.theme;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.theme;
|
package cn.stylefeng.roses.kernel.system.api.pojo.theme;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.user;
|
package cn.stylefeng.roses.kernel.system.api.pojo.user;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.user;
|
package cn.stylefeng.roses.kernel.system.api.pojo.user;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
|
|
@ -25,9 +25,9 @@
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.user;
|
package cn.stylefeng.roses.kernel.system.api.pojo.user;
|
||||||
|
|
||||||
import cn.hutool.core.collection.IterUtil;
|
import cn.hutool.core.collection.IterUtil;
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.enums.TreeNodeEnum;
|
import cn.stylefeng.roses.kernel.rule.enums.TreeNodeEnum;
|
||||||
import cn.stylefeng.roses.kernel.rule.tree.factory.node.DefaultTreeNode;
|
import cn.stylefeng.roses.kernel.rule.tree.factory.node.DefaultTreeNode;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.user.request;
|
package cn.stylefeng.roses.kernel.system.api.pojo.user.request;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.api.pojo.user.request;
|
package cn.stylefeng.roses.kernel.system.api.pojo.user.request;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import cn.stylefeng.roses.kernel.validator.api.validators.date.DateValue;
|
import cn.stylefeng.roses.kernel.validator.api.validators.date.DateValue;
|
||||||
import cn.stylefeng.roses.kernel.validator.api.validators.phone.PhoneValue;
|
import cn.stylefeng.roses.kernel.validator.api.validators.phone.PhoneValue;
|
||||||
import cn.stylefeng.roses.kernel.validator.api.validators.status.StatusValue;
|
import cn.stylefeng.roses.kernel.validator.api.validators.status.StatusValue;
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
package cn.stylefeng.roses.kernel.system.modular.app.entity;
|
package cn.stylefeng.roses.kernel.system.modular.app.entity;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
|
|
@ -25,8 +25,8 @@
|
||||||
package cn.stylefeng.roses.kernel.system.modular.menu.entity;
|
package cn.stylefeng.roses.kernel.system.modular.menu.entity;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
|
import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
package cn.stylefeng.roses.kernel.system.modular.menu.entity;
|
package cn.stylefeng.roses.kernel.system.modular.menu.entity;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
package cn.stylefeng.roses.kernel.system.modular.menu.entity;
|
package cn.stylefeng.roses.kernel.system.modular.menu.entity;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
|
|
@ -26,7 +26,7 @@ package cn.stylefeng.roses.kernel.system.modular.notice.entity;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||||
import cn.stylefeng.roses.kernel.dict.api.serializer.DictValueSerializer;
|
import cn.stylefeng.roses.kernel.dict.api.serializer.DictValueSerializer;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
|
|
@ -25,14 +25,13 @@
|
||||||
package cn.stylefeng.roses.kernel.system.modular.organization.entity;
|
package cn.stylefeng.roses.kernel.system.modular.organization.entity;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import org.apache.ibatis.annotations.Insert;
|
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
|
|
@ -25,8 +25,8 @@
|
||||||
package cn.stylefeng.roses.kernel.system.modular.organization.entity;
|
package cn.stylefeng.roses.kernel.system.modular.organization.entity;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.tree.xmtree.base.AbstractXmSelectNode;
|
import cn.stylefeng.roses.kernel.rule.tree.xmtree.base.AbstractXmSelectNode;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
package cn.stylefeng.roses.kernel.system.modular.resource.entity;
|
package cn.stylefeng.roses.kernel.system.modular.resource.entity;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
*/
|
*/
|
||||||
package cn.stylefeng.roses.kernel.system.modular.resource.pojo;
|
package cn.stylefeng.roses.kernel.system.modular.resource.pojo;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
|
import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
package cn.stylefeng.roses.kernel.system.modular.role.entity;
|
package cn.stylefeng.roses.kernel.system.modular.role.entity;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package cn.stylefeng.roses.kernel.system.modular.theme.entity;
|
package cn.stylefeng.roses.kernel.system.modular.theme.entity;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import cn.stylefeng.roses.kernel.system.modular.theme.pojo.AntdvFileInfo;
|
import cn.stylefeng.roses.kernel.system.modular.theme.pojo.AntdvFileInfo;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package cn.stylefeng.roses.kernel.system.modular.theme.entity;
|
package cn.stylefeng.roses.kernel.system.modular.theme.entity;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package cn.stylefeng.roses.kernel.system.modular.theme.entity;
|
package cn.stylefeng.roses.kernel.system.modular.theme.entity;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package cn.stylefeng.roses.kernel.system.modular.theme.entity;
|
package cn.stylefeng.roses.kernel.system.modular.theme.entity;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
|
Loading…
Reference in New Issue