成本中心过滤

This commit is contained in:
李贵强 2025-10-13 16:38:01 +08:00
parent a4b6374aae
commit 11219db0fb
1 changed files with 35 additions and 12 deletions

View File

@ -7,10 +7,13 @@ import kd.bos.form.events.SetFilterEvent;
import kd.bos.list.plugin.AbstractListPlugin; import kd.bos.list.plugin.AbstractListPlugin;
import kd.bos.orm.query.QCP; import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter; import kd.bos.orm.query.QFilter;
import kd.bos.permission.api.HasPermOrgResult;
import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.permission.PermissionServiceHelper;
import kd.bos.servicehelper.user.UserServiceHelper; 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) { if (id == 100000) {
return; return;
} }
List<QFilter> qFilters = e.getQFilters(); //1.获取当前用户所有权限的组织编码
QFilter q1 = new QFilter("accountorg.id", QCP.equals, id); HasPermOrgResult userHasPermOrgs = PermissionServiceHelper.getUserHasPermOrgs(RequestContext.get().getCurrUserId(),true);
DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(id, "bos_org"); List<Long> hasPermOrgs = userHasPermOrgs.getHasPermOrgs();
if (null!=dynamicObject){ boolean hasAllOrgPerm = userHasPermOrgs.hasAllOrgPerm();
String number = dynamicObject.getString("number"); if (hasAllOrgPerm){
if (number!=null && !"".equals(number)){ return;
q1.or(new QFilter("shjh_comids",QCP.like,number));
}
} }
List<QFilter> listQF = Lists.newArrayList();
listQF.add(q1);
qFilters.addAll(listQF);
Set<String> 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)); // 强制返回空
}
} }
} }