diff --git a/pu/src/client/nccloud/web/pu/poorder/transfer/action/Transfer20To21Action.java b/pu/src/client/nccloud/web/pu/poorder/transfer/action/Transfer20To21Action.java index b7028010..2bdb93c6 100644 --- a/pu/src/client/nccloud/web/pu/poorder/transfer/action/Transfer20To21Action.java +++ b/pu/src/client/nccloud/web/pu/poorder/transfer/action/Transfer20To21Action.java @@ -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); diff --git a/pu/src/private/nc/bs/pu/m21/maintain/OrderSaveBP.java b/pu/src/private/nc/bs/pu/m21/maintain/OrderSaveBP.java new file mode 100644 index 00000000..0fb66842 --- /dev/null +++ b/pu/src/private/nc/bs/pu/m21/maintain/OrderSaveBP.java @@ -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 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 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 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 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()); + } +} diff --git a/pu/src/private/nc/bs/pu/m21/maintain/rule/save/CheckOrderFinalNumRule.java b/pu/src/private/nc/bs/pu/m21/maintain/rule/save/CheckOrderFinalNumRule.java new file mode 100644 index 00000000..64963f75 --- /dev/null +++ b/pu/src/private/nc/bs/pu/m21/maintain/rule/save/CheckOrderFinalNumRule.java @@ -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 { + 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); + } + } + } + } + } + } +}