负计划采购订单最终需求数量校验
This commit is contained in:
		
							parent
							
								
									6dbe4d310f
								
							
						
					
					
						commit
						b265c73384
					
				|  | @ -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); | ||||
|  |  | |||
|  | @ -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()); | ||||
|     } | ||||
| } | ||||
|  | @ -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); | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue