From 45031230038affebe944cc2425657f8595492a50 Mon Sep 17 00:00:00 2001 From: liujie Date: Fri, 13 Dec 2024 15:29:10 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E8=AE=A2=E5=8D=95=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E5=85=A8=E9=83=A8=E4=B8=8A=E8=AF=81=E5=90=8E=E4=B8=8D?= =?UTF-8?q?=E5=85=81=E8=AE=B8=E5=86=8D=E9=A2=86=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mmpac/pmo/pac0002/bp/PMORowFinishBP.java | 125 +++++++++ .../pac0002/rule/PMOToFinishPickMRule.java | 73 +++++ .../private/nc/bs/mmpac/wr/bp/WrInsertBP.java | 260 ++++++++++++++++++ .../wr/rule/serialno/PickMFinishRule.java | 100 +++++++ 4 files changed, 558 insertions(+) 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/PMORowFinishBP.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMORowFinishBP.java new file mode 100644 index 0000000..818e352 --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMORowFinishBP.java @@ -0,0 +1,125 @@ +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.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 PMOAggVO[] rowfinish(PMOAggVO[] vos) { + GCUpdateBPTemplate bp = new GCUpdateBPTemplate(PMOPluginPoint.ROWFINISH); + CompareAroundProcesser processer = bp.getAroundProcesser(); + addRowFinishBeforeRule(processer); + 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(upditemMap.get(item.getCmoid())); + } + } + aggvo.setChildrenVO((CircularlyAccessibleValueObject[])tempitems.toArray(new PMOItemVO[tempitems.size()])); + + PMOAggVO[] aggvos = { 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) { + 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..5b85cbc --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/rule/PMOToFinishPickMRule.java @@ -0,0 +1,73 @@ +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.md.persist.framework.IMDPersistenceQueryService; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.vo.mmpac.pickm.entity.AggPickmVO; +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()]; + for(int z=0; z bp = new GCInsertBPTemplate(WrPluginPoint.INSERT); + AroundProcesser processor = bp.getAroundProcesser(); + + addBeforeRule(processor, vos); + + addAfterRule(processor); + return (AggWrVO[])bp.insert(vos); + } + + + + + + + + + + + private void addBeforeRule(AroundProcesser processer, AggWrVO[] vos) { + IRule wrNullRule = new WrNullRule(); + processer.addBeforeRule(wrNullRule); + + OrgDisabledCheckRule orgDisabledCheckRule = new OrgDisabledCheckRule("pk_org", "FACTORYTYPE000000000"); + processer.addBeforeRule(orgDisabledCheckRule); + + UserDefSaveRule userDefSaveRule = new UserDefSaveRule(new String[] { "vdef", "vbdef", "vgdef", "vpdef" }, new Class[] { nc.vo.mmpac.wr.entity.WrVO.class, nc.vo.mmpac.wr.entity.WrItemVO.class, nc.vo.mmpac.wr.entity.WrQualityVO.class, nc.vo.mmpac.wr.entity.WrPickVO.class }); + + + + + processer.addBeforeRule(userDefSaveRule); + + MarAssistantSaveRule marRule = new MarAssistantSaveRule(); + processer.addBeforeRule(marRule); + + FillInsertDataRule fillInsertDataRule1 = new FillInsertDataRule(); + processer.addBeforeRule(fillInsertDataRule1); + + IRule orgPermissionRule = new WrCheckMaterialPermissionRule(); + processer.addBeforeRule(orgPermissionRule); + + IRule moCloseRule = new WrCheckMoIsCloseRule(); + processer.addBeforeRule(moCloseRule); + + processer.addBeforeRule(new MMCheckMaterialVirtualRule(nc.vo.mmpac.wr.entity.WrItemVO.class)); + + IRule wrSetDefaultValueWhenInsertRule = new WrSetDefaultValueWhenInsertRule(); + processer.addBeforeRule(wrSetDefaultValueWhenInsertRule); + + IRule wrSetItemDefaultValueRule = new WrSetItemDefaultValueRule(); + processer.addBeforeRule(wrSetItemDefaultValueRule); + + MMCreateBillcodeAndTrantypecodeRule mMCreateBillcodeAndTrantypecodeRule = new MMCreateBillcodeAndTrantypecodeRule("55A4", "vbillcode", "pk_group", "pk_org", "vtrantypecode"); + + + processer.addBeforeRule(mMCreateBillcodeAndTrantypecodeRule); + + 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); + + FieldLengthCheckRule fieldLengthCheckRule = new FieldLengthCheckRule(); + processer.addBeforeRule(fieldLengthCheckRule); + + IRule wrInsertAndDelInStockBatchCodeBeforeRule = new WrInsertAndDelInStockBatchCodeBeforeRule(); + 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) { + MMBillCodeCheckAndTrantypeRule mMBillCodeCheckAndTrantypeRule = new MMBillCodeCheckAndTrantypeRule("55A4", "vbillcode", "pk_group", "pk_org", "vtrantypecode"); + + + processor.addAfterRule(mMBillCodeCheckAndTrantypeRule); + + IRule wrCreateInStockBatchCodeAfterRule = new WrInsertInStockBatchCodeAfterRule(); + 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()); + } + } + + + + + + + + @Deprecated + protected IRule getMoRewriteRule() { return null; } + + + + + + + + + @Deprecated + protected IRule getMoDiscadNumRewriteRule() { return null; } + + + + + + + + + @Deprecated + protected IRule getAuditRule() { return null; } + + + + public boolean isOnlyInsert() { return this.isOnlyInsert; } + + + + public void setOnlyInsert(boolean isOnlyInsert) { this.isOnlyInsert = isOnlyInsert; } +} + + +/* Location: E:\project\taikai\ncchome\modules\mmpac\META-INF\lib\mmpac_wr.jar!/nc/bs/mmpac/wr/bp/WrInsertBP.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.0.7 + */ \ No newline at end of file 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..82a0ca4 --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/wr/rule/serialno/PickMFinishRule.java @@ -0,0 +1,100 @@ + 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.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()]; + for(int z=0; z