From b1c55f865b25934515f5ae61444ab063f6ecd204 Mon Sep 17 00:00:00 2001 From: ptt <2403326863@qq.com> Date: Thu, 13 Mar 2025 11:16:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=90=E6=9C=AC=E6=B5=8B=E7=AE=97=EF=BC=9A?= =?UTF-8?q?=E6=89=8B=E5=B7=A5=E7=94=9F=E6=88=90=E7=9B=AE=E6=A0=87=E6=88=90?= =?UTF-8?q?=E6=9C=AC=E6=B7=BB=E5=8A=A0=E5=88=A4=E6=96=AD=20=E7=9B=AE?= =?UTF-8?q?=E6=A0=87=E6=88=90=E6=9C=AC=EF=BC=9A=E5=8F=8D=E5=AE=A1=E6=A0=B8?= =?UTF-8?q?=E5=8E=BB=E6=8E=89=E6=A0=A1=E9=AA=8C=EF=BC=8C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=8F=8D=E5=86=99=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../formplugin/SumInvoiceEntryPlugin.java | 9 +- .../formplugin/CreatTargetCostFormPlugin.java | 4 +- .../DelBackTargetVersionOpPlugin.java | 52 ++++++++ .../opplugin/ReAimCostUnAuditOpPluginTwo.java | 115 ++++++++++++++++++ 4 files changed, 177 insertions(+), 3 deletions(-) create mode 100644 main/java/shkd/repc/recos/opplugin/DelBackTargetVersionOpPlugin.java create mode 100644 main/java/shkd/repc/recos/opplugin/ReAimCostUnAuditOpPluginTwo.java diff --git a/main/java/shkd/repc/recon/formplugin/SumInvoiceEntryPlugin.java b/main/java/shkd/repc/recon/formplugin/SumInvoiceEntryPlugin.java index bc7e3ba..8b6c478 100644 --- a/main/java/shkd/repc/recon/formplugin/SumInvoiceEntryPlugin.java +++ b/main/java/shkd/repc/recon/formplugin/SumInvoiceEntryPlugin.java @@ -4,13 +4,14 @@ import kd.bos.bill.AbstractBillPlugIn; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.form.events.AfterDoOperationEventArgs; +import kd.bos.form.events.ClosedCallBackEvent; import kd.sdk.plugin.Plugin; import java.math.BigDecimal; import java.util.EventObject; /** - * 单据界面插件 + * 费用登记和付款申请的发票分录合计行表单插件 */ public class SumInvoiceEntryPlugin extends AbstractBillPlugIn implements Plugin { @@ -43,4 +44,10 @@ public class SumInvoiceEntryPlugin extends AbstractBillPlugIn implements Plugin super.afterDoOperation(args); updateAmt(); } + + @Override + public void closedCallBack(ClosedCallBackEvent closedCallBackEvent) { + super.closedCallBack(closedCallBackEvent); + updateAmt(); + } } \ No newline at end of file diff --git a/main/java/shkd/repc/recos/formplugin/CreatTargetCostFormPlugin.java b/main/java/shkd/repc/recos/formplugin/CreatTargetCostFormPlugin.java index ac56d66..33a98ad 100644 --- a/main/java/shkd/repc/recos/formplugin/CreatTargetCostFormPlugin.java +++ b/main/java/shkd/repc/recos/formplugin/CreatTargetCostFormPlugin.java @@ -34,8 +34,8 @@ public class CreatTargetCostFormPlugin extends AbstractBillPlugIn implements Plu Object primaryKeyValue = dynamicObject.getPkValue(); if ("qeug_creat".equals(evt.getItemKey())) { QFilter measurecostid = new QFilter("project", QCP.equals, dynamicObject.getDynamicObject("project").getPkValue()); - DynamicObject dynamicObject2 = BusinessDataServiceHelper.loadSingle("recos_aimcost", measurecostid.toArray()); - if (dynamicObject2!=null) { + DynamicObject[] load = BusinessDataServiceHelper.load("recos_aimcost", "id", measurecostid.toArray()); + if (load!=null&&load.length!=0) { this.getView().showMessage("存在对应目标成本,无法生成"); return; } diff --git a/main/java/shkd/repc/recos/opplugin/DelBackTargetVersionOpPlugin.java b/main/java/shkd/repc/recos/opplugin/DelBackTargetVersionOpPlugin.java new file mode 100644 index 0000000..17adc1c --- /dev/null +++ b/main/java/shkd/repc/recos/opplugin/DelBackTargetVersionOpPlugin.java @@ -0,0 +1,52 @@ +package shkd.repc.recos.opplugin; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.PreparePropertysEventArgs; +import kd.bos.entity.plugin.args.AfterOperationArgs; +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; + +/** + * 单据操作插件 + */ +public class DelBackTargetVersionOpPlugin extends AbstractOperationServicePlugIn implements Plugin { + + @Override + public void onPreparePropertys(PreparePropertysEventArgs e) { + super.onPreparePropertys(e); + e.getFieldKeys().add("measurecostid"); + e.getFieldKeys().add("shapetype"); + e.getFieldKeys().add("project"); + e.getFieldKeys().add("project.id"); + } + + @Override + public void afterExecuteOperationTransaction(AfterOperationArgs e) { + super.afterExecuteOperationTransaction(e); + DynamicObject[] dataEntities1 = e.getDataEntities(); + if(dataEntities1!=null&&dataEntities1.length!=0){ + for (int i1 = 0; i1 < dataEntities1.length; i1++) { + DynamicObject dynamicObject2 = dataEntities1[i1]; + if("0".equals(dynamicObject2.getString("shapetype"))){ + DynamicObject dynamicObject = dynamicObject2; + QFilter measurecostid = new QFilter("project", QCP.equals, dynamicObject.getDynamicObject("project").getPkValue()) + .and("qeug_aimversionflag",QCP.equals,true); + DynamicObject[] recos_measurecosts = BusinessDataServiceHelper.load("recos_measurecost", "id", measurecostid.toArray()); + if(recos_measurecosts!=null&&recos_measurecosts.length!=0){ + for (int i = 0; i < recos_measurecosts.length; i++) { + DynamicObject recos_measurecost = recos_measurecosts[i]; + DynamicObject dynamicObject1 = BusinessDataServiceHelper.loadSingle(recos_measurecost.getPkValue(), "recos_measurecost"); + dynamicObject1.set("qeug_aimversionflag",false); +// dynamicObject1.set("aimversionflag",false);刷新所有目标版 + SaveServiceHelper.update(dynamicObject1); + } + } + } + } + } + } +} \ No newline at end of file diff --git a/main/java/shkd/repc/recos/opplugin/ReAimCostUnAuditOpPluginTwo.java b/main/java/shkd/repc/recos/opplugin/ReAimCostUnAuditOpPluginTwo.java new file mode 100644 index 0000000..92ba83e --- /dev/null +++ b/main/java/shkd/repc/recos/opplugin/ReAimCostUnAuditOpPluginTwo.java @@ -0,0 +1,115 @@ +package shkd.repc.recos.opplugin; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.resource.ResManager; +import kd.bos.entity.ExtendedDataEntity; +import kd.bos.entity.plugin.PreparePropertysEventArgs; +import kd.bos.entity.plugin.args.AfterOperationArgs; +import kd.bos.entity.plugin.args.EndOperationTransactionArgs; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.QueryServiceHelper; +import kd.repc.rebas.common.bizutil.ReOperateOptionUtil; +import kd.repc.rebas.common.enums.ReBillStatusEnum; +import kd.repc.rebas.common.util.ReDigitalUtil; +import kd.repc.rebas.opplugin.base.RebasBillValidator; +import kd.repc.recos.business.aimcost.ReAimCostUtil; +import kd.repc.recos.business.conplan.ReConPlanGenByAimCostHelper; +import kd.repc.recos.business.conplan.ReConPlanHelper; +import kd.repc.recos.business.costversion.ReCostVersionSyncUtil; +import kd.repc.recos.business.dyncost.ReDynCostSynUtil; +import kd.repc.recos.opplugin.billtpl.RecosBillUnAuditOpPlugin; + +import java.util.List; +import java.util.Optional; + +public class ReAimCostUnAuditOpPluginTwo extends RecosBillUnAuditOpPlugin { + public ReAimCostUnAuditOpPluginTwo() { + } + + public void onPreparePropertys(PreparePropertysEventArgs e) { + super.onPreparePropertys(e); + List fieldKeys = e.getFieldKeys(); + fieldKeys.add("billno"); + fieldKeys.add("project"); + fieldKeys.add("importflag"); + fieldKeys.add("measurecostid"); + fieldKeys.add("coststage"); + fieldKeys.add("projectversion"); + fieldKeys.add("bizdate"); + fieldKeys.add("handler"); + fieldKeys.add("shapetype"); + } + + protected void checkBeforeOperation(RebasBillValidator validator, ExtendedDataEntity dataEntity) { + super.checkBeforeOperation(validator, dataEntity); + DynamicObject aimCost = dataEntity.getDataEntity(); + DynamicObject project = aimCost.getDynamicObject("project"); + boolean hasAdjustData = QueryServiceHelper.exists("recos_aimadjust", new QFilter[]{new QFilter("billstatus", "<>", ReBillStatusEnum.AUDITTED.getValue()), new QFilter("project", "=", project.getPkValue())}); + if (hasAdjustData) { + validator.addErrorMessage(dataEntity, ResManager.loadKDString("已存在未审核的目标成本调整单,不允许反审核!", "ReAimCostUnAuditOpPlugin_0", "repc-recos-opplugin", new Object[0])); + } + + Optional.ofNullable(ReAimCostUtil.getLastAimCostHead(project.getPkValue(), Boolean.FALSE)).ifPresent((lastAimCost) -> { + String currentVersion = aimCost.getString("billno").replace("V", ""); + String lastBillNo = lastAimCost.getString("billno").replace("V", ""); + String lastBigVersion = lastBillNo.substring(0, lastBillNo.lastIndexOf(".")); + String currentBigVersion = currentVersion.substring(0, currentVersion.lastIndexOf(".")); + if (ReDigitalUtil.compareTo(lastBigVersion, currentBigVersion) > 0) { + validator.addErrorMessage(dataEntity, ResManager.loadKDString("已存在较新版目标成本,不允许反审核。", "ReAimCostUnAuditOpPlugin_1", "repc-recos-opplugin", new Object[0])); + } else { + if (ReDigitalUtil.compareTo(lastBigVersion, currentBigVersion) == 0) { + String hisSmallVersion = lastBillNo.substring(lastBillNo.lastIndexOf(".") + 1); + String currentSmallVersion = currentVersion.substring(currentVersion.lastIndexOf(".") + 1); + if (ReDigitalUtil.compareTo(hisSmallVersion, currentSmallVersion) > 0) { + validator.addErrorMessage(dataEntity, ResManager.loadKDString("已存在较新版目标成本,不允许反审核。", "ReAimCostUnAuditOpPlugin_1", "repc-recos-opplugin", new Object[0])); + return; + } + } + + } + }); + boolean projectConPlan = QueryServiceHelper.exists("recos_conplan", new QFilter[]{new QFilter("billstatus", "in", new String[]{ReBillStatusEnum.SUBMITTED.getValue(), ReBillStatusEnum.AUDITTED.getValue()}), new QFilter("project", "=", project.getPkValue())}); + if (projectConPlan) { + validator.addErrorMessage(dataEntity, ResManager.loadKDString("存在已提交或已审核状态的合约规划,不允许反审核。", "ReAimCostUnAuditOpPlugin_2", "repc-recos-opplugin", new Object[0])); + } else { + boolean genByMeasureCost = !ReOperateOptionUtil.checkOperateSource(this.getOption(), "recos_measurecost") && ("0".equals(aimCost.getString("shapetype")) || aimCost.getLong("measurecostid") != 0L); + if (genByMeasureCost) { +// validator.addErrorMessage(dataEntity, ResManager.loadKDString("该目标成本为成本测算生成,如需反审核,请对成本测算进行反审核。", "ReAimCostUnAuditOpPlugin_3", "repc-recos-opplugin", new Object[0])); + } else { + boolean opFromMeasureCost = ReOperateOptionUtil.checkOperateSource(this.getOption(), "recos_measurecost"); + if (!opFromMeasureCost) { + boolean comeFromAimAdjust = QueryServiceHelper.exists("recos_aimadjust", new QFilter[]{new QFilter("project", "=", project.getPkValue()), new QFilter("coststage", "=", aimCost.getDynamicObject("coststage").getPkValue()), new QFilter("projectversion", "=", aimCost.getString("projectversion")), new QFilter("bizdate", "=", aimCost.get("bizdate")), new QFilter("handler", "=", aimCost.getDynamicObject("handler").getPkValue())}); + if (comeFromAimAdjust) { + validator.addErrorMessage(dataEntity, ResManager.loadKDString("该目标成本为目标成本调整生成,不允许反审核。", "ReAimCostUnAuditOpPlugin_4", "repc-recos-opplugin", new Object[0])); + } + + } + } + } + } + + protected void endUnAuditTransaction(EndOperationTransactionArgs args, DynamicObject model) { + super.endUnAuditTransaction(args, model); + } + + protected void afterUnAuditTransaction(AfterOperationArgs args, DynamicObject model) { + super.afterUnAuditTransaction(args, model); + this.syncConPlanByAimCostUnAudit(model.getPkValue()); + ReCostVersionSyncUtil.syncCostVersionData("recos_aimcost"); + Optional.ofNullable(model.getDynamicObject("project")).ifPresent((p) -> { + ReDynCostSynUtil.setDynCostLatestDataFlag(p.getPkValue()); + }); + } + + public void syncConPlanByAimCostUnAudit(Object aimCostId) { + DynamicObject aimCostObj = BusinessDataServiceHelper.loadSingle(aimCostId, "recos_aimcost"); + DynamicObject projectObj = aimCostObj.getDynamicObject("project"); + ReConPlanHelper.deleteConPlanData((Long)projectObj.getPkValue()); + DynamicObject preLastAimCost = ReAimCostUtil.getLastAimCostHead(projectObj.getPkValue(), true); + if (null != preLastAimCost) { + ReConPlanGenByAimCostHelper.syncConPlanByAimCost(preLastAimCost.getPkValue()); + } + + } +}