From 2cbc4b60367b5c1eab50655ab05580c8f869e7bb Mon Sep 17 00:00:00 2001 From: ptt <2403326863@qq.com> Date: Fri, 14 Mar 2025 11:26:44 +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=B7=BB=E5=8A=A0=E5=8F=8D=E5=AE=A1=E6=A0=B8=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReMeasureCostUnAuditOpPluginTwo.java | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 main/java/shkd/repc/recos/opplugin/ReMeasureCostUnAuditOpPluginTwo.java diff --git a/main/java/shkd/repc/recos/opplugin/ReMeasureCostUnAuditOpPluginTwo.java b/main/java/shkd/repc/recos/opplugin/ReMeasureCostUnAuditOpPluginTwo.java new file mode 100644 index 0000000..affe672 --- /dev/null +++ b/main/java/shkd/repc/recos/opplugin/ReMeasureCostUnAuditOpPluginTwo.java @@ -0,0 +1,133 @@ +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.operate.result.IOperateInfo; +import kd.bos.entity.operate.result.OperationResult; +import kd.bos.entity.plugin.PreparePropertysEventArgs; +import kd.bos.entity.plugin.args.AfterOperationArgs; +import kd.bos.entity.plugin.args.BeginOperationTransactionArgs; +import kd.bos.entity.plugin.args.EndOperationTransactionArgs; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.QueryServiceHelper; +import kd.repc.rebas.common.bizutil.ReProjectUtil; +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.AimCostGenByMeasureHelper; +import kd.repc.recos.business.conplan.ReConPlanHelper; +import kd.repc.recos.business.costversion.ReCostVersionSyncUtil; +import kd.repc.recos.business.measure.ReMeasureCostUtil; +import kd.repc.recos.business.measure.ReMeasureInterperiodUtil; +import kd.repc.recos.opplugin.billtpl.RecosBillUnAuditOpPlugin; + +import java.util.List; +import java.util.Optional; + +public class ReMeasureCostUnAuditOpPluginTwo extends RecosBillUnAuditOpPlugin { + public ReMeasureCostUnAuditOpPluginTwo() { + } + + public void onPreparePropertys(PreparePropertysEventArgs e) { + super.onPreparePropertys(e); + List fieldKeys = e.getFieldKeys(); + fieldKeys.add("project"); + fieldKeys.add("billno"); + fieldKeys.add("aimversionflag"); + fieldKeys.add("version"); + fieldKeys.add("hasconplangrpflag"); + fieldKeys.add("coststage"); + } + + protected void checkBeforeOperation(RebasBillValidator validator, ExtendedDataEntity dataEntity) { + super.checkBeforeOperation(validator, dataEntity); + DynamicObject measureCost = dataEntity.getDataEntity(); + DynamicObject project = measureCost.getDynamicObject("project"); + DynamicObject costStage = measureCost.getDynamicObject("coststage"); + 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("已存在未审核的目标成本调整单,不允许反审核!", "ReMeasureCostUnAuditOpPlugin_0", "repc-recos-opplugin", new Object[0])); + } + + Optional.ofNullable(ReMeasureCostUtil.getHistoryMeasureCost(project.getPkValue(), measureCost.getPkValue(), costStage.getPkValue())).ifPresent((hisMeasure) -> { + String currentVersion = measureCost.getString("billno").replace("V", ""); + String hisBillNo = hisMeasure.getString("billno").replace("V", ""); + String hisBigVersion = hisBillNo.substring(0, hisBillNo.lastIndexOf(".")); + String currentBigVersion = currentVersion.substring(0, currentVersion.lastIndexOf(".")); + if (ReDigitalUtil.compareTo(hisBigVersion, currentBigVersion) > 0) { + validator.addErrorMessage(dataEntity, ResManager.loadKDString("已有下一版本,不能反审核。", "ReMeasureCostUnAuditOpPlugin_1", "repc-recos-opplugin", new Object[0])); + } else { + if (ReDigitalUtil.compareTo(hisBigVersion, currentBigVersion) == 0) { + String hisSmallVersion = hisBillNo.substring(hisBillNo.lastIndexOf(".") + 1); + String currentSmallVersion = currentVersion.substring(currentVersion.lastIndexOf(".") + 1); + if (ReDigitalUtil.compareTo(hisSmallVersion, currentSmallVersion) > 0) { + validator.addErrorMessage(dataEntity, ResManager.loadKDString("已有下一版本,不能反审核。", "ReMeasureCostUnAuditOpPlugin_1", "repc-recos-opplugin", new Object[0])); + return; + } + } + + } + }); + boolean targetFlag = measureCost.getBoolean("aimversionflag"); + if (targetFlag) { + 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("对应项目分期合约规划为已审核状态或已提交, 不能反审核。", "ReMeasureCostUnAuditOpPlugin_2", "repc-recos-opplugin", new Object[0])); + } + } + + QFilter measurecostid = new QFilter("project", QCP.equals, measureCost.getDynamicObject("project").getPkValue()); + DynamicObject[] load = BusinessDataServiceHelper.load("recos_aimcost", "id", measurecostid.toArray()); + if (load!=null&&load.length!=0) { + validator.addErrorMessage(dataEntity, ResManager.loadKDString("存在对应项目的目标成本,无法反审核。", "ReMeasureCostUnAuditOpPlugin_2", "repc-recos-opplugin", new Object[0])); + } + + if (measureCost.getBoolean("aimversionflag")) { + Boolean hasSaveConPlan = ReConPlanHelper.checkConPlanStatus(project.getLong("id")); + if (hasSaveConPlan) { + OperationResult unAuditOpResult = AimCostGenByMeasureHelper.unAuditAimCost(measureCost.getPkValue()); + if (null != unAuditOpResult && !unAuditOpResult.isSuccess()) { + validator.addErrorMessage(dataEntity, ((IOperateInfo)unAuditOpResult.getAllErrorOrValidateInfo().get(0)).getMessage()); + } + } + } + + } + + protected void beginUnAuditTransaction(BeginOperationTransactionArgs args, DynamicObject model) { + super.beginUnAuditTransaction(args, model); + DynamicObject project = model.getDynamicObject("project"); + DynamicObject hisMeasure = ReMeasureCostUtil.getHistoryMeasureCost(project.getPkValue(), model.getPkValue()); + if (null == hisMeasure) { + model.set("hasconplangrpflag", (Object)null); + } else { + model.set("hasconplangrpflag", hisMeasure.get("hasconplangrpflag")); + } + + } + + protected void endUnAuditTransaction(EndOperationTransactionArgs args, DynamicObject model) { + super.endUnAuditTransaction(args, model); + DynamicObject project = model.getDynamicObject("project"); + long currLeafProjectId = project.getLong("id"); + long mainProjectId = ReProjectUtil.getProjectF7(currLeafProjectId).getLong("mainprojectid"); + long costStageId = model.getDynamicObject("coststage").getLong("id"); + ReMeasureInterperiodUtil.unAuditUpdateAllInterperiodDataByProject(mainProjectId, model.getLong("id"), currLeafProjectId, costStageId); + } + + protected void afterUnAuditTransaction(AfterOperationArgs args, DynamicObject model) { + super.afterUnAuditTransaction(args, model); + if (model.getBoolean("aimversionflag")) { + DynamicObject project = model.getDynamicObject("project"); + Boolean hasSaveConPlan = ReConPlanHelper.checkConPlanStatus(project.getLong("id")); + if (hasSaveConPlan) { + AimCostGenByMeasureHelper.deleteAimCost(model.getPkValue()); + } + } + + ReCostVersionSyncUtil.syncCostVersionData("recos_measurecost"); + } +}