From 3f81b2ea90566e5c8770f312e8f171d45591a24e Mon Sep 17 00:00:00 2001 From: mzr Date: Mon, 20 Oct 2025 15:25:46 +0800 Subject: [PATCH] =?UTF-8?q?sunfengjie-=E7=94=9F=E4=BA=A7=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E8=A1=A8=E4=BD=93=E8=AE=A1=E5=88=92=E6=97=A5=E6=9C=9F=E5=8F=98?= =?UTF-8?q?=E6=9B=B4=E8=81=94=E5=8A=A8=E6=9B=B4=E6=96=B0=E4=B8=8B=E6=B8=B8?= =?UTF-8?q?=E5=8D=95=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bs/mmpac/pmo/pac0002/bp/PMOUpdateBP.java | 282 ++++++++++++++ .../bp/rule/AfterPlanStartTimeChangeRule.java | 343 ++++++++++++++++++ 2 files changed, 625 insertions(+) create mode 100644 mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMOUpdateBP.java create mode 100644 mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterPlanStartTimeChangeRule.java diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMOUpdateBP.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMOUpdateBP.java new file mode 100644 index 00000000..273365fe --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMOUpdateBP.java @@ -0,0 +1,282 @@ +// +// 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.bp.rule.AfterPlanStartTimeChangeRule; +import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO; +import java.util.ArrayList; +import java.util.List; +import nc.bs.mmpac.pmo.pac0002.pluginpoint.PMOPluginPoint; +import nc.bs.mmpac.pmo.pac0002.rule.PMOATOCheckRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOATPUpdateWithParaRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOAdjustReserveRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOBatchCodeEditRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOBatchCodeEditSynPickmRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOBillStatusToFreeRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOCffileidInserAndUpdatetRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOCheckRownoChangedRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOCheckVBillCodeByPutPlanRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOCheckVBillCodeBySubMoRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOMarkWrSNWhenUpdateRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOProcedureSortRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOSyncSNWhenItemDeleteRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOSyncSNWhenUpdateRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOUpdateAutoDeleteBatchCodeRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOUpdateAutoDeleteMosRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOUpdateAutoDeletePutPlanRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOUpdatePickmRule; +import nc.bs.mmpac.pmo.pac0002.rule.PMOUpdateSaveApproveRule; +import nc.bs.mmpac.pmo.pac0002.rule.PmoSynUpdatePutPlanRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckApproveOperTypeRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckCinwarehouseidRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckDateLogicRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckDeleteItemHasSubMoRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckDeptNotNullRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckEditableByStatusRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckItemNotNullRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckItemParentProcedureRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckMaterialPermissionRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckNrwxisLogicRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckParentProcedureNoRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckPlanPutNumRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckPlanPutNumberRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckProcedureDateLogicRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckProcedureDupRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckProcedureExistDownRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckProcedureNotNullRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckProcedureratioRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckProdurepointRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckSNNumAndUnitRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckSaveNotNullRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckSnBindRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckTurnedItemDeleteRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckVBillCodeTurnItemRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOProcedureChkPntRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMOProcedurePutCheckRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMORwkProcCheckRule; +import nc.bs.mmpac.pmo.pac0002.rule.check.PMORwkProcOperTypeRule; +import nc.bs.mmpac.pmo.pac0002.rule.fill.PMOFillBatchCodeRule; +import nc.bs.mmpac.pmo.pac0002.rule.fill.PMOFillFirstMOInfoRule; +import nc.bs.mmpac.pmo.pac0002.rule.fill.PMOFillInsertPlanTimeByProcedureRule; +import nc.bs.mmpac.pmo.pac0002.rule.fill.PMOFillSNPkAndCodeRule; +import nc.bs.mmpac.pmo.pac0002.rule.fill.PMOFillUpdateDefaultValueRule; +import nc.bs.mmpac.pmo.pac0002.rule.grand.PMOIsCreatPlanOutputRule; +import nc.bs.mmpac.pmo.pac0002.rule.grand.PMOIsCreatProcedureRule; +import nc.bs.mmpac.pmo.pac0002.rule.rewrite.RewriteUpdateNum4INVP; +import nc.bs.mmpac.pmo.pac0002.rule.rewrite.RewriteUpdateNum4MPS; +import nc.bs.mmpac.pmo.pac0002.rule.rewrite.RewriteUpdateNum4PMO; +import nc.bs.mmpac.pmo.pac0002.rule.rewrite.RewriteUpdateNum4PSCRecive; +import nc.bs.mmpac.pmo.pac0002.rule.rewrite.RewriteUpdateNum4PSM; +import nc.bs.mmpac.pmo.pac0002.rule.rewrite.RewriteUpdateNum4Renovate; +import nc.bs.mmpac.pmo.pac0002.rule.rewrite.RewriteUpdateNum4SFC; +import nc.bs.mmpac.pmo.pac0002.rule.rewrite.RewriteUpdateNum4SO; +import nc.bs.mmpac.pmo.pac0002.rule.rewrite.RewriteUpdateNum4TO; +import nc.bs.mmpub.rule.MMATOMaterialCheckRule; +import nc.bs.mmpub.rule.MMAutoMaterialAssignRule; +import nc.bs.mmpub.rule.MMVOSagaFrozenValidateRule; +import nc.bs.pubapp.pub.rule.BillCodeCheckRule; +import nc.bs.pubapp.pub.rule.FieldLengthCheckRule; +import nc.bs.pubapp.pub.rule.FillUpdateDataRule; +import nc.bs.pubapp.pub.rule.OrgDisabledCheckRule; +import nc.bs.pubapp.pub.rule.UpdateBillCodeRule; +import nc.impl.pubapp.bd.userdef.UserDefSaveRule; +import nc.impl.pubapp.pattern.rule.ICompareRule; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser; +import nc.util.mmf.busi.rule.MMCheckMaterialProdModeRule; +import nc.util.mmf.busi.rule.MMCheckMaterialVirtualRule; +import nc.util.mmf.busi.rule.MMRowNoCheckRule; +import nc.util.mmf.framework.base.MMArrayUtil; +import nc.util.mmf.framework.gc.GCUpdateBPTemplate; +import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO; +import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO; +import nc.vo.mmpac.pmo.pac0002.util.PmoSagaUtil; + +public class PMOUpdateBP { + private List checkInfoList = new ArrayList(); + + public PMOAggVO[] update(PMOAggVO[] fullBills, PMOAggVO[] originBills) { + if (MMArrayUtil.isEmpty(fullBills)) { + return null; + } else { + for(PMOAggVO vo : fullBills) { + if (vo.getParent().getStatus() != 1) { + vo.getParent().setStatus(1); + } + } + + IRule checkFrozenRule = new MMVOSagaFrozenValidateRule(true); + checkFrozenRule.process(fullBills); + PmoSagaUtil.frozenAndAddSaga(fullBills); + GCUpdateBPTemplate bp = new GCUpdateBPTemplate(PMOPluginPoint.UPDATE); + this.addBeforeRule(bp.getAroundProcesser()); + this.addAfterRule(bp.getAroundProcesser()); + PMOAggVO[] rets = (PMOAggVO[])bp.update(fullBills, originBills); + PmoSagaUtil.compensate4Update((PMOAggVO[])rets.clone(), originBills); + return rets; + } + } + + private void addBeforeRule(CompareAroundProcesser processer) { + processer.addBeforeRule(new PMOProcedureSortRule()); + IRule orgrule = new OrgDisabledCheckRule("pk_org", "FACTORYTYPE000000000"); + processer.addBeforeRule(orgrule); + processer.addBeforeRule(new PMOCheckItemNotNullRule()); + processer.addBeforeRule(new PMOCheckItemParentProcedureRule()); + IRule deptrule = new PMOCheckDeptNotNullRule(); + processer.addBeforeRule(deptrule); + IRule mmatoMaterialCheckRule = new MMATOMaterialCheckRule((String)null, "cmaterialvid", "cffileid"); + processer.addBeforeRule(mmatoMaterialCheckRule); + ICompareRule checkrowChangedRule = new PMOCheckRownoChangedRule(); + processer.addBeforeRule(checkrowChangedRule); + ICompareRule vBillCodeTurnItemRule = new PMOCheckVBillCodeTurnItemRule(); + processer.addBeforeRule(vBillCodeTurnItemRule); + ICompareRule vBillCodeByPutPlanRule = new PMOCheckVBillCodeByPutPlanRule(); + processer.addBeforeRule(vBillCodeByPutPlanRule); + ICompareRule vBillCodeBySubMoRule = new PMOCheckVBillCodeBySubMoRule(); + processer.addBeforeRule(vBillCodeBySubMoRule); + ICompareRule checkeditable = new PMOCheckEditableByStatusRule(); + processer.addBeforeRule(checkeditable); + IRule fillrule = new FillUpdateDataRule(); + processer.addBeforeRule(fillrule); + IRule updfillrule = new PMOFillUpdateDefaultValueRule(); + processer.addBeforeRule(updfillrule); + IRule billstatusRule = new PMOBillStatusToFreeRule(); + processer.addBeforeRule(billstatusRule); + IRule rowrule = new MMRowNoCheckRule(); + processer.addBeforeRule(rowrule); + IRule autoMaterialAssignRule = new MMAutoMaterialAssignRule((String)null, "cmaterialvid", new String[]{"pk_org", "cplanfactoryid"}, (String[])null); + processer.addBeforeFinalRule(autoMaterialAssignRule); + IRule marperrule = new PMOCheckMaterialPermissionRule(); + processer.addBeforeRule(marperrule); + IRule virtualRule = new MMCheckMaterialVirtualRule(); + processer.addBeforeRule(virtualRule); + IRule chkrwxisrule = new PMOCheckNrwxisLogicRule(); + processer.addBeforeRule(chkrwxisrule); + IRule chkparentprocrule = new PMOCheckParentProcedureNoRule(); + processer.addBeforeRule(chkparentprocrule); + IRule checNullRule = new PMOCheckSaveNotNullRule(false); + processer.addBeforeRule(checNullRule); + IRule checkturnrule = new PMOCheckTurnedItemDeleteRule(); + processer.addBeforeRule(checkturnrule); + IRule snBindRule = new PMOCheckSnBindRule(); + processer.addBeforeRule(snBindRule); + ICompareRule billcoderule = new UpdateBillCodeRule("55A2", "vbillcode", "pk_group", "pk_org"); + processer.addBeforeRule(billcoderule); + ICompareRule createOutput = new PMOIsCreatPlanOutputRule(); + processer.addBeforeRule(createOutput); + ICompareRule createproc = new PMOIsCreatProcedureRule(); + processer.addBeforeRule(createproc); + ICompareRule procCheck = new PMORwkProcCheckRule(); + processer.addBeforeRule(procCheck); + ICompareRule putCheckRule = new PMOProcedurePutCheckRule(); + processer.addBeforeRule(putCheckRule); + IRule filltimeprocedurerule = new PMOFillInsertPlanTimeByProcedureRule(); + processer.addBeforeRule(filltimeprocedurerule); + IRule daterule = new PMOCheckDateLogicRule(); + processer.addBeforeRule(daterule); + IRule procdatelogicrule = new PMOCheckProcedureDateLogicRule(false); + processer.addBeforeRule(procdatelogicrule); + IRule proccoderule = new PMOCheckProcedureDupRule(); + processer.addBeforeRule(proccoderule); + IRule checkproExistDownRule = new PMOCheckProcedureExistDownRule(); + processer.addBeforeRule(checkproExistDownRule); + IRule rwkProcOperType = new PMORwkProcOperTypeRule(); + processer.addBeforeRule(rwkProcOperType); + IRule chkPntRule = new PMOProcedureChkPntRule(); + processer.addBeforeRule(chkPntRule); + processer.addBeforeRule(new PMOCheckProdurepointRule()); + IRule operTypeRule = new PMOCheckApproveOperTypeRule(); + processer.addBeforeRule(operTypeRule); + IRule approvecheckrule = new PMOCheckProcedureNotNullRule(); + processer.addBeforeRule(approvecheckrule); + IRule checkPlanPutNumRule = new PMOCheckPlanPutNumRule(); + processer.addBeforeRule(checkPlanPutNumRule); + IRule planputNumberRule = new PMOCheckPlanPutNumberRule(); + processer.addBeforeRule(planputNumberRule); + IRule lengthrule = new FieldLengthCheckRule(); + processer.addBeforeRule(lengthrule); + IRule userDefSaveRule = new UserDefSaveRule(new Class[]{PMOItemVO.class}); + processer.addBeforeRule(userDefSaveRule); + MMCheckMaterialProdModeRule prodModeRule = new MMCheckMaterialProdModeRule(1, PMOItemVO.class); + processer.addBeforeRule(prodModeRule); + ICompareRule synpickbatchcodeRule = new PMOBatchCodeEditSynPickmRule(); + processer.addBeforeRule(synpickbatchcodeRule); + ICompareRule batchcodedocRule = new PMOBatchCodeEditRule(); + processer.addBeforeRule(batchcodedocRule); + PMOCffileidInserAndUpdatetRule cffileidRule = new PMOCffileidInserAndUpdatetRule(); + processer.addBeforeRule(cffileidRule); + IRule checkATPUpdateRule = new PMOATPUpdateWithParaRule(true, "55A2"); + processer.addBeforeRule(checkATPUpdateRule); + ICompareRule rewritePSCrecive = new RewriteUpdateNum4PSCRecive(); + processer.addBeforeRule(rewritePSCrecive); + IRule wrMarkRule = new PMOMarkWrSNWhenUpdateRule(); + processer.addBeforeRule(wrMarkRule); + ICompareRule rewritewr = new RewriteUpdateNum4Renovate(); + processer.addBeforeRule(rewritewr); + ICompareRule rewriteso = new RewriteUpdateNum4SO(); + processer.addBeforeRule(rewriteso); + ICompareRule rewritepsm = new RewriteUpdateNum4PSM(); + processer.addBeforeRule(rewritepsm); + ICompareRule rewritepo = new RewriteUpdateNum4MPS(); + processer.addBeforeRule(rewritepo); + ICompareRule rewriteinvp = new RewriteUpdateNum4INVP(); + processer.addBeforeRule(rewriteinvp); + ICompareRule rewriteto = new RewriteUpdateNum4TO(); + processer.addBeforeRule(rewriteto); + ICompareRule rewritesfc = new RewriteUpdateNum4SFC(); + processer.addBeforeRule(rewritesfc); + IRule fillfirstInfo = new PMOFillFirstMOInfoRule(); + processer.addBeforeRule(fillfirstInfo); + IRule batchcodeRule = new PMOFillBatchCodeRule(); + processer.addBeforeRule(batchcodeRule); + ICompareRule adjustReserveRule = new PMOAdjustReserveRule(); + processer.addBeforeRule(adjustReserveRule); + IRule snCheckRule = new PMOCheckSNNumAndUnitRule(); + processer.addBeforeRule(snCheckRule); + IRule snRule = new PMOFillSNPkAndCodeRule(); + processer.addBeforeRule(snRule); + IRule itemDeletesnRule = new PMOSyncSNWhenItemDeleteRule(); + processer.addBeforeRule(itemDeletesnRule); + ICompareRule snSyncRule = new PMOSyncSNWhenUpdateRule(); + processer.addBeforeRule(snSyncRule); + IRule checkCinwarehouseidRule = new PMOCheckCinwarehouseidRule(); + processer.addBeforeRule(checkCinwarehouseidRule); + IRule procedureIRule = new PMOCheckProcedureratioRule(); + processer.addBeforeRule(procedureIRule); + IRule atoCheck = new PMOATOCheckRule(); + processer.addBeforeRule(atoCheck); + } + + private void addAfterRule(CompareAroundProcesser processer) { + IRule checkUniqueRule = new BillCodeCheckRule("55A2", "vbillcode", "pk_group", "pk_org"); + processer.addAfterRule(checkUniqueRule); + ICompareRule checksubbill = new PMOCheckDeleteItemHasSubMoRule(); + processer.addAfterRule(checksubbill); + ICompareRule pmoBills = new RewriteUpdateNum4PMO(); + processer.addAfterRule(pmoBills); + IRule atpUpdateRule = new PMOATPUpdateWithParaRule(false, "55A2"); + processer.addAfterRule(atpUpdateRule); + PMOUpdateAutoDeleteBatchCodeRule deleteBatcCodeRule = new PMOUpdateAutoDeleteBatchCodeRule(); + processer.addAfterRule(deleteBatcCodeRule); + ICompareRule pickmUpdateRule = new PMOUpdatePickmRule(this.checkInfoList); + processer.addAfterRule(pickmUpdateRule); + ICompareRule autoDeletePutPlan = new PMOUpdateAutoDeletePutPlanRule(); + processer.addAfterRule(autoDeletePutPlan); + ICompareRule synputplanmrule = new PmoSynUpdatePutPlanRule(); + processer.addAfterRule(synputplanmrule); + ICompareRule mosDeleteRule = new PMOUpdateAutoDeleteMosRule(); + processer.addAfterRule(mosDeleteRule); + IRule saveapproverule = new PMOUpdateSaveApproveRule(); + processer.addAfterRule(saveapproverule); + ICompareRule planStartTimeChangeRule = new AfterPlanStartTimeChangeRule();//sunfj2025.09.26 + processer.addAfterRule(planStartTimeChangeRule); + } + + public List getCheckInfoList() { + return this.checkInfoList; + } +} diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterPlanStartTimeChangeRule.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterPlanStartTimeChangeRule.java new file mode 100644 index 00000000..6c351679 --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterPlanStartTimeChangeRule.java @@ -0,0 +1,343 @@ +package nc.bs.mmpac.pmo.pac0002.bp.rule; + +import com.yonyou.hrcloud.adder.ext.plugin.DaoContext; +import nc.bs.dao.BaseDAO; +import nc.bs.framework.common.NCLocator; +import nc.bs.trade.business.HYPubBO; +import nc.impl.pubapp.pattern.rule.ICompareRule; +import nc.itf.uap.IUAPQueryBS; +import nc.jdbc.framework.processor.ColumnListProcessor; +import nc.jdbc.framework.processor.ColumnProcessor; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.vo.mmpac.pickm.entity.PickmItemVO; +import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO; +import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO; +import nc.vo.pub.BusinessException; +import nc.vo.pub.lang.UFDate; +import nc.vo.pub.lang.UFDateTime; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; + +import java.util.ArrayList; +import java.util.List; + +public class AfterPlanStartTimeChangeRule implements ICompareRule { + private IUAPQueryBS query = NCLocator.getInstance().lookup(IUAPQueryBS.class); + private BaseDAO dao =new BaseDAO(); + private HYPubBO bo = new HYPubBO(); + + public void process(PMOAggVO[] vos, PMOAggVO[] originVOs) { + try { + if (!MMValueCheck.isEmpty(vos)) { + // 遍历vos数组,比较tplanstarttime字段是否有变化 + for (int i = 0; i < vos.length; i++) { + PMOAggVO currentVO = vos[i]; + PMOAggVO originVO = originVOs[i]; + + // 获取当前和原始的表体数据 + PMOItemVO[] currentItems = currentVO.getChildrenVO(); + PMOItemVO[] originItems = originVO.getChildrenVO(); + + // 检查表体数据是否存在 + if (currentItems != null && originItems != null) { + // 遍历表体行,比较tplanstarttime字段 + for (int j = 0; j < currentItems.length; j++) { + if (j < originItems.length) { + PMOItemVO currentItem = currentItems[j]; + PMOItemVO originItem = originItems[j]; + + // 比较tplanstarttime字段是否有变化 + UFDateTime currentPlanStartTime = currentItem.getTplanstarttime(); + UFDateTime originPlanStartTime = originItem.getTplanstarttime(); + + // 如果计划开始时间有变化,则需要更新下游请购单的需用日期 + if ((currentPlanStartTime != null && !currentPlanStartTime.equals(originPlanStartTime)) || + (originPlanStartTime != null && !originPlanStartTime.equals(currentPlanStartTime))) { + +// UFDate drequiredate = new UFDate(currentPlanStartTime.toString()); + UFDate planStartTime = new UFDate(currentPlanStartTime.toString()); + + // 获取当前系统日期 + UFDate currentDate = new UFDate(); + + // 比较drequiredate和当前日期,如果早于当前日期则使用当前日期 + if ((planStartTime != null && planStartTime.before(currentDate)) || planStartTime == null) { + planStartTime = currentDate; + } + + PickmItemVO[] pickvos = (PickmItemVO[])bo.queryByCondition(PickmItemVO.class,"cpickmid IN (SELECT cpickmid FROM mm_pickm WHERE vsourcemorowid ='"+currentItem.getCmoid()+"' AND dr=0 ) AND dr=0 "); + if(pickvos != null && pickvos.length > 0){//查询到下游备料计划执行变更, + for(PickmItemVO pbvo : pickvos){ + UFDate drequiredate = pbvo.getDrequiredate(); + if ((drequiredate != null && drequiredate.before(currentDate)) || drequiredate == null) { + drequiredate = currentDate; + } + + //获取请购单信息 + String sql = "SELECT a.pk_praybill_b FROM po_praybill_b a " + + " LEFT JOIN mm_plo B ON a.csourceid = b.cpoid " + + " LEFT JOIN mm_pickm_b C ON b.vsrcbid = c.cpickm_bid AND a.pk_material = c.cbmaterialvid " + + " WHERE c.cpickm_bid ='"+pbvo.getCpickm_bid()+"' "; + String pk_praybill_b = getValue(sql); + + if(pk_praybill_b != null && !"".equals(pk_praybill_b) ){ + //1)主生产订单变更,根据备料计划需用日期同步变更请购单的需求日期; + //获取采购单信息 + sql = "SELECT fisactive FROM po_order_b WHERE csourcebid = '"+pk_praybill_b+"' AND dr=0 and bstockclose='N' and barriveclose='N' " ; + String fisactive = getValue(sql); + if("0".equals(fisactive) || fisactive == null){//如果是关闭状态,请购单和采购单都不更新,如果查不到或者不是关闭状态,都可以更新 + //更新请购单语句 + sql = "update po_praybill_b SET dreqdate = '"+drequiredate+"' WHERE pk_praybill_b ='"+pk_praybill_b+"' "; + dao.executeUpdate(sql); + sql = "update po_order_b SET dplanarrvdate = '"+drequiredate+"' WHERE csourcebid = '"+pk_praybill_b+"' "; + dao.executeUpdate(sql); + } + } + } + } + + //2)主生产订单变更,根据备料计划需用日期同步变更半成品生产订单的开工日期及完工日期; + String sql = "SELECT a.CMOID FROM mm_mo a " + + " LEFT JOIN mm_pmo b ON a.cpmohid = b.cpmohid " + + " LEFT JOIN mm_plo e ON e.vbillcode = a.vsrccode " + + " LEFT JOIN ( " + + " SELECT d.vsourcemorowid AS 来源生产订单行明细, d.vbillcode AS 备料计划号, c.vrowno AS 备料计划行号 FROM " + + " mm_pickm_b c " + + " LEFT JOIN mm_pickm d ON c.cpickmid = d.cpickmid ) h ON h.备料计划号 = e.vsrccode AND h.备料计划行号 = e.vsrcrowno" + + " WHERE h.来源生产订单行明细 = '"+currentItem.getCmoid()+"' AND a.dr = 0 AND a.fitemstatus IN ('0','4','1') " ; + + List moids = getArrayListFsql(sql); + if(moids !=null && moids.size() > 0){ + for(String moid : moids){ + //tplanendtime 计划完工时间 计划完工日期变更为备料计划需用日期 + //tplanstarttime 计划开工时间 计划开工日期变更为完工日期-固定提前期(物料档案) + //获取需要处理的vo + PMOItemVO[] movos = (PMOItemVO[])bo.queryByCondition(PMOItemVO.class," cmoid = '"+moid+"' "); + for(PMOItemVO vo : movos){ + String pk_material= vo.getCmaterialvid(); + //获取物料固定提前期 + sql = "SELECT nvl(fixedahead,0) FROM bd_materialplan WHERE pk_material = '"+pk_material+"' AND dr =0 AND pk_org = '"+vo.getPk_org()+"' "; + Integer fixedahead = Integer.parseInt(getValue(sql)==null?"0":getValue(sql)); + UFDate tplanstarttime = planStartTime; + if(fixedahead != null){ + //更新半成品生产订单的开工日期及完工日期 + tplanstarttime= planStartTime.getDateBefore(fixedahead); + } + // 开工日期如果早于当前日期,则开工日期取当前日期;完工日期如果早于当前日期,则完工日期取当前日期 + if (tplanstarttime != null && tplanstarttime.before(currentDate)) { + tplanstarttime = currentDate; + } + //处理变更vo + vo.setTplanendtime(new UFDateTime(planStartTime.toString())); + vo.setTplanstarttime(new UFDateTime(tplanstarttime.toString())); + vo.setStatus(1); + bo.update( vo); + + //半成品开工日期变更后,同步变更其备料计划的需用日期; + PickmItemVO[] pickvos_b = (PickmItemVO[])bo.queryByCondition(PickmItemVO.class,"cpickmid IN (SELECT cpickmid FROM mm_pickm WHERE vsourcemorowid ='"+vo.getCmoid()+"' AND dr=0 ) AND dr=0 "); + if(pickvos_b != null && pickvos_b.length > 0){//查询到下游备料计划执行变更, + for(PickmItemVO pbvo : pickvos_b){ + //BOM提前期偏置 + sql = "SELECT nvl(ileadtimenum,0) FROM bd_bom_b WHERE cbomid IN (SELECT vbomversion FROM mm_pickm WHERE vsourcemorowid ='"+vo.getCmoid()+"' AND dr=0) AND cmaterialvid = '"+vo.getCmaterialvid()+"' AND dr=0 "; + Integer ileadtimenum = Integer.parseInt(getValue(sql)==null?"0":getValue(sql)); + UFDate drequiredate_b = tplanstarttime.getDateAfter(ileadtimenum); + if (drequiredate_b != null && drequiredate_b.before(currentDate)) { + drequiredate_b = currentDate; + } + pbvo.setDrequiredate(drequiredate_b); + bo.update( pbvo); + + //获取请购单信息 + sql = "SELECT a.pk_praybill_b FROM po_praybill_b a " + + " LEFT JOIN mm_plo B ON a.csourceid = b.cpoid " + + " LEFT JOIN mm_pickm_b C ON b.vsrcbid = c.cpickm_bid AND a.pk_material = c.cbmaterialvid " + + " WHERE c.cpickm_bid ='"+pbvo.getCpickm_bid()+"' "; + String pk_praybill_b = getValue(sql); + if(pk_praybill_b != null && !"".equals(pk_praybill_b)){ + //获取采购单信息 + sql = "SELECT fisactive FROM po_order_b WHERE csourcebid = '"+pk_praybill_b+"' AND dr=0 and bstockclose='N' and barriveclose='N' " ; + String fisactive = getValue(sql); + if("0".equals(fisactive) || fisactive == null){//如果是关闭状态,请购单和采购单都不更新,如果查不到或者不是关闭状态,都可以更新 + sql = "update po_praybill_b SET dreqdate = '"+drequiredate_b+"' WHERE pk_praybill_b ='"+pk_praybill_b+"' "; + dao.executeUpdate(sql); + + sql = "update po_order_b SET dplanarrvdate = '"+drequiredate_b+"' WHERE csourcebid = '"+pk_praybill_b+"' "; + dao.executeUpdate(sql); + } + } + } + } + + //3)更新完半成品之后查询半成品下游还有没有半成品生产订单 + sql = "SELECT a.CMOID FROM mm_mo a " + + " LEFT JOIN mm_pmo b ON a.cpmohid = b.cpmohid " + + " LEFT JOIN mm_plo e ON e.vbillcode = a.vsrccode " + + " LEFT JOIN ( " + + " SELECT d.vsourcemorowid AS 来源生产订单行明细, d.vbillcode AS 备料计划号, c.vrowno AS 备料计划行号 FROM " + + " mm_pickm_b c " + + " LEFT JOIN mm_pickm d ON c.cpickmid = d.cpickmid ) h ON h.备料计划号 = e.vsrccode AND h.备料计划行号 = e.vsrcrowno" + + " WHERE h.来源生产订单行明细 = '"+vo.getCmoid()+"' AND a.dr = 0 AND a.fitemstatus IN ('0','4','1') " ; + + List moids2 = getArrayListFsql(sql); + if(moids2 !=null && moids2.size() > 0){ + for(String moid2 : moids2){ + //tplanendtime 计划完工时间 计划完工日期变更为备料计划需用日期 + //tplanstarttime 计划开工时间 计划开工日期变更为完工日期-固定提前期(物料档案) + //获取需要处理的vo + PMOItemVO[] movos2 = (PMOItemVO[])bo.queryByCondition(PMOItemVO.class," cmoid = '"+moid2+"' "); + for(PMOItemVO vo2 : movos2){ + String pk_material2= vo2.getCmaterialvid(); + //获取物料固定提前期 + sql = "SELECT nvl(fixedahead,0) FROM bd_materialplan WHERE pk_material = '"+pk_material2+"' AND dr =0 AND pk_org = '"+vo2.getPk_org()+"' "; + Integer fixedahead2 = Integer.parseInt(getValue(sql)==null?"0":getValue(sql)); + UFDate tplanstarttime2 = planStartTime; + if(fixedahead2 != null){ + //更新半成品生产订单的开工日期及完工日期 + tplanstarttime2= planStartTime.getDateBefore(fixedahead2); + } + // 开工日期如果早于当前日期,则开工日期取当前日期;完工日期如果早于当前日期,则完工日期取当前日期 + if (tplanstarttime2 != null && tplanstarttime2.before(currentDate)) { + tplanstarttime2 = currentDate; + } + //处理变更vo + vo2.setTplanendtime(new UFDateTime(planStartTime.toString())); + vo2.setTplanstarttime(new UFDateTime(tplanstarttime2.toString())); + vo2.setStatus(1); + bo.update(vo2); + + //半成品开工日期变更后,同步变更其备料计划的需用日期; + PickmItemVO[] pickvos_b2 = (PickmItemVO[])bo.queryByCondition(PickmItemVO.class,"cpickmid IN (SELECT cpickmid FROM mm_pickm WHERE vsourcemorowid ='"+vo2.getCmoid()+"' AND dr=0 ) AND dr=0 "); + if(pickvos_b2 != null && pickvos_b2.length > 0){//查询到下游备料计划执行变更, + for(PickmItemVO pbvo2 : pickvos_b2){ + //BOM提前期偏置 + sql = "SELECT nvl(ileadtimenum,0) FROM bd_bom_b WHERE cbomid IN (SELECT vbomversion FROM mm_pickm WHERE vsourcemorowid ='"+vo2.getCmoid()+"' AND dr=0) AND cmaterialvid = '"+vo2.getCmaterialvid()+"' AND dr=0 "; + Integer ileadtimenum2 = Integer.parseInt(getValue(sql)==null?"0":getValue(sql)); + UFDate drequiredate_b2 = tplanstarttime.getDateAfter(ileadtimenum2); + if (drequiredate_b2 != null && drequiredate_b2.before(currentDate)) { + drequiredate_b2 = currentDate; + } + pbvo2.setDrequiredate(drequiredate_b2); + bo.update(pbvo2); + + //获取请购单信息 + sql = "SELECT a.pk_praybill_b FROM po_praybill_b a " + + " LEFT JOIN mm_plo B ON a.csourceid = b.cpoid " + + " LEFT JOIN mm_pickm_b C ON b.vsrcbid = c.cpickm_bid AND a.pk_material = c.cbmaterialvid " + + " WHERE c.cpickm_bid ='"+pbvo2.getCpickm_bid()+"' "; + String pk_praybill_b2 = getValue(sql); + if(pk_praybill_b2 != null && !"".equals(pk_praybill_b2)){ + //获取采购单信息 + sql = "SELECT fisactive FROM po_order_b WHERE csourcebid = '"+pk_praybill_b2+"' AND dr=0 and bstockclose='N' and barriveclose='N' " ; + String fisactive2 = getValue(sql); + if("0".equals(fisactive2) || fisactive2 == null){//如果是关闭状态,请购单和采购单都不更新,如果查不到或者不是关闭状态,都可以更新 + sql = "update po_praybill_b SET dreqdate = '"+drequiredate_b2+"' WHERE pk_praybill_b ='"+pk_praybill_b2+"' "; + dao.executeUpdate(sql); + + sql = "update po_order_b SET dplanarrvdate = '"+drequiredate_b2+"' WHERE csourcebid = '"+pk_praybill_b2+"' "; + dao.executeUpdate(sql); + } + } + } + } + } + } + } + } + } + } + + //2)主生产订单变更,根据备料计划需用日期同步变更半成品生产订单的开工日期及完工日期; + //根据主生产订单查询子生产订单 todo 有可能有多层子生产订单,这里暂时只处理一层,后续封装为单独的方法,考虑多级半成品 +// String sql = "SELECT count(*) FROM mm_mo WHERE cfirstmobid = '"+currentItem.getCmoid()+"' AND fitemstatus IN ('0','4','1') AND dr =0 "; +// String count = getValue(sql); +// if(!"0".equals(count)){//存在半成品,继续处理 +// //tplanendtime 计划完工时间 计划完工日期变更为备料计划需用日期 +// //tplanstarttime 计划开工时间 计划开工日期变更为完工日期-固定提前期(物料档案) +// //获取需要处理的vo +// PMOItemVO[] movos = (PMOItemVO[])bo.queryByCondition(PMOItemVO.class,"cfirstmobid = '"+currentItem.getCmoid()+"' AND fitemstatus IN ('0','4','1') AND dr =0"); +// for(PMOItemVO vo : movos){ +// String pk_material= vo.getCmaterialvid(); +// //获取物料固定提前期 +// sql = "SELECT nvl(fixedahead,0) FROM bd_materialplan WHERE pk_material = '"+pk_material+"' AND dr =0 AND pk_org = '"+vo.getPk_org()+"' "; +// Integer fixedahead = Integer.parseInt(getValue(sql)==null?"0":getValue(sql)); +// UFDate tplanstarttime = planStartTime; +// if(fixedahead != null){ +// //更新半成品生产订单的开工日期及完工日期 +// tplanstarttime= planStartTime.getDateBefore(fixedahead); +// } +// // 开工日期如果早于当前日期,则开工日期取当前日期;完工日期如果早于当前日期,则完工日期取当前日期 +// if (tplanstarttime != null && tplanstarttime.before(currentDate)) { +// tplanstarttime = currentDate; +// } +// //处理变更vo +// vo.setTplanendtime(new UFDateTime(planStartTime.toString())); +// vo.setTplanstarttime(new UFDateTime(tplanstarttime.toString())); +// vo.setStatus(1); +// bo.update( vo); +// +// //半成品开工日期变更后,同步变更其备料计划的需用日期; +// PickmItemVO[] pickvos_b = (PickmItemVO[])bo.queryByCondition(PickmItemVO.class,"cpickmid IN (SELECT cpickmid FROM mm_pickm WHERE vsourcemorowid ='"+vo.getCmoid()+"' AND dr=0 ) AND dr=0 "); +// if(pickvos_b != null && pickvos_b.length > 0){//查询到下游备料计划执行变更, +// for(PickmItemVO pbvo : pickvos_b){ +// //BOM提前期偏置 +// sql = "SELECT nvl(ileadtimenum,0) FROM bd_bom_b WHERE cbomid IN (SELECT vbomversion FROM mm_pickm WHERE vsourcemorowid ='"+vo.getCmoid()+"' AND dr=0) AND cmaterialvid = '"+vo.getCmaterialvid()+"' AND dr=0 "; +// Integer ileadtimenum = Integer.parseInt(getValue(sql)==null?"0":getValue(sql)); +// UFDate drequiredate_b = tplanstarttime.getDateAfter(ileadtimenum); +// if (drequiredate_b != null && drequiredate_b.before(currentDate)) { +// drequiredate_b = currentDate; +// } +// pbvo.setDrequiredate(drequiredate_b); +// bo.update( pbvo); +// +// //获取请购单信息 +// sql = "SELECT a.pk_praybill_b FROM po_praybill_b a " + +// " LEFT JOIN mm_plo B ON a.csourceid = b.cpoid " + +// " LEFT JOIN mm_pickm_b C ON b.vsrcbid = c.cpickm_bid AND a.pk_material = c.cbmaterialvid " + +// " WHERE c.cpickm_bid ='"+pbvo.getCpickm_bid()+"' "; +// String pk_praybill_b = getValue(sql); +// if(pk_praybill_b != null && !"".equals(pk_praybill_b)){ +// //获取采购单信息 +// sql = "SELECT fisactive FROM po_order_b WHERE csourcebid = '"+pk_praybill_b+"' AND dr=0 and bstockclose='N' and barriveclose='N' " ; +// String fisactive = getValue(sql); +// if("0".equals(fisactive) || fisactive == null){//如果是关闭状态,请购单和采购单都不更新,如果查不到或者不是关闭状态,都可以更新 +// sql = "update po_praybill_b SET dreqdate = '"+drequiredate_b+"' WHERE pk_praybill_b ='"+pk_praybill_b+"' "; +// dao.executeUpdate(sql); +// +// sql = "update po_order_b SET dplanarrvdate = '"+drequiredate_b+"' WHERE csourcebid = '"+pk_praybill_b+"' "; +// dao.executeUpdate(sql); +// } +// } +// } +// } +// } +// } + } + } + } + } + } + } + } catch (Exception e) { +// ExceptionUtils.wrappException(e); + } + } + + public String getValue(String sql) throws BusinessException { + Object obj = query.executeQuery(sql, new ColumnProcessor()); + if(obj ==null){ + return null; + } + return String.valueOf(obj); + } + + + public List getArrayListFsql(String sql){ + List list; + try { + list = (List) query.executeQuery(sql,new ColumnListProcessor()); + return list; + } catch (BusinessException e) { + e.printStackTrace(); + return null; + } + } +} \ No newline at end of file