sunfengjie-生产订单表体计划日期变更联动更新下游单据

This commit is contained in:
mzr 2025-10-20 15:25:46 +08:00
parent 092db38e67
commit 3f81b2ea90
2 changed files with 625 additions and 0 deletions

View File

@ -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<String> 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<PMOAggVO> checkFrozenRule = new MMVOSagaFrozenValidateRule(true);
checkFrozenRule.process(fullBills);
PmoSagaUtil.frozenAndAddSaga(fullBills);
GCUpdateBPTemplate<PMOAggVO> 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<PMOAggVO> processer) {
processer.addBeforeRule(new PMOProcedureSortRule());
IRule<PMOAggVO> orgrule = new OrgDisabledCheckRule("pk_org", "FACTORYTYPE000000000");
processer.addBeforeRule(orgrule);
processer.addBeforeRule(new PMOCheckItemNotNullRule());
processer.addBeforeRule(new PMOCheckItemParentProcedureRule());
IRule<PMOAggVO> deptrule = new PMOCheckDeptNotNullRule();
processer.addBeforeRule(deptrule);
IRule<PMOAggVO> mmatoMaterialCheckRule = new MMATOMaterialCheckRule((String)null, "cmaterialvid", "cffileid");
processer.addBeforeRule(mmatoMaterialCheckRule);
ICompareRule<PMOAggVO> checkrowChangedRule = new PMOCheckRownoChangedRule();
processer.addBeforeRule(checkrowChangedRule);
ICompareRule<PMOAggVO> vBillCodeTurnItemRule = new PMOCheckVBillCodeTurnItemRule();
processer.addBeforeRule(vBillCodeTurnItemRule);
ICompareRule<PMOAggVO> vBillCodeByPutPlanRule = new PMOCheckVBillCodeByPutPlanRule();
processer.addBeforeRule(vBillCodeByPutPlanRule);
ICompareRule<PMOAggVO> vBillCodeBySubMoRule = new PMOCheckVBillCodeBySubMoRule();
processer.addBeforeRule(vBillCodeBySubMoRule);
ICompareRule<PMOAggVO> checkeditable = new PMOCheckEditableByStatusRule();
processer.addBeforeRule(checkeditable);
IRule<PMOAggVO> fillrule = new FillUpdateDataRule();
processer.addBeforeRule(fillrule);
IRule<PMOAggVO> updfillrule = new PMOFillUpdateDefaultValueRule();
processer.addBeforeRule(updfillrule);
IRule<PMOAggVO> billstatusRule = new PMOBillStatusToFreeRule();
processer.addBeforeRule(billstatusRule);
IRule<PMOAggVO> rowrule = new MMRowNoCheckRule();
processer.addBeforeRule(rowrule);
IRule<PMOAggVO> autoMaterialAssignRule = new MMAutoMaterialAssignRule((String)null, "cmaterialvid", new String[]{"pk_org", "cplanfactoryid"}, (String[])null);
processer.addBeforeFinalRule(autoMaterialAssignRule);
IRule<PMOAggVO> marperrule = new PMOCheckMaterialPermissionRule();
processer.addBeforeRule(marperrule);
IRule<PMOAggVO> virtualRule = new MMCheckMaterialVirtualRule();
processer.addBeforeRule(virtualRule);
IRule<PMOAggVO> chkrwxisrule = new PMOCheckNrwxisLogicRule();
processer.addBeforeRule(chkrwxisrule);
IRule<PMOAggVO> chkparentprocrule = new PMOCheckParentProcedureNoRule();
processer.addBeforeRule(chkparentprocrule);
IRule<PMOAggVO> checNullRule = new PMOCheckSaveNotNullRule(false);
processer.addBeforeRule(checNullRule);
IRule<PMOAggVO> checkturnrule = new PMOCheckTurnedItemDeleteRule();
processer.addBeforeRule(checkturnrule);
IRule<PMOAggVO> snBindRule = new PMOCheckSnBindRule();
processer.addBeforeRule(snBindRule);
ICompareRule<PMOAggVO> billcoderule = new UpdateBillCodeRule("55A2", "vbillcode", "pk_group", "pk_org");
processer.addBeforeRule(billcoderule);
ICompareRule<PMOAggVO> createOutput = new PMOIsCreatPlanOutputRule();
processer.addBeforeRule(createOutput);
ICompareRule<PMOAggVO> createproc = new PMOIsCreatProcedureRule();
processer.addBeforeRule(createproc);
ICompareRule<PMOAggVO> procCheck = new PMORwkProcCheckRule();
processer.addBeforeRule(procCheck);
ICompareRule<PMOAggVO> putCheckRule = new PMOProcedurePutCheckRule();
processer.addBeforeRule(putCheckRule);
IRule<PMOAggVO> filltimeprocedurerule = new PMOFillInsertPlanTimeByProcedureRule();
processer.addBeforeRule(filltimeprocedurerule);
IRule<PMOAggVO> daterule = new PMOCheckDateLogicRule();
processer.addBeforeRule(daterule);
IRule<PMOAggVO> procdatelogicrule = new PMOCheckProcedureDateLogicRule(false);
processer.addBeforeRule(procdatelogicrule);
IRule<PMOAggVO> proccoderule = new PMOCheckProcedureDupRule();
processer.addBeforeRule(proccoderule);
IRule<PMOAggVO> checkproExistDownRule = new PMOCheckProcedureExistDownRule();
processer.addBeforeRule(checkproExistDownRule);
IRule<PMOAggVO> rwkProcOperType = new PMORwkProcOperTypeRule();
processer.addBeforeRule(rwkProcOperType);
IRule<PMOAggVO> chkPntRule = new PMOProcedureChkPntRule();
processer.addBeforeRule(chkPntRule);
processer.addBeforeRule(new PMOCheckProdurepointRule());
IRule<PMOAggVO> operTypeRule = new PMOCheckApproveOperTypeRule();
processer.addBeforeRule(operTypeRule);
IRule<PMOAggVO> approvecheckrule = new PMOCheckProcedureNotNullRule();
processer.addBeforeRule(approvecheckrule);
IRule<PMOAggVO> checkPlanPutNumRule = new PMOCheckPlanPutNumRule();
processer.addBeforeRule(checkPlanPutNumRule);
IRule<PMOAggVO> planputNumberRule = new PMOCheckPlanPutNumberRule();
processer.addBeforeRule(planputNumberRule);
IRule<PMOAggVO> lengthrule = new FieldLengthCheckRule();
processer.addBeforeRule(lengthrule);
IRule<PMOAggVO> userDefSaveRule = new UserDefSaveRule(new Class[]{PMOItemVO.class});
processer.addBeforeRule(userDefSaveRule);
MMCheckMaterialProdModeRule<PMOAggVO> prodModeRule = new MMCheckMaterialProdModeRule(1, PMOItemVO.class);
processer.addBeforeRule(prodModeRule);
ICompareRule<PMOAggVO> synpickbatchcodeRule = new PMOBatchCodeEditSynPickmRule();
processer.addBeforeRule(synpickbatchcodeRule);
ICompareRule<PMOAggVO> batchcodedocRule = new PMOBatchCodeEditRule();
processer.addBeforeRule(batchcodedocRule);
PMOCffileidInserAndUpdatetRule cffileidRule = new PMOCffileidInserAndUpdatetRule();
processer.addBeforeRule(cffileidRule);
IRule<PMOAggVO> checkATPUpdateRule = new PMOATPUpdateWithParaRule(true, "55A2");
processer.addBeforeRule(checkATPUpdateRule);
ICompareRule<PMOAggVO> rewritePSCrecive = new RewriteUpdateNum4PSCRecive();
processer.addBeforeRule(rewritePSCrecive);
IRule<PMOAggVO> wrMarkRule = new PMOMarkWrSNWhenUpdateRule();
processer.addBeforeRule(wrMarkRule);
ICompareRule<PMOAggVO> rewritewr = new RewriteUpdateNum4Renovate();
processer.addBeforeRule(rewritewr);
ICompareRule<PMOAggVO> rewriteso = new RewriteUpdateNum4SO();
processer.addBeforeRule(rewriteso);
ICompareRule<PMOAggVO> rewritepsm = new RewriteUpdateNum4PSM();
processer.addBeforeRule(rewritepsm);
ICompareRule<PMOAggVO> rewritepo = new RewriteUpdateNum4MPS();
processer.addBeforeRule(rewritepo);
ICompareRule<PMOAggVO> rewriteinvp = new RewriteUpdateNum4INVP();
processer.addBeforeRule(rewriteinvp);
ICompareRule<PMOAggVO> rewriteto = new RewriteUpdateNum4TO();
processer.addBeforeRule(rewriteto);
ICompareRule<PMOAggVO> rewritesfc = new RewriteUpdateNum4SFC();
processer.addBeforeRule(rewritesfc);
IRule<PMOAggVO> fillfirstInfo = new PMOFillFirstMOInfoRule();
processer.addBeforeRule(fillfirstInfo);
IRule<PMOAggVO> batchcodeRule = new PMOFillBatchCodeRule();
processer.addBeforeRule(batchcodeRule);
ICompareRule<PMOAggVO> adjustReserveRule = new PMOAdjustReserveRule();
processer.addBeforeRule(adjustReserveRule);
IRule<PMOAggVO> snCheckRule = new PMOCheckSNNumAndUnitRule();
processer.addBeforeRule(snCheckRule);
IRule<PMOAggVO> snRule = new PMOFillSNPkAndCodeRule();
processer.addBeforeRule(snRule);
IRule<PMOAggVO> itemDeletesnRule = new PMOSyncSNWhenItemDeleteRule();
processer.addBeforeRule(itemDeletesnRule);
ICompareRule<PMOAggVO> snSyncRule = new PMOSyncSNWhenUpdateRule();
processer.addBeforeRule(snSyncRule);
IRule<PMOAggVO> checkCinwarehouseidRule = new PMOCheckCinwarehouseidRule();
processer.addBeforeRule(checkCinwarehouseidRule);
IRule<PMOAggVO> procedureIRule = new PMOCheckProcedureratioRule();
processer.addBeforeRule(procedureIRule);
IRule<PMOAggVO> atoCheck = new PMOATOCheckRule();
processer.addBeforeRule(atoCheck);
}
private void addAfterRule(CompareAroundProcesser<PMOAggVO> processer) {
IRule<PMOAggVO> checkUniqueRule = new BillCodeCheckRule("55A2", "vbillcode", "pk_group", "pk_org");
processer.addAfterRule(checkUniqueRule);
ICompareRule<PMOAggVO> checksubbill = new PMOCheckDeleteItemHasSubMoRule();
processer.addAfterRule(checksubbill);
ICompareRule<PMOAggVO> pmoBills = new RewriteUpdateNum4PMO();
processer.addAfterRule(pmoBills);
IRule<PMOAggVO> atpUpdateRule = new PMOATPUpdateWithParaRule(false, "55A2");
processer.addAfterRule(atpUpdateRule);
PMOUpdateAutoDeleteBatchCodeRule deleteBatcCodeRule = new PMOUpdateAutoDeleteBatchCodeRule();
processer.addAfterRule(deleteBatcCodeRule);
ICompareRule<PMOAggVO> pickmUpdateRule = new PMOUpdatePickmRule(this.checkInfoList);
processer.addAfterRule(pickmUpdateRule);
ICompareRule<PMOAggVO> autoDeletePutPlan = new PMOUpdateAutoDeletePutPlanRule();
processer.addAfterRule(autoDeletePutPlan);
ICompareRule<PMOAggVO> synputplanmrule = new PmoSynUpdatePutPlanRule();
processer.addAfterRule(synputplanmrule);
ICompareRule<PMOAggVO> mosDeleteRule = new PMOUpdateAutoDeleteMosRule();
processer.addAfterRule(mosDeleteRule);
IRule<PMOAggVO> saveapproverule = new PMOUpdateSaveApproveRule();
processer.addAfterRule(saveapproverule);
ICompareRule<PMOAggVO> planStartTimeChangeRule = new AfterPlanStartTimeChangeRule();//sunfj2025.09.26
processer.addAfterRule(planStartTimeChangeRule);
}
public List<String> getCheckInfoList() {
return this.checkInfoList;
}
}

View File

@ -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<PMOAggVO> {
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<String> 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<String> 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<String> getArrayListFsql(String sql){
List<String> list;
try {
list = (List<String>) query.executeQuery(sql,new ColumnListProcessor());
return list;
} catch (BusinessException e) {
e.printStackTrace();
return null;
}
}
}