diff --git a/modules/i3plus-pojo-aps/src/main/java/cn/estsh/i3plus/pojo/aps/annotation/FieldAnnotation.java b/modules/i3plus-pojo-aps/src/main/java/cn/estsh/i3plus/pojo/aps/annotation/FieldAnnotation.java index 2d099f0..1eb5b9d 100644 --- a/modules/i3plus-pojo-aps/src/main/java/cn/estsh/i3plus/pojo/aps/annotation/FieldAnnotation.java +++ b/modules/i3plus-pojo-aps/src/main/java/cn/estsh/i3plus/pojo/aps/annotation/FieldAnnotation.java @@ -25,4 +25,5 @@ public @interface FieldAnnotation { String defaultValue() default ""; // 字段的默认值 boolean popSearch() default false; // 弹出选择对象时是否显示 EDIT_TYPE editType() default EDIT_TYPE.NONE; // 定义字段的编辑类型 + String typeName() default ""; // 定义字段类型的简单名称,对于多选关联对象时有用。 } diff --git a/modules/i3plus-pojo-aps/src/main/java/cn/estsh/i3plus/pojo/aps/bean/ResCalendar.java b/modules/i3plus-pojo-aps/src/main/java/cn/estsh/i3plus/pojo/aps/bean/ResCalendar.java index d1bb335..125255d 100644 --- a/modules/i3plus-pojo-aps/src/main/java/cn/estsh/i3plus/pojo/aps/bean/ResCalendar.java +++ b/modules/i3plus-pojo-aps/src/main/java/cn/estsh/i3plus/pojo/aps/bean/ResCalendar.java @@ -29,7 +29,7 @@ import java.util.List; public class ResCalendar extends BaseAPS { @Column(name="RES_CODES") @ApiParam(value ="资源代码") - @FieldAnnotation(editType = EDIT_TYPE.MULTI_OBJECT) + @FieldAnnotation(editType = EDIT_TYPE.MULTI_OBJECT, typeName = "Resource") private String resCodes; @Column(name="WEEKS") diff --git a/modules/i3plus-pojo-aps/src/main/java/cn/estsh/i3plus/pojo/aps/common/BeanRelation.java b/modules/i3plus-pojo-aps/src/main/java/cn/estsh/i3plus/pojo/aps/common/BeanRelation.java index 4a5e2a9..17cc18a 100644 --- a/modules/i3plus-pojo-aps/src/main/java/cn/estsh/i3plus/pojo/aps/common/BeanRelation.java +++ b/modules/i3plus-pojo-aps/src/main/java/cn/estsh/i3plus/pojo/aps/common/BeanRelation.java @@ -2,10 +2,7 @@ package cn.estsh.i3plus.pojo.aps.common; import cn.estsh.i3plus.pojo.base.bean.BaseBean; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Predicate; @@ -235,6 +232,34 @@ public class BeanRelation { return index == 0 && bNotLast; } + /** + * 获取关联对象集合,排除重复的对象 + * @param bean 实体对象 + * @param holder 第一个关联路径 + * @param args 后续关联路径 + * @param 返回关联对象的实体类型 + * @return 返回的List集合为拷贝的,外界可以对其修改。 + */ + public static Set listUnique(BaseBean bean, Enum holder, Enum... args) { + Set result = new HashSet<>(); + List nextBeans = list(bean, holder); + for (BaseBean nextBean : nextBeans) { + listUniqueImpl(result, nextBean, args, 0); + } + result.remove(bean); + return result; + } + + private static void listUniqueImpl(Set result, BaseBean bean, Enum[] holders, int index) { + if (index >= holders.length) { + result.add((T)bean); + } else { + List nextBeans = list(bean, holders[index]); + for (BaseBean nextBean : nextBeans) { + listUniqueImpl(result, nextBean, holders, index + 1); + } + } + } /**