From daa822bc63b6a048f694cda9a273f4bb3a430ef9 Mon Sep 17 00:00:00 2001 From: lj Date: Mon, 24 Mar 2025 18:10:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=85=A8=E9=83=A8=E9=A2=86?= =?UTF-8?q?=E6=96=99=E5=90=8E=E5=9B=9E=E5=86=99=E5=A4=87=E6=96=99=E8=AE=A1?= =?UTF-8?q?=E5=88=92=20=20=20+=20=20=20=20=E7=A8=8E=E5=8A=A1=E4=BA=91?= =?UTF-8?q?=E5=BC=80=E7=A5=A8=E5=9B=9E=E5=86=99=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bs/mmpac/pmo/pac0002/bp/PMOFinishBP.java | 68 +++++++ .../mmpac/pmo/pac0002/bp/PMORowFinishBP.java | 114 +++++++++++ .../pac0002/rule/PMOToFinishPickMRule.java | 84 ++++++++ .../private/nc/bs/mmpac/wr/bp/WrInsertBP.java | 184 ++++++++++++++++++ .../wr/rule/serialno/PickMFinishRule.java | 110 +++++++++++ .../nc/bs/uapbd/task/InvoiceTaskPlugin.java | 10 +- 6 files changed, 567 insertions(+), 3 deletions(-) create mode 100644 mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMOFinishBP.java create mode 100644 mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMORowFinishBP.java create mode 100644 mmpac/src/private/nc/bs/mmpac/pmo/pac0002/rule/PMOToFinishPickMRule.java create mode 100644 mmpac/src/private/nc/bs/mmpac/wr/bp/WrInsertBP.java create mode 100644 mmpac/src/private/nc/bs/mmpac/wr/rule/serialno/PickMFinishRule.java diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMOFinishBP.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMOFinishBP.java new file mode 100644 index 0000000..fb11fc9 --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMOFinishBP.java @@ -0,0 +1,68 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package nc.bs.mmpac.pmo.pac0002.bp; + +import nc.bs.mmpac.pmo.pac0002.pluginpoint.PMOPluginPoint; +import nc.bs.mmpac.pmo.pac0002.rule.PMOFilterBillStatusRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOFinishAutoFinishPutPlanRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOToFinishPickMRule; +import nc.bs.mmpac.pmo.pac0002.rule.fill.PMOFillFinishValueRule; +import nc.bs.mmpub.rule.MMVOSagaFrozenValidateRule; +import nc.impl.pubapp.pattern.rule.IFilterRule; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser; +import nc.util.mmf.framework.gc.GCUpdateBPTemplate; +import nc.vo.mmpac.pmo.pac0002.constant.PMOConstLang; +import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO; +import nc.vo.mmpac.pmo.pac0002.enumeration.PMOFBillstatusEnum; + +public class PMOFinishBP { + public PMOFinishBP() { + } + + public PMOAggVO[] finish(PMOAggVO[] fullBills, PMOAggVO[] originBills) { + GCUpdateBPTemplate bp = new GCUpdateBPTemplate(PMOPluginPoint.FINISH); + this.addFinishBeforeRule(bp.getAroundProcesser()); + this.addFinishAfterRule(bp.getAroundProcesser()); + PMOAggVO[] retBills = (PMOAggVO[])bp.update(fullBills, originBills); + return retBills; + } + + private void addFinishBeforeRule(CompareAroundProcesser processer) { + IRule checkFrozenRule = new MMVOSagaFrozenValidateRule(true); + processer.addBeforeRule(checkFrozenRule); + IFilterRule filterStatusRule = new PMOFilterBillStatusRule(PMOConstLang.getMSG_ACTION_NO_AUDIT(), PMOFBillstatusEnum.AUDIT); + processer.addBeforeRule(filterStatusRule); + IRule fillFinishRule = new PMOFillFinishValueRule(false); + processer.addBeforeRule(fillFinishRule); + } + + private void addFinishAfterRule(CompareAroundProcesser processer) { + IRule finishPutPlanRule = new PMOFinishAutoFinishPutPlanRule(); + processer.addAfterRule(finishPutPlanRule); + /** 同步修改备料计划完成(生产订单强制完工时) */ + IRule pMOToFinishPickMRule = new PMOToFinishPickMRule(); + processer.addAfterRule(pMOToFinishPickMRule); + } + + public PMOAggVO[] finishCancel(PMOAggVO[] fullBills, PMOAggVO[] originBills) { + GCUpdateBPTemplate bp = new GCUpdateBPTemplate(PMOPluginPoint.UNFINISH); + this.addFinishCancelBeforeRule(bp.getAroundProcesser()); + this.addFinishCancelAfterRule(bp.getAroundProcesser()); + PMOAggVO[] retBills = (PMOAggVO[])bp.update(fullBills, originBills); + return retBills; + } + + private void addFinishCancelBeforeRule(CompareAroundProcesser processer) { + IFilterRule filterStatusRule = new PMOFilterBillStatusRule(PMOConstLang.getMSG_ACTION_NO_AUDIT(), PMOFBillstatusEnum.AUDIT); + processer.addBeforeRule(filterStatusRule); + IRule fillFinishRule = new PMOFillFinishValueRule(true); + processer.addBeforeRule(fillFinishRule); + } + + private void addFinishCancelAfterRule(CompareAroundProcesser processer) { + } +} diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMORowFinishBP.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMORowFinishBP.java new file mode 100644 index 0000000..d5e61ef --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMORowFinishBP.java @@ -0,0 +1,114 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package nc.bs.mmpac.pmo.pac0002.bp; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import nc.bs.mmpac.pmo.pac0002.bp.service.PMOBPService; +import nc.bs.mmpac.pmo.pac0002.bp.util.PMOBPUtil; +import nc.bs.mmpac.pmo.pac0002.pluginpoint.PMOPluginPoint; +import nc.bs.mmpac.pmo.pac0002.rule.PMOFilterBillStatusRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOFilterRowStatusRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOFinishAutoFinishPutPlanRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOToFinishPickMRule; +import nc.bs.mmpac.pmo.pac0002.rule.fill.PMOFillFinishValueRule; +import nc.bs.mmpub.rule.MMVOSagaFrozenValidateRule; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser; +import nc.util.mmf.framework.gc.GCBillTransferTool; +import nc.util.mmf.framework.gc.GCBillUpdate; +import nc.util.mmf.framework.gc.GCUpdateBPTemplate; +import nc.vo.mmpac.pmo.pac0002.constant.PMOConstLang; +import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO; +import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO; +import nc.vo.mmpac.pmo.pac0002.enumeration.PMOFBillstatusEnum; +import nc.vo.mmpac.pmo.pac0002.enumeration.PMOFItemStatusEnum; +import nc.vo.pub.BusinessException; +import nc.vo.pub.CircularlyAccessibleValueObject; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; + +public class PMORowFinishBP { + public PMORowFinishBP() { + } + + public PMOAggVO[] rowfinish(PMOAggVO[] vos) { + GCUpdateBPTemplate bp = new GCUpdateBPTemplate(PMOPluginPoint.ROWFINISH); + CompareAroundProcesser processer = bp.getAroundProcesser(); + this.addRowFinishBeforeRule(processer); + this.addRowFinishAfterRule(processer); + PMOAggVO[] returnvos = (PMOAggVO[])processer.before(vos, vos); + List upditemList = new ArrayList(); + Map upditemMap = new HashMap(); + + for(PMOAggVO aggvo : returnvos) { + PMOItemVO[] items = aggvo.getChildrenVO(); + + for(PMOItemVO item : items) { + upditemList.add(item); + upditemMap.put(item.getCmoid(), item); + } + } + + try { + PMOAggVO aggvo = PMOBPService.getIPMOQueryService().queryByPk(vos[0].getParentVO().getCpmohid()); + PMOItemVO[] olditems = aggvo.getChildrenVO(); + List tempitems = new ArrayList(); + + for(PMOItemVO item : olditems) { + if (!upditemMap.containsKey(item.getCmoid())) { + tempitems.add(item); + } else { + ((PMOItemVO)upditemMap.get(item.getCmoid())).setStatus(1); + PMOBPUtil.setGrandVOStatusUpdate((PMOItemVO)upditemMap.get(item.getCmoid())); + tempitems.add((PMOItemVO)upditemMap.get(item.getCmoid())); + } + } + + aggvo.setChildrenVO((CircularlyAccessibleValueObject[])tempitems.toArray(new PMOItemVO[tempitems.size()])); + PMOAggVO[] aggvos = new PMOAggVO[]{aggvo}; + GCBillTransferTool transferTool = new GCBillTransferTool(aggvos); + PMOAggVO[] originBills = (PMOAggVO[])transferTool.getOriginBills(); + GCBillUpdate billupdate = new GCBillUpdate(); + PMOAggVO[] newaggvos = (PMOAggVO[])billupdate.update(aggvos, originBills); + PMOItemVO[] totalitems = newaggvos[0].getChildrenVO(); + Map newitemMap = new HashMap(); + + for(PMOItemVO item : totalitems) { + if (upditemMap.containsKey(item.getCmoid())) { + newitemMap.put(item.getCmoid(), item); + } + } + + returnvos[0].setChildrenVO((CircularlyAccessibleValueObject[])newitemMap.values().toArray(new PMOItemVO[0])); + processer.after(returnvos, returnvos); + + /** 同步修改备料计划完成(生产订单强制完工时) */ + IRule pMOToFinishPickMRule = new PMOToFinishPickMRule(); + pMOToFinishPickMRule.process(newaggvos); + /** ******************** */ + + PMOAggVO newaggvo = PMOBPService.getIPMOQueryService().queryByPk(vos[0].getParentVO().getCpmohid()); + return new PMOAggVO[]{newaggvo}; + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + return returnvos; + } + } + + private void addRowFinishBeforeRule(CompareAroundProcesser processer) { + IRule checkFrozenRule = new MMVOSagaFrozenValidateRule(true); + processer.addBeforeRule(checkFrozenRule); + processer.addBeforeRule(new PMOFilterBillStatusRule(PMOConstLang.getMSG_ACTION_NO_AUDIT(), PMOFBillstatusEnum.AUDIT)); + processer.addBeforeRule(new PMOFilterRowStatusRule(PMOConstLang.getMSG_RULE_NO_ROWDATA(), PMOFItemStatusEnum.PUT)); + processer.addBeforeRule(new PMOFillFinishValueRule(false)); + } + + private void addRowFinishAfterRule(CompareAroundProcesser processer) { + processer.addAfterRule(new PMOFinishAutoFinishPutPlanRule()); + } +} diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/rule/PMOToFinishPickMRule.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/rule/PMOToFinishPickMRule.java new file mode 100644 index 0000000..11a8def --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/rule/PMOToFinishPickMRule.java @@ -0,0 +1,84 @@ +package nc.bs.mmpac.pmo.pac0002.rule; + +import java.util.ArrayList; +import java.util.List; + +import nc.bs.framework.common.NCLocator; +import nc.bs.mmpac.pmo.pac0002.bp.service.PMOBPService; +import nc.impl.mmpac.pickm.PickmMaintainServiceImpl; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.itf.mmpac.pickm.IPickmMaintainService; +import nc.md.persist.framework.IMDPersistenceQueryService; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.vo.mmpac.pickm.entity.AggPickmVO; +import nc.vo.mmpac.pickm.entity.PickmHeadVO; +import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO; +import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO; +import nc.vo.mmpac.pmo.pac0002.enumeration.PMOFBillstatusEnum; +import nc.vo.mmpac.pmo.pac0002.util.PMOTransferUtil; +import nc.vo.pub.BusinessException; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; + +public class PMOToFinishPickMRule + extends Object + implements IRule{ + public void process(PMOAggVO[] vos) { + if (MMValueCheck.isEmpty(vos)) { + return; + } + /** + * 业务逻辑: + * 1.循环生产订单明细表 + * 2.查看生产订单明细行的状态是否为完工(2) + * 3.若为完工状态,则根据生产订单明细表中生产订单行查询备料计划 + * 4.修改备料计划为完成状态(3) + */ + for(int i = 0; i < vos.length; i++) { + PMOAggVO vo = vos[i]; + PMOItemVO[] items = vo.getChildrenVO(); + //循环生产订单明细 + for(int j = 0; j < items.length; j++) { + PMOItemVO item = items[j]; + //查看生产订单行状态是否为完工(2) + int fitemStatus = item.getFitemstatus(); + if(fitemStatus != 2) { + continue; + } + //根据生产订单行查询备料计划 + String cmoid = item.getCmoid(); + String whereSql = "nvl(mm_pickm.dr,0) = 0 and mm_pickm.vsourcemorowid = '" + cmoid + "'"; + IMDPersistenceQueryService aggvoQueryService = NCLocator.getInstance().lookup(IMDPersistenceQueryService.class); + // 根据主键查询得到aggvo + try { + @SuppressWarnings("unchecked") + ArrayList aggVOs = (ArrayList)aggvoQueryService.queryBillOfVOByCond(AggPickmVO.class, whereSql, true, false); + if(aggVOs.size() <= 0) { + continue; + } + //数组转换 + AggPickmVO[] aggVOsArr = new AggPickmVO[aggVOs.size()]; + boolean flag = false; + for(int z=0; z bp = new GCInsertBPTemplate(WrPluginPoint.INSERT); + AroundProcesser processor = bp.getAroundProcesser(); + Map vbatchsMap = new HashMap(); + this.addBeforeRule(processor, vos, vbatchsMap); + this.addAfterRule(processor, vbatchsMap); + return (AggWrVO[])bp.insert(vos); + } + + private void addBeforeRule(AroundProcesser processer, AggWrVO[] vos, Map vbatchsMap) { + IRule wrNullRule = new WrNullRule(); + processer.addBeforeRule(wrNullRule); + IRule mmatoMaterialCheckRule = new MMATOMaterialCheckRule((String)null, "cbmaterialvid", "cbffileid"); + processer.addBeforeRule(mmatoMaterialCheckRule); + IRule orgRule = new OrgDisabledCheckRule("pk_org", "FACTORYTYPE000000000"); + processer.addBeforeRule(orgRule); + IRule checkDefRule = new UserDefSaveRule(new String[]{"vdef", "vbdef", "vgdef", "vpdef"}, new Class[]{WrVO.class, WrItemVO.class, WrQualityVO.class, WrPickVO.class}); + processer.addBeforeRule(checkDefRule); + MarAssistantSaveRule marRule = new MarAssistantSaveRule(); + processer.addBeforeRule(marRule); + IRule fillInsertDataRule = new WrFillInsertDataRule(); + processer.addBeforeRule(fillInsertDataRule); + IRule autoMaterialAssignRule = new MMAutoMaterialAssignRule((String)null, "cbmaterialvid", new String[]{"pk_org"}, (String[])null); + processer.addBeforeFinalRule(autoMaterialAssignRule); + IRule orgPermissionRule = new WrCheckMaterialPermissionRule(); + processer.addBeforeRule(orgPermissionRule); + IRule moCloseRule = new WrCheckMoIsCloseRule(); + processer.addBeforeRule(moCloseRule); + processer.addBeforeRule(new MMCheckMaterialVirtualRule(WrItemVO.class)); + IRule wrSetDefaultValueWhenInsertRule = new WrSetDefaultValueWhenInsertRule(); + processer.addBeforeRule(wrSetDefaultValueWhenInsertRule); + IRule wrSetItemDefaultValueRule = new WrSetItemDefaultValueRule(); + processer.addBeforeRule(wrSetItemDefaultValueRule); + IRule billcodeRule = new MMCreateBillcodeAndTrantypecodeRule("55A4", "vbillcode", "pk_group", "pk_org", "vtrantypecode"); + processer.addBeforeRule(billcodeRule); + IRule wrHeadNotNullRule = new WrHeadNotNullRule(); + processer.addBeforeRule(wrHeadNotNullRule); + IRule wrBatchCodeRule = new WrCreateBatchCodeRule(); + processer.addBeforeRule(wrBatchCodeRule); + IRule wrClearNullProductBodyRule = new WrClearNullBodyRule(); + processer.addBeforeRule(wrClearNullProductBodyRule); + processer.addBeforeRule(new WrRowNoRule()); + IRule wrQualityFilterRule = new WrQualityFilterRule(); + processer.addBeforeRule(wrQualityFilterRule); + IRule wrPickFilterRule = new WrPickFilterRule(); + processer.addBeforeRule(wrPickFilterRule); + IRule wrOutputNotNullRule = new WrOutputNotNullRule(); + processer.addBeforeRule(wrOutputNotNullRule); + IRule wrNoneMainProductBomCheckRule = new WrNoneMainProductBomCheckRule(); + processer.addBeforeRule(wrNoneMainProductBomCheckRule); + IRule wrConsumeNotNullRule = new WrPickNotNullRule(); + processer.addBeforeRule(wrConsumeNotNullRule); + IRule lengthCheckRule = new FieldLengthCheckRule(); + processer.addBeforeRule(lengthCheckRule); + IRule wrInsertAndDelInStockBatchCodeBeforeRule = new WrInsertAndDelInStockBatchCodeBeforeRule(vbatchsMap); + processer.addBeforeRule(wrInsertAndDelInStockBatchCodeBeforeRule); + WrSetQualityVODefaultValueRule wrSetQualityVODefaultValueRule = new WrSetQualityVODefaultValueRule(); + processer.addBeforeRule(wrSetQualityVODefaultValueRule); + processer.addBeforeRule(new WrSerialNoCheckCodeRepeat()); + WrSerialNoAutoCreateBeforeRule wrAutoCreateSnBeforeRule = new WrSerialNoAutoCreateBeforeRule(); + processer.addBeforeRule(wrAutoCreateSnBeforeRule); + WrSerialNoCheckRule wrSnCheckRule = new WrSerialNoCheckRule(); + processer.addBeforeRule(wrSnCheckRule); + WrSnSynToQualtiyRule synToQRule = new WrSnSynToQualtiyRule(); + processer.addBeforeRule(synToQRule); + WrMoSerialNoMarkIRule mosnMarkRule = new WrMoSerialNoMarkIRule(); + processer.addBeforeRule(mosnMarkRule); + IRule wrCreateBatProdRule = new WrCreateBatProdRule(); + processer.addBeforeRule(wrCreateBatProdRule); + processer.addBeforeRule(new WrCheckTranstypeCodeRule()); + } + + private void addAfterRule(AroundProcesser processor, Map vbatchsMap) { + IRule rule = new MMBillCodeCheckAndTrantypeRule("55A4", "vbillcode", "pk_group", "pk_org", "vtrantypecode"); + processor.addAfterRule(rule); + IRule wrCreateInStockBatchCodeAfterRule = new WrInsertInStockBatchCodeAfterRule(vbatchsMap); + processor.addAfterRule(wrCreateInStockBatchCodeAfterRule); + processor.addAfterRule(new WrInsertRewriteWrNumForPutPlanRule()); + IRule wrMORewriteRule = new WrMORewriteRule(2); + processor.addAfterRule(wrMORewriteRule); + IRule moDiscadNumRewriteRule = new MoDiscadNumRewriteRule(2); + processor.addAfterRule(moDiscadNumRewriteRule); + IRule snSaveRule = new WrSerialNoSaveRule(); + processor.addAfterRule(snSaveRule); + /** 同步修改备料计划完成 */ + IRule pickMFinishRule = new PickMFinishRule(); + processor.addAfterRule(pickMFinishRule); + /** ******************** */ + + if (!this.isOnlyInsert) { + processor.addAfterRule(new WrIsSaveAndApproveRule()); + } + + processor.addAfterRule(new WrAuditAndApplyCheckRule()); + processor.addAfterRule(new WrAuditAndProdInRule()); + } + + /** @deprecated */ + @Deprecated + protected IRule getMoRewriteRule() { + return null; + } + + /** @deprecated */ + @Deprecated + protected IRule getMoDiscadNumRewriteRule() { + return null; + } + + /** @deprecated */ + @Deprecated + protected IRule getAuditRule() { + return null; + } + + public boolean isOnlyInsert() { + return this.isOnlyInsert; + } + + public void setOnlyInsert(boolean isOnlyInsert) { + this.isOnlyInsert = isOnlyInsert; + } +} diff --git a/mmpac/src/private/nc/bs/mmpac/wr/rule/serialno/PickMFinishRule.java b/mmpac/src/private/nc/bs/mmpac/wr/rule/serialno/PickMFinishRule.java new file mode 100644 index 0000000..d6abe75 --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/wr/rule/serialno/PickMFinishRule.java @@ -0,0 +1,110 @@ +package nc.bs.mmpac.wr.rule.serialno; + +import java.util.ArrayList; + +import nc.bs.framework.common.NCLocator; +import nc.bs.mmpac.pmo.pac0002.bp.query.PMOItemVOQueryBP; +import nc.bs.mmpac.wr.rule.serialno.doc.WrSerialNoDocInsertControl; +import nc.impl.mmpac.pickm.PickmMaintainServiceImpl; +import nc.impl.obm.pattern.data.bill.BillQuery; +import nc.impl.pubapp.pattern.data.vo.VOQuery; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.itf.mmpac.pickm.IPickmMaintainService; +import nc.md.persist.framework.IMDPersistenceQueryService; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.util.mmpac.wr.vochange.WrBusiVOToChangeVO; +import nc.vo.mmpac.pickm.entity.AggPickmVO; +import nc.vo.mmpac.pickm.entity.PickmHeadVO; +import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO; +import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO; +import nc.vo.mmpac.wr.entity.AggWrChangeVO; +import nc.vo.mmpac.wr.entity.AggWrVO; +import nc.vo.mmpac.wr.entity.WrItemVO; +import nc.vo.pub.BusinessException; + + + + + + + +public class PickMFinishRule + extends Object + implements IRule +{ + public void process(AggWrVO[] vos) { + if (MMValueCheck.isEmpty(vos)) { + return; + } + /** + * 业务逻辑: + * 1.根据生产报告子表中生产订单行查看生产订单明细表 + * 2.查看生产订单明细行的状态是否为完工(2) + * 3.若为完工状态,则根据生成报告子表中生产订单行查询备料计划 + * 4.修改备料计划为完成状态(3) + */ + for(int i = 0; i < vos.length; i++) { + AggWrVO vo = vos[i]; + WrItemVO[] items = vo.getChildrenVO(); + //循环生产报告子表 + for(int j = 0; j < items.length; j++) { + WrItemVO item = items[j]; + String cbmobid = item.getCbmobid(); + String[] keys = {cbmobid}; + //生产订单行查询 + PMOItemVO[] pmoItemvos = (new PMOItemVOQueryBP()).getPMOItemVOsByids(keys); + //查看生产订单行状态是否为完工(2) + if(pmoItemvos.length > 0) { + PMOItemVO pmoItem = pmoItemvos[0]; + int fitemStatus = pmoItem.getFitemstatus(); + if(fitemStatus != 2) { + continue; + } + //根据生产订单行查询备料计划 +// BillQuery query = new BillQuery(AggPickmVO.class); +// AggPickmVO[] aggVOs = (AggPickmVO[])query.query(keys); + + String whereSql = "nvl(mm_pickm.dr,0) = 0 and mm_pickm.vsourcemorowid = '" + cbmobid + "'"; + IMDPersistenceQueryService aggvoQueryService = NCLocator.getInstance().lookup(IMDPersistenceQueryService.class); + // 根据主键查询得到aggvo + try { + @SuppressWarnings("unchecked") + ArrayList aggVOs = (ArrayList)aggvoQueryService.queryBillOfVOByCond(AggPickmVO.class, whereSql, true, false); + if(aggVOs.size() <= 0) { + continue; + } + //数组转换 + AggPickmVO[] aggVOsArr = new AggPickmVO[aggVOs.size()]; + boolean flag = false; + for(int z=0; z