From 794bbc4fbaf5e04fac4808012fa09e9137aa81cc Mon Sep 17 00:00:00 2001 From: Jason Date: Tue, 29 Oct 2019 18:10:20 +0800 Subject: [PATCH] =?UTF-8?q?1=EF=BC=9A=E6=96=B0=E5=A2=9E=E5=BC=B9=E5=87=BA?= =?UTF-8?q?=E6=A1=86=E9=80=89=E6=8B=A9=E5=A4=9A=E4=B8=AA=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pojo/aps/annotation/FieldAnnotation.java | 1 + .../cn/estsh/i3plus/pojo/aps/bean/ResCalendar.java | 2 +- .../estsh/i3plus/pojo/aps/common/BeanRelation.java | 33 +++++++++++++++++++--- 3 files changed, 31 insertions(+), 5 deletions(-) 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); + } + } + } /**