From 43746ce10387bc254ee593626f47217f055aba4f Mon Sep 17 00:00:00 2001 From: xuhaihui <2098865055@qq.com> Date: Tue, 6 Jan 2026 14:31:12 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E7=94=A8=E7=94=B3=E8=AF=B7=E8=A1=A8?= =?UTF-8?q?=E5=8D=95=E6=8F=92=E4=BB=B6=E4=BC=98=E5=8C=96=E5=92=8C=E8=B4=B9?= =?UTF-8?q?=E7=94=A8=E6=8A=A5=E9=94=80=E5=8D=95=E4=BC=98=E5=8C=96=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E6=9D=A5=E5=BE=80=E5=AE=B6=E5=B1=85=E5=9C=B0=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fs/plugin/form/CommonBillPlugin.java | 291 ++++++++++++++++++ .../operate/DailyreimbursHomeCheckOp.java | 9 + 2 files changed, 300 insertions(+) create mode 100644 code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/CommonBillPlugin.java diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/CommonBillPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/CommonBillPlugin.java new file mode 100644 index 0000000..f9d64b3 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/CommonBillPlugin.java @@ -0,0 +1,291 @@ +package zcgj.zcdev.zcdev.fs.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.metadata.IDataEntityProperty; +import kd.bos.entity.datamodel.IDataModel; +import kd.bos.entity.datamodel.events.ChangeData; +import kd.bos.entity.datamodel.events.PropertyChangedArgs; +import kd.bos.form.IClientViewProxy; +import kd.bos.form.control.AttachmentPanel; +import kd.bos.form.control.Label; +import kd.bos.form.control.events.AttachmentOperaClickListener; +import kd.bos.form.events.AfterDoOperationEventArgs; +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.mvc.form.ClientViewProxy; +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.fi.er.business.utils.ErEntityTypeUtils; +import kd.sdk.plugin.Plugin; + +import java.util.*; + +/* + * 通用申请表单插件 + */ +public class CommonBillPlugin extends AbstractBillPlugIn implements AttachmentOperaClickListener, Plugin, BeforeF7SelectListener { + + @Override + public void registerListener(EventObject e) { + super.registerListener(e); + BasedataEdit zcgj_department = this.getView().getControl("zcgj_department");//部门 + zcgj_department.addBeforeF7SelectListener(this); + BasedataEdit zcgj_org = this.getView().getControl("zcgj_org");//所属组织 + zcgj_org.addBeforeF7SelectListener(this); + AttachmentPanel panel = getControl("attachmentpanel");//附件 + panel.addOperaClickListener(this); + + BasedataEdit zcgj_costcompany = this.getView().getControl("zcgj_costcompany");//费用承担公司 + zcgj_costcompany.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); + setAttFileVisble();//隐藏删除按钮 + 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 + public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) { + super.afterDoOperation(afterDoOperationEventArgs); + setAttFileVisble(); + } + + @Override + public void propertyChanged(PropertyChangedArgs e) { + super.propertyChanged(e); + if (e.getProperty().getName().equals("attachmentpanel")) { + setAttFileVisble(); + } else if (e.getProperty().getName().equals("zcgj_department")) { + //部门 + DynamicObject costDept = (DynamicObject) this.getModel().getValue("zcgj_department");//部门 + if (costDept != null) { + setOrg(costDept); + } + String propName = e.getProperty().getName(); + ChangeData[] valueSet = e.getChangeSet(); + Object propValue = valueSet[0].getNewValue(); + costDeptChange(propName, (DynamicObject) propValue); + } + } + + @Override + public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) { + ListShowParameter formShowParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter(); + IDataEntityProperty property = beforeF7SelectEvent.getProperty();//过滤字段信息 + String propertyName = property.getName();//过滤字段标识 + if (propertyName.equals("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"); + } else if (propertyName.equals("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(OrgTreeUtils.PARAM_INIT_ROOT_ORG_ID, id); + formShowParameter.setCustomParam("isIncludeAllSub", "true"); + } + } + } else if ("zcgj_costcompany".equals(propertyName)) { //费用承担公司过滤 + DynamicObject zcgjDepartment = (DynamicObject) this.getModel().getValue("zcgj_department"); + if (zcgjDepartment != null) { + List id = findCostCompanysByCostDept(zcgjDepartment.getLong("id")); + if (id != null && !id.isEmpty()) { + List qFilter = new ArrayList<>(); + qFilter.add(new QFilter("id", QCP.in, id)); + formShowParameter.getListFilterParameter().setQFilters(qFilter); + } + } + } + } + + private void setAttFileVisble() { + String billstatus = String.valueOf(this.getModel().getValue("billstatus")); + if (!billstatus.equals("A")) { + AttachmentPanel attachmentPanel = this.getControl("attachmentpanel"); + List> attachmentData = attachmentPanel.getAttachmentData(); + if (attachmentData == null && attachmentData.isEmpty()) { + return; + } + List> attachmentDatas = attachmentPanel.getAttachmentData(); + for (Map attachmentMap : attachmentDatas) { + String visiablePreview = "1";//是否显示预览按钮 + String visiableDownload = "1";//是否显示下载按钮 + String visiableRename = "1";//是否显示重命名按钮 + String visiableDelete = "0";//是否显示删除按钮 + //visible参数规则为01组成,0代表不可见,1代表可见 + attachmentMap.put("visible", visiablePreview + visiableDownload + visiableRename + visiableDelete); + //attachmentMap.put("hiddenBtn",hiddenBtnList); + + } + ClientViewProxy cvp = this.getView().getService(IClientViewProxy.class); + cvp.setFieldProperty("attachmentpanel", "v", attachmentDatas); + } + } + + 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);//所属组织 + 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);//所属组织 + } + + //获取费用承担公司 + 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_costcompany"); + CostDeptF7ChangePram costDeptF7ChangePram = new CostDeptF7ChangePram(Boolean.TRUE, costDept, costCompany, company); + Long costCompanyId = CoreBaseBillServiceHelper.getAccountOrgId(costDeptF7ChangePram);//获取费用承担公司 + model.setValue("zcgj_costcompany", costCompanyId); + this.getView().updateView("zcgj_costcompany"); + + } + } + + 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); + } + + } + + 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; + } +} diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/DailyreimbursHomeCheckOp.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/DailyreimbursHomeCheckOp.java index 346437d..933501e 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/DailyreimbursHomeCheckOp.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/DailyreimbursHomeCheckOp.java @@ -175,6 +175,15 @@ public class DailyreimbursHomeCheckOp extends AbstractOperationServicePlugIn { } boolean zcgj_is_home = dataEntity.getBoolean("zcgj_is_home");//是否来往家居地 if (zcgj_is_home) { + + QFilter filter = new QFilter("zcgj_companyblentry.zcgj_org.id", QCP.equals, companyId); + filter.and(new QFilter("zcgj_usehomegeo", QCP.equals, true));//费用报销往返家居地关联费用申请为是 + DynamicObject zcgj_authorizedcompany = QueryServiceHelper.queryOne("zcgj_companybelong", + "id", new QFilter[]{filter});//公司归属区域 + if (zcgj_authorizedcompany == null) { + continue; + } + DynamicObjectCollection writeOffApplyCollection = dataEntity.getDynamicObjectCollection("writeoffapply");//关联申请 if (writeOffApplyCollection.size() > 0) { int i = 0;