dobe_comic8/main/java/shkd/repc/recos/opplugin/ReAimCostUnAuditOpPluginTwo...

116 lines
7.0 KiB
Java

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