实现全部领料后回写备料计划 + 税务云开票回写调整
This commit is contained in:
		
							parent
							
								
									6d53517653
								
							
						
					
					
						commit
						daa822bc63
					
				|  | @ -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<PMOAggVO> 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<PMOAggVO> processer) { | ||||||
|  |         IRule<PMOAggVO> checkFrozenRule = new MMVOSagaFrozenValidateRule(true); | ||||||
|  |         processer.addBeforeRule(checkFrozenRule); | ||||||
|  |         IFilterRule<PMOAggVO> filterStatusRule = new PMOFilterBillStatusRule(PMOConstLang.getMSG_ACTION_NO_AUDIT(), PMOFBillstatusEnum.AUDIT); | ||||||
|  |         processer.addBeforeRule(filterStatusRule); | ||||||
|  |         IRule<PMOAggVO> fillFinishRule = new PMOFillFinishValueRule(false); | ||||||
|  |         processer.addBeforeRule(fillFinishRule); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void addFinishAfterRule(CompareAroundProcesser<PMOAggVO> processer) { | ||||||
|  |         IRule<PMOAggVO> finishPutPlanRule = new PMOFinishAutoFinishPutPlanRule(); | ||||||
|  |         processer.addAfterRule(finishPutPlanRule); | ||||||
|  |         /** 同步修改备料计划完成(生产订单强制完工时) */ | ||||||
|  |         IRule<PMOAggVO> pMOToFinishPickMRule = new PMOToFinishPickMRule(); | ||||||
|  |         processer.addAfterRule(pMOToFinishPickMRule); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public PMOAggVO[] finishCancel(PMOAggVO[] fullBills, PMOAggVO[] originBills) { | ||||||
|  |         GCUpdateBPTemplate<PMOAggVO> 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<PMOAggVO> processer) { | ||||||
|  |         IFilterRule<PMOAggVO> filterStatusRule = new PMOFilterBillStatusRule(PMOConstLang.getMSG_ACTION_NO_AUDIT(), PMOFBillstatusEnum.AUDIT); | ||||||
|  |         processer.addBeforeRule(filterStatusRule); | ||||||
|  |         IRule<PMOAggVO> fillFinishRule = new PMOFillFinishValueRule(true); | ||||||
|  |         processer.addBeforeRule(fillFinishRule); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void addFinishCancelAfterRule(CompareAroundProcesser<PMOAggVO> processer) { | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -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<PMOAggVO> bp = new GCUpdateBPTemplate(PMOPluginPoint.ROWFINISH); | ||||||
|  |         CompareAroundProcesser<PMOAggVO> processer = bp.getAroundProcesser(); | ||||||
|  |         this.addRowFinishBeforeRule(processer); | ||||||
|  |         this.addRowFinishAfterRule(processer); | ||||||
|  |         PMOAggVO[] returnvos = (PMOAggVO[])processer.before(vos, vos); | ||||||
|  |         List<PMOItemVO> upditemList = new ArrayList(); | ||||||
|  |         Map<String, PMOItemVO> 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<PMOItemVO> 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<PMOAggVO> transferTool = new GCBillTransferTool(aggvos); | ||||||
|  |             PMOAggVO[] originBills = (PMOAggVO[])transferTool.getOriginBills(); | ||||||
|  |             GCBillUpdate<PMOAggVO> billupdate = new GCBillUpdate(); | ||||||
|  |             PMOAggVO[] newaggvos = (PMOAggVO[])billupdate.update(aggvos, originBills); | ||||||
|  |             PMOItemVO[] totalitems = newaggvos[0].getChildrenVO(); | ||||||
|  |             Map<String, PMOItemVO> 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<PMOAggVO> 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<PMOAggVO> processer) { | ||||||
|  |         IRule<PMOAggVO> 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<PMOAggVO> processer) { | ||||||
|  |         processer.addAfterRule(new PMOFinishAutoFinishPutPlanRule()); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -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<PMOAggVO>{ | ||||||
|  |     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<AggPickmVO> aggVOs = (ArrayList<AggPickmVO>)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<aggVOs.size(); z++) { | ||||||
|  |                         AggPickmVO aggPickmVO = aggVOs.get(z); | ||||||
|  |                         PickmHeadVO pickmHeadVO = aggPickmVO.getParentVO(); | ||||||
|  |                         Integer fbillstatus = pickmHeadVO.getFbillstatus(); | ||||||
|  |                         //已经位完工态的备料计划不修改 | ||||||
|  |                         if(fbillstatus != 2){ | ||||||
|  |                             aggVOsArr[z] =aggVOs.get(z); | ||||||
|  |                             flag = true; | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                     if(flag) { | ||||||
|  |                         //备料计划完工 | ||||||
|  |                         IPickmMaintainService ipickmMaintainService = NCLocator.getInstance().lookup(IPickmMaintainService.class); | ||||||
|  |                         ipickmMaintainService.finishPickm(aggVOsArr); | ||||||
|  |                     } | ||||||
|  |                 }catch(BusinessException e) { | ||||||
|  |                     // TODO Auto-generated catch block | ||||||
|  |                     e.printStackTrace(); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,184 @@ | ||||||
|  | // | ||||||
|  | // Source code recreated from a .class file by IntelliJ IDEA | ||||||
|  | // (powered by FernFlower decompiler) | ||||||
|  | // | ||||||
|  | 
 | ||||||
|  | package nc.bs.mmpac.wr.bp; | ||||||
|  | 
 | ||||||
|  | import java.util.HashMap; | ||||||
|  | import java.util.Map; | ||||||
|  | import nc.bs.mmpac.wr.plugin.WrPluginPoint; | ||||||
|  | import nc.bs.mmpac.wr.rule.WrAuditAndApplyCheckRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.WrAuditAndProdInRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.WrCheckMaterialPermissionRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.WrCheckMoIsCloseRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.WrCheckTranstypeCodeRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.WrClearNullBodyRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.WrFillInsertDataRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.WrHeadNotNullRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.WrIsSaveAndApproveRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.WrNoneMainProductBomCheckRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.WrPickFilterRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.WrQualityFilterRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.WrRowNoRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.WrSetDefaultValueWhenInsertRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.WrSetItemDefaultValueRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.WrSetQualityVODefaultValueRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.batch.WrCreateBatProdRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.batch.WrCreateBatchCodeRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.check.WrNullRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.instockbatch.WrInsertAndDelInStockBatchCodeBeforeRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.instockbatch.WrInsertInStockBatchCodeAfterRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.mo.MoDiscadNumRewriteRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.mo.WrMORewriteRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.output.WrOutputNotNullRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.pick.WrPickNotNullRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.putplan.WrInsertRewriteWrNumForPutPlanRule; | ||||||
|  | import nc.bs.mmpac.wr.rule.serialno.*; | ||||||
|  | import nc.bs.mmpub.rule.MMATOMaterialCheckRule; | ||||||
|  | import nc.bs.mmpub.rule.MMAutoMaterialAssignRule; | ||||||
|  | import nc.bs.pubapp.pub.rule.FieldLengthCheckRule; | ||||||
|  | import nc.bs.pubapp.pub.rule.OrgDisabledCheckRule; | ||||||
|  | import nc.impl.pubapp.bd.material.assistant.MarAssistantSaveRule; | ||||||
|  | import nc.impl.pubapp.bd.userdef.UserDefSaveRule; | ||||||
|  | import nc.impl.pubapp.pattern.rule.IRule; | ||||||
|  | import nc.impl.pubapp.pattern.rule.processer.AroundProcesser; | ||||||
|  | import nc.util.mmf.busi.rule.MMBillCodeCheckAndTrantypeRule; | ||||||
|  | import nc.util.mmf.busi.rule.MMCheckMaterialVirtualRule; | ||||||
|  | import nc.util.mmf.busi.rule.MMCreateBillcodeAndTrantypecodeRule; | ||||||
|  | import nc.util.mmf.framework.gc.GCInsertBPTemplate; | ||||||
|  | import nc.vo.mmpac.wr.entity.AggWrVO; | ||||||
|  | import nc.vo.mmpac.wr.entity.WrItemVO; | ||||||
|  | import nc.vo.mmpac.wr.entity.WrPickVO; | ||||||
|  | import nc.vo.mmpac.wr.entity.WrQualityVO; | ||||||
|  | import nc.vo.mmpac.wr.entity.WrVO; | ||||||
|  | 
 | ||||||
|  | public class WrInsertBP { | ||||||
|  |     private boolean isOnlyInsert = false; | ||||||
|  | 
 | ||||||
|  |     public WrInsertBP() { | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public AggWrVO[] insert(AggWrVO[] vos) { | ||||||
|  |         GCInsertBPTemplate<AggWrVO> bp = new GCInsertBPTemplate(WrPluginPoint.INSERT); | ||||||
|  |         AroundProcesser<AggWrVO> processor = bp.getAroundProcesser(); | ||||||
|  |         Map<String, String> vbatchsMap = new HashMap(); | ||||||
|  |         this.addBeforeRule(processor, vos, vbatchsMap); | ||||||
|  |         this.addAfterRule(processor, vbatchsMap); | ||||||
|  |         return (AggWrVO[])bp.insert(vos); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void addBeforeRule(AroundProcesser<AggWrVO> processer, AggWrVO[] vos, Map<String, String> vbatchsMap) { | ||||||
|  |         IRule<AggWrVO> wrNullRule = new WrNullRule(); | ||||||
|  |         processer.addBeforeRule(wrNullRule); | ||||||
|  |         IRule<AggWrVO> mmatoMaterialCheckRule = new MMATOMaterialCheckRule((String)null, "cbmaterialvid", "cbffileid"); | ||||||
|  |         processer.addBeforeRule(mmatoMaterialCheckRule); | ||||||
|  |         IRule<AggWrVO> orgRule = new OrgDisabledCheckRule("pk_org", "FACTORYTYPE000000000"); | ||||||
|  |         processer.addBeforeRule(orgRule); | ||||||
|  |         IRule<AggWrVO> checkDefRule = new UserDefSaveRule(new String[]{"vdef", "vbdef", "vgdef", "vpdef"}, new Class[]{WrVO.class, WrItemVO.class, WrQualityVO.class, WrPickVO.class}); | ||||||
|  |         processer.addBeforeRule(checkDefRule); | ||||||
|  |         MarAssistantSaveRule<AggWrVO> marRule = new MarAssistantSaveRule(); | ||||||
|  |         processer.addBeforeRule(marRule); | ||||||
|  |         IRule<AggWrVO> fillInsertDataRule = new WrFillInsertDataRule(); | ||||||
|  |         processer.addBeforeRule(fillInsertDataRule); | ||||||
|  |         IRule<AggWrVO> autoMaterialAssignRule = new MMAutoMaterialAssignRule((String)null, "cbmaterialvid", new String[]{"pk_org"}, (String[])null); | ||||||
|  |         processer.addBeforeFinalRule(autoMaterialAssignRule); | ||||||
|  |         IRule<AggWrVO> orgPermissionRule = new WrCheckMaterialPermissionRule(); | ||||||
|  |         processer.addBeforeRule(orgPermissionRule); | ||||||
|  |         IRule<AggWrVO> moCloseRule = new WrCheckMoIsCloseRule(); | ||||||
|  |         processer.addBeforeRule(moCloseRule); | ||||||
|  |         processer.addBeforeRule(new MMCheckMaterialVirtualRule(WrItemVO.class)); | ||||||
|  |         IRule<AggWrVO> wrSetDefaultValueWhenInsertRule = new WrSetDefaultValueWhenInsertRule(); | ||||||
|  |         processer.addBeforeRule(wrSetDefaultValueWhenInsertRule); | ||||||
|  |         IRule<AggWrVO> wrSetItemDefaultValueRule = new WrSetItemDefaultValueRule(); | ||||||
|  |         processer.addBeforeRule(wrSetItemDefaultValueRule); | ||||||
|  |         IRule<AggWrVO> billcodeRule = new MMCreateBillcodeAndTrantypecodeRule("55A4", "vbillcode", "pk_group", "pk_org", "vtrantypecode"); | ||||||
|  |         processer.addBeforeRule(billcodeRule); | ||||||
|  |         IRule<AggWrVO> wrHeadNotNullRule = new WrHeadNotNullRule(); | ||||||
|  |         processer.addBeforeRule(wrHeadNotNullRule); | ||||||
|  |         IRule<AggWrVO> wrBatchCodeRule = new WrCreateBatchCodeRule(); | ||||||
|  |         processer.addBeforeRule(wrBatchCodeRule); | ||||||
|  |         IRule<AggWrVO> wrClearNullProductBodyRule = new WrClearNullBodyRule(); | ||||||
|  |         processer.addBeforeRule(wrClearNullProductBodyRule); | ||||||
|  |         processer.addBeforeRule(new WrRowNoRule()); | ||||||
|  |         IRule<AggWrVO> wrQualityFilterRule = new WrQualityFilterRule(); | ||||||
|  |         processer.addBeforeRule(wrQualityFilterRule); | ||||||
|  |         IRule<AggWrVO> wrPickFilterRule = new WrPickFilterRule(); | ||||||
|  |         processer.addBeforeRule(wrPickFilterRule); | ||||||
|  |         IRule<AggWrVO> wrOutputNotNullRule = new WrOutputNotNullRule(); | ||||||
|  |         processer.addBeforeRule(wrOutputNotNullRule); | ||||||
|  |         IRule<AggWrVO> wrNoneMainProductBomCheckRule = new WrNoneMainProductBomCheckRule(); | ||||||
|  |         processer.addBeforeRule(wrNoneMainProductBomCheckRule); | ||||||
|  |         IRule<AggWrVO> wrConsumeNotNullRule = new WrPickNotNullRule(); | ||||||
|  |         processer.addBeforeRule(wrConsumeNotNullRule); | ||||||
|  |         IRule<AggWrVO> lengthCheckRule = new FieldLengthCheckRule(); | ||||||
|  |         processer.addBeforeRule(lengthCheckRule); | ||||||
|  |         IRule<AggWrVO> 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<AggWrVO> wrCreateBatProdRule = new WrCreateBatProdRule(); | ||||||
|  |         processer.addBeforeRule(wrCreateBatProdRule); | ||||||
|  |         processer.addBeforeRule(new WrCheckTranstypeCodeRule()); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void addAfterRule(AroundProcesser<AggWrVO> processor, Map<String, String> vbatchsMap) { | ||||||
|  |         IRule<AggWrVO> rule = new MMBillCodeCheckAndTrantypeRule("55A4", "vbillcode", "pk_group", "pk_org", "vtrantypecode"); | ||||||
|  |         processor.addAfterRule(rule); | ||||||
|  |         IRule<AggWrVO> wrCreateInStockBatchCodeAfterRule = new WrInsertInStockBatchCodeAfterRule(vbatchsMap); | ||||||
|  |         processor.addAfterRule(wrCreateInStockBatchCodeAfterRule); | ||||||
|  |         processor.addAfterRule(new WrInsertRewriteWrNumForPutPlanRule()); | ||||||
|  |         IRule<AggWrVO> wrMORewriteRule = new WrMORewriteRule(2); | ||||||
|  |         processor.addAfterRule(wrMORewriteRule); | ||||||
|  |         IRule<AggWrVO> moDiscadNumRewriteRule = new MoDiscadNumRewriteRule(2); | ||||||
|  |         processor.addAfterRule(moDiscadNumRewriteRule); | ||||||
|  |         IRule<AggWrVO> snSaveRule = new WrSerialNoSaveRule(); | ||||||
|  |         processor.addAfterRule(snSaveRule); | ||||||
|  |         /** 同步修改备料计划完成 */ | ||||||
|  |         IRule<AggWrVO> 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<AggWrVO> getMoRewriteRule() { | ||||||
|  |         return null; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** @deprecated */ | ||||||
|  |     @Deprecated | ||||||
|  |     protected IRule<AggWrVO> getMoDiscadNumRewriteRule() { | ||||||
|  |         return null; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** @deprecated */ | ||||||
|  |     @Deprecated | ||||||
|  |     protected IRule<AggWrVO> getAuditRule() { | ||||||
|  |         return null; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public boolean isOnlyInsert() { | ||||||
|  |         return this.isOnlyInsert; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setOnlyInsert(boolean isOnlyInsert) { | ||||||
|  |         this.isOnlyInsert = isOnlyInsert; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -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<AggWrVO> | ||||||
|  | { | ||||||
|  |     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<AggPickmVO> query = new BillQuery<AggPickmVO>(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<AggPickmVO> aggVOs = (ArrayList<AggPickmVO>)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<aggVOs.size(); z++) { | ||||||
|  |                             AggPickmVO aggPickmVO = aggVOs.get(z); | ||||||
|  |                             PickmHeadVO pickmHeadVO = aggPickmVO.getParentVO(); | ||||||
|  |                             Integer fbillstatus = pickmHeadVO.getFbillstatus(); | ||||||
|  |                             if(fbillstatus != 2){ | ||||||
|  |                                 aggVOsArr[z] =aggVOs.get(z); | ||||||
|  |                                 flag = true; | ||||||
|  |                             } | ||||||
|  | 
 | ||||||
|  |                         } | ||||||
|  |                         if(flag){ | ||||||
|  |                             //备料计划完工 | ||||||
|  |                             IPickmMaintainService ipickmMaintainService = NCLocator.getInstance().lookup(IPickmMaintainService.class); | ||||||
|  |                             ipickmMaintainService.finishPickm(aggVOsArr); | ||||||
|  |                         } | ||||||
|  |                     }catch(BusinessException e) { | ||||||
|  |                         // TODO Auto-generated catch block | ||||||
|  |                         e.printStackTrace(); | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         AggWrChangeVO[] aggChangeVOs = WrBusiVOToChangeVO.changeOnlySerialNoVO(vos); | ||||||
|  | 
 | ||||||
|  |         WrSerialNoDocInsertControl inSertControl = new WrSerialNoDocInsertControl(); | ||||||
|  |         inSertControl.process(aggChangeVOs); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @ -66,12 +66,16 @@ public class InvoiceTaskPlugin implements IBackgroundWorkPlugin{ | ||||||
|                      */ |                      */ | ||||||
|                     //手动开启事务 |                     //手动开启事务 | ||||||
|                     TransactionFactory.getTMProxy().begin(3,0); |                     TransactionFactory.getTMProxy().begin(3,0); | ||||||
|  |                     //修改发票信息单据号 | ||||||
|  |                     String sscivmSql = "UPDATE sscivm_invoice set billno = '" + fphm +"' where pk_invoice = '"+ pk_invoice +"'"; | ||||||
|  |                     dao.executeUpdate(sscivmSql); | ||||||
|  |                     Logger.error("---sscivmSqlExecute------"+sscivmSql); | ||||||
|                     //修改发票关联关系单据编码 |                     //修改发票关联关系单据编码 | ||||||
|                     String sirSql = "UPDATE sscivm_invoice_relation set billno = '" + billno +"' where pk_invoice = '"+ pk_invoice +"' and billid = '"+ csaleinvoiceid +"'"; |                     String sirSql = "UPDATE sscivm_invoice_relation set billno = '" + fphm +"' where pk_invoice = '"+ pk_invoice +"' and billid = '"+ csaleinvoiceid +"'"; | ||||||
|                     dao.executeUpdate(sirSql); |                     dao.executeUpdate(sirSql); | ||||||
|                     Logger.error("---sirSqlExecute------"+sirSql); |                     Logger.error("---sirSqlExecute------"+sirSql); | ||||||
|                     //ERP销售发票回传,根据销售发票id,回写发票号和单据编号 |                     //ERP销售发票回传,根据销售发票id,回写发票号和单据编号 | ||||||
|                     String sSaleSql = "UPDATE so_saleinvoice set vdef20 = 'Y' , vdef13 = '" + fphm + "', vbillcode = '" + billno +"'  where csaleinvoiceid = '" + csaleinvoiceid + "'"; |                     String sSaleSql = "UPDATE so_saleinvoice set vdef20 = 'Y' , vdef13 = '" + fphm + "', vbillcode = '" + fphm +"'  where csaleinvoiceid = '" + csaleinvoiceid + "'"; | ||||||
|                     dao.executeUpdate(sSaleSql); |                     dao.executeUpdate(sSaleSql); | ||||||
|                     Logger.error("---sSaleSqlExecute------"+sSaleSql); |                     Logger.error("---sSaleSqlExecute------"+sSaleSql); | ||||||
|                     //根据销售发票id 回写下游应收单表头发票号 |                     //根据销售发票id 回写下游应收单表头发票号 | ||||||
|  | @ -91,7 +95,7 @@ public class InvoiceTaskPlugin implements IBackgroundWorkPlugin{ | ||||||
|                     Logger.error("---recItemSqlExecute------"+recItemSql); |                     Logger.error("---recItemSqlExecute------"+recItemSql); | ||||||
|                     //查询销售发票下游单据,如果有将下游单据表体字段【来源单据号】更新成新的发票号 |                     //查询销售发票下游单据,如果有将下游单据表体字段【来源单据号】更新成新的发票号 | ||||||
|                     String saleOutSql = "UPDATE ic_saleout_b \n" + |                     String saleOutSql = "UPDATE ic_saleout_b \n" + | ||||||
|                             "SET vsourcebillcode = '"+ billno +"' \n" + |                             "SET vsourcebillcode = '"+ fphm +"' \n" + | ||||||
|                             "WHERE\n" + |                             "WHERE\n" + | ||||||
|                             "csourcetype = '32' \n" + |                             "csourcetype = '32' \n" + | ||||||
|                             "AND csourcebillhid = '" + csaleinvoiceid +"'"; |                             "AND csourcebillhid = '" + csaleinvoiceid +"'"; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue