116 lines
7.0 KiB
Java
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());
|
|
}
|
|
|
|
}
|
|
}
|