From bbcec0604af838000506f6fb59c6d83178920097 Mon Sep 17 00:00:00 2001 From: xuhaihui <2098865055@qq.com> Date: Wed, 11 Jun 2025 16:14:23 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=85=A5=E5=BA=93=E5=8D=95=E4=BA=8B?= =?UTF-8?q?=E7=89=A9=E7=B1=BB=E5=9E=8B=E9=BB=98=E8=AE=A4=E4=B8=BA=E7=A9=BA?= =?UTF-8?q?+=E6=98=AF=E5=90=A6=E4=B8=BB=E6=9D=90=E9=9A=90=E6=98=BE?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...aterialInbFinaceConfirmeInvoicePlugin.java | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/MaterialInbFinaceConfirmeInvoicePlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/MaterialInbFinaceConfirmeInvoicePlugin.java index 54a67f3..ff98bc7 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/MaterialInbFinaceConfirmeInvoicePlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/MaterialInbFinaceConfirmeInvoicePlugin.java @@ -40,11 +40,40 @@ import java.util.*; import java.util.stream.Collectors; /** - * 入库单发票导入插件 + * 入库单发票导入插件+事物类型默认为空+是否主材隐显 */ public class MaterialInbFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn implements Plugin { private static final Log log = LogFactory.getLog(MaterialInbFinaceConfirmeInvoicePlugin.class); + @Override + public void afterCreateNewData(EventObject e) { + super.afterCreateNewData(e); + this.getModel().setValue("transtype", null);//事务类型默认为空 + } + + @Override + public void propertyChanged(PropertyChangedArgs e) { + super.propertyChanged(e); + String key = e.getProperty().getName(); + if (key.equals("transtype")) { + //事务类型 + ChangeData[] changeSet = e.getChangeSet(); + ChangeData changeData = changeSet[0]; + DynamicObject transtype = (DynamicObject) changeData.getNewValue();//新值 + if (transtype != null) { + String number = transtype.getString("number"); + if (number.equals("jrjc")) { + //事务类型为即入即出时隐藏是否主材 + this.getView().setVisible(false, "ismainmaterial");//是否主材 + } else { + this.getView().setVisible(true, "ismainmaterial");//是否主材 + } + } else { + this.getView().setVisible(true, "ismainmaterial");//是否主材 + } + } + } + @Override public void beforeDoOperation(BeforeDoOperationEventArgs args) { super.beforeDoOperation(args); From c1401be6b40d7e89a961b814b59a7383443cc67d Mon Sep 17 00:00:00 2001 From: xiaoshi <2272816786@qq.com> Date: Wed, 11 Jun 2025 16:47:08 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E4=BB=98=E6=AC=BE=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E5=85=B3=E8=81=94=E7=BB=B4=E4=BF=AE=E7=A1=AE=E8=AE=A4=20?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E9=97=B2=E7=BD=AE=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/form/EquipmentCardListPlugin.java | 96 +++++++++++++++++++ .../form/PaymentApplySupplierPlugin.java | 18 ++++ 2 files changed, 114 insertions(+) create mode 100644 code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EquipmentCardListPlugin.java diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EquipmentCardListPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EquipmentCardListPlugin.java new file mode 100644 index 0000000..1eeeaef --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EquipmentCardListPlugin.java @@ -0,0 +1,96 @@ +package zcgj.zcdev.zcdev.pr.plugin.form; + +import com.greenpineyu.fel.common.NumberUtil; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.entity.datamodel.ListSelectedRow; +import kd.bos.entity.datamodel.ListSelectedRowCollection; +import kd.bos.form.control.events.BeforeItemClickEvent; +import kd.bos.form.control.events.ItemClickEvent; +import kd.bos.form.events.BeforeDoOperationEventArgs; +import kd.bos.form.operate.FormOperate; +import kd.bos.list.plugin.AbstractListPlugin; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.sdk.plugin.Plugin; +import org.jetbrains.annotations.NotNull; + +import java.util.EventObject; +import java.util.HashSet; +import java.util.Set; + +public class EquipmentCardListPlugin extends AbstractListPlugin implements Plugin { + + @Override + public void registerListener(EventObject e) { + super.registerListener(e); + this.addItemClickListeners("tbmain");//监听按钮 + } + + @Override + public void itemClick(ItemClickEvent evt) { + super.itemClick(evt); + String itemKey = evt.getItemKey(); + if (itemKey.equals("zcgj_idle")){ + Set setIds = getSelectOrderIds(this.getSelectedRows()); + DynamicObject[] equipments = BusinessDataServiceHelper.load("eceq_equipment_card", "billno,billname,equipstatus", new QFilter[]{new QFilter("id", "in", setIds)}); + for (DynamicObject equipment : equipments) { + equipment.set("equipstatus","FREE"); + } + Object[] save = SaveServiceHelper.save(equipments); + System.out.println(); + this.getView().showMessage("闲置成功!"); + } + } + + @Override + public void beforeDoOperation(BeforeDoOperationEventArgs args) { + super.beforeDoOperation(args); +// FormOperate operate = (FormOperate) args.getSource(); +// String operateNo = operate.getOperateKey(); +// if(operateNo.equalsIgnoreCase("zcgj_idle")){ +// ListSelectedRowCollection listSelectedData = args.getListSelectedData(); +// for (ListSelectedRow listSelectedDatum : listSelectedData) { +// String billNo = listSelectedDatum.getBillNo(); +// QFilter qf = new QFilter("billno", QCP.equals,billNo); +// DynamicObject equipment = BusinessDataServiceHelper.loadSingle("eceq_equipment_card", new QFilter[]{qf}); +// String equipstatus = equipment.getString("equipstatus"); +// if (!equipstatus.equals("USED")){ +// this.getView().showErrorNotification("只有在用状态下的设备才可置为闲置"); +// args.setCancel(true); +// return; +// } +// } +// +// } + } + + + @Override + public void beforeItemClick(BeforeItemClickEvent evt) { + super.beforeItemClick(evt); + String itemKey = evt.getItemKey(); + if(itemKey.equals("zcgj_idle")){ + Set setIds = getSelectOrderIds(this.getSelectedRows()); + DynamicObject[] equipments = BusinessDataServiceHelper.load("eceq_equipment_card", "billno,billname,equipstatus", new QFilter[]{new QFilter("id", "in", setIds)}); + for (DynamicObject equipment : equipments) { + String equipstatus = equipment.getString("equipstatus"); + if (!equipstatus.equals("USED")){ + this.getView().showErrorNotification("只有在用状态下的设备才可置为闲置"); + evt.setCancel(true); + return; + } + } + } + } + + @NotNull + private Set getSelectOrderIds(@NotNull ListSelectedRowCollection selectedRows) { + Set setIds = new HashSet<>(); + for (ListSelectedRow selectedRow : selectedRows) { + setIds.add(NumberUtil.toLong(selectedRow.getPrimaryKeyValue())); + } + return setIds; + } +} diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentApplySupplierPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentApplySupplierPlugin.java index 9de0dc4..9f73486 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentApplySupplierPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentApplySupplierPlugin.java @@ -163,6 +163,24 @@ public class PaymentApplySupplierPlugin extends AbstractBillPlugIn implements Pl // for (int i = 0; i < itementry.size(); i++) { // this.getModel().setValue("zcgj_supplier1", supplier, i); // } + }else if (propName.equals("zcgj_maintenance")) { + //关联设备维修 + Object value = this.getModel().getValue("zcgj_maintenance"); + if (value!=null){ + DynamicObject maintenance = (DynamicObject) value; + QFilter qf = new QFilter("id", QCP.equals, maintenance.getLong("id")); + DynamicObject maintenancebill = BusinessDataServiceHelper.loadSingle("zcgj_maintenanceackbill", new QFilter[]{qf}); + this.getModel().setValue("totalshouldpay",maintenancebill.getBigDecimal("zcgj_toactualamount")); + this.getModel().setValue("project",maintenancebill.getDynamicObject("zcgj_project")); + this.getModel().setValue("fiaccountorg",maintenancebill.getDynamicObject("zcgj_accountorg")); + DynamicObjectCollection maintenanceentry = maintenancebill.getDynamicObjectCollection("entryentity"); + for (int i = 0; i < maintenanceentry.size(); i++) { + DynamicObject object = maintenanceentry.get(i); + i = this.getModel().createNewEntryRow("itementry"); + this.getModel().setValue("zcgj_supplier1", object.getDynamicObject("zcgj_supplier"), i); + this.getModel().setValue("zcgj_requestedamount", object.getBigDecimal("zcgj_actualamount"), i); + } + } } } From 57e246fcbf9753746a70d1dcb8e483159f97abb6 Mon Sep 17 00:00:00 2001 From: zhangzhiguo Date: Wed, 11 Jun 2025 17:18:43 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E6=8F=92=E4=BB=B6=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pr/plugin/form/CommonFormPlugin.java | 61 +++++++++++++++++++ .../pr/plugin/form/CommonListPlugin.java | 32 ++++++++++ .../pr/plugin/form/RecAndPayInitPlugin.java | 29 ++++++++- 3 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/CommonFormPlugin.java create mode 100644 code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/CommonListPlugin.java diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/CommonFormPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/CommonFormPlugin.java new file mode 100644 index 0000000..a621148 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/CommonFormPlugin.java @@ -0,0 +1,61 @@ +package zcgj.zcdev.zcdev.pr.plugin.form; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.form.FormShowParameter; +import kd.bos.form.plugin.AbstractFormPlugin; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; + +import java.util.EventObject; +import java.util.Map; + +/** + * 表单插件公共方法
+ * 1.获取菜单参数配置的单据类型编码,菜单参数:
+ * key=billType,value=单据类型编码
+ * key=filedMark,value=单据类型字段标识
+ * 2.将单据类型编码转换为编辑界面单据类型字段的值 + */ +public class CommonFormPlugin extends AbstractFormPlugin { + private final static Log logger = LogFactory.getLog(CommonFormPlugin.class); + + + /** + * 初始化时,从获取参数类型,设置单据类型值 + * @param e + */ + @Override + public void afterCreateNewData(EventObject e) { + FormShowParameter formShowParameter = this.getView().getFormShowParameter(); + if(null!=formShowParameter){ + Map customParams = formShowParameter.getCustomParams(); + if(null!=customParams){ + //获取列表界面配置的参数:billType=单据类型编码 + Object billType = customParams.get("billType"); + //获取列表界面配置的参数:filedMark=单据类型字段标识 + Object filedMark = customParams.get("filedMark"); + if(null!=billType&&null!=filedMark){ + DynamicObject billTypeObj = (DynamicObject)this.getModel().getValue(filedMark.toString()); + if(null==billTypeObj){ + //单据类型为空,赋值 + QFilter q1 = new QFilter("number", "=", billType.toString()); + DynamicObject billTypeObject = BusinessDataServiceHelper.loadSingle("bos_billtype", new QFilter[]{q1}); + this.getModel().setValue(filedMark.toString(), billTypeObject); + }else if(!billTypeObj.getString("number").equals(billType.toString())){ + //单据类型和列表菜单参数一致,不再赋值 + QFilter q1 = new QFilter("number", "=", billType.toString()); + DynamicObject billTypeObject = BusinessDataServiceHelper.loadSingle("bos_billtype", new QFilter[]{q1}); + this.getModel().setValue(filedMark.toString(), billTypeObject); + } + + } + } + + } + + super.afterCreateNewData(e); + } + +} diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/CommonListPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/CommonListPlugin.java new file mode 100644 index 0000000..d00f096 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/CommonListPlugin.java @@ -0,0 +1,32 @@ +package zcgj.zcdev.zcdev.pr.plugin.form; + +import kd.bos.form.FormShowParameter; +import kd.bos.list.events.BeforeShowBillFormEvent; +import kd.bos.list.plugin.AbstractListPlugin; + +import java.util.Map; + +public class CommonListPlugin extends AbstractListPlugin { + + + + @Override + public void beforeShowBill(BeforeShowBillFormEvent e) { + FormShowParameter formShowParameter = this.getView().getFormShowParameter(); + if(null!=formShowParameter){ + Map customParams =formShowParameter.getCustomParams(); + if(null!=customParams){ + Object billtype = customParams.get("billType"); + Object filedMark = customParams.get("filedMark"); + if(null!=billtype&&null!=filedMark){ + customParams.putAll(e.getParameter().getCustomParams()); + customParams.put("billtype",billtype.toString()); + customParams.put("filedMark",filedMark.toString()); + customParams.put("formId","zcgj_zckstopublicbill"); + e.getParameter().setCustomParams(customParams); + } + } + } + super.beforeShowBill(e); + } +} \ No newline at end of file diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/RecAndPayInitPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/RecAndPayInitPlugin.java index 26a4b72..5236d70 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/RecAndPayInitPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/RecAndPayInitPlugin.java @@ -2,6 +2,7 @@ package zcgj.zcdev.zcdev.pr.plugin.form; import kd.bos.bill.AbstractBillPlugIn; import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.form.field.BasedataEdit; import kd.bos.form.field.events.BeforeF7SelectEvent; import kd.bos.form.field.events.BeforeF7SelectListener; @@ -36,8 +37,32 @@ public class RecAndPayInitPlugin extends AbstractBillPlugIn implements Plugin, B if(name.equals("zcgj_in_contract") || name.equals("zcgj_out_contract")){ DynamicObject project = (DynamicObject)this.getModel().getValue("zcgj_project"); List qFilterList = new ArrayList(); - qFilterList.add(new QFilter("project", QCP.equals,project.getLong("id"))); - arg0.setCustomQFilters(qFilterList); + if(project == null){ + this.getView().showErrorNotification("请选择项目!"); + arg0.setCancel(true); + }else{ + qFilterList.add(new QFilter("project", QCP.equals,project.getLong("id"))); + String entryKey = "zcgj_payable"; + String contractKey = "zcgj_out_contract"; + if(name.equals("zcgj_in_contract")){ + entryKey="zcgj_receivable"; + contractKey="zcgj_in_contract"; + } + DynamicObjectCollection dynamicObjectCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection(entryKey); + if(dynamicObjectCollection != null){ + List ids = new ArrayList<>(); + for (DynamicObject dynamicObject : dynamicObjectCollection) { + DynamicObject contract = dynamicObject.getDynamicObject(contractKey); + if(contract != null){ + long inContractId = contract.getLong("id"); + ids.add(inContractId); + } + } + qFilterList.add(new QFilter("id", QCP.not_in,ids)); + } + + arg0.setCustomQFilters(qFilterList); + } } } } From 5478714fb3a8fcaab1eab887b7da037541cca6af Mon Sep 17 00:00:00 2001 From: zhangzhiguo Date: Wed, 11 Jun 2025 17:21:27 +0800 Subject: [PATCH 4/6] =?UTF-8?q?1.=E5=B7=AE=E6=97=85=E6=8A=A5=E9=94=80?= =?UTF-8?q?=E5=8D=95=E6=89=A3=E9=99=A4=E9=A4=90=E8=A1=A5=E5=A4=A9=E6=95=B0?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86=202.=E6=B6=88=E8=B4=B9?= =?UTF-8?q?=E5=8F=B0=E8=B4=A6=E8=AE=A1=E7=AE=97=E9=97=AE=E9=A2=98=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../form/TriprAutoCalWorkingDaysPlugin.java | 32 +++++++++++-------- .../report/PositionFeesRptQueryPlugin.java | 8 +++-- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/TriprAutoCalWorkingDaysPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/TriprAutoCalWorkingDaysPlugin.java index 32033ee..d152867 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/TriprAutoCalWorkingDaysPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/TriprAutoCalWorkingDaysPlugin.java @@ -2,6 +2,8 @@ package zcgj.zcdev.zcdev.fs.plugin.form; import com.alibaba.druid.util.StringUtils; import kd.bos.bill.AbstractBillPlugIn; +import kd.bos.bill.BillShowParameter; +import kd.bos.bill.OperationStatus; import kd.bos.context.RequestContext; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; @@ -27,20 +29,24 @@ public class TriprAutoCalWorkingDaysPlugin extends AbstractBillPlugIn implements @Override public void afterBindData(EventObject e) { super.afterBindData(e); - //当前切换选择的组织 - Object company = this.getModel().getValue("costcompany");//核算组织(费用承担公司) - Long currentOrgId = RequestContext.get().getOrgId(); - if(company!=null){ - DynamicObject companyObj = (DynamicObject)company; - Long companyId = companyObj.getLong("id"); - if(OrgCheckUtils.isKS(companyId)){ - Set allSet = new HashSet<>(); - Set localDates1 = calHomeentityDay(); - Set localDates2 = calTripentryDay(); - allSet.addAll(localDates1); - allSet.addAll(localDates2); - this.getModel().setValue("zcgj_kccbdays",allSet.size()); + //如果是新增时 + BillShowParameter bsp=(BillShowParameter)this.getView().getFormShowParameter(); + if(bsp.getStatus()== OperationStatus.ADDNEW ){ + //当前切换选择的组织 + Object company = this.getModel().getValue("costcompany");//核算组织(费用承担公司) + Long currentOrgId = RequestContext.get().getOrgId(); + if(company!=null){ + DynamicObject companyObj = (DynamicObject)company; + Long companyId = companyObj.getLong("id"); + if(OrgCheckUtils.isKS(companyId)){ + Set allSet = new HashSet<>(); + Set localDates1 = calHomeentityDay(); + Set localDates2 = calTripentryDay(); + allSet.addAll(localDates1); + allSet.addAll(localDates2); + this.getModel().setValue("zcgj_kccbdays",allSet.size()); + } } } } diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/report/PositionFeesRptQueryPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/report/PositionFeesRptQueryPlugin.java index 7df155e..8725afb 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/report/PositionFeesRptQueryPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/report/PositionFeesRptQueryPlugin.java @@ -23,7 +23,7 @@ import java.util.*; import java.util.stream.Collectors; /** - * 职务消费休假台账 + * 职务消费台账 * 报表取数插件 */ public class PositionFeesRptQueryPlugin extends AbstractReportListDataPlugin { @@ -133,6 +133,10 @@ public class PositionFeesRptQueryPlugin extends AbstractReportListDataPlugin { DynamicObjectCollection entrys = dynamicObject.getDynamicObjectCollection("expenseentryentity"); for (DynamicObject entry : entrys) { + DynamicObject zcgjCostmangerEntity = entry.getDynamicObject("zcgj_costmanger_entity"); + if(zcgjCostmangerEntity == null){ + continue; + } DynamicObject expenseitemObj = entry.getDynamicObject("expenseitem"); //费用项目 if(expenseitemObj == null){ continue; @@ -412,7 +416,7 @@ public class PositionFeesRptQueryPlugin extends AbstractReportListDataPlugin { searchFilterList.add(new QFilter("expenseentryentity.happendate", QCP.less_equals, lastDay)); searchFilterList.add(new QFilter("billstatus", QCP.in, billStatuslist));//增加过滤 DynamicObject[] load = BusinessDataServiceHelper.load("er_dailyreimbursebill", - "id,description,billno,expenseentryentity," + + "id,description,billno,expenseentryentity,zcgj_costmanger_entity," + DEV_KEY+"_is_business_foreign,"+ "expenseentryentity.happendate," + //费用发生日期 "expenseentryentity.expenseitem," + //费用项目 From 4766b8ae49c98be5c397e4739bbdd0679551c7e2 Mon Sep 17 00:00:00 2001 From: xuhaihui <2098865055@qq.com> Date: Thu, 12 Jun 2025 10:00:28 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E5=B7=A5=E5=BA=8F=E6=88=90=E6=9C=AC?= =?UTF-8?q?=E9=A2=84=E7=AE=97=E6=B7=BB=E5=8A=A0=E4=BF=9D=E5=AD=98=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=EF=BC=8C=E6=A0=A1=E9=AA=8C=E6=96=B0=E5=A2=9E=E5=8D=95?= =?UTF-8?q?=E6=8D=AE=E6=98=AF=E5=90=A6=E5=AD=98=E5=9C=A8=E7=9B=B8=E5=90=8C?= =?UTF-8?q?=E7=9A=84=E5=B9=B4=E4=BB=BD=E5=8A=A0=E9=A1=B9=E7=9B=AE=EF=BC=8C?= =?UTF-8?q?=E4=B8=94=E4=B8=8D=E6=98=AF=E6=BA=90=E5=8D=95=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zcgj/zcdev/zcdev/pr/plugin/AimcostcbsBllSubmitOp.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/AimcostcbsBllSubmitOp.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/AimcostcbsBllSubmitOp.java index 697b6af..7b6be81 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/AimcostcbsBllSubmitOp.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/AimcostcbsBllSubmitOp.java @@ -9,7 +9,7 @@ import kd.bos.entity.validate.AbstractValidator; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; -//工序成本预算单提交操作插件:验证项目和年份的组合是否已经存在 +//工序成本预算单保存提交操作插件:验证项目和年份的组合是否已经存在(且只有一个) public class AimcostcbsBllSubmitOp extends AbstractOperationServicePlugIn { @Override @@ -37,6 +37,9 @@ public class AimcostcbsBllSubmitOp extends AbstractOperationServicePlugIn { filter.and(new QFilter("project", "=", project.getPkValue())); DynamicObject ecco_aimcostbillcbs = BusinessDataServiceHelper.loadSingle("ecco_aimcostbillcbs", "id", new QFilter[]{filter}); if (ecco_aimcostbillcbs != null) { + if (dataEntity.getPkValue().equals(ecco_aimcostbillcbs.getPkValue())){ + continue; + } this.addFatalErrorMessage(extendedDataEntity, "该年份的项目已编制预算,请勿重复创建!"); } } From 34e3876536dce4210e44153b506f4f365977411a Mon Sep 17 00:00:00 2001 From: zhangzhiguo Date: Thu, 12 Jun 2025 14:10:37 +0800 Subject: [PATCH 6/6] =?UTF-8?q?1.=E8=81=8C=E5=8A=A1=E6=B6=88=E8=B4=B9?= =?UTF-8?q?=E5=8F=B0=E8=B4=A6=E5=A2=9E=E5=8A=A0=E6=9F=A5=E8=AF=A2=E4=BA=BA?= =?UTF-8?q?=E5=91=98=E9=85=8D=E7=BD=AE=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/PositionFeesRptQueryPlugin.java | 138 +++++++++++++++++- 1 file changed, 136 insertions(+), 2 deletions(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/report/PositionFeesRptQueryPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/report/PositionFeesRptQueryPlugin.java index 8725afb..59c8427 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/report/PositionFeesRptQueryPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/report/PositionFeesRptQueryPlugin.java @@ -118,13 +118,21 @@ public class PositionFeesRptQueryPlugin extends AbstractReportListDataPlugin { //通过查询用户过滤组织下的人 allUsersOfOrg = allUsersOfOrg.stream().filter(applierId::contains).collect(Collectors.toList()); } + //从配置表中获取需要纳入统计的人员 + DynamicObject[] positionfeesstaffing = BusinessDataServiceHelper.load("zcgj_positionfeesstaffing", "zcgj_user", + new QFilter[]{new QFilter("zcgj_is_involvement",QCP.equals,true)}); + Set positionfeesstaffingList = null; + if(positionfeesstaffing!=null && positionfeesstaffing.length>0){ + positionfeesstaffingList = Arrays.stream(positionfeesstaffing).map(e -> (Long) e.getDynamicObject("zcgj_user").getLong("id")) + .collect(Collectors.toSet()); + } LocalDate localDate = dateToLocalDate(queryYear); int year = localDate.getYear(); Set userSet = new HashSet<>(); // 用 Map 来按照报销人、单据编号、费用发生日期分组 Map reportMap = new LinkedHashMap<>(); for (Long userId : allUsersOfOrg) { - //费用报销单数据 + //费用报销单数据-费用归属领导数据 DynamicObject[] dailyreimbursebillDataSet = getDailyreimbursebillDataSet(userId, year); for (DynamicObject dynamicObject : dailyreimbursebillDataSet) { String billno = dynamicObject.getString("billno");//单据编号 @@ -211,6 +219,95 @@ public class PositionFeesRptQueryPlugin extends AbstractReportListDataPlugin { } } } + //申请人查询 + if(positionfeesstaffingList != null && positionfeesstaffingList.contains(userId)){ + DynamicObject[] dailyreimbursebillDataSetByApplier = getDailyreimbursebillDataSetByApplier(userId, year); + for (DynamicObject dynamicObject : dailyreimbursebillDataSetByApplier) { + String billno = dynamicObject.getString("billno");//单据编号 + //判罚是否因公出国 + Boolean isBusinessForeign = dynamicObject.getBoolean(DEV_KEY+"_is_business_foreign");//单据编号 + + DynamicObjectCollection entrys = dynamicObject.getDynamicObjectCollection("expenseentryentity"); + for (DynamicObject entry : entrys) { + DynamicObject zcgjCostmangerEntity = entry.getDynamicObject("zcgj_costmanger_entity"); + if(zcgjCostmangerEntity != null){ //过滤掉费用归属领导的 + continue; + } + DynamicObject expenseitemObj = entry.getDynamicObject("expenseitem"); //费用项目 + if(expenseitemObj == null){ + continue; + } + Date happendate = entry.getDate("happendate");//费用发生日期 + String itemNumber = expenseitemObj.getString("number");//费用项目编码 + if(!itemSet.contains(itemNumber)){ + continue; + } + String happendateStr = dateFormat.format(happendate);//费用发生日期str + BigDecimal expenseamount = BigDecimal.ZERO; + if(istax){ + expenseamount = entry.getBigDecimal("expenseamount");//报销金额 + }else{ + expenseamount = entry.getBigDecimal("orientryamount");//不含税金额 + } + + + // 生成唯一的键:报销人 + 单据编号 + 费用发生日期 + String key = userId + "-" + billno + "-" + happendateStr; + userSet.add(userId); + // 根据键获取报表对象 + ExpenseReport report = reportMap.get(key); + if (report == null) { + report = new ExpenseReport(userId, billno, happendateStr); + reportMap.put(key, report); + } + if(!isBusinessForeign){ + // 为该行添加费用 + //report.addExpense(expenseType, amount); + if(itemNumber.startsWith(FYF)){//防疫费 + BigDecimal health = report.getHealth().add(expenseamount); + report.setHealth(health); + }else if(itemNumber.startsWith(TXF)){//日常费用-通信费用 + BigDecimal correspondence = report.getCorrespondence().add(expenseamount); + report.setCorrespondence(correspondence); + }else if(itemNumber.startsWith(PXF)){//日常费用-培训费用 + BigDecimal training = report.getTraining().add(expenseamount); + report.setTraining(training); + }else if(itemNumber.startsWith(YWZD_SWZD)){//日常费用-业务招待费-商务招待 + //businessEntertainment + BigDecimal businessEntertainment = report.getBusinessEntertainment().add(expenseamount); + report.setBusinessEntertainment(businessEntertainment); + }else if(itemNumber.startsWith(YWZD_WSZD)){//日常费用-业务招待费-外事招待 + //foreignEntertainment + BigDecimal foreignEntertainment = report.getForeignEntertainment().add(expenseamount); + report.setForeignEntertainment(foreignEntertainment); + } + else if(itemNumber.startsWith(YWZD_ZYGW)){//日常费用-业务招待费-重要公务 + //importantOfficial + BigDecimal importantOfficial = report.getImportantOfficial().add(expenseamount); + report.setImportantOfficial(importantOfficial); + } + else if(itemNumber.startsWith(YWZD_ZS)){//日常费用-业务招待费-住宿 + //accommodation + BigDecimal accommodation = report.getAccommodation().add(expenseamount); + report.setAccommodation(accommodation); + } + else if(itemNumber.startsWith(YWZD_JNP)){//日常费用-业务招待费-纪念品 + //souvenirs + BigDecimal souvenirs = report.getSouvenirs().add(expenseamount); + report.setSouvenirs(souvenirs); + }else if(itemNumber.startsWith(YWZD_QT)){//日常费用-业务招待费-其他 + //other + BigDecimal other = report.getOther().add(expenseamount); + report.setOther(other); + } + }else{ + //费用明细中的所有金额因公临时出国费用 + BigDecimal abroadTravel = report.getAbroadTravel().add(expenseamount); + report.setAbroadTravel(abroadTravel); + } + } + } + } //差旅报销单数据 DynamicObject[] tripreimburseDataSet = getTripreimburseDataSet(userId, year); @@ -391,7 +488,7 @@ public class PositionFeesRptQueryPlugin extends AbstractReportListDataPlugin { /** - * 获取费用报销单数据 + * 获取费用报销单数据-费用归属领导 * @param userId 用户id * @param year 统计年份 * @return 数据集 @@ -426,6 +523,43 @@ public class PositionFeesRptQueryPlugin extends AbstractReportListDataPlugin { return load; } + + /** + * 获取费用报销单数据-费用归属领导 + * @param userId 用户id + * @param year 统计年份 + * @return 数据集 + */ + public DynamicObject[] getDailyreimbursebillDataSetByApplier(Long userId, Integer year){ + LocalDate firstDay = getFirstDayOfYear(year); + LocalDate lastDay = getLastDayOfYear(year); + List billStatuslist = new ArrayList<>(); + //billStatuslist.add("A"); //暂存 + //billStatuslist.add("B"); //已提交 + //billStatuslist.add("C"); //审核中 + //billStatuslist.add("D"); //审核未通过 + billStatuslist.add("E"); //审核通过 + billStatuslist.add("F"); //等待付款 + billStatuslist.add("G"); //已付款 + //billStatuslist.add("H"); //废弃 + billStatuslist.add("I"); //关闭 + List searchFilterList = new ArrayList<>(); + searchFilterList.add(new QFilter("applier", QCP.equals, userId)); + //searchFilterList.add(new QFilter("expenseentryentity.zcgj_costmanger_entity", QCP.equals, userId));//根据费用归属领导查询 + searchFilterList.add(new QFilter("expenseentryentity.happendate", QCP.large_equals, firstDay)); + searchFilterList.add(new QFilter("expenseentryentity.happendate", QCP.less_equals, lastDay)); + searchFilterList.add(new QFilter("billstatus", QCP.in, billStatuslist));//增加过滤 + DynamicObject[] load = BusinessDataServiceHelper.load("er_dailyreimbursebill", + "id,description,billno,expenseentryentity,zcgj_costmanger_entity," + + DEV_KEY+"_is_business_foreign,"+ + "expenseentryentity.happendate," + //费用发生日期 + "expenseentryentity.expenseitem," + //费用项目 + "expenseentryentity.expenseamount, "+//报销金额(含税) + "expenseentryentity.orientryamount " //不含税金额 + , searchFilterList.toArray(new QFilter [] {})); + return load; + } + /** * 获取差旅报销单数据 * @param userId 用户id