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"); } }