diff --git a/yem-wm/yem-wm-sex/src/main/java/yem/wm/sex/tpl/SexTemplateFormPlugin.java b/yem-wm/yem-wm-sex/src/main/java/yem/wm/sex/tpl/SexTemplateFormPlugin.java index 0e4a4c7..04837e8 100644 --- a/yem-wm/yem-wm-sex/src/main/java/yem/wm/sex/tpl/SexTemplateFormPlugin.java +++ b/yem-wm/yem-wm-sex/src/main/java/yem/wm/sex/tpl/SexTemplateFormPlugin.java @@ -15,6 +15,7 @@ import kd.bos.list.ListShowParameter; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.user.UserServiceHelper; import yem.base.common.utils.DynamicObjectUtil; import yem.base.common.utils.YEM; @@ -59,7 +60,7 @@ public class SexTemplateFormPlugin extends AbstractBillPlugIn implements BeforeF setOrgF7Filter(evt); break; case "yem_department":// 部门 - setDeptF7Filter(evt); + // setDeptF7Filter(evt); break; case "yem_salegroup": // 业务组 setGroupF7Filter(evt); @@ -115,25 +116,26 @@ public class SexTemplateFormPlugin extends AbstractBillPlugIn implements BeforeF /** * @Description: 单据组织人员相关字段合规 - * @function 功能: 判断 部门、业务员 是否是当前组织下,如果不是则清空 + * @function 功能: 根据当前登录人员携带部门、业务员默认值 + * * @purposes 用途:单据新增时、组织值改变时 */ private void orgPropertyChanged(){ IDataModel model = this.getView().getModel(); DynamicObject org = (DynamicObject) model.getValue("org"); if (YEM.isEmpty(org)) return; - // 部门 - DynamicObject yemDepartment = (DynamicObject) model.getValue("yem_department"); - if (!YEM.isEmpty(yemDepartment)){ - // 判断组织是否在 部门的上级组织中 - boolean isOrgSubDept = isOrgSubDept(org, yemDepartment); - if (!isOrgSubDept) model.setValue("yem_department",null); - } - // 业务员 - DynamicObject yemOperator = (DynamicObject) model.getValue("yem_operator"); - if (!YEM.isEmpty(yemOperator)){ - Map<Long, Boolean> orgSubUserDeptInfo = getOrgSubUserDeptInfo(org, yemOperator); - if (orgSubUserDeptInfo.isEmpty()) model.setValue("yem_operator",null); + DynamicObject user = BusinessDataServiceHelper.loadSingleFromCache(YEM.getCurrentUserId(), "bos_user"); + Map<Long, Boolean> orgSubUserDeptInfo = getOrgSubUserDeptInfo(org, user); + if (!orgSubUserDeptInfo.isEmpty()){ + model.setValue("yem_operator",user); + boolean b = orgSubUserDeptInfo.containsValue(true); + Set<Long> deptIdSet = orgSubUserDeptInfo.keySet(); + for (Long deptId : deptIdSet){ + if (!b || orgSubUserDeptInfo.get(deptId)) { + model.setValue("yem_department",deptId); + break; + } + } } } @@ -288,22 +290,20 @@ public class SexTemplateFormPlugin extends AbstractBillPlugIn implements BeforeF } model.setValue("yem_baseqty",BigDecimal.ZERO,rowIndex); } + /** - * @Description: 是否组织下级部门 - * @function 功能 :判断组织是否在 部门的上级组织分录中 + * @Description: 获取组织下级部门 + * @function 功能 :获取组织下级部门 * @purposes 用途: 单据组织人员相关字段合规 * @param org 组织 - * @param dept 部门 - * @return boolean 是否下级 + * @return List<Long> 组织下级部门ID */ - private boolean isOrgSubDept(DynamicObject org,DynamicObject dept){ - DynamicObjectCollection structure = dept.getDynamicObjectCollection("structure"); - List<Long> parentOrgIds = new ArrayList<>(); - for (DynamicObject entry : structure){ - DynamicObject viewparent = entry.getDynamicObject("viewparent"); - if (!YEM.isEmpty(viewparent))parentOrgIds.add(viewparent.getLong("id")); - } - return parentOrgIds.contains(org.getLong("id")); + private List<Long> getOrgSubDept(DynamicObject org){ + DynamicObject[] depts = BusinessDataServiceHelper.load("bos_adminorg","id", + new QFilter[]{new QFilter("enable", QCP.equals, "1"), + new QFilter("status", QCP.equals, "C"), + new QFilter("structure.viewparent.id", QCP.equals, org.getLong("id")) }); + return Arrays.stream(depts).map(x -> x.getLong("id")).collect(Collectors.toList()); } /** @@ -318,14 +318,15 @@ public class SexTemplateFormPlugin extends AbstractBillPlugIn implements BeforeF private Map<Long,Boolean> getOrgSubUserDeptInfo(DynamicObject org, DynamicObject user){ // 定义Map统计部门信息 Map<Long,Boolean> result = new HashMap<>(); + // 组织下级部门id集合 + List<Long> orgSubDeptIds = getOrgSubDept(org); // 人员部门分录 DynamicObjectCollection entryentity = user.getDynamicObjectCollection("entryentity"); for (DynamicObject entry : entryentity){ DynamicObject dpt = entry.getDynamicObject("dpt"); - dpt = BusinessDataServiceHelper.loadSingle(dpt.getLong("id"),"bos_adminorg"); - boolean orgSubDept = isOrgSubDept(org, dpt);// 是否组织下部门 + long dptId = dpt.getLong("id"); boolean ispartjob = entry.getBoolean("ispartjob");// 是否兼职 - if (orgSubDept)result.put(dpt.getLong("id"),ispartjob); + if (orgSubDeptIds.contains(dptId))result.put(dptId,ispartjob); } return result; }