成本测算:手工生成目标成本添加判断

目标成本:反审核去掉校验,添加反写逻辑
This commit is contained in:
ptt 2025-03-13 11:16:45 +08:00
parent 6bf6c764c0
commit b1c55f865b
4 changed files with 177 additions and 3 deletions

View File

@ -4,13 +4,14 @@ import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.form.events.AfterDoOperationEventArgs; import kd.bos.form.events.AfterDoOperationEventArgs;
import kd.bos.form.events.ClosedCallBackEvent;
import kd.sdk.plugin.Plugin; import kd.sdk.plugin.Plugin;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.EventObject; import java.util.EventObject;
/** /**
* 据界面插件 * 费用登记和付款申请的发票分录合计行表单插件
*/ */
public class SumInvoiceEntryPlugin extends AbstractBillPlugIn implements Plugin { public class SumInvoiceEntryPlugin extends AbstractBillPlugIn implements Plugin {
@ -43,4 +44,10 @@ public class SumInvoiceEntryPlugin extends AbstractBillPlugIn implements Plugin
super.afterDoOperation(args); super.afterDoOperation(args);
updateAmt(); updateAmt();
} }
@Override
public void closedCallBack(ClosedCallBackEvent closedCallBackEvent) {
super.closedCallBack(closedCallBackEvent);
updateAmt();
}
} }

View File

@ -34,8 +34,8 @@ public class CreatTargetCostFormPlugin extends AbstractBillPlugIn implements Plu
Object primaryKeyValue = dynamicObject.getPkValue(); Object primaryKeyValue = dynamicObject.getPkValue();
if ("qeug_creat".equals(evt.getItemKey())) { if ("qeug_creat".equals(evt.getItemKey())) {
QFilter measurecostid = new QFilter("project", QCP.equals, dynamicObject.getDynamicObject("project").getPkValue()); QFilter measurecostid = new QFilter("project", QCP.equals, dynamicObject.getDynamicObject("project").getPkValue());
DynamicObject dynamicObject2 = BusinessDataServiceHelper.loadSingle("recos_aimcost", measurecostid.toArray()); DynamicObject[] load = BusinessDataServiceHelper.load("recos_aimcost", "id", measurecostid.toArray());
if (dynamicObject2!=null) { if (load!=null&&load.length!=0) {
this.getView().showMessage("存在对应目标成本,无法生成"); this.getView().showMessage("存在对应目标成本,无法生成");
return; return;
} }

View File

@ -0,0 +1,52 @@
package shkd.repc.recos.opplugin;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
import kd.bos.entity.plugin.PreparePropertysEventArgs;
import kd.bos.entity.plugin.args.AfterOperationArgs;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.sdk.plugin.Plugin;
/**
* 单据操作插件
*/
public class DelBackTargetVersionOpPlugin extends AbstractOperationServicePlugIn implements Plugin {
@Override
public void onPreparePropertys(PreparePropertysEventArgs e) {
super.onPreparePropertys(e);
e.getFieldKeys().add("measurecostid");
e.getFieldKeys().add("shapetype");
e.getFieldKeys().add("project");
e.getFieldKeys().add("project.id");
}
@Override
public void afterExecuteOperationTransaction(AfterOperationArgs e) {
super.afterExecuteOperationTransaction(e);
DynamicObject[] dataEntities1 = e.getDataEntities();
if(dataEntities1!=null&&dataEntities1.length!=0){
for (int i1 = 0; i1 < dataEntities1.length; i1++) {
DynamicObject dynamicObject2 = dataEntities1[i1];
if("0".equals(dynamicObject2.getString("shapetype"))){
DynamicObject dynamicObject = dynamicObject2;
QFilter measurecostid = new QFilter("project", QCP.equals, dynamicObject.getDynamicObject("project").getPkValue())
.and("qeug_aimversionflag",QCP.equals,true);
DynamicObject[] recos_measurecosts = BusinessDataServiceHelper.load("recos_measurecost", "id", measurecostid.toArray());
if(recos_measurecosts!=null&&recos_measurecosts.length!=0){
for (int i = 0; i < recos_measurecosts.length; i++) {
DynamicObject recos_measurecost = recos_measurecosts[i];
DynamicObject dynamicObject1 = BusinessDataServiceHelper.loadSingle(recos_measurecost.getPkValue(), "recos_measurecost");
dynamicObject1.set("qeug_aimversionflag",false);
// dynamicObject1.set("aimversionflag",false);刷新所有目标版
SaveServiceHelper.update(dynamicObject1);
}
}
}
}
}
}
}

View File

@ -0,0 +1,115 @@
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());
}
}
}