流程生产订单保存前校验物料类型是否一致-精密铸造

This commit is contained in:
mzr 2025-10-20 15:29:27 +08:00
parent 0a7b8779d1
commit eeaf3c30e2
3 changed files with 321 additions and 211 deletions

View File

@ -2,6 +2,7 @@ package nc.bs.mmpac.pmo.pac0002.bp;
import nc.bs.mmpac.pmo.pac0002.bp.rule.AfterApproveSyncPLMRule; import nc.bs.mmpac.pmo.pac0002.bp.rule.AfterApproveSyncPLMRule;
import nc.bs.mmpac.pmo.pac0002.bp.rule.BeforePmoBomRule; import nc.bs.mmpac.pmo.pac0002.bp.rule.BeforePmoBomRule;
import nc.bs.mmpac.pmo.pac0002.bp.rule.BeforePmoWlbzJMRule;
import nc.bs.mmpac.pmo.pac0002.bp.rule.saveBeforeCheckRule; import nc.bs.mmpac.pmo.pac0002.bp.rule.saveBeforeCheckRule;
import nc.bs.mmpac.pmo.pac0002.pluginpoint.PMOPluginPoint; import nc.bs.mmpac.pmo.pac0002.pluginpoint.PMOPluginPoint;
import nc.bs.mmpac.pmo.pac0002.rule.*; import nc.bs.mmpac.pmo.pac0002.rule.*;
@ -32,315 +33,316 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
public class PMOInsertBP { public class PMOInsertBP {
public PMOAggVO[] insert(PMOAggVO[] bills, boolean issub, boolean isPush) { public PMOAggVO[] insert(PMOAggVO[] bills, boolean issub, boolean isPush) {
AroundProcesser<PMOAggVO> processer = new AroundProcesser<PMOAggVO>(PMOPluginPoint.INSERT); AroundProcesser<PMOAggVO> processer = new AroundProcesser<PMOAggVO>(PMOPluginPoint.INSERT);
List<SnDocParam> updateParams = new ArrayList<SnDocParam>(); List<SnDocParam> updateParams = new ArrayList<SnDocParam>();
List<SnDocParam> saveParams = new ArrayList<SnDocParam>(); List<SnDocParam> saveParams = new ArrayList<SnDocParam>();
addBeforeRule(processer, issub, isPush, updateParams, saveParams); addBeforeRule(processer, issub, isPush, updateParams, saveParams);
addAfterRule(processer, issub, isPush, updateParams, saveParams); addAfterRule(processer, issub, isPush, updateParams, saveParams);
GCBillInsert<PMOAggVO> bo = new GCBillInsert<PMOAggVO>(); GCBillInsert<PMOAggVO> bo = new GCBillInsert<PMOAggVO>();
PMOAggVO[] aggvos = (PMOAggVO[]) processer.before(bills); PMOAggVO[] aggvos = (PMOAggVO[]) processer.before(bills);
PMOAggVO[] newvos = (PMOAggVO[]) bo.insert(aggvos); PMOAggVO[] newvos = (PMOAggVO[]) bo.insert(aggvos);
PmoSagaUtil.addSagaAndCompensate4Insert(newvos); PmoSagaUtil.addSagaAndCompensate4Insert(newvos);
return (PMOAggVO[]) processer.after(newvos); return (PMOAggVO[]) processer.after(newvos);
} }
public void insertSagasCheck(PMOAggVO[] bills, boolean issub, boolean isPush) { public void insertSagasCheck(PMOAggVO[] bills, boolean issub, boolean isPush) {
GCInsertBPTemplate<PMOAggVO> bp = new GCInsertBPTemplate<PMOAggVO>(PMOPluginPoint.INSERT); GCInsertBPTemplate<PMOAggVO> bp = new GCInsertBPTemplate<PMOAggVO>(PMOPluginPoint.INSERT);
addBeforeRuleSagasCheck(bp.getAroundProcesser(), issub, isPush); addBeforeRuleSagasCheck(bp.getAroundProcesser(), issub, isPush);
bp.getAroundProcesser().before(bills); bp.getAroundProcesser().before(bills);
} }
private void addBeforeRule(AroundProcesser<PMOAggVO> processer, boolean issub, boolean isPush, private void addBeforeRule(AroundProcesser<PMOAggVO> processer, boolean issub, boolean isPush,
List<SnDocParam> updateParams, List<SnDocParam> saveParams) { List<SnDocParam> updateParams, List<SnDocParam> saveParams) {
IRule<PMOAggVO> materialIsEnableRule = new CheckMaterialIsEnableRule(); IRule<PMOAggVO> materialIsEnableRule = new CheckMaterialIsEnableRule();
processer.addBeforeRule(materialIsEnableRule); processer.addBeforeRule(materialIsEnableRule);
OrgDisabledCheckRule orgDisabledCheckRule = new OrgDisabledCheckRule("pk_org", "FACTORYTYPE000000000"); OrgDisabledCheckRule orgDisabledCheckRule = new OrgDisabledCheckRule("pk_org", "FACTORYTYPE000000000");
processer.addBeforeRule(orgDisabledCheckRule); processer.addBeforeRule(orgDisabledCheckRule);
FillInsertDataRule fillInsertDataRule = new FillInsertDataRule(); FillInsertDataRule fillInsertDataRule = new FillInsertDataRule();
processer.addBeforeRule(fillInsertDataRule); processer.addBeforeRule(fillInsertDataRule);
MMBillTypeIsLockCheckRule mMBillTypeIsLockCheckRule = new MMBillTypeIsLockCheckRule("vtrantypecode"); MMBillTypeIsLockCheckRule mMBillTypeIsLockCheckRule = new MMBillTypeIsLockCheckRule("vtrantypecode");
processer.addBeforeRule(mMBillTypeIsLockCheckRule); processer.addBeforeRule(mMBillTypeIsLockCheckRule);
MMAutoMaterialAssignRule mMAutoMaterialAssignRule = new MMAutoMaterialAssignRule(null, "cmaterialvid", MMAutoMaterialAssignRule mMAutoMaterialAssignRule = new MMAutoMaterialAssignRule(null, "cmaterialvid",
new String[] { "pk_org", "cplanfactoryid" }, null); new String[]{"pk_org", "cplanfactoryid"}, null);
processer.addBeforeFinalRule(mMAutoMaterialAssignRule); processer.addBeforeFinalRule(mMAutoMaterialAssignRule);
MMATOMaterialCheckRule mMATOMaterialCheckRule = new MMATOMaterialCheckRule(null, "cmaterialvid", "cffileid"); MMATOMaterialCheckRule mMATOMaterialCheckRule = new MMATOMaterialCheckRule(null, "cmaterialvid", "cffileid");
processer.addBeforeRule(mMATOMaterialCheckRule); processer.addBeforeRule(mMATOMaterialCheckRule);
IRule<PMOAggVO> marperrule = new PMOCheckMaterialPermissionRule(); IRule<PMOAggVO> marperrule = new PMOCheckMaterialPermissionRule();
processer.addBeforeRule(marperrule); processer.addBeforeRule(marperrule);
MMCheckMaterialVirtualRule mMCheckMaterialVirtualRule = new MMCheckMaterialVirtualRule(); MMCheckMaterialVirtualRule mMCheckMaterialVirtualRule = new MMCheckMaterialVirtualRule();
processer.addBeforeRule(mMCheckMaterialVirtualRule); processer.addBeforeRule(mMCheckMaterialVirtualRule);
IRule<PMOAggVO> chkrwxisrule = new PMOCheckNrwxisLogicRule(); IRule<PMOAggVO> chkrwxisrule = new PMOCheckNrwxisLogicRule();
processer.addBeforeRule(chkrwxisrule); processer.addBeforeRule(chkrwxisrule);
IRule<PMOAggVO> chkrule = new PMOCheckSaveNotNullRule(issub); IRule<PMOAggVO> chkrule = new PMOCheckSaveNotNullRule(issub);
processer.addBeforeRule(chkrule); processer.addBeforeRule(chkrule);
IRule<PMOAggVO> fillvaluerule = new PMOFillInsertDefaultValueRule(); IRule<PMOAggVO> fillvaluerule = new PMOFillInsertDefaultValueRule();
processer.addBeforeRule(fillvaluerule); processer.addBeforeRule(fillvaluerule);
processer.addBeforeRule(new PMOSyncPlanmmNumRule()); processer.addBeforeRule(new PMOSyncPlanmmNumRule());
MMRowNoCheckRule mMRowNoCheckRule = new MMRowNoCheckRule(); MMRowNoCheckRule mMRowNoCheckRule = new MMRowNoCheckRule();
processer.addBeforeRule(mMRowNoCheckRule); processer.addBeforeRule(mMRowNoCheckRule);
IRule<PMOAggVO> scrapAddrule = new PMOCheckParentStatusRule(); IRule<PMOAggVO> scrapAddrule = new PMOCheckParentStatusRule();
processer.addBeforeRule(scrapAddrule); processer.addBeforeRule(scrapAddrule);
IRule<PMOAggVO> snDuprule = new PMOSNDupCheckRule(); IRule<PMOAggVO> snDuprule = new PMOSNDupCheckRule();
processer.addBeforeRule(snDuprule); processer.addBeforeRule(snDuprule);
IRule<PMOAggVO> outputrule = new PMOCreatePlanOutputRule(); IRule<PMOAggVO> outputrule = new PMOCreatePlanOutputRule();
processer.addBeforeRule(outputrule); processer.addBeforeRule(outputrule);
IRule<PMOAggVO> procedurerule = new PMOCreateProcedureRule(isPush); IRule<PMOAggVO> procedurerule = new PMOCreateProcedureRule(isPush);
processer.addBeforeRule(procedurerule); processer.addBeforeRule(procedurerule);
IRule<PMOAggVO> filltimeprocedurerule = new PMOFillInsertPlanTimeByProcedureRule(); IRule<PMOAggVO> filltimeprocedurerule = new PMOFillInsertPlanTimeByProcedureRule();
processer.addBeforeRule(filltimeprocedurerule); processer.addBeforeRule(filltimeprocedurerule);
IRule<PMOAggVO> daterule = new PMOCheckDateLogicRule(); IRule<PMOAggVO> daterule = new PMOCheckDateLogicRule();
processer.addBeforeRule(daterule); processer.addBeforeRule(daterule);
IRule<PMOAggVO> chkPntRule = new PMOProcedureChkPntRule(); IRule<PMOAggVO> chkPntRule = new PMOProcedureChkPntRule();
processer.addBeforeRule(chkPntRule); processer.addBeforeRule(chkPntRule);
processer.addBeforeRule(new PMOCheckProdurepointRule()); processer.addBeforeRule(new PMOCheckProdurepointRule());
IRule<PMOAggVO> procdatelogicrule = new PMOCheckProcedureDateLogicRule(true); IRule<PMOAggVO> procdatelogicrule = new PMOCheckProcedureDateLogicRule(true);
processer.addBeforeRule(procdatelogicrule); processer.addBeforeRule(procdatelogicrule);
IRule<PMOAggVO> proccoderule = new PMOCheckProcedureDupRule(); IRule<PMOAggVO> proccoderule = new PMOCheckProcedureDupRule();
processer.addBeforeRule(proccoderule); processer.addBeforeRule(proccoderule);
IRule<PMOAggVO> procPscCheckRule = new PMOCheckProcedurePSCRule(); IRule<PMOAggVO> procPscCheckRule = new PMOCheckProcedurePSCRule();
processer.addBeforeRule(procPscCheckRule); processer.addBeforeRule(procPscCheckRule);
FieldLengthCheckRule fieldLengthCheckRule = new FieldLengthCheckRule(); FieldLengthCheckRule fieldLengthCheckRule = new FieldLengthCheckRule();
processer.addBeforeRule(fieldLengthCheckRule); processer.addBeforeRule(fieldLengthCheckRule);
UserDefSaveRule<PMOAggVO> defRule = new UserDefSaveRule<PMOAggVO>( UserDefSaveRule<PMOAggVO> defRule = new UserDefSaveRule<PMOAggVO>(
new Class[] { nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO.class }); new Class[]{nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO.class});
processer.addBeforeRule(defRule); processer.addBeforeRule(defRule);
MMCheckMaterialProdModeRule<PMOAggVO> prodModeRule = new MMCheckMaterialProdModeRule<PMOAggVO>(1, MMCheckMaterialProdModeRule<PMOAggVO> prodModeRule = new MMCheckMaterialProdModeRule<PMOAggVO>(1,
nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO.class); nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO.class);
processer.addBeforeRule(prodModeRule); processer.addBeforeRule(prodModeRule);
IRule<PMOAggVO> rewriteReviceRule = new RewriteInsertNum4PSCRecive(); IRule<PMOAggVO> rewriteReviceRule = new RewriteInsertNum4PSCRecive();
processer.addBeforeRule(rewriteReviceRule); processer.addBeforeRule(rewriteReviceRule);
IRule<PMOAggVO> wrMarkRule = new PMOMarkWrSNWhenInsertRule(); IRule<PMOAggVO> wrMarkRule = new PMOMarkWrSNWhenInsertRule();
processer.addBeforeRule(wrMarkRule); processer.addBeforeRule(wrMarkRule);
IRule<PMOAggVO> atprule = new PMOATPUpdateRule(true, "55A2"); IRule<PMOAggVO> atprule = new PMOATPUpdateRule(true, "55A2");
processer.addBeforeRule(atprule); processer.addBeforeRule(atprule);
IRule<PMOAggVO> rewritewr = new RewriteInsertNum4Renovate(); IRule<PMOAggVO> rewritewr = new RewriteInsertNum4Renovate();
processer.addBeforeRule(rewritewr); processer.addBeforeRule(rewritewr);
IRule<PMOAggVO> rewritesfc = new RewriteInsertNum4SFC(); IRule<PMOAggVO> rewritesfc = new RewriteInsertNum4SFC();
processer.addBeforeRule(rewritesfc); processer.addBeforeRule(rewritesfc);
MMCreateBillcodeAndTrantypecodeRule mMCreateBillcodeAndTrantypecodeRule = new MMCreateBillcodeAndTrantypecodeRule( MMCreateBillcodeAndTrantypecodeRule mMCreateBillcodeAndTrantypecodeRule = new MMCreateBillcodeAndTrantypecodeRule(
"55A2", "vbillcode", "pk_group", "pk_org", "vtrantypecode"); "55A2", "vbillcode", "pk_group", "pk_org", "vtrantypecode");
processer.addBeforeRule(mMCreateBillcodeAndTrantypecodeRule); processer.addBeforeRule(mMCreateBillcodeAndTrantypecodeRule);
IRule<PMOAggVO> fillfirstInfo = new PMOFillFirstMOInfoRule(); IRule<PMOAggVO> fillfirstInfo = new PMOFillFirstMOInfoRule();
processer.addBeforeRule(fillfirstInfo); processer.addBeforeRule(fillfirstInfo);
IRule<PMOAggVO> fillbatchvaluerule = new PMOFillInsertBatchValueRule(); IRule<PMOAggVO> fillbatchvaluerule = new PMOFillInsertBatchValueRule();
processer.addBeforeRule(fillbatchvaluerule); processer.addBeforeRule(fillbatchvaluerule);
IRule<PMOAggVO> batchcodeRule = new PMOFillBatchCodeRule(); IRule<PMOAggVO> batchcodeRule = new PMOFillBatchCodeRule();
processer.addBeforeRule(batchcodeRule); processer.addBeforeRule(batchcodeRule);
PMOCffileidInserAndUpdatetRule cffileidRule = new PMOCffileidInserAndUpdatetRule(); PMOCffileidInserAndUpdatetRule cffileidRule = new PMOCffileidInserAndUpdatetRule();
processer.addBeforeRule(cffileidRule); processer.addBeforeRule(cffileidRule);
IRule<PMOAggVO> snCheckRule = new PMOCheckSNNumAndUnitRule(); IRule<PMOAggVO> snCheckRule = new PMOCheckSNNumAndUnitRule();
processer.addBeforeRule(snCheckRule); processer.addBeforeRule(snCheckRule);
IRule<PMOAggVO> snRule = new PMOFillSNPkAndCodeRule(); IRule<PMOAggVO> snRule = new PMOFillSNPkAndCodeRule();
processer.addBeforeRule(snRule); processer.addBeforeRule(snRule);
IRule<PMOAggVO> snSyncRule = new PMOSyncSNWhenInsertRule(updateParams, saveParams); IRule<PMOAggVO> snSyncRule = new PMOSyncSNWhenInsertRule(updateParams, saveParams);
processer.addBeforeRule(snSyncRule); processer.addBeforeRule(snSyncRule);
IRule<PMOAggVO> checkCinwarehouseidRule = new PMOCheckCinwarehouseidRule(); IRule<PMOAggVO> checkCinwarehouseidRule = new PMOCheckCinwarehouseidRule();
processer.addBeforeRule(checkCinwarehouseidRule); processer.addBeforeRule(checkCinwarehouseidRule);
IRule<PMOAggVO> atoCheck = new PMOATOCheckRule(); IRule<PMOAggVO> atoCheck = new PMOATOCheckRule();
processer.addBeforeRule(atoCheck); processer.addBeforeRule(atoCheck);
IRule<PMOAggVO> procedureIRule = new PMOCheckProcedureratioRule(); IRule<PMOAggVO> procedureIRule = new PMOCheckProcedureratioRule();
processer.addBeforeRule(procedureIRule); processer.addBeforeRule(procedureIRule);
IRule<PMOAggVO> saveBeforeCheckRule = new saveBeforeCheckRule(); IRule<PMOAggVO> saveBeforeCheckRule = new saveBeforeCheckRule();
processer.addBeforeRule(saveBeforeCheckRule); processer.addBeforeRule(saveBeforeCheckRule);
processer.addBeforeRule(new BeforePmoBomRule()); processer.addBeforeRule(new BeforePmoWlbzJMRule());
} processer.addBeforeRule(new BeforePmoBomRule());
}
private void addBeforeRuleSagasCheck(AroundProcesser<PMOAggVO> processer, boolean issub, boolean isPush) { private void addBeforeRuleSagasCheck(AroundProcesser<PMOAggVO> processer, boolean issub, boolean isPush) {
OrgDisabledCheckRule orgDisabledCheckRule = new OrgDisabledCheckRule("pk_org", "FACTORYTYPE000000000"); OrgDisabledCheckRule orgDisabledCheckRule = new OrgDisabledCheckRule("pk_org", "FACTORYTYPE000000000");
processer.addBeforeRule(orgDisabledCheckRule); processer.addBeforeRule(orgDisabledCheckRule);
FillInsertDataRule fillInsertDataRule = new FillInsertDataRule(); FillInsertDataRule fillInsertDataRule = new FillInsertDataRule();
processer.addBeforeRule(fillInsertDataRule); processer.addBeforeRule(fillInsertDataRule);
MMBillTypeIsLockCheckRule mMBillTypeIsLockCheckRule = new MMBillTypeIsLockCheckRule("vtrantypecode"); MMBillTypeIsLockCheckRule mMBillTypeIsLockCheckRule = new MMBillTypeIsLockCheckRule("vtrantypecode");
processer.addBeforeRule(mMBillTypeIsLockCheckRule); processer.addBeforeRule(mMBillTypeIsLockCheckRule);
MMATOMaterialCheckRule mMATOMaterialCheckRule = new MMATOMaterialCheckRule(null, "cmaterialvid", "cffileid"); MMATOMaterialCheckRule mMATOMaterialCheckRule = new MMATOMaterialCheckRule(null, "cmaterialvid", "cffileid");
processer.addBeforeRule(mMATOMaterialCheckRule); processer.addBeforeRule(mMATOMaterialCheckRule);
IRule<PMOAggVO> marperrule = new PMOCheckMaterialPermissionRule(); IRule<PMOAggVO> marperrule = new PMOCheckMaterialPermissionRule();
processer.addBeforeRule(marperrule); processer.addBeforeRule(marperrule);
MMCheckMaterialVirtualRule mMCheckMaterialVirtualRule = new MMCheckMaterialVirtualRule(); MMCheckMaterialVirtualRule mMCheckMaterialVirtualRule = new MMCheckMaterialVirtualRule();
processer.addBeforeRule(mMCheckMaterialVirtualRule); processer.addBeforeRule(mMCheckMaterialVirtualRule);
IRule<PMOAggVO> chkrwxisrule = new PMOCheckNrwxisLogicRule(); IRule<PMOAggVO> chkrwxisrule = new PMOCheckNrwxisLogicRule();
processer.addBeforeRule(chkrwxisrule); processer.addBeforeRule(chkrwxisrule);
IRule<PMOAggVO> chkrule = new PMOCheckSaveNotNullRule(issub); IRule<PMOAggVO> chkrule = new PMOCheckSaveNotNullRule(issub);
processer.addBeforeRule(chkrule); processer.addBeforeRule(chkrule);
IRule<PMOAggVO> fillvaluerule = new PMOFillInsertDefaultValueRule(); IRule<PMOAggVO> fillvaluerule = new PMOFillInsertDefaultValueRule();
processer.addBeforeRule(fillvaluerule); processer.addBeforeRule(fillvaluerule);
processer.addBeforeRule(new PMOSyncPlanmmNumRule()); processer.addBeforeRule(new PMOSyncPlanmmNumRule());
MMRowNoCheckRule mMRowNoCheckRule = new MMRowNoCheckRule(); MMRowNoCheckRule mMRowNoCheckRule = new MMRowNoCheckRule();
processer.addBeforeRule(mMRowNoCheckRule); processer.addBeforeRule(mMRowNoCheckRule);
IRule<PMOAggVO> daterule = new PMOCheckDateLogicRule(); IRule<PMOAggVO> daterule = new PMOCheckDateLogicRule();
processer.addBeforeRule(daterule); processer.addBeforeRule(daterule);
IRule<PMOAggVO> chkPntRule = new PMOProcedureChkPntRule(); IRule<PMOAggVO> chkPntRule = new PMOProcedureChkPntRule();
processer.addBeforeRule(chkPntRule); processer.addBeforeRule(chkPntRule);
processer.addBeforeRule(new PMOCheckProdurepointRule()); processer.addBeforeRule(new PMOCheckProdurepointRule());
IRule<PMOAggVO> procdatelogicrule = new PMOCheckProcedureDateLogicRule(true); IRule<PMOAggVO> procdatelogicrule = new PMOCheckProcedureDateLogicRule(true);
processer.addBeforeRule(procdatelogicrule); processer.addBeforeRule(procdatelogicrule);
IRule<PMOAggVO> proccoderule = new PMOCheckProcedureDupRule(); IRule<PMOAggVO> proccoderule = new PMOCheckProcedureDupRule();
processer.addBeforeRule(proccoderule); processer.addBeforeRule(proccoderule);
FieldLengthCheckRule fieldLengthCheckRule = new FieldLengthCheckRule(); FieldLengthCheckRule fieldLengthCheckRule = new FieldLengthCheckRule();
processer.addBeforeRule(fieldLengthCheckRule); processer.addBeforeRule(fieldLengthCheckRule);
UserDefSaveRule<PMOAggVO> defRule = new UserDefSaveRule<PMOAggVO>( UserDefSaveRule<PMOAggVO> defRule = new UserDefSaveRule<PMOAggVO>(
new Class[] { nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO.class }); new Class[]{nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO.class});
processer.addBeforeRule(defRule); processer.addBeforeRule(defRule);
MMCheckMaterialProdModeRule<PMOAggVO> prodModeRule = new MMCheckMaterialProdModeRule<PMOAggVO>(1, MMCheckMaterialProdModeRule<PMOAggVO> prodModeRule = new MMCheckMaterialProdModeRule<PMOAggVO>(1,
nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO.class); nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO.class);
processer.addBeforeRule(prodModeRule); processer.addBeforeRule(prodModeRule);
IRule<PMOAggVO> snCheckRule = new PMOCheckSNNumAndUnitRule(); IRule<PMOAggVO> snCheckRule = new PMOCheckSNNumAndUnitRule();
processer.addBeforeRule(snCheckRule); processer.addBeforeRule(snCheckRule);
IRule<PMOAggVO> atoCheck = new PMOATOCheckRule(); IRule<PMOAggVO> atoCheck = new PMOATOCheckRule();
processer.addBeforeRule(atoCheck); processer.addBeforeRule(atoCheck);
} }
private void addAfterRule(AroundProcesser<PMOAggVO> processer, boolean issub, boolean isPush, private void addAfterRule(AroundProcesser<PMOAggVO> processer, boolean issub, boolean isPush,
List<SnDocParam> updateParams, List<SnDocParam> saveParams) { List<SnDocParam> updateParams, List<SnDocParam> saveParams) {
MMBillCodeCheckAndTrantypeRule mMBillCodeCheckAndTrantypeRule = new MMBillCodeCheckAndTrantypeRule("55A2", MMBillCodeCheckAndTrantypeRule mMBillCodeCheckAndTrantypeRule = new MMBillCodeCheckAndTrantypeRule("55A2",
"vbillcode", "pk_group", "pk_org", "vtrantypecode"); "vbillcode", "pk_group", "pk_org", "vtrantypecode");
processer.addAfterRule(mMBillCodeCheckAndTrantypeRule); processer.addAfterRule(mMBillCodeCheckAndTrantypeRule);
IRule<PMOAggVO> duprule = new PMOCheckSCDuplicateRule(); IRule<PMOAggVO> duprule = new PMOCheckSCDuplicateRule();
processer.addAfterRule(duprule); processer.addAfterRule(duprule);
IRule<PMOAggVO> dmoduprule = new PMOCheckDMODuplicateRule(); IRule<PMOAggVO> dmoduprule = new PMOCheckDMODuplicateRule();
processer.addAfterRule(dmoduprule); processer.addAfterRule(dmoduprule);
IRule<PMOAggVO> pmorule = new RewriteInsertNum4PMO(); IRule<PMOAggVO> pmorule = new RewriteInsertNum4PMO();
processer.addAfterRule(pmorule); processer.addAfterRule(pmorule);
IRule<PMOAggVO> rewriteso = new RewriteInsertNum4SO(); IRule<PMOAggVO> rewriteso = new RewriteInsertNum4SO();
processer.addAfterRule(rewriteso); processer.addAfterRule(rewriteso);
IRule<PMOAggVO> rewritepsm = new RewriteInsertNum4PSM(); IRule<PMOAggVO> rewritepsm = new RewriteInsertNum4PSM();
processer.addAfterRule(rewritepsm); processer.addAfterRule(rewritepsm);
IRule<PMOAggVO> rewritepo = new RewriteInsertNum4MPS(); IRule<PMOAggVO> rewritepo = new RewriteInsertNum4MPS();
processer.addAfterRule(rewritepo); processer.addAfterRule(rewritepo);
IRule<PMOAggVO> rewriteto = new RewriteInsertNum4TO(); IRule<PMOAggVO> rewriteto = new RewriteInsertNum4TO();
processer.addAfterRule(rewriteto); processer.addAfterRule(rewriteto);
IRule<PMOAggVO> atprule = new PMOATPUpdateRule(false, "55A2"); IRule<PMOAggVO> atprule = new PMOATPUpdateRule(false, "55A2");
processer.addAfterRule(atprule); processer.addAfterRule(atprule);
IRule<PMOAggVO> snsaverule = new PMOSaveSNWhenInsertRule(updateParams, saveParams); IRule<PMOAggVO> snsaverule = new PMOSaveSNWhenInsertRule(updateParams, saveParams);
processer.addAfterRule(snsaverule); processer.addAfterRule(snsaverule);
IRule<PMOAggVO> createPickmRule = new PMOCreatePickmWhenInsertRule(); IRule<PMOAggVO> createPickmRule = new PMOCreatePickmWhenInsertRule();
processer.addAfterRule(createPickmRule); processer.addAfterRule(createPickmRule);
IRule<PMOAggVO> saveapproverule = new PMOInsertSaveApproveRule(); IRule<PMOAggVO> saveapproverule = new PMOInsertSaveApproveRule();
processer.addAfterRule(saveapproverule); processer.addAfterRule(saveapproverule);
// 保存后推送流程生产订单到PLM // 保存后推送流程生产订单到PLM
processer.addAfterRule(new AfterApproveSyncPLMRule()); processer.addAfterRule(new AfterApproveSyncPLMRule());
} }
public PMOAggVO[] pushInsert(PMOAggVO[] vos, boolean issub, String pushtype) { public PMOAggVO[] pushInsert(PMOAggVO[] vos, boolean issub, String pushtype) {
AroundProcesser<PMOAggVO> processer = new AroundProcesser<PMOAggVO>(PMOPluginPoint.PUSHINSERT); AroundProcesser<PMOAggVO> processer = new AroundProcesser<PMOAggVO>(PMOPluginPoint.PUSHINSERT);
addPushInsertBeforeRules(processer, pushtype); addPushInsertBeforeRules(processer, pushtype);
processer.before(vos); processer.before(vos);
PMOAggVO[] aggvos = insert(vos, issub, true); PMOAggVO[] aggvos = insert(vos, issub, true);
if ("PSM".equals(pushtype)) { if ("PSM".equals(pushtype)) {
PMOAggVO[] cloneVos = (PMOAggVO[]) (new GCBillCloneUtil()).cloneBills(aggvos); PMOAggVO[] cloneVos = (PMOAggVO[]) (new GCBillCloneUtil()).cloneBills(aggvos);
PMOSplitByTaskDetailsRule createPutPlan = new PMOSplitByTaskDetailsRule(false); PMOSplitByTaskDetailsRule createPutPlan = new PMOSplitByTaskDetailsRule(false);
createPutPlan.process(cloneVos); createPutPlan.process(cloneVos);
} }
return aggvos; return aggvos;
} }
public void pushInsertSagasCheck(PMOAggVO[] vos, boolean issub, String pushtype) { public void pushInsertSagasCheck(PMOAggVO[] vos, boolean issub, String pushtype) {
AroundProcesser<PMOAggVO> processer = new AroundProcesser<PMOAggVO>(PMOPluginPoint.PUSHINSERT); AroundProcesser<PMOAggVO> processer = new AroundProcesser<PMOAggVO>(PMOPluginPoint.PUSHINSERT);
addPushInsertBeforeRules(processer, pushtype); addPushInsertBeforeRules(processer, pushtype);
processer.before(vos); processer.before(vos);
insertSagasCheck(vos, issub, true); insertSagasCheck(vos, issub, true);
} }
private void addPushInsertBeforeRules(AroundProcesser<PMOAggVO> processer, String pushtype) { private void addPushInsertBeforeRules(AroundProcesser<PMOAggVO> processer, String pushtype) {
IRule<PMOAggVO> versionrule = new PMOFillPushVersionRule(); IRule<PMOAggVO> versionrule = new PMOFillPushVersionRule();
processer.addBeforeRule(versionrule); processer.addBeforeRule(versionrule);
IRule<PMOAggVO> defaultrule = new PMOFillPushDefaultValueRule(); IRule<PMOAggVO> defaultrule = new PMOFillPushDefaultValueRule();
processer.addBeforeRule(defaultrule); processer.addBeforeRule(defaultrule);
IRule<PMOAggVO> relationrule = new PMOFillMaterialRelationRule(pushtype); IRule<PMOAggVO> relationrule = new PMOFillMaterialRelationRule(pushtype);
processer.addBeforeRule(relationrule); processer.addBeforeRule(relationrule);
} }
} }

View File

@ -6,6 +6,7 @@
package nc.bs.mmpac.pmo.pac0002.bp; package nc.bs.mmpac.pmo.pac0002.bp;
import nc.bs.mmpac.pmo.pac0002.bp.rule.AfterPlanStartTimeChangeRule; import nc.bs.mmpac.pmo.pac0002.bp.rule.AfterPlanStartTimeChangeRule;
import nc.bs.mmpac.pmo.pac0002.bp.rule.BeforePmoWlbzJMRule;
import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO; import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -249,6 +250,7 @@ public class PMOUpdateBP {
processer.addBeforeRule(procedureIRule); processer.addBeforeRule(procedureIRule);
IRule<PMOAggVO> atoCheck = new PMOATOCheckRule(); IRule<PMOAggVO> atoCheck = new PMOATOCheckRule();
processer.addBeforeRule(atoCheck); processer.addBeforeRule(atoCheck);
processer.addBeforeRule(new BeforePmoWlbzJMRule());
} }
private void addAfterRule(CompareAroundProcesser<PMOAggVO> processer) { private void addAfterRule(CompareAroundProcesser<PMOAggVO> processer) {

View File

@ -0,0 +1,106 @@
package nc.bs.mmpac.pmo.pac0002.bp.rule;
import nc.bs.dao.DAOException;
import nc.bs.logging.Log;
import nc.bs.trade.business.HYSuperDMO;
import nc.bs.uapbd.util.MyHelper;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.util.mmf.framework.base.MMValueCheck;
import nc.vo.am.common.util.StringUtils;
import nc.vo.bd.defdoc.DefdocVO;
import nc.vo.bd.material.stock.MaterialStockVO;
import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO;
import nc.vo.mmpac.pmo.pac0002.entity.PMOHeadVO;
import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO;
import nc.vo.org.FactoryVO;
import nc.vo.pub.BusinessException;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/**
* 流程生产订单保存前校验物料类型是否一致-精密铸造
*
* @author mzr
* @date 2025/10/20
*/
public class BeforePmoWlbzJMRule implements IRule<PMOAggVO> {
private static final String LOG_INFO_NAME = "qyMesLog";
private static final Log logger = Log.getInstance(LOG_INFO_NAME);
@Override
public void process(PMOAggVO[] vos) {
try {
Map<String, String> configParams = MyHelper.getConfigParams("jm-config", null);
if (configParams.isEmpty()) {
return;
}
for (PMOAggVO vo : vos) {
PMOHeadVO headVO = vo.getParentVO();
String pkOrg = headVO.getPk_org();
String orgCode = MyHelper.getStrValByCondition(FactoryVO.getDefaultTableName(), FactoryVO.CODE,
FactoryVO.PK_FACTORY + " = '" + pkOrg + "'");
// 只有精密公司才校验
if (checkIfOrg(orgCode, configParams)) {
continue;
}
PMOItemVO[] pmoItemVOS = vo.getChildrenVO();
if (pmoItemVOS != null && pmoItemVOS.length > 1) {
// 如果明细超过1行,根据物料档案库存信息自定义项3 精密物料标志字段进行区分同一个生产订单明细中不能存在不同的类型
Set<String> materialTypeSet = new HashSet<>();
for (PMOItemVO pmoItemVO : pmoItemVOS) {
// 物料ID
String cmaterialvid = pmoItemVO.getCmaterialvid();
String wlbzId = MyHelper.getStrValByCondition(MaterialStockVO.getDefaultTableName(), MaterialStockVO.DEF3,
MaterialStockVO.PK_MATERIAL + " = '" + cmaterialvid + "' and pk_org = '" + pkOrg + "'");
String defName = getDefName("zdy-jmzz001", wlbzId);
if (MMValueCheck.isNotEmpty(defName)) {
materialTypeSet.add(defName);
}
}
if (materialTypeSet.size() > 1) {
ExceptionUtils.wrappBusinessException("生产订单明细中存在不同类型物料,请检查");
}
}
}
} catch (BusinessException e) {
logger.error("BeforePmoMaterialTypeJMRule-exp:" + e.getMessage(), e);
ExceptionUtils.wrappException(e);
}
}
private boolean checkIfOrg(String code, Map<String, String> configParams) throws BusinessException {
String targetCode = configParams.get("jmOrg");
if (targetCode == null || StringUtils.isEmpty(targetCode)) {
throw new BusinessException("未配置组织参数");
}
String[] orgItem = targetCode.split(",");
for (String orgCode : orgItem) {
if (!orgCode.isEmpty() && orgCode.equals(code)) {
return false;
}
}
return true;
}
/**
* 获取自定义项信息
*/
private String getDefName(String code, String pk_defdoc) {
String res = "";
String strWhere = " pk_defdoclist in (select pk_defdoclist from bd_defdoclist where code='" + code + "' and dr=0 ) and dr = 0 and pk_defdoc = '" + pk_defdoc + "'";
try {
DefdocVO[] defdocVOs = (DefdocVO[]) new HYSuperDMO().queryByWhereClause(DefdocVO.class, strWhere);
if (defdocVOs != null && defdocVOs.length > 0) {
res = defdocVOs[0].getName().trim();
}
} catch (DAOException e) {
logger.error("BeforePmoMaterialTypeJMRule-error,getDefName[" + e.getMessage() + "]");
}
return res;
}
}