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