From 3bbc32ec31a73181a2e299e403e699daaed03b47 Mon Sep 17 00:00:00 2001 From: lihao Date: Wed, 22 Oct 2025 20:48:53 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=9F=E8=AE=A1=E5=88=92=E5=9B=9E=E5=86=99?= =?UTF-8?q?=E6=97=B6=E5=80=99=E6=A0=A1=E9=AA=8C=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pu/m20/rewrite/ReWrite20ForOrderBP.java | 4 + .../pu/rule/CheckOrderNumCalcRule.java | 37 ++++++ .../writeback/pu/OrderWriteBackFor23BP.java | 111 ++++++++++++++++++ .../pu/rule/AccArriveNumCalcRule.java | 66 +++++++++++ .../ic/m45/OrderWriteBackFor23BP.java | 109 +++++++++++++++++ 5 files changed, 327 insertions(+) create mode 100644 pu/src/private/nc/bs/pu/m20/rewrite/pu/rule/CheckOrderNumCalcRule.java create mode 100644 pu/src/private/nc/bs/pu/m21/writeback/pu/OrderWriteBackFor23BP.java create mode 100644 pu/src/private/nc/bs/pu/m21/writeback/pu/rule/AccArriveNumCalcRule.java create mode 100644 pu/src/private/nc/bs/pu/m23/writeback/ic/m45/OrderWriteBackFor23BP.java diff --git a/pu/src/private/nc/bs/pu/m20/rewrite/ReWrite20ForOrderBP.java b/pu/src/private/nc/bs/pu/m20/rewrite/ReWrite20ForOrderBP.java index d1bd24d1..126c9406 100644 --- a/pu/src/private/nc/bs/pu/m20/rewrite/ReWrite20ForOrderBP.java +++ b/pu/src/private/nc/bs/pu/m20/rewrite/ReWrite20ForOrderBP.java @@ -12,6 +12,7 @@ import java.util.List; import java.util.Set; import nc.bs.pu.m20.plugin.PraybillPluginPoint; import nc.bs.pu.m20.rewrite.pu.rule.AccOrderNumCalcRule; +import nc.bs.pu.m20.rewrite.pu.rule.CheckOrderNumCalcRule; import nc.bs.pu.m20.rewrite.pu.rule.PrayOrderWriteBackTolerRule; import nc.impl.pubapp.pattern.data.bill.BillQuery; import nc.impl.pubapp.pattern.data.bill.tool.BillTransferTool; @@ -24,6 +25,7 @@ import nc.vo.pu.m20.entity.PraybillViewVO; import nc.vo.pu.m20.entity.writeback.OrderWriteBackVO; import nc.vo.pu.m20.pub.PraybillVOUtil; import nc.vo.pu.pub.util.PUSysParamUtil; +import nc.vo.pub.BusinessException; import nc.vo.pub.lang.UFBoolean; import nc.vo.pub.lang.UFDouble; import nccloud.commons.lang.ArrayUtils; @@ -94,7 +96,9 @@ public class ReWrite20ForOrderBP { private void addRule(AroundProcesser processer, OrderWriteBackVO[] vos, PraybillViewVO[] views) { String pk_org = views[0].getPk_purchaseorg(); + processer.addBeforeRule(new AccOrderNumCalcRule(vos)); + processer.addBeforeRule(new CheckOrderNumCalcRule()); processer.addAfterRule(new PrayOrderWriteBackTolerRule("intolerance", PUSysParamUtil.getPO47(pk_org), "naccumulatenum", UFBoolean.valueOf(vos[0].isUserConfirm()))); } } diff --git a/pu/src/private/nc/bs/pu/m20/rewrite/pu/rule/CheckOrderNumCalcRule.java b/pu/src/private/nc/bs/pu/m20/rewrite/pu/rule/CheckOrderNumCalcRule.java new file mode 100644 index 00000000..ded23c58 --- /dev/null +++ b/pu/src/private/nc/bs/pu/m20/rewrite/pu/rule/CheckOrderNumCalcRule.java @@ -0,0 +1,37 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package nc.bs.pu.m20.rewrite.pu.rule; + +import java.util.Map; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.vo.ml.NCLangRes4VoTransl; +import nc.vo.pu.m20.entity.PraybillItemVO; +import nc.vo.pu.m20.entity.PraybillViewVO; +import nc.vo.pu.m20.entity.writeback.OrderWriteBackVO; +import nc.vo.pu.pub.util.CirVOUtil; +import nc.vo.pub.BusinessException; +import nc.vo.pub.lang.UFDouble; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nc.vo.pubapp.pattern.pub.MathTool; + +public class CheckOrderNumCalcRule implements IRule { + + + public CheckOrderNumCalcRule() { + } + public void process(PraybillViewVO[] views) { + for(PraybillViewVO vo : views) { + PraybillItemVO itemVO=vo.getItem(); + if(null != itemVO.getAttributeValue("vbdef33") && null!=itemVO.getNaccumulatenum()&& itemVO.getNaccumulatenum().compareTo(new UFDouble(String.valueOf(itemVO.getAttributeValue("vbdef33"))))>0){ + try { + throw new BusinessException("请购单累计订货数量大于最终需求数量不能生成采购订单!"); + } catch (BusinessException e) { + throw new RuntimeException(e); + } + } + } + } +} diff --git a/pu/src/private/nc/bs/pu/m21/writeback/pu/OrderWriteBackFor23BP.java b/pu/src/private/nc/bs/pu/m21/writeback/pu/OrderWriteBackFor23BP.java new file mode 100644 index 00000000..7c6abb10 --- /dev/null +++ b/pu/src/private/nc/bs/pu/m21/writeback/pu/OrderWriteBackFor23BP.java @@ -0,0 +1,111 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package nc.bs.pu.m21.writeback.pu; + +import java.util.HashSet; +import java.util.Set; +import nc.bs.pu.m21.writeback.OrderWBStoreArrvTolerRule; +import nc.bs.pu.m21.writeback.OrderWritebackTolerRule; +import nc.bs.pu.m21.writeback.ReceivePlanTolerRule; +import nc.bs.pu.m21.writeback.pu.rule.AccArrNumChkRule; +import nc.bs.pu.m21.writeback.pu.rule.AccArriveNumCalcRule; +import nc.bs.pu.m21.writeback.pu.rule.ArriveCloseChkRule; +import nc.bs.pu.m21.writeback.pu.rule.AutoArriveCloseRule; +import nc.bs.pu.m21.writeback.pu.rule.ReceivePlanArrCalRule; +import nc.bs.pu.m21.writeback.pu.rule.ReceivePlanArrChkRule; +import nc.impl.pubapp.pattern.data.view.ViewQuery; +import nc.impl.pubapp.pattern.data.vo.VOQuery; +import nc.impl.pubapp.pattern.data.vo.VOUpdate; +import nc.impl.pubapp.pattern.rule.plugin.IPluginPoint; +import nc.impl.pubapp.pattern.rule.processer.AroundProcesser; +import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser; +import nc.pubitf.pu.m21.ic.m45.IOrderWriteBackPara; +import nc.pubitf.pu.m21.pu.m23.IOrderWriteBackParaFor23; +import nc.vo.pu.m21.entity.OrderReceivePlanVO; +import nc.vo.pu.m21.entity.OrderViewVO; +import nc.vo.pu.m21.pub.OrderVOUtil; +import nc.vo.pu.pub.util.PUSysParamUtil; +import nc.vo.pub.lang.UFBoolean; +import nc.vo.pubapp.pattern.data.ValueUtils; +import nccloud.commons.lang.ArrayUtils; + +public class OrderWriteBackFor23BP { + private UFBoolean isUserConfirm; + + public OrderWriteBackFor23BP(UFBoolean isUserConfirm) { + this.isUserConfirm = isUserConfirm; + } + + public void writeback(IOrderWriteBackParaFor23[] vos) { + if (!ArrayUtils.isEmpty(vos)) { + String[] bids = OrderVOUtil.getInsance().getBIDs(vos); + OrderViewVO[] views = (OrderViewVO[])(new ViewQuery(OrderViewVO.class)).query(bids); + if (!ArrayUtils.isEmpty(views)) { + OrderViewVO[] orgViews = new OrderViewVO[views.length]; + + for(int i = 0; i < views.length; ++i) { + orgViews[i] = (OrderViewVO)views[i].clone(); + } + + OrderReceivePlanVO[] rpVOs = this.getRPVOs(vos); + if (!ArrayUtils.isEmpty(rpVOs)) { + AroundProcesser rpPrecosser = new AroundProcesser((IPluginPoint)null); + this.addRPRule(rpPrecosser, vos, views); + rpPrecosser.before(rpVOs); + String[] rpNames = new String[]{"naccumarrvnum", "nbackarrvnum", "naccumwastnum"}; + VOUpdate rpUpdate = new VOUpdate(); + rpUpdate.update(rpVOs, rpNames); + rpPrecosser.after(rpVOs); + } + + CompareAroundProcesser processer = new CompareAroundProcesser((IPluginPoint)null); + this.addRule(processer, vos, orgViews); + processer.before(views, orgViews); + processer.after(views, orgViews); + } + } + } + + private void addRPRule(AroundProcesser processer, IOrderWriteBackParaFor23[] vos, OrderViewVO[] views) { + processer.addBeforeRule(new ReceivePlanArrCalRule(vos, views)); + processer.addBeforeRule(new ReceivePlanArrChkRule(vos, views)); + processer.addAfterRule(new ReceivePlanTolerRule("intolerance", PUSysParamUtil.getPO02(views[0].getPk_org()), "naccumarrvnum", this.isUserConfirm)); + } + + private void addRule(CompareAroundProcesser processer, IOrderWriteBackParaFor23[] vos, OrderViewVO[] orgViews) { + processer.addBeforeRule(new AccArriveNumCalcRule(vos)); + processer.addBeforeRule(new ArriveCloseChkRule(orgViews, vos)); + processer.addBeforeRule(new AccArrNumChkRule(vos)); + processer.addAfterRule(new AutoArriveCloseRule(vos)); + processer.addAfterRule(new OrderWritebackTolerRule("intolerance", PUSysParamUtil.getPO02(orgViews[0].getPk_org()), "naccumarrvnum", this.isUserConfirm)); + processer.addAfterRule(new OrderWBStoreArrvTolerRule(true, ValueUtils.getBoolean(this.isUserConfirm))); + + + } + + private OrderReceivePlanVO[] getRPVOs(IOrderWriteBackPara[] wbVos) { + if (ArrayUtils.isEmpty(wbVos)) { + return null; + } else { + Set set = new HashSet(); + + for(IOrderWriteBackPara vo : wbVos) { + if (vo != null && vo.getBBID() != null) { + set.add(vo.getBBID()); + } + } + + if (set.isEmpty()) { + return null; + } else { + String[] pkOrderBBs = (String[])set.toArray(new String[0]); + VOQuery query = new VOQuery(OrderReceivePlanVO.class); + OrderReceivePlanVO[] rpVOs = (OrderReceivePlanVO[])query.query(pkOrderBBs); + return rpVOs; + } + } + } +} diff --git a/pu/src/private/nc/bs/pu/m21/writeback/pu/rule/AccArriveNumCalcRule.java b/pu/src/private/nc/bs/pu/m21/writeback/pu/rule/AccArriveNumCalcRule.java new file mode 100644 index 00000000..5d61df19 --- /dev/null +++ b/pu/src/private/nc/bs/pu/m21/writeback/pu/rule/AccArriveNumCalcRule.java @@ -0,0 +1,66 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package nc.bs.pu.m21.writeback.pu.rule; + +import java.util.Map; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.pubitf.pu.m21.pu.m23.IOrderWriteBackParaFor23; +import nc.vo.pu.m21.entity.OrderItemVO; +import nc.vo.pu.m21.entity.OrderViewVO; +import nc.vo.pu.pub.util.CirVOUtil; +import nc.vo.pub.BusinessException; +import nc.vo.pub.lang.UFDouble; +import nc.vo.pubapp.pattern.pub.MathTool; + +public class AccArriveNumCalcRule implements IRule { + private IOrderWriteBackParaFor23[] wbVos; + + public AccArriveNumCalcRule(IOrderWriteBackParaFor23[] wbVos) { + this.wbVos = wbVos; + } + + public void process(OrderViewVO[] views) { + Map viewMap = CirVOUtil.createKeyVOMap(views); + + for(IOrderWriteBackParaFor23 vo : this.wbVos) { + OrderViewVO view = (OrderViewVO)viewMap.get(vo.getBID()); + UFDouble diffNum = vo.getDiffNum(); + if (!vo.isReturn()) { + UFDouble newAccNum = MathTool.add(view.getNaccumarrvnum(), diffNum); + Object vbdef33= ((OrderItemVO)view.getVO(OrderItemVO.class)).getAttributeValue("vbdef33"); + if(null != vbdef33 && null!=newAccNum && newAccNum.compareTo(new UFDouble(String.valueOf(vbdef33)))>0) { + try { + throw new BusinessException("累计到货主数量大于最终需求数量不能生成到货单!"); + } catch (BusinessException e) { + throw new RuntimeException(e); + } + } + view.setNaccumarrvnum(newAccNum); + } else { + if (view.getBreturn().booleanValue() || view.getBrefwhenreturn().booleanValue()) { + UFDouble newAccNum = MathTool.add(view.getNaccumarrvnum(), diffNum); + Object vbdef33= ((OrderItemVO)view.getVO(OrderItemVO.class)).getAttributeValue("vbdef33"); + if(null != vbdef33 && null!=newAccNum && newAccNum.compareTo(new UFDouble(String.valueOf(vbdef33)))>0) { + try { + throw new BusinessException("累计到货主数量大于最终需求数量不能生成到货单!"); + } catch (BusinessException e) { + throw new RuntimeException(e); + } + } + view.setNaccumarrvnum(newAccNum); + } + + UFDouble newAccBackNum = MathTool.add(view.getNbackarrvnum(), MathTool.oppose(diffNum)); + view.setNbackarrvnum(newAccBackNum); + } + + UFDouble diffWasteNum = vo.getDiffWasteNum(); + UFDouble newWasteNum = MathTool.add(view.getNaccumwastnum(), diffWasteNum); + view.setNaccumwastnum(newWasteNum); + } + + } +} diff --git a/pu/src/private/nc/bs/pu/m23/writeback/ic/m45/OrderWriteBackFor23BP.java b/pu/src/private/nc/bs/pu/m23/writeback/ic/m45/OrderWriteBackFor23BP.java new file mode 100644 index 00000000..599136b5 --- /dev/null +++ b/pu/src/private/nc/bs/pu/m23/writeback/ic/m45/OrderWriteBackFor23BP.java @@ -0,0 +1,109 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package nc.bs.pu.m23.writeback.ic.m45; + +import java.util.HashSet; +import java.util.Set; +import nc.bs.pu.m21.writeback.OrderWBStoreArrvTolerRule; +import nc.bs.pu.m21.writeback.OrderWritebackTolerRule; +import nc.bs.pu.m21.writeback.ReceivePlanTolerRule; +import nc.bs.pu.m21.writeback.pu.rule.AccArrNumChkRule; +import nc.bs.pu.m21.writeback.pu.rule.AccArriveNumCalcRule; +import nc.bs.pu.m21.writeback.pu.rule.ArriveCloseChkRule; +import nc.bs.pu.m21.writeback.pu.rule.AutoArriveCloseRule; +import nc.bs.pu.m21.writeback.pu.rule.ReceivePlanArrCalRule; +import nc.bs.pu.m21.writeback.pu.rule.ReceivePlanArrChkRule; +import nc.impl.pubapp.pattern.data.view.ViewQuery; +import nc.impl.pubapp.pattern.data.vo.VOQuery; +import nc.impl.pubapp.pattern.data.vo.VOUpdate; +import nc.impl.pubapp.pattern.rule.plugin.IPluginPoint; +import nc.impl.pubapp.pattern.rule.processer.AroundProcesser; +import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser; +import nc.pubitf.pu.m21.ic.m45.IOrderWriteBackPara; +import nc.pubitf.pu.m21.pu.m23.IOrderWriteBackParaFor23; +import nc.vo.pu.m21.entity.OrderReceivePlanVO; +import nc.vo.pu.m21.entity.OrderViewVO; +import nc.vo.pu.m21.pub.OrderVOUtil; +import nc.vo.pu.pub.util.PUSysParamUtil; +import nc.vo.pub.lang.UFBoolean; +import nc.vo.pubapp.pattern.data.ValueUtils; +import nccloud.commons.lang.ArrayUtils; + +public class OrderWriteBackFor23BP { + private UFBoolean isUserConfirm; + + public OrderWriteBackFor23BP(UFBoolean isUserConfirm) { + this.isUserConfirm = isUserConfirm; + } + + public void writeback(IOrderWriteBackParaFor23[] vos) { + if (!ArrayUtils.isEmpty(vos)) { + String[] bids = OrderVOUtil.getInsance().getBIDs(vos); + OrderViewVO[] views = (OrderViewVO[])(new ViewQuery(OrderViewVO.class)).query(bids); + if (!ArrayUtils.isEmpty(views)) { + OrderViewVO[] orgViews = new OrderViewVO[views.length]; + + for(int i = 0; i < views.length; ++i) { + orgViews[i] = (OrderViewVO)views[i].clone(); + } + + OrderReceivePlanVO[] rpVOs = this.getRPVOs(vos); + if (!ArrayUtils.isEmpty(rpVOs)) { + AroundProcesser rpPrecosser = new AroundProcesser((IPluginPoint)null); + this.addRPRule(rpPrecosser, vos, views); + rpPrecosser.before(rpVOs); + String[] rpNames = new String[]{"naccumarrvnum", "nbackarrvnum", "naccumwastnum"}; + VOUpdate rpUpdate = new VOUpdate(); + rpUpdate.update(rpVOs, rpNames); + rpPrecosser.after(rpVOs); + } + + CompareAroundProcesser processer = new CompareAroundProcesser((IPluginPoint)null); + this.addRule(processer, vos, orgViews); + processer.before(views, orgViews); + processer.after(views, orgViews); + } + } + } + + private void addRPRule(AroundProcesser processer, IOrderWriteBackParaFor23[] vos, OrderViewVO[] views) { + processer.addBeforeRule(new ReceivePlanArrCalRule(vos, views)); + processer.addBeforeRule(new ReceivePlanArrChkRule(vos, views)); + processer.addAfterRule(new ReceivePlanTolerRule("intolerance", PUSysParamUtil.getPO02(views[0].getPk_org()), "naccumarrvnum", this.isUserConfirm)); + } + + private void addRule(CompareAroundProcesser processer, IOrderWriteBackParaFor23[] vos, OrderViewVO[] orgViews) { + processer.addBeforeRule(new AccArriveNumCalcRule(vos)); + processer.addBeforeRule(new ArriveCloseChkRule(orgViews, vos)); + processer.addBeforeRule(new AccArrNumChkRule(vos)); + processer.addAfterRule(new AutoArriveCloseRule(vos)); + processer.addAfterRule(new OrderWritebackTolerRule("intolerance", PUSysParamUtil.getPO02(orgViews[0].getPk_org()), "naccumarrvnum", this.isUserConfirm)); + processer.addAfterRule(new OrderWBStoreArrvTolerRule(true, ValueUtils.getBoolean(this.isUserConfirm))); + } + + private OrderReceivePlanVO[] getRPVOs(IOrderWriteBackPara[] wbVos) { + if (ArrayUtils.isEmpty(wbVos)) { + return null; + } else { + Set set = new HashSet(); + + for(IOrderWriteBackPara vo : wbVos) { + if (vo != null && vo.getBBID() != null) { + set.add(vo.getBBID()); + } + } + + if (set.isEmpty()) { + return null; + } else { + String[] pkOrderBBs = (String[])set.toArray(new String[0]); + VOQuery query = new VOQuery(OrderReceivePlanVO.class); + OrderReceivePlanVO[] rpVOs = (OrderReceivePlanVO[])query.query(pkOrderBBs); + return rpVOs; + } + } + } +}