From 6eca284ab21f8f3db5c193ab2dbb137ccca434dc Mon Sep 17 00:00:00 2001 From: xuhaihui <2098865055@qq.com> Date: Mon, 12 Jan 2026 09:21:22 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=B9=B4=E5=BA=A6=E6=88=90?= =?UTF-8?q?=E6=9C=AC=E4=BC=98=E5=8C=96=E9=83=A8=E9=97=A8=E6=89=80=E5=B1=9E?= =?UTF-8?q?=E7=BB=84=E7=BB=87=E5=92=8C=E9=A1=B9=E7=9B=AE=E5=85=AC=E5=8F=B8?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=80=BC=E8=BF=87=E6=BB=A4=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../form/AnnualProjectCostFromPlugin.java | 216 +++++++++++++++++- 1 file changed, 211 insertions(+), 5 deletions(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/AnnualProjectCostFromPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/AnnualProjectCostFromPlugin.java index acd96e9..66172e0 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/AnnualProjectCostFromPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/AnnualProjectCostFromPlugin.java @@ -1,21 +1,33 @@ package zcgj.zcdev.zcdev.pr.plugin.form; import kd.bos.bill.AbstractBillPlugIn; +import kd.bos.bill.BillShowParameter; +import kd.bos.bill.OperationStatus; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.ILocaleString; import kd.bos.dataentity.resource.ResManager; import kd.bos.dataentity.utils.StringUtils; +import kd.bos.entity.datamodel.IDataModel; import kd.bos.entity.datamodel.events.ChangeData; import kd.bos.entity.datamodel.events.PropertyChangedArgs; +import kd.bos.form.control.Label; import kd.bos.form.field.BasedataEdit; import kd.bos.form.field.events.BeforeF7SelectEvent; import kd.bos.form.field.events.BeforeF7SelectListener; 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.QueryServiceHelper; +import kd.bos.servicehelper.org.OrgUnitServiceHelper; +import kd.bos.servicehelper.org.OrgViewType; +import kd.bos.servicehelper.user.UserServiceHelper; +import kd.fi.er.business.bean.CostDeptF7ChangePram; +import kd.fi.er.business.servicehelper.CoreBaseBillServiceHelper; +import kd.fi.er.business.utils.ErCommonUtils; import kd.sdk.plugin.Plugin; -import java.util.ArrayList; -import java.util.EventObject; -import java.util.List; +import java.util.*; /** * 项目年度成本表单插件 @@ -26,11 +38,36 @@ public class AnnualProjectCostFromPlugin extends AbstractBillPlugIn implements B super.registerListener(e); BasedataEdit zcgj_sectypef7 = (BasedataEdit) this.getControl("zcgj_sectypef7");//二级分类 zcgj_sectypef7.addBeforeF7SelectListener(this); + BasedataEdit zcgj_department = this.getView().getControl("zcgj_department");//部门 + zcgj_department.addBeforeF7SelectListener(this); + BasedataEdit zcgj_org = this.getView().getControl("zcgj_org");//所属组织 + zcgj_org.addBeforeF7SelectListener(this); + BasedataEdit zcgj_projectorg = this.getView().getControl("zcgj_projectorg");//项目公司 + zcgj_projectorg.addBeforeF7SelectListener(this); } @Override public void afterCreateNewData(EventObject e) { super.afterCreateNewData(e); + DynamicObject costDept = (DynamicObject) this.getModel().getValue("zcgj_department");//部门 + if (costDept != null) { + setOrg(costDept); + } + } + + @Override + public void afterBindData(EventObject e) { + super.afterBindData(e); + BillShowParameter bsp = (BillShowParameter) this.getView().getFormShowParameter(); + if (bsp.getStatus() == OperationStatus.ADDNEW) { + //如果是新增时 + DynamicObject creator = this.getModel().getDataEntity().getDynamicObject("creator");//创建人 + if (creator != null) { + long mainOrgId = UserServiceHelper.getUserMainOrgId(creator.getLong("id")); + this.getModel().setValue("zcgj_department", mainOrgId);//部门 + this.getView().updateView("zcgj_department"); + } + } } @Override @@ -46,11 +83,17 @@ public class AnnualProjectCostFromPlugin extends AbstractBillPlugIn implements B if (newValue == null || !newValue.equals(oldValue)) { this.getModel().setValue("zcgj_sectypef7", null, rowIndex);//二级分类 } + } else if (e.getProperty().getName().equals("zcgj_department")) { + //部门 + DynamicObject costDept = (DynamicObject) this.getModel().getValue("zcgj_department");//部门 + if (costDept != null) { + setOrg(costDept); + } } } public void beforeF7Select(BeforeF7SelectEvent arg0) { - ListShowParameter parameter = (ListShowParameter) arg0.getFormShowParameter(); + ListShowParameter formShowParameter = (ListShowParameter) arg0.getFormShowParameter(); int row = arg0.getRow(); String name = arg0.getProperty().getName(); if (StringUtils.equals(name, "zcgj_sectypef7")) { @@ -65,7 +108,170 @@ public class AnnualProjectCostFromPlugin extends AbstractBillPlugIn implements B arg0.setCancel(true); return; } - parameter.getListFilterParameter().setQFilters(qFilter); + formShowParameter.getListFilterParameter().setQFilters(qFilter); + } else if (StringUtils.equals(name, "zcgj_org")) { + // 所属组织 + DynamicObject costDept = (DynamicObject) this.getModel().getValue("zcgj_department");//部门 + DynamicObject zcgj_org = (DynamicObject) this.getModel().getValue("zcgj_org");//所属组织 + if (costDept != null && zcgj_org != null) { + DynamicObject orgPattern = costDept.getDynamicObject("orgpattern"); + if (orgPattern == null) { + return; + } + String orgPatternNumber = orgPattern.getString("number"); + if (orgPatternNumber.equals("Orgform06")) { + Long id = (Long) zcgj_org.get("id"); + List qFilter = new ArrayList<>(); + qFilter.add(new QFilter("id", QCP.in, id)); + formShowParameter.getListFilterParameter().setQFilters(qFilter); + formShowParameter.setCustomParam("isIncludeAllSub", "true"); + } + } + } else if (StringUtils.equals(name, "zcgj_projectorg")) { + //项目公司过滤 + DynamicObject costDept = (DynamicObject) this.getModel().getValue("zcgj_department");//部门 + DynamicObject zcgj_projectorg = (DynamicObject) this.getModel().getValue("zcgj_projectorg");//项目公司 + if (costDept != null && zcgj_projectorg != null) { + DynamicObject orgPattern = costDept.getDynamicObject("orgpattern"); + if (orgPattern == null) { + return; + } + String orgPatternNumber = orgPattern.getString("number"); + if (orgPatternNumber.equals("Orgform06")) { + Long id = (Long) zcgj_projectorg.get("id"); + List qFilter = new ArrayList<>(); + qFilter.add(new QFilter("id", QCP.in, id)); + formShowParameter.getListFilterParameter().setQFilters(qFilter); + formShowParameter.setCustomParam("isIncludeAllSub", "true"); + } + } + } else if (StringUtils.equals(name, "zcgj_department")) { + // 部门 + DynamicObject creator = this.getModel().getDataEntity().getDynamicObject("creator");//创建人 + if (creator == null) { + return; + } + List id = UserServiceHelper.getOrgsUserJoin(creator.getLong("id")); + List qFilter = new ArrayList<>(); + qFilter.add(new QFilter("id", QCP.in, id)); + formShowParameter.getListFilterParameter().setQFilters(qFilter); + formShowParameter.setCustomParam("isIncludeAllSub", "true"); } } + + public static List findCostCompanysByCostDept(Long deptID) { + ArrayList deptIDs = new ArrayList(); + deptIDs.add(deptID); + List selectIds = OrgUnitServiceHelper.getAdminOrgRelation(deptIDs, false); + QFilter treeTypeFilter = new QFilter("view.treetype", "=", "10"); + QFilter isDefaultViewFilter = new QFilter("view.isdefault", "=", Boolean.TRUE); + QFilter isbizunitFilter = new QFilter("isbizunit", "=", Boolean.TRUE); + QFilter orgFilter = null; + QFilter[] filters = null; + DynamicObject orgInfo = null; + Long costCompany = null; + + List parents; + for (String orgFunction = "01"; costCompany == null; deptID = (Long) parents.get(0)) { + orgFilter = new QFilter("org", "=", deptID); + filters = new QFilter[]{treeTypeFilter, isDefaultViewFilter, orgFilter, isbizunitFilter}; + orgInfo = QueryServiceHelper.queryOne("bos_org_structure", "org", filters); + if (orgInfo != null) { + costCompany = ErCommonUtils.getPk(orgInfo.get("org")); + selectIds.add(costCompany); + break; + } + + parents = OrgUnitServiceHelper.getSuperiorOrgs(orgFunction, deptID); + if (parents == null || parents.isEmpty()) { + break; + } + } + + return selectIds; + } + + private void setOrg(DynamicObject costDept) { + DynamicObject orgPattern = costDept.getDynamicObject("orgpattern"); + if (orgPattern == null) { + return; + } + String orgPatternNumber = orgPattern.getString("number"); + if (!orgPatternNumber.equals("Orgform06")) { + //填写的部门的形态不是部门时,直接将部门值赋值给所属组织 + this.getModel().setValue("zcgj_org", costDept);//所属组织 + this.getModel().setValue("zcgj_projectorg", costDept);//项目公司 + return; + } + int a = 0; + DynamicObject cost; + DynamicObject viewParent = null; + while (true) { + if (a == 0) { + //第一次进入循环 + cost = costDept; + } else { + QFilter[] qFilters = new QFilter[]{ + new QFilter("number", QCP.equals, viewParent.getString("number")) + }; + cost = BusinessDataServiceHelper.loadSingle("bos_adminorg", qFilters); + } + long currentOrgId = Long.parseLong(cost.getString("id"));//当前部门ID + Map orgParentMap = OrgUnitServiceHelper.getDirectSuperiorOrg(OrgViewType.Admin, Collections.singletonList(currentOrgId));//获取当前部门的上级组织 + Long parentId = orgParentMap.get(currentOrgId);//上级组织ID + viewParent = BusinessDataServiceHelper.loadSingle("bos_adminorg", + new QFilter[]{new QFilter("id", QCP.equals, parentId)});//行政组织-上级组织 +// DynamicObjectCollection structureCollection = cost.getDynamicObjectCollection("structure");//组织结构分录 +// DynamicObject structure = structureCollection.get(0); +// viewParent = structure.getDynamicObject("viewparent");//上级组织 + String viewParentNumber = viewParent.getString("number"); + QFilter[] qFilters = new QFilter[]{ + new QFilter("number", QCP.equals, viewParentNumber) + }; + DynamicObject bos_adminOrg = BusinessDataServiceHelper.loadSingle("bos_adminorg", qFilters);//行政组织 + DynamicObject orgPattern1 = bos_adminOrg.getDynamicObject("orgpattern");//形态 + String orgPatternNumber1 = orgPattern1.getString("number"); + if (!orgPatternNumber1.equals("Orgform06")) { + //上级不为不为部门的时候,将现在查询的部门赋值给一级承担部门 + break; + } else { + a++; + } + } + + DynamicObject bos_adminorg = BusinessDataServiceHelper.loadSingle("bos_adminorg", new QFilter[]{ + new QFilter("number", QCP.equals, viewParent.getString("number"))}); + this.getModel().setValue("zcgj_org", bos_adminorg);//所属组织 + this.getModel().setValue("zcgj_projectorg", bos_adminorg);//项目公司 + } + + protected void costDeptChange(String propName, DynamicObject costDept) { + if (costDept != null) { + IDataModel model = this.getModel(); + this.refreshBaseInfoLabel(propName, costDept); + DynamicObject company = (DynamicObject) model.getValue("zcgj_org"); + DynamicObject costCompany = (DynamicObject) model.getValue("zcgj_projectorg"); + CostDeptF7ChangePram costDeptF7ChangePram = new CostDeptF7ChangePram(Boolean.TRUE, costDept, costCompany, company); + Long costCompanyId = CoreBaseBillServiceHelper.getAccountOrgId(costDeptF7ChangePram);//获取费用承担公司 + model.setValue("zcgj_projectorg", costCompanyId); + this.getView().updateView("zcgj_projectorg"); + + } + } + + protected void refreshBaseInfoLabel(String propName, Object propValue) { + String propStr = null; + if (propValue instanceof DynamicObject) { + ILocaleString name = ((DynamicObject) propValue).getLocaleString("name"); + propStr = name.getLocaleValue(); + } else if (propValue instanceof String) { + propStr = (String) propValue; + } + + Label propControl = (Label) this.getControl(propName + "V"); + if (propControl != null) { + propControl.setText(propStr); + } + + } }