生产订单投放校验相关代码适配

This commit is contained in:
zhangxinah@yonyou.com 2025-03-26 15:11:13 +08:00
parent 55e7646ebc
commit 0eb4e5a01b
4 changed files with 720 additions and 0 deletions

View File

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

View File

@ -0,0 +1,105 @@
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.PMOPutAutoAuditPickmRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckDeptNotNullRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckPutCancelActApplyRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckPutCancelBatchBindRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckPutCancelDispatchNumRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckPutCancelHoldNumRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckPutCancelOperationRepRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckPutCancelWrNumRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOPutCancelCheckPutPlanStatusRule;
import nc.bs.mmpac.pmo.pac0002.rule.fill.PMOFillBatchCodeRule;
import nc.bs.mmpac.pmo.pac0002.rule.fill.PMOFillPutValueRule;
import nc.bs.mmpac.pmo.pac0002.bp.rule.putBeforeCheckRule;
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 PMOPutBP {
public PMOAggVO[] put(PMOAggVO[] fullBills, PMOAggVO[] originBills) {
GCUpdateBPTemplate<PMOAggVO> bp = new GCUpdateBPTemplate<PMOAggVO>(PMOPluginPoint.PUT);
addPutBeforeRule(bp.getAroundProcesser());
addPutAfterRule(bp.getAroundProcesser());
return (PMOAggVO[]) bp.update(fullBills, originBills);
}
private void addPutBeforeRule(CompareAroundProcesser<PMOAggVO> processer) {
MMVOSagaFrozenValidateRule mMVOSagaFrozenValidateRule = new MMVOSagaFrozenValidateRule(true);
processer.addBeforeRule(mMVOSagaFrozenValidateRule);
IFilterRule<PMOAggVO> filterStatusRule = new PMOFilterBillStatusRule(PMOConstLang.getMSG_ACTION_NO_AUDIT(),
PMOFBillstatusEnum.AUDIT);
processer.addBeforeRule(filterStatusRule);
IRule<PMOAggVO> checkDeptRule = new PMOCheckDeptNotNullRule();
processer.addBeforeRule(checkDeptRule);
IFilterRule<PMOAggVO> pickmRule = new PMOPutAutoAuditPickmRule();
processer.addBeforeRule(pickmRule);
IRule<PMOAggVO> fillValueRule = new PMOFillPutValueRule(false);
processer.addBeforeRule(fillValueRule);
IRule<PMOAggVO> batchcodeRule = new PMOFillBatchCodeRule();
processer.addBeforeRule(batchcodeRule);
IRule<PMOAggVO> putBeforeCheckRule = new putBeforeCheckRule();
processer.addBeforeRule(putBeforeCheckRule);
}
private void addPutAfterRule(CompareAroundProcesser<PMOAggVO> processer) {
}
public PMOAggVO[] putCancel(PMOAggVO[] fullBills, PMOAggVO[] originBills) {
GCUpdateBPTemplate<PMOAggVO> bp = new GCUpdateBPTemplate<PMOAggVO>(PMOPluginPoint.UNPUT);
addPutCancelBeforeRule(bp.getAroundProcesser());
addPutCancelAfterRule(bp.getAroundProcesser());
return (PMOAggVO[]) bp.update(fullBills, originBills);
}
private void addPutCancelBeforeRule(CompareAroundProcesser<PMOAggVO> processer) {
IFilterRule<PMOAggVO> filterStatusRule = new PMOFilterBillStatusRule(PMOConstLang.getMSG_ACTION_NO_AUDIT(),
PMOFBillstatusEnum.AUDIT);
processer.addBeforeRule(filterStatusRule);
IRule<PMOAggVO> checkWRNumRule = new PMOCheckPutCancelWrNumRule();
processer.addBeforeRule(checkWRNumRule);
IRule<PMOAggVO> checkActApplyRule = new PMOCheckPutCancelActApplyRule();
processer.addBeforeRule(checkActApplyRule);
IRule<PMOAggVO> checkHoldNumRule = new PMOCheckPutCancelHoldNumRule();
processer.addBeforeRule(checkHoldNumRule);
IRule<PMOAggVO> checkBatchBindRule = new PMOCheckPutCancelBatchBindRule();
processer.addBeforeRule(checkBatchBindRule);
IRule<PMOAggVO> fillValueRule = new PMOFillPutValueRule(true);
processer.addBeforeRule(fillValueRule);
IRule<PMOAggVO> checkDispatchNumRule = new PMOCheckPutCancelDispatchNumRule();
processer.addBeforeRule(checkDispatchNumRule);
IRule<PMOAggVO> checkOperationRepRule = new PMOCheckPutCancelOperationRepRule();
processer.addBeforeRule(checkOperationRepRule);
IRule<PMOAggVO> putCancelCheckPutPlanStatusRule = new PMOPutCancelCheckPutPlanStatusRule();
processer.addBeforeRule(putCancelCheckPutPlanStatusRule);
}
private void addPutCancelAfterRule(CompareAroundProcesser<PMOAggVO> processer) {
}
}

View File

@ -0,0 +1,122 @@
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.PMOPutAutoAuditPickmRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckDeptNotNullRule;
import nc.bs.mmpac.pmo.pac0002.rule.fill.PMOFillBatchCodeRule;
import nc.bs.mmpac.pmo.pac0002.rule.fill.PMOFillPutValueRule;
import nc.bs.mmpac.pmo.pac0002.bp.rule.putBeforeCheckRule;
import nc.bs.mmpub.rule.MMVOSagaFrozenValidateRule;
import nc.impl.pubapp.pattern.data.vo.tool.VOConcurrentTool;
import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser;
import nc.util.mmf.framework.gc.GCBillConcurrentTool;
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.CircularlyAccessibleValueObject;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
public class PMORowPutBP {
public PMOAggVO[] rowput(PMOAggVO[] vos) {
try {
GCBillConcurrentTool lockTool = new GCBillConcurrentTool();
lockTool.lockBill(vos);
(new VOConcurrentTool()).checkTSWithDB(vos[0].getChildrenVO());
GCUpdateBPTemplate<PMOAggVO> bp = new GCUpdateBPTemplate<PMOAggVO>(PMOPluginPoint.ROWPUT);
CompareAroundProcesser<PMOAggVO> processer = bp.getAroundProcesser();
addRowPutBeforeRule(processer);
addRowPutAfterRule(processer);
PMOAggVO[] returnvos = (PMOAggVO[]) processer.before(vos, vos);
List<PMOItemVO> upditemList = new ArrayList<PMOItemVO>();
Map<String, PMOItemVO> upditemMap = new HashMap<String, PMOItemVO>();
for (PMOAggVO aggvo : returnvos) {
PMOItemVO[] items = aggvo.getChildrenVO();
for (PMOItemVO item : items) {
upditemList.add(item);
upditemMap.put(item.getCmoid(), item);
}
}
PMOAggVO aggvo = PMOBPService.getIPMOQueryService().queryByPk(vos[0].getParentVO().getCpmohid());
PMOItemVO[] olditems = aggvo.getChildrenVO();
List<PMOItemVO> tempitems = new ArrayList<PMOItemVO>();
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 = { aggvo };
GCBillTransferTool<PMOAggVO> transferTool = new GCBillTransferTool<PMOAggVO>(aggvos);
PMOAggVO[] originBills = (PMOAggVO[]) transferTool.getOriginBills();
GCBillUpdate<PMOAggVO> billupdate = new GCBillUpdate<PMOAggVO>();
PMOAggVO[] newaggvos = (PMOAggVO[]) billupdate.update(aggvos, originBills);
PMOItemVO[] totalitems = newaggvos[0].getChildrenVO();
Map<String, PMOItemVO> newitemMap = new HashMap<String, PMOItemVO>();
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);
PMOAggVO newaggvo = PMOBPService.getIPMOQueryService().queryByPk(vos[0].getParentVO().getCpmohid());
return new PMOAggVO[] { newaggvo };
} catch (Exception e) {
ExceptionUtils.wrappException(e);
return null;
}
}
private void addRowPutBeforeRule(CompareAroundProcesser<PMOAggVO> processer) {
MMVOSagaFrozenValidateRule mMVOSagaFrozenValidateRule = new MMVOSagaFrozenValidateRule(true);
processer.addBeforeRule(mMVOSagaFrozenValidateRule);
processer.addBeforeRule(
new PMOFilterBillStatusRule(PMOConstLang.getMSG_ACTION_NO_AUDIT(), PMOFBillstatusEnum.AUDIT));
processer.addBeforeRule(
new PMOFilterRowStatusRule(PMOConstLang.getMSG_RULE_NO_ROWDATA(), PMOFItemStatusEnum.AUDIT));
processer.addBeforeRule(new PMOCheckDeptNotNullRule());
processer.addBeforeRule(new PMOPutAutoAuditPickmRule());
processer.addBeforeRule(new PMOFillPutValueRule(false));
processer.addBeforeRule(new PMOFillBatchCodeRule());
processer.addBeforeRule(new putBeforeCheckRule());
}
private void addRowPutAfterRule(CompareAroundProcesser<PMOAggVO> processer) {
}
}

View File

@ -0,0 +1,111 @@
package nc.bs.mmpac.pmo.pac0002.bp.rule;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import nc.bs.framework.common.NCLocator;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.itf.uap.IUAPQueryBS;
import nc.itf.uif.pub.IUifService;
import nc.jdbc.framework.processor.ColumnProcessor;
import nc.jdbc.framework.processor.MapProcessor;
import nc.vo.ic.m4c.entity.SaleOutHeadVO;
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.pub.BusinessException;
import nc.vo.so.m30.entity.SaleOrderBVO;
//import nc.bs.rbac.bizlistener.BaseDocDataPermChangeEventListener;
//import nc.impl.mmpac.pmo.pac0002.PMOTransTypeQueryServiceImpl;
//import nc.impl.mmpac.bcrule.predata.BarCodeDataInitListener;
//import nc.ui.mmpub.setanalysis.action.SaAnalysisAction.actionPerformed;//流程生产订单齐套分析-分析
//import nc.impl.mmpub.setanalysis.SetAnalysisServiceImpl;
import nc.bs.mmpac.pmo.pac0002.bp.PMORowPutBP;
import nccloud.web.mmpac.pmo.action.PmoCardPutAction;
public class putBeforeCheckRule implements IRule<PMOAggVO> {
private static IUifService service = (IUifService) NCLocator.getInstance()
.lookup(IUifService.class.getName());
@Override
public void process(PMOAggVO[] vos) {
try {
// TODO Auto-generated method stub
List<SaleOrderBVO> list = new ArrayList<SaleOrderBVO>();
for (PMOAggVO vo : vos) {
//判断是否是需要控制的业务单元
PMOHeadVO pmoHeadVO = vo.getParentVO();
String pkstockorgStr = getPk_stockorg(pmoHeadVO.getPk_org());
if (pkstockorgStr == null || pkstockorgStr.equals("")) {
return;
}
PMOItemVO[] iSuperVOs = vo.getChildrenVO();
for (int i = 0; i < iSuperVOs.length; i++) {
PMOItemVO itemvo = iSuperVOs[i];
//判断是否类型是否为30
if (itemvo.getVsrctype() == null || !itemvo.getVsrctype().equals("30")) {
return;
}
Map<String, Object> valMap = getVbdef6(itemvo.getVsrcbid());
//销售发票表头pk_billtypecode=30-Cxx-12
if (valMap.get("pk_billtypecode").equals("30-Cxx-12")||valMap.get("pk_billtypecode").equals("30-Cxx-02")||valMap.get("pk_billtypecode").equals("30-Cxx-08")||valMap.get("pk_billtypecode").equals("30-Cxx-13")) {
return;
}
//历史数据不考虑
String storedDateStr = (String) valMap.get("creationtime");
String targetDateStr = "2024-12-31 00:00:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime storedDate = LocalDateTime.parse(storedDateStr, formatter);
LocalDateTime targetDate = LocalDateTime.parse(targetDateStr, formatter);
if (storedDate.isBefore(targetDate)) {
return;
}
String vdef4Str = itemvo.getVdef4();//齐套率
String vdef4 = (vdef4Str != null) ? vdef4Str.toString() : "";
double vdef4qty = (vdef4.isEmpty()) ? 0 : Double.parseDouble(vdef4);//齐套率
String vdef10Str = itemvo.getVdef10();//齐套率标准
String vdef10 = (vdef10Str != null) ? vdef10Str.toString() : "";
double vdef10qty = (vdef10.isEmpty()) ? 0 : Double.parseDouble(vdef10);//齐套率标准
if (vdef4qty < vdef10qty) {
throw new BusinessException(
"齐套率" + vdef4qty + "小于齐套率标准'" + vdef10qty + "',无法保存!");
}
}
}
} catch (BusinessException e) {
throw new RuntimeException(e);
}
}
private Map<String, Object> getVbdef6(String vsrcbidStr) throws BusinessException {
IUAPQueryBS queryBS = NCLocator.getInstance().lookup(IUAPQueryBS.class);
String sql = " SELECT bt.pk_billtypecode,s.creationtime,b.vbdef12,d.nastnum FROM so_saleorder_b b\n"
+ "INNER JOIN so_saleorder s ON s.csaleorderid = b.csaleorderid\n"
+ "left join (select mm_mo.Vsrcbid,sum(nastnum) as nastnum \n"
+ "from mm_mo\n"
+ "where mm_mo.dr=0\n"
+ "group by mm_mo.Vsrcbid) d on b.csaleorderbid=d.Vsrcbid\n"
+ "INNER JOIN bd_billtype bt on bt.pk_billtypeid=s.ctrantypeid\n"
+ "where b.csaleorderbid='" + vsrcbidStr + "' ";
Map<String, Object> valList = (Map<String, Object>) queryBS.executeQuery(sql, new MapProcessor());
return valList;
}
private String getPk_stockorg(String pk_stockorg) throws BusinessException {
String sql =
" select pk_stockorg from org_stockorg where code in ('C018','C029','C033','C039','C020','C019') and pk_stockorg='"
+ pk_stockorg + "' ";
String saleorderPK = (String) getQueryService().executeQuery(sql, new ColumnProcessor());
return saleorderPK;
}
public IUAPQueryBS getQueryService() {
return NCLocator.getInstance().lookup(IUAPQueryBS.class);
}
}