From 11219db0fb1ae87c34cec1211229cea87d40f5ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=B4=B5=E5=BC=BA?= Date: Mon, 13 Oct 2025 16:38:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=90=E6=9C=AC=E4=B8=AD=E5=BF=83=E8=BF=87?= =?UTF-8?q?=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../form/BosCostcenterListExtendPlugin.java | 47 ++++++++++++++----- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/form/BosCostcenterListExtendPlugin.java b/main/java/shjh/jhzj7/fi/fi/plugin/form/BosCostcenterListExtendPlugin.java index cca15f9..f4d4bfe 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/form/BosCostcenterListExtendPlugin.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/form/BosCostcenterListExtendPlugin.java @@ -7,10 +7,13 @@ import kd.bos.form.events.SetFilterEvent; import kd.bos.list.plugin.AbstractListPlugin; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; +import kd.bos.permission.api.HasPermOrgResult; import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.permission.PermissionServiceHelper; import kd.bos.servicehelper.user.UserServiceHelper; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * 成本中心列表扩展插件 @@ -25,18 +28,38 @@ public class BosCostcenterListExtendPlugin extends AbstractListPlugin { if (id == 100000) { return; } - List qFilters = e.getQFilters(); - QFilter q1 = new QFilter("accountorg.id", QCP.equals, id); - DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(id, "bos_org"); - if (null!=dynamicObject){ - String number = dynamicObject.getString("number"); - if (number!=null && !"".equals(number)){ - q1.or(new QFilter("shjh_comids",QCP.like,number)); - } + //1.获取当前用户所有权限的组织编码 + HasPermOrgResult userHasPermOrgs = PermissionServiceHelper.getUserHasPermOrgs(RequestContext.get().getCurrUserId(),true); + List hasPermOrgs = userHasPermOrgs.getHasPermOrgs(); + boolean hasAllOrgPerm = userHasPermOrgs.hasAllOrgPerm(); + if (hasAllOrgPerm){ + return; } - List listQF = Lists.newArrayList(); - listQF.add(q1); - qFilters.addAll(listQF); + Set orgNumbers = hasPermOrgs.stream() + .map(orgId -> BusinessDataServiceHelper.loadSingle(orgId, "bos_org")) + .filter(Objects::nonNull) + .map(org -> org.getString("number")) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + + if (!orgNumbers.isEmpty()) { + // 核算组织条件 + QFilter q1 = new QFilter("accountorg.id", QCP.in, hasPermOrgs); + + // 跨公司组织条件 + QFilter crossOrgFilter = orgNumbers.stream() + .map(orgNum -> new QFilter("shjh_comids", QCP.like, "%" + orgNum + "%")) + .reduce((filter1, filter2) -> filter1.or(filter2)) + .orElse(null); + + // 组合条件 + QFilter finalFilter = crossOrgFilter != null ? + q1.or(crossOrgFilter) : q1; + + e.addCustomQFilter(finalFilter); + }else { + e.getQFilters().add(new QFilter("id", QCP.is_null, null)); // 强制返回空 + } } }