134 lines
7.4 KiB
Java
134 lines
7.4 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.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<String> 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");
|
|
}
|
|
}
|