负计划采购订单最终需求数量校验

This commit is contained in:
lihao 2025-10-21 18:48:30 +08:00
parent 6dbe4d310f
commit b265c73384
3 changed files with 191 additions and 3 deletions

View File

@ -26,6 +26,7 @@ import nc.vo.pub.CircularlyAccessibleValueObject;
import nc.vo.pub.compiler.PfParameterVO;
import nc.vo.pub.lang.UFDate;
import nc.vo.pub.lang.UFDateTime;
import nc.vo.pub.lang.UFDouble;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.pubapp.pattern.model.entity.bill.AbstractBill;
import nc.vo.scmpub.res.billtype.POBillType;
@ -51,9 +52,9 @@ public class Transfer20To21Action extends AbstractTransferAction {
PraybillVO[] sorceVOs = this.getAggVO(read);
for (PraybillVO vo : sorceVOs) {
for (PraybillItemVO itemVO:vo.getBVO()){
if(null!=itemVO.getAttributeValue("vbdef33") && itemVO.getNastnum().compareTo(itemVO.getAttributeValue("vbdef33"))<0){
throw new BusinessException("采购数量大于最终需求数量不能生成采购订单!");
}
// if(null!=itemVO.getAttributeValue("vbdef33") && itemVO.getNastnum().compareTo(new UFDouble(String.valueOf(itemVO.getAttributeValue("vbdef33"))))>0){
// throw new BusinessException("采购数量大于最终需求数量不能生成采购订单!");
// }
}
}
IPfExchangeService service = (IPfExchangeService)ServiceLocator.find(IPfExchangeService.class);

View File

@ -0,0 +1,150 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package nc.bs.pu.m21.maintain;
import nc.bs.pu.m21.maintain.rule.ATPBeforeUpdateRule;
import nc.bs.pu.m21.maintain.rule.ATPUpdateRule;
import nc.bs.pu.m21.maintain.rule.FeeGoodsMaterialBeforeRule;
import nc.bs.pu.m21.maintain.rule.MaintainMPPCtrlChkRule;
import nc.bs.pu.m21.maintain.rule.NumAndPriceCheckRule;
import nc.bs.pu.m21.maintain.rule.OrderScaleCheckRule;
import nc.bs.pu.m21.maintain.rule.PrayToPoLimitRule;
import nc.bs.pu.m21.maintain.rule.WriteBackSourceRule;
import nc.bs.pu.m21.maintain.rule.save.*;
import nc.bs.pu.m21.plugin.OrderPluginPoint;
import nc.bs.scmpub.rule.CrossRuleValidateRule;
import nc.bs.scmpub.rule.VOSagaFrozenValidateRule;
import nc.impl.pu.m21.action.rule.RowNoRule;
import nc.impl.pu.m21.action.rule.revise.DeleteRule;
import nc.impl.pubapp.bd.userdef.UserDefSaveRule;
import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser;
import nc.vo.pu.m21.context.OrderContext;
import nc.vo.pu.m21.entity.OrderHeaderVO;
import nc.vo.pu.m21.entity.OrderItemVO;
import nc.vo.pu.m21.entity.OrderVO;
import nc.vo.pu.pub.rule.NewestOrgVersionFillRule;
import nc.vo.pu.pub.rule.TrantypeNotNullCheckRule;
import nc.vo.pu.pub.rule.pf.NoPassUpdateRule;
import nc.vo.pu.pub.sagas.PUSagasOperationEnum;
import nc.vo.pu.pub.util.BillInsert;
import nc.vo.pu.pub.util.BillUpdate;
import nc.vo.pub.BusinessException;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.scmpub.msg.rule.UpdateMessageStatusRule;
import nc.vo.scmpub.res.billtype.POBillType;
import nc.vo.scmpub.rule.AutoMaterialAssignRule;
import nc.vo.scmpub.rule.PurchaseOrgEnableCheckRule;
public class OrderSaveBP {
private OrderContext ctx;
public OrderSaveBP(OrderContext ctx) {
this.ctx = ctx;
}
public OrderVO[] save(OrderVO[] clientVos, OrderVO[] originVos) {
OrderVO[] returnedVos = null;
if (clientVos[0].getHVO().getStatus() != 2) {
CompareAroundProcesser<OrderVO> processer = new CompareAroundProcesser(OrderPluginPoint.UPDATE);
this.addBeforeRule(processer, clientVos);
this.addAfterRule(processer);
processer.before(clientVos, originVos);
try {
returnedVos = (OrderVO[])(new BillUpdate()).update(clientVos, originVos, "pk_order");
} catch (BusinessException e) {
ExceptionUtils.wrappException(e);
}
processer.after(returnedVos, originVos);
} else {
CompareAroundProcesser<OrderVO> processer = new CompareAroundProcesser(OrderPluginPoint.INSERT);
this.addBeforeRule(processer, clientVos);
this.addAfterRule(processer);
processer.before(clientVos, originVos);
try {
returnedVos = (OrderVO[])(new BillInsert()).insert(clientVos, "pk_order");
} catch (BusinessException e) {
ExceptionUtils.wrappException(e);
}
processer.after(returnedVos, null);
}
return returnedVos;
}
private void addAfterRule(CompareAroundProcesser<OrderVO> processer) {
processer.addAfterRule(new BillCodeUniqueRule());
processer.addAfterRule(new OrderSagasForzenAndCompensateRule("Save", PUSagasOperationEnum.OREDERSAVE));
processer.addAfterRule(new PresentStocksChkRule(this.ctx));
processer.addAfterRule(new EffectdateValidateRule());
processer.addAfterRule(new DocVisibilityChkRule());
processer.addAfterRule(new TranTypeChkRule());
processer.addAfterRule(new CntPurMaterialChkRule());
processer.addAfterRule(new MaxPriceChkRule(this.ctx));
processer.addAfterRule(new WriteBackSourceRule(this.ctx));
processer.addAfterRule(new WriteBackPriceForET());
processer.addAfterRule(new ATPUpdateRule());
processer.addAfterRule(new MaxStocksChkRule(this.ctx));
processer.addAfterRule(new SaveEventAfterRule());
processer.addAfterRule(new SourceToOrderMsgRule());
processer.addAfterRule(new SaveTransferMsgRule());
}
private void addBeforeRule(CompareAroundProcesser<OrderVO> processer, OrderVO[] orgUpdateVos) {
if (orgUpdateVos[0].getHVO().getStatus() != 2) {
processer.addBeforeRule(new VOSagaFrozenValidateRule(true));
}
processer.addBeforeRule(new CrossRuleValidateRule(POBillType.Order.getCode()));
processer.addBeforeRule(new SaveVOValidateRule());
processer.addBeforeRule(new AccrateCheckRule());
processer.addBeforeRule(new IsdepositCheckRule());
processer.addBeforeRule(new RowNoRule());
processer.addBeforeFinalRule(new NewestOrgVersionFillRule("pk_order"));
processer.addBeforeRule(new ItemEmptyRule());
processer.addBeforeRule(new OrderScaleCheckRule());
processer.addBeforeFinalRule(new TrantypeNotNullCheckRule());
processer.addBeforeFinalRule(new NoPassUpdateRule());
processer.addBeforeRule(new AutoMaterialAssignRule("pk_material", (String[])null, new String[]{"pk_org", "pk_apfinanceorg", "pk_apliabcenter", "pk_arrliabcenter", "pk_arrvstoorg", "pk_psfinanceorg", "pk_reqstoorg"}));
processer.addBeforeRule(new MaterialInStorckOrgRule());
processer.addBeforeFinalRule(new ArrliabCenterRule());
processer.addBeforeRule(new NumAndPriceCheckRule());
processer.addBeforeRule(new PurchaseOrgEnableCheckRule());
processer.addBeforeRule(new ArrvPlanChkRule(orgUpdateVos));
processer.addBeforeRule(new PlanArriveDateCheckRule());
processer.addBeforeRule(new DirectOrgCheckRule());
processer.addBeforeRule(new DeleteRule());
processer.addBeforeRule(new NecessaryFillRule());
processer.addBeforeRule(new OrderDirectPurchaseUpdateRule());
processer.addBeforeRule(new PrePayLimitCheckRule());
processer.addBeforeRule(new OrderCodeProceRule());
processer.addBeforeRule(new PrayToPoLimitRule());
processer.addBeforeRule(new ATPBeforeUpdateRule());
processer.addBeforeRule(new ConfirmOrderBiztypeRule());
processer.addBeforeRule(new MaintainMPPCtrlChkRule());
processer.addBeforeRule(new PurtypeSetterRule());
processer.addBeforeRule(new UserDefSaveRule(new Class[]{OrderHeaderVO.class, OrderItemVO.class}));
processer.addBeforeFinalRule(new BorrowpurSetterRule());
processer.addBeforeRule(new BatchCodeBeforeRule());
processer.addBeforeRule(new SaveEventBeforeRule());
processer.addBeforeRule(new IsBlistBeforeRule());
processer.addBeforeRule(new PaymentCheckDataBeforeRule());
processer.addBeforeRule(new AccountCheckBeforeRule());
processer.addBeforeRule(new UpdateMessageStatusRule("csourceid", "csourcebid"));
processer.addBeforeRule(new FeeGoodsMaterialBeforeRule());
processer.addBeforeRule(new PuCtExistCheckRule());
processer.addBeforeRule(new PUOrderChkNumAndMnyRule());
processer.addBeforeRule(new CheckMaterialOvidRule());
processer.addBeforeRule(new CheckMaterialSaleRule());
processer.addBeforeRule(new CheckFeeRule());
processer.addBeforeRule(new FillNfeetaxmnyRule());
processer.addBeforeRule(new FiterFeffdatetypeRule());
processer.addBeforeRule(new CheckOrderFinalNumRule());
}
}

View File

@ -0,0 +1,37 @@
package nc.bs.pu.m21.maintain.rule.save;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.vo.ml.NCLangRes4VoTransl;
import nc.vo.pu.m21.entity.OrderItemVO;
import nc.vo.pu.m21.entity.OrderVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.lang.UFDouble;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.scmpub.util.ArrayUtil;
/**
* 采购订单最终需求数量校验
*/
public class CheckOrderFinalNumRule implements IRule<OrderVO> {
public CheckOrderFinalNumRule() {
}
public void process(OrderVO[] orderVOS) {
if (!ArrayUtil.isEmpty(orderVOS)) {
for (OrderVO vo : orderVOS) {
if(vo.getPrimaryKey()!=null){
continue;
}
for (OrderItemVO itemVO:vo.getBVO()){
if(null != itemVO.getAttributeValue("vbdef33") && itemVO.getNastnum().compareTo(new UFDouble(String.valueOf(itemVO.getAttributeValue("vbdef33"))))>0){
try {
throw new BusinessException("采购数量大于最终需求数量不能生成采购订单!");
} catch (BusinessException e) {
throw new RuntimeException(e);
}
}
}
}
}
}
}