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
|
||||
* 6.若您的项目无法满足以上几点,可申请商业授权
|
||||
*/
|
||||
package cn.stylefeng.roses.kernel.scanner.api.annotation.field;
|
||||
package cn.stylefeng.roses.kernel.rule.annotation;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
|
@ -35,7 +35,7 @@ import lombok.EqualsAndHashCode;
|
|||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@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);
|
||||
}
|
||||
|
||||
public ErrorResponseData(String code, String message, Object object) {
|
||||
public ErrorResponseData(String code, String message, T object) {
|
||||
super(Boolean.FALSE, code, message, object);
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
*/
|
||||
package cn.stylefeng.roses.kernel.rule.pojo.response;
|
||||
|
||||
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
|
@ -33,32 +34,36 @@ import lombok.Data;
|
|||
* @date 2020/10/17 17:33
|
||||
*/
|
||||
@Data
|
||||
public class ResponseData {
|
||||
public class ResponseData<T> {
|
||||
|
||||
/**
|
||||
* 请求是否成功
|
||||
*/
|
||||
@ChineseDescription("请求是否成功")
|
||||
private Boolean success;
|
||||
|
||||
/**
|
||||
* 响应状态码
|
||||
*/
|
||||
@ChineseDescription("响应状态码")
|
||||
private String code;
|
||||
|
||||
/**
|
||||
* 响应信息
|
||||
*/
|
||||
@ChineseDescription("响应信息")
|
||||
private String message;
|
||||
|
||||
/**
|
||||
* 响应对象
|
||||
*/
|
||||
private Object data;
|
||||
@ChineseDescription("响应对象")
|
||||
private T data;
|
||||
|
||||
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.code = code;
|
||||
this.message = message;
|
||||
|
|
|
@ -32,17 +32,17 @@ import cn.stylefeng.roses.kernel.rule.constants.RuleConstants;
|
|||
* @author fengshuonan
|
||||
* @date 2020/10/16 16:23
|
||||
*/
|
||||
public class SuccessResponseData extends ResponseData {
|
||||
public class SuccessResponseData<T> extends ResponseData<T> {
|
||||
|
||||
public SuccessResponseData() {
|
||||
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);
|
||||
}
|
||||
|
||||
public SuccessResponseData(String code, String message, Object object) {
|
||||
public SuccessResponseData(String code, String message, T object) {
|
||||
super(Boolean.TRUE, code, message, object);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,8 +24,8 @@
|
|||
*/
|
||||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ package cn.stylefeng.roses.kernel.auth.api.pojo.auth;
|
|||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
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;
|
||||
|
||||
/**
|
||||
|
|
|
@ -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.pojo.login.basic.SimpleRoleInfo;
|
||||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ package cn.stylefeng.roses.kernel.scanner.api.enums;
|
|||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 字段类型
|
||||
* 解析字段元数据时,各种情况的枚举
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2022/1/13 16:37
|
||||
|
@ -41,19 +41,44 @@ public enum FieldTypeEnum {
|
|||
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) {
|
||||
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;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
||||
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
|
@ -112,20 +110,4 @@ public class FieldMetadata {
|
|||
@ChineseDescription("泛型或object类型的字段的描述")
|
||||
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;
|
||||
|
||||
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 lombok.Data;
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
*/
|
||||
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;
|
||||
|
||||
/**
|
||||
|
|
|
@ -29,7 +29,7 @@ import cn.hutool.core.util.ClassUtil;
|
|||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
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.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;
|
||||
|
||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
||||
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package cn.stylefeng.roses.kernel.customer.modular.entity;
|
||||
|
||||
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.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
|
|
@ -24,8 +24,8 @@
|
|||
*/
|
||||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import cn.stylefeng.roses.kernel.validator.api.validators.status.StatusValue;
|
||||
import cn.stylefeng.roses.kernel.validator.api.validators.unique.TableUniqueValue;
|
||||
import lombok.Data;
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
package cn.stylefeng.roses.kernel.system.api.pojo.app;
|
||||
|
||||
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.EqualsAndHashCode;
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
*/
|
||||
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.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
|
|
@ -24,8 +24,8 @@
|
|||
*/
|
||||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
|
|
@ -24,8 +24,8 @@
|
|||
*/
|
||||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import cn.stylefeng.roses.kernel.validator.api.validators.unique.TableUniqueValue;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
|
|
@ -24,8 +24,8 @@
|
|||
*/
|
||||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import cn.stylefeng.roses.kernel.validator.api.validators.flag.FlagValue;
|
||||
import cn.stylefeng.roses.kernel.validator.api.validators.unique.TableUniqueValue;
|
||||
import lombok.Data;
|
||||
|
|
|
@ -24,8 +24,8 @@
|
|||
*/
|
||||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
|
|
@ -24,8 +24,8 @@
|
|||
*/
|
||||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
*/
|
||||
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 java.util.List;
|
||||
|
|
|
@ -24,8 +24,8 @@
|
|||
*/
|
||||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
|
|
@ -24,8 +24,8 @@
|
|||
*/
|
||||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
|
|
@ -24,8 +24,8 @@
|
|||
*/
|
||||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import cn.stylefeng.roses.kernel.validator.api.validators.status.StatusValue;
|
||||
import cn.stylefeng.roses.kernel.validator.api.validators.unique.TableUniqueValue;
|
||||
import lombok.Data;
|
||||
|
|
|
@ -24,8 +24,8 @@
|
|||
*/
|
||||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import cn.stylefeng.roses.kernel.validator.api.validators.status.StatusValue;
|
||||
import cn.stylefeng.roses.kernel.validator.api.validators.unique.TableUniqueValue;
|
||||
import lombok.Data;
|
||||
|
|
|
@ -24,9 +24,9 @@
|
|||
*/
|
||||
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.xmtree.base.AbstractXmSelectNode;
|
||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
|
|
@ -24,8 +24,8 @@
|
|||
*/
|
||||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
|
|
@ -24,10 +24,8 @@
|
|||
*/
|
||||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
|
|
@ -25,8 +25,8 @@
|
|||
package cn.stylefeng.roses.kernel.system.api.pojo.role.dto;
|
||||
|
||||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
|
|
@ -24,8 +24,8 @@
|
|||
*/
|
||||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import cn.stylefeng.roses.kernel.validator.api.validators.unique.TableUniqueValue;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
*/
|
||||
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 java.util.Date;
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
*/
|
||||
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 lombok.Data;
|
||||
|
||||
|
|
|
@ -25,9 +25,9 @@
|
|||
package cn.stylefeng.roses.kernel.system.api.pojo.user;
|
||||
|
||||
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.tree.factory.node.DefaultTreeNode;
|
||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
*/
|
||||
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 javax.validation.constraints.NotBlank;
|
||||
|
|
|
@ -24,8 +24,8 @@
|
|||
*/
|
||||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
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.status.StatusValue;
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
package cn.stylefeng.roses.kernel.system.modular.app.entity;
|
||||
|
||||
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.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
|
|
|
@ -25,8 +25,8 @@
|
|||
package cn.stylefeng.roses.kernel.system.modular.menu.entity;
|
||||
|
||||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
package cn.stylefeng.roses.kernel.system.modular.menu.entity;
|
||||
|
||||
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.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
package cn.stylefeng.roses.kernel.system.modular.menu.entity;
|
||||
|
||||
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.TableId;
|
||||
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.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.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
|
|
|
@ -25,14 +25,13 @@
|
|||
package cn.stylefeng.roses.kernel.system.modular.organization.entity;
|
||||
|
||||
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.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.apache.ibatis.annotations.Insert;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
|
|
|
@ -25,8 +25,8 @@
|
|||
package cn.stylefeng.roses.kernel.system.modular.organization.entity;
|
||||
|
||||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
package cn.stylefeng.roses.kernel.system.modular.resource.entity;
|
||||
|
||||
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.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
|
|
|
@ -24,8 +24,8 @@
|
|||
*/
|
||||
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.scanner.api.annotation.field.ChineseDescription;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
package cn.stylefeng.roses.kernel.system.modular.role.entity;
|
||||
|
||||
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 lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package cn.stylefeng.roses.kernel.system.modular.theme.entity;
|
||||
|
||||
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 com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package cn.stylefeng.roses.kernel.system.modular.theme.entity;
|
||||
|
||||
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.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package cn.stylefeng.roses.kernel.system.modular.theme.entity;
|
||||
|
||||
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.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package cn.stylefeng.roses.kernel.system.modular.theme.entity;
|
||||
|
||||
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.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
|
|
Loading…
Reference in New Issue