From 4909c17f9036942705f1279360165409291ed268 Mon Sep 17 00:00:00 2001 From: wangyu <727842003@qq.com> Date: Sun, 5 Sep 2021 00:32:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8F=90=E4=BE=9B=E8=AF=B8=E5=A4=9A?= =?UTF-8?q?=E7=AE=80=E5=8C=96=E9=85=8D=E7=BD=AE=EF=BC=8C=E6=9B=B4=E8=BD=BB?= =?UTF-8?q?=E6=9D=BE=E5=AE=9E=E7=8E=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/flyfish/framework/annotations/Order.java | 15 +++++++++++++++ .../framework/annotations/PropertyGroup.java | 8 ++++++++ .../framework/beans/meta/BeanController.java | 12 +++++++++++- .../framework/beans/meta/BeanProperty.java | 14 +++++++++++++- 4 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 flyfish-data/src/main/java/com/flyfish/framework/annotations/Order.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/Order.java b/flyfish-data/src/main/java/com/flyfish/framework/annotations/Order.java new file mode 100644 index 0000000..38ca3cb --- /dev/null +++ b/flyfish-data/src/main/java/com/flyfish/framework/annotations/Order.java @@ -0,0 +1,15 @@ +package com.flyfish.framework.annotations; + +import java.lang.annotation.*; + +/** + * 排序用 + * @author wangyu + */ +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Order { + + int value() default 0; +} diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/PropertyGroup.java b/flyfish-data/src/main/java/com/flyfish/framework/annotations/PropertyGroup.java index 3948b80..ff5e397 100644 --- a/flyfish-data/src/main/java/com/flyfish/framework/annotations/PropertyGroup.java +++ b/flyfish-data/src/main/java/com/flyfish/framework/annotations/PropertyGroup.java @@ -21,4 +21,12 @@ public @interface PropertyGroup { * @return 结果 */ String code(); + + /** + * 是否默认 + * 指定为true,默认将未指定分组的项归到该类 + * + * @return 结果 + */ + boolean initial() default false; } diff --git a/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanController.java b/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanController.java index fff926a..9aee637 100644 --- a/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanController.java +++ b/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanController.java @@ -1,5 +1,6 @@ package com.flyfish.framework.beans.meta; +import com.flyfish.framework.annotations.PropertyGroup; import com.flyfish.framework.annotations.PropertyGroups; import com.flyfish.framework.bean.Result; import com.flyfish.framework.beans.resolver.DynamicRestBeanResolver; @@ -90,12 +91,21 @@ public class BeanController { } else { info.setCode(StringFormats.camel2Line(ClassUtils.getShortClassName(clazz))); } + // 解析属性 + info.setProperties(BeanProperty.from(clazz)); + // 设置分组信息 if (clazz.isAnnotationPresent(PropertyGroups.class)) { PropertyGroups groups = clazz.getAnnotation(PropertyGroups.class); info.setGroups(Arrays.stream(groups.value()).map(group -> new BeanPropertyGroup(group.name(), group.code())) .collect(Collectors.toList())); + // 尝试补全分组 + Arrays.stream(groups.value()).filter(PropertyGroup::initial).findFirst() + .ifPresent(initial -> info.getProperties() + .stream() + .filter(property -> StringUtils.isBlank(property.getGroup())) + .forEach(property -> property.setGroup(initial.code())) + ); } - info.setProperties(BeanProperty.from(clazz)); return info; } diff --git a/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanProperty.java b/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanProperty.java index 0867373..6010da2 100644 --- a/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanProperty.java +++ b/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanProperty.java @@ -9,6 +9,7 @@ import com.flyfish.framework.utils.ReflectionUtils; import com.flyfish.framework.utils.StringFormats; import lombok.Data; import lombok.val; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.ClassUtils; import org.apache.commons.lang3.StringUtils; @@ -90,7 +91,13 @@ public class BeanProperty { property.setTitle(props.inherited() ? parentName + props.title() : props.title()); property.setDescription(props.description()); property.setReadonly(props.readonly()); - property.setOrder(props.order()); + property.setGroup(props.group()); + Order order = AnnotationUtils.findAnnotation(field, Order.class); + if (null != order) { + property.setOrder(order.value()); + } else { + property.setOrder(props.order()); + } } else if (strict) { property.setReadonly(true); return property; @@ -201,7 +208,9 @@ public class BeanProperty { .map(descriptor -> BeanProperty.form(descriptor, clazz)) .filter(property -> !property.isReadonly()) .collect(Collectors.toList()); + // 这里进行一些修复和初始化 List result = ListUtils.union(parseExtras(clazz, properties), properties); + // 排序 result.sort(Comparator.comparingInt(a -> a.order)); return result; } @@ -241,6 +250,9 @@ public class BeanProperty { if (prop.order() != 0) { property.order = prop.order(); } + if (StringUtils.isNotBlank(prop.group())) { + property.group = prop.group(); + } } else { BeanProperty property = new BeanProperty(); property.setType(BeanPropertyType.STRING);