From 93cf520923ffeb103c25affed630c4fd7a5a9c8f Mon Sep 17 00:00:00 2001 From: zhangzhiguo Date: Tue, 27 May 2025 18:11:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E5=87=BA=E5=90=88=E5=90=8C=E8=B4=A2?= =?UTF-8?q?=E5=8A=A1=E7=A1=AE=E8=AE=A4=E5=8D=95=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/form/EcContartVoucherPlugin.java | 4 +- .../OutContractFinaceConfirmeListPlugin.java | 56 ++++++++- .../form/OutContractFinaceConfirmePlugin.java | 44 ++++++- ...utContractFinaceConfirmeVoucherPlugin.java | 118 ++++++++++++++++++ ...OutContractSettleFiConfirmeListPlugin.java | 5 + 5 files changed, 221 insertions(+), 6 deletions(-) create mode 100644 code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractFinaceConfirmeVoucherPlugin.java diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EcContartVoucherPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EcContartVoucherPlugin.java index 564b06e..203d6e4 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EcContartVoucherPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EcContartVoucherPlugin.java @@ -16,12 +16,12 @@ import java.util.Map; import java.util.Set; /** - * 指出合同结算凭证反写插件 + * 支出合同结算凭证反写插件 */ public class EcContartVoucherPlugin extends AbstractDapWriteBackImpl { public static final Log log = LogFactory.getLog(EcContartVoucherPlugin.class); - //采购申请单上,要反写的凭证号字段名 + //目标单据,需要反写的凭证号字段名 public static final String voucherNoFile="fk_zcgj_voucherbillno"; @Override protected DBRoute getDBRoute() { diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractFinaceConfirmeListPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractFinaceConfirmeListPlugin.java index 870c636..7c643d3 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractFinaceConfirmeListPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractFinaceConfirmeListPlugin.java @@ -18,6 +18,8 @@ import kd.bos.list.plugin.AbstractListPlugin; import kd.bos.logging.Log; import kd.bos.logging.LogFactory; import kd.bos.mvc.list.ListView; +import kd.bos.openapi.common.result.OpenApiResult; +import kd.bos.openapi.common.util.OpenApiSdkUtil; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.report.ReportList; @@ -27,9 +29,7 @@ import kd.ec.contract.common.enums.PayDirectionEnum; import kd.sdk.plugin.Plugin; import java.math.BigDecimal; -import java.util.EventObject; -import java.util.HashMap; -import java.util.Map; +import java.util.*; /** * 支出合同结算财务确认单 @@ -63,6 +63,56 @@ public class OutContractFinaceConfirmeListPlugin extends AbstractListPlugin impl getView().showForm(showParameter); } } + + @Override + public void itemClick(ItemClickEvent evt) { + super.itemClick(evt); + String itemKey = evt.getItemKey(); + /*if("zcgj_deletevoucher".equals(itemKey)){ + BillList billList = this.getView().getControl(AbstractListPlugin.BILLLISTID); + //获取到选中行的数据 + ListSelectedRowCollection selectedRows = billList.getSelectedRows(); + if(selectedRows.isEmpty()){ + this.getView().showTipNotification(String.format("请选择需要删除凭证的数据。")); + return; + } + List voucherIds = new ArrayList<>(); + int errorCount =0; + int allCount =0; + int successCount =0; + for (ListSelectedRow selectedRow : selectedRows) { + Long pk = (Long) selectedRow.getPrimaryKeyValue(); + log.info("OutContractFinaceConfirmeListPlugin-delete:billid:"+pk); + DynamicObject voucherObject = BusinessDataServiceHelper.loadSingle("gl_voucher", "id", + new QFilter[]{new QFilter("sourcebill", QCP.equals, pk) + .and(new QFilter("sourcebilltype.number", QCP.equals, "zcgj_ec_out_finaceconfirm")) + //.and(new QFilter("billno", QCP.equals, vouchernum)) + }); + long voucherId = voucherObject.getLong("id"); + log.info("TaskListBuildVoucherPlugin-delete:voucherId:"+voucherId); + Map params = new HashMap(); + Map idMap = new HashMap<>(); + idMap.put("id", voucherId); + params.put("data",idMap); + OpenApiResult invoke = OpenApiSdkUtil.invoke("/v2/gl/gl_voucher/delete", params); + Map map = invoke.toMap(); + if(map.get("status").toString().equals("true")){ + successCount++; + }else{ + errorCount++; + log.info("OutContractFinaceConfirmeListPlugin-delete:error:"+invoke.getMessage()); + } + allCount++; + } + if(errorCount == 0){//没有失败的,使用成功弹框提醒 + this.getView().showSuccessNotification(String.format("删除凭证完成,一共%d条,成功:%d条,失败:%d条。",allCount,successCount,errorCount)); + }else{//有失败的,使用警告弹框提醒 + this.getView().showTipNotification(String.format("删除凭证完成,一共%d条,成功:%d条,失败:%d条。",allCount,successCount,errorCount)); + } + this.getView().invokeOperation("refresh");//调用表单的刷新操作 + + }*/ + } } diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractFinaceConfirmePlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractFinaceConfirmePlugin.java index 7b82cbe..7ba9112 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractFinaceConfirmePlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractFinaceConfirmePlugin.java @@ -10,12 +10,19 @@ import kd.bos.entity.datamodel.events.BizDataEventArgs; import kd.bos.entity.datamodel.events.ChangeData; import kd.bos.entity.datamodel.events.PropertyChangedArgs; import kd.bos.form.FormShowParameter; +import kd.bos.form.ShowType; +import kd.bos.form.control.Control; +import kd.bos.form.control.EntryGrid; +import kd.bos.form.events.HyperLinkClickEvent; +import kd.bos.form.events.HyperLinkClickListener; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; +import kd.bos.report.ReportList; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.ec.contract.common.enums.DirectionEnum; import kd.sdk.plugin.Plugin; +import javax.swing.event.HyperlinkListener; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.EventObject; @@ -23,7 +30,7 @@ import java.util.EventObject; /** * 支出合同确认单插件 */ -public class OutContractFinaceConfirmePlugin extends AbstractBillPlugIn implements Plugin { +public class OutContractFinaceConfirmePlugin extends AbstractBillPlugIn implements Plugin, HyperLinkClickListener { @Override @@ -50,6 +57,7 @@ public class OutContractFinaceConfirmePlugin extends AbstractBillPlugIn impleme QFilter accountTableFilter = new QFilter("id", QCP.equals,(Long)contractSettleIdObj); DynamicObject ecoutcontractsettle = BusinessDataServiceHelper.loadSingle("ec_out_contract_settle", new QFilter[]{accountTableFilter}); getModel().setValue("zcgj_ec_out_contract_sett",ecoutcontractsettle.getLong("id")); + getModel().setValue("zcgj_ec_out_contract_name",ecoutcontractsettle.getString("billname")); getModel().setValue("zcgj_ec_out_contractid", ecoutcontractsettle.getLong("id")); //id文本,冗余 getModel().setValue("zcgj_billname",ecoutcontractsettle.getString("billname")); getModel().setValue("zcgj_contract",ecoutcontractsettle.getDynamicObject("contract")); @@ -67,6 +75,7 @@ public class OutContractFinaceConfirmePlugin extends AbstractBillPlugIn impleme DynamicObjectCollection itementry = ecoutcontractsettle.getDynamicObjectCollection("itementry"); //DynamicObjectCollection entryEntity = this.getModel().getEntryEntity("zcgj_itementry"); DynamicObjectCollection entryEntity1 = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_itementry"); + entryEntity1.clear(); for (DynamicObject dynamicObject : itementry) { DynamicObject item = entryEntity1.addNew(); item.set("zcgj_payitem",dynamicObject.getDynamicObject("payitem")); @@ -118,4 +127,37 @@ public class OutContractFinaceConfirmePlugin extends AbstractBillPlugIn impleme } } + /** + * 发票分录超链接跳转到详情 + */ + @Override + public void registerListener(EventObject e) { + super.registerListener(e); + EntryGrid control = this.getControl("zcgj_entryentity"); + control.addHyperClickListener(this); + } + + @Override + public void hyperLinkClick(HyperLinkClickEvent hyperLinkClickEvent) { + String fieldName = hyperLinkClickEvent.getFieldName(); + EntryGrid entryGrid = getView().getControl("zcgj_entryentity"); + int[] selectRows = entryGrid.getSelectRows(); + if(selectRows != null && selectRows.length == 1){ + DynamicObjectCollection dynamicObjectCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_entryentity"); + DynamicObject dynamicObject = dynamicObjectCollection.get(selectRows[0]); + DynamicObject zcgjInvoice = dynamicObject.getDynamicObject("zcgj_invoice"); + long invoiceId = zcgjInvoice.getLong("id"); + if(invoiceId != 0){ + //弹出发票详情 + BillShowParameter showParameter = new BillShowParameter(); + showParameter.setPkId(invoiceId); + showParameter.setFormId("ec_in_invoice"); + showParameter.getOpenStyle().setShowType(ShowType.MainNewTabPage); //打开方式 + getView().showForm(showParameter); + } + }else{ + this.getView().showTipNotification("请选择一条发票数据。"); + } + + } } diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractFinaceConfirmeVoucherPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractFinaceConfirmeVoucherPlugin.java new file mode 100644 index 0000000..7ee8470 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractFinaceConfirmeVoucherPlugin.java @@ -0,0 +1,118 @@ +package zcgj.zcdev.zcdev.pr.plugin.form; + +import kd.bos.db.DB; +import kd.bos.db.DBRoute; +import kd.bos.entity.EntityMetadataCache; +import kd.bos.entity.MainEntityType; +import kd.bos.ext.fi.ai.AbstractDapWriteBackImpl; +import kd.bos.ext.fi.ai.Voucher; +import kd.bos.ext.fi.ai.VoucherOperation; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * 支出合同财务确认凭证反写插件 + */ +public class OutContractFinaceConfirmeVoucherPlugin extends AbstractDapWriteBackImpl { + + public static final Log log = LogFactory.getLog(OutContractFinaceConfirmeVoucherPlugin.class); + //目标单据,需要反写的凭证号字段名 + public static final String voucherNoFile="fk_zcgj_voucherbillno"; + @Override + protected DBRoute getDBRoute() { + // 扩展开发库的分库标识,实际值可以查看mc分库标识 + DBRoute DBR = DBRoute.of("scm"); + return DBR; + } + + // 删除凭证写入的值这里是复选框- 布尔false + @Override + protected Object getVchDisableStatus() { + Boolean disRchValue = false; + return disRchValue; + } + + // 生成凭证时写入的值,这里是复选框- 布尔 true。 + @Override + protected Object getVchEnableStatus() { + Boolean rchValue = true; + return rchValue; + } + + // 要反写的字段,反写的是常量值,反写凭证的一些其他信息回单据只能重写writeBack方法 + @Override + protected String getVchStatusField() { + String vchField = "fk_zcgj_isvoucher"; + return vchField; + } + + @Override + public void writeBack(VoucherOperation operation, String billEntityNumber, Map billToVch) { + MainEntityType mt = EntityMetadataCache.getDataEntityType(billEntityNumber); + Set keySet = billToVch.keySet(); + log.info("AbstractDapWriteBackImpl#keySet:" + keySet); + if (VoucherOperation.Create.equals(operation)) { + log.info("AbstractDapWriteBackImpl#开始执行生成凭证反写:" + operation); + Object vchStatusField = getVchEnableStatus(); + List params = new ArrayList<>(); + for (Long me : keySet) { + log.info("AbstractDapWriteBackImpl#生成凭证的单据ID:" + me); + Voucher voucher=billToVch.get(me);//凭证 + String voucherNo = voucher.getVoucherNo(); + //这里处理的是一个单据只有一个凭证的时候,如果是多个凭证,可以先获取已经生成的凭证号,再拼接上字符串。 + Object[] param = new Object[] { vchStatusField,voucherNo, me };// + params.add(param); + if (params.size() >= 10000) { + log.info("AbstractDapWriteBackImpl#开始执行生成凭证反写SQL"); + log.info("AbstractDapWriteBackImpl#mt.getAlias()" + mt.getAlias()); + log.info("AbstractDapWriteBackImpl#mt.getVchStatusField()" + getVchStatusField()); + DB.executeBatch(getDBRoute(), + "update " + mt.getAlias() + " set " + getVchStatusField() + " = ? , "+voucherNoFile+" = ? where fid = ?", params); + log.info("AbstractDapWriteBackImpl#结束执行生成凭证反写SQL"); + params.clear(); + } + } + log.info("AbstractDapWriteBackImpl#最后#开始执行生成凭证反写SQL"); + log.info("AbstractDapWriteBackImpl#最后#mt.getAlias()" + mt.getAlias()); + log.info("AbstractDapWriteBackImpl#最后#mt.getVchStatusField()" + getVchStatusField()); + if (params.size() > 0) { + DB.executeBatch(getDBRoute(), + "update " + mt.getAlias() + " set " + getVchStatusField() + " = ? , "+voucherNoFile+" = ? where fid = ?", params); + } + log.info("AbstractDapWriteBackImpl#最后#结束执行生成凭证反写SQL"); + } else if (VoucherOperation.Delete.equals(operation)) { + log.info("AbstractDapWriteBackImpl#开始执行删除凭证反写:" + operation); + Object vchDisableStatus = getVchDisableStatus(); + List params = new ArrayList<>(); + for (Long me : keySet) { + log.info("AbstractDapWriteBackImpl#删除凭证的单据ID:" + me); + //这里处理的是一个单据只有一个凭证的时候,如果是多个凭证,可以先获取已经生成的凭证号,再去掉本凭证之后的凭证号 + Object[] param = new Object[] {vchDisableStatus, "",me };// getVchDisableStatus + params.add(param); + if (params.size() >= 10000) { + log.info("AbstractDapWriteBackImpl#开始执行删除凭证反写SQL"); + log.info("AbstractDapWriteBackImpl#mt.getAlias()" + mt.getAlias()); + log.info("AbstractDapWriteBackImpl#mt.getVchStatusField()" + getVchStatusField()); + DB.executeBatch(getDBRoute(), + "update " + mt.getAlias() + " set " + getVchStatusField() + " = ? , "+voucherNoFile+" = ? where fid = ?", params); + params.clear(); + log.info("AbstractDapWriteBackImpl#结束执行删除凭证反写SQL"); + } + } + log.info("AbstractDapWriteBackImpl#最后#开始执行删除凭证反写SQL"); + log.info("AbstractDapWriteBackImpl#最后#mt.getAlias()" + mt.getAlias()); + log.info("AbstractDapWriteBackImpl#最后#mt.getVchStatusField()" + getVchStatusField()); + if (params.size() > 0) { + DB.executeBatch(getDBRoute(), + "update " + mt.getAlias() + " set " + getVchStatusField() + " = ? , "+voucherNoFile+" = ? where fid = ?", params); + } + log.info("AbstractDapWriteBackImpl#最后#结束执行删除凭证反写SQL"); + } + } + +} diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractSettleFiConfirmeListPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractSettleFiConfirmeListPlugin.java index 323e3ff..199632f 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractSettleFiConfirmeListPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractSettleFiConfirmeListPlugin.java @@ -5,7 +5,10 @@ import kd.bos.dataentity.entity.DynamicObject; import kd.bos.entity.datamodel.ListSelectedRow; import kd.bos.entity.datamodel.ListSelectedRowCollection; import kd.bos.form.FormShowParameter; +import kd.bos.form.IFormView; +import kd.bos.form.IPageCache; import kd.bos.form.ShowType; +import kd.bos.form.container.Tab; import kd.bos.form.control.events.ItemClickEvent; import kd.bos.form.events.HyperLinkClickArgs; import kd.bos.list.BillList; @@ -19,6 +22,7 @@ import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.sdk.plugin.Plugin; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -65,6 +69,7 @@ public class OutContractSettleFiConfirmeListPlugin extends AbstractListPlugin im showParameter.setFormId("zcgj_ec_out_finaceconfirm"); showParameter.getOpenStyle().setShowType(ShowType.MainNewTabPage); //打开方式 getView().showForm(showParameter); + }else{ this.getView().showTipNotification(String.format("只有已审核通过的数据才可进行财务确认操作。")); return;