From ec18a7a57bb0cd0794611bf712ba5daeccebac79 Mon Sep 17 00:00:00 2001 From: zhangzhiguo Date: Thu, 27 Feb 2025 13:59:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B6=E5=85=A5=E5=90=88=E5=90=8C=E7=BB=93?= =?UTF-8?q?=E7=AE=97=E5=8D=95=E5=AE=9E=E9=99=85=E7=BB=93=E7=AE=97=E7=94=B2?= =?UTF-8?q?=E6=96=B9=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/form/EcContartVoucherPlugin.java | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EcContartVoucherPlugin.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 new file mode 100644 index 0000000..564b06e --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EcContartVoucherPlugin.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 EcContartVoucherPlugin extends AbstractDapWriteBackImpl { + + public static final Log log = LogFactory.getLog(EcContartVoucherPlugin.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 = "fisvoucher"; + 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"); + } + } + +}