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

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