精密铸造-流程生产订单变更校验计划投入数量

This commit is contained in:
mzr 2025-10-20 19:36:08 +08:00
parent e6448ffbfd
commit 393be18782
2 changed files with 307 additions and 229 deletions

View File

@ -1,57 +1,15 @@
package nc.bs.mmpac.pmo.pac0002.bp; package nc.bs.mmpac.pmo.pac0002.bp;
import java.util.ArrayList; import nc.bs.mmpac.pmo.pac0002.bp.rule.*;
import java.util.List;
import nc.bs.mmpac.pmo.pac0002.bp.rule.AfterApproveSyncEpicMesRule;
import nc.bs.mmpac.pmo.pac0002.bp.rule.AfterApprovingSynchronizeRuleRZ;
import nc.bs.mmpac.pmo.pac0002.bp.rule.AfterPmoSyncJmQMSRule;
import nc.bs.mmpac.pmo.pac0002.pluginpoint.PMOPluginPoint; import nc.bs.mmpac.pmo.pac0002.pluginpoint.PMOPluginPoint;
import nc.bs.mmpac.pmo.pac0002.rule.PMOATPUpdateRule; import nc.bs.mmpac.pmo.pac0002.rule.*;
import nc.bs.mmpac.pmo.pac0002.rule.PMOAdjustReserveRule; import nc.bs.mmpac.pmo.pac0002.rule.check.*;
import nc.bs.mmpac.pmo.pac0002.rule.PMOBatchCodeEditRule;
import nc.bs.mmpac.pmo.pac0002.rule.PMOBatchCodeEditSynPickmRule;
import nc.bs.mmpac.pmo.pac0002.rule.PMOCffileidInserAndUpdatetRule;
import nc.bs.mmpac.pmo.pac0002.rule.PMOCreateVersionRule;
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.PMOUpdatePickmRule;
import nc.bs.mmpac.pmo.pac0002.rule.PMOUpdateSaveApproveRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckApproveOperTypeRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckDateLogicRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckDispatchNumRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckOutputNumRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckPlanDateTimeRule;
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.PMOCheckProcedureNotNullRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckProdurepointRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckPutNumRule;
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.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.PMOFillBatchCodeRule;
import nc.bs.mmpac.pmo.pac0002.rule.fill.PMOFillInsertPlanTimeByProcedureRule; 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.PMOFillSNPkAndCodeRule;
import nc.bs.mmpac.pmo.pac0002.rule.grand.PMOIsCreatPlanOutputRule; import nc.bs.mmpac.pmo.pac0002.rule.grand.PMOIsCreatPlanOutputRule;
import nc.bs.mmpac.pmo.pac0002.rule.grand.PMORecalProcedureRule; import nc.bs.mmpac.pmo.pac0002.rule.grand.PMORecalProcedureRule;
import nc.bs.mmpac.pmo.pac0002.rule.rewrite.RewriteUpdateNum4INVP; import nc.bs.mmpac.pmo.pac0002.rule.rewrite.*;
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.MMVOSagaFrozenValidateRule; import nc.bs.mmpub.rule.MMVOSagaFrozenValidateRule;
import nc.bs.pubapp.pub.rule.BillCodeCheckRule; import nc.bs.pubapp.pub.rule.BillCodeCheckRule;
import nc.impl.pubapp.pattern.rule.ICompareRule; import nc.impl.pubapp.pattern.rule.ICompareRule;
@ -65,12 +23,15 @@ import nc.vo.mmpac.pmo.pac0002.entity.PMOHeadVO;
import nc.vo.mmpac.pmo.pac0002.util.PmoSagaUtil; import nc.vo.mmpac.pmo.pac0002.util.PmoSagaUtil;
import nc.vo.pub.VOStatus; import nc.vo.pub.VOStatus;
import java.util.ArrayList;
import java.util.List;
/** /**
* 订单变更业务处理<br> * 订单变更业务处理<br>
* *
* @since 6.31
* @version 2013-6-18 上午11:33:58
* @author wanghjd * @author wanghjd
* @version 2013-6-18 上午11:33:58
* @since 6.31
*/ */
public class PMOAdjustBP { public class PMOAdjustBP {
@ -233,6 +194,7 @@ public class PMOAdjustBP {
// V65 // V65
ICompareRule<PMOAggVO> snSyncRule = new PMOSyncSNWhenUpdateRule(); ICompareRule<PMOAggVO> snSyncRule = new PMOSyncSNWhenUpdateRule();
processer.addBeforeRule(snSyncRule); processer.addBeforeRule(snSyncRule);
processer.addBeforeRule(new CheckPmoPlanNumJMRule());
} }
@ -250,11 +212,15 @@ public class PMOAdjustBP {
IRule<PMOAggVO> saveapproverule = new PMOUpdateSaveApproveRule(); IRule<PMOAggVO> saveapproverule = new PMOUpdateSaveApproveRule();
processer.addAfterRule(saveapproverule); processer.addAfterRule(saveapproverule);
//变更推送生产订单至锐制MES // 变更推送生产订单至锐制MES
IRule<PMOAggVO> pushRZRule = new AfterApprovingSynchronizeRuleRZ(Boolean.FALSE); IRule<PMOAggVO> pushRZRule = new AfterApprovingSynchronizeRuleRZ(Boolean.FALSE);
processer.addAfterFinalRule(pushRZRule); processer.addAfterFinalRule(pushRZRule);
// 变更后推送流程生产订单到艾普MES // 变更后推送流程生产订单到艾普MES
processer.addAfterRule(new AfterApproveSyncEpicMesRule()); processer.addAfterRule(new AfterApproveSyncEpicMesRule());
ICompareRule<PMOAggVO> planStartTimeChangeRule = new AfterPlanStartTimeChangeRule();// sunfj2025.09.26
processer.addAfterRule(planStartTimeChangeRule);
// 变更后推送流程生产订单到启源(精密铸造) // 变更后推送流程生产订单到启源(精密铸造)
processer.addAfterRule(new AfterPmoSyncJmQMSRule()); processer.addAfterRule(new AfterPmoSyncJmQMSRule());
} }

View File

@ -0,0 +1,112 @@
package nc.bs.mmpac.pmo.pac0002.bp.rule;
import nc.bs.framework.common.NCLocator;
import nc.bs.logging.Log;
import nc.bs.uapbd.util.MyHelper;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.pubitf.mmpac.pickm.mo.IPickmQueryServiceForMO;
import nc.pubitf.para.SysInitQuery;
import nc.vo.am.common.util.StringUtils;
import nc.vo.mmpac.pickm.entity.AggPickmVO;
import nc.vo.mmpac.pickm.entity.PickmItemVO;
import nc.vo.mmpac.pickm.param.PickmTransParam;
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.pub.lang.UFDouble;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.pubapp.pattern.pub.MathTool;
import java.util.Map;
/**
* 精密铸造-流程生产订单变更校验计划投入数量
*
* @author mzr
* @date 2025/10/20
*/
public class CheckPmoPlanNumJMRule 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 + "'");
// 获取组织参数判断是否开启校验
String isCheck = SysInitQuery.getParaString(pkOrg, "MM_Biangeng001");
if (!"Y".equals(isCheck)) {
continue;
}
// 只有精密公司才校验
if (checkIfOrg(orgCode, configParams)) {
continue;
}
PMOItemVO[] pmoItemVOS = vo.getChildrenVO();
if (pmoItemVOS != null) {
// 如果流程生产订单明细存在下游的备料计划判断变更的计划投入数量是否小于流程备料计划的子表的领料套数(如果有多行用最大值比较)
for (PMOItemVO pmoItemVO : pmoItemVOS) {
String cmoid = pmoItemVO.getCmoid();
// 计划投入主数量
UFDouble nplanputnum = pmoItemVO.getNplanputnum();
if (nplanputnum == null) {
continue;
}
// 根据流程生产订单明细id查询备料计划
PickmTransParam param = new PickmTransParam();
param.setSourceBillRowID(cmoid);
IPickmQueryServiceForMO pickmQueryServiceForMO = NCLocator.getInstance().lookup(IPickmQueryServiceForMO.class);
AggPickmVO[] pickmVOS = pickmQueryServiceForMO.queryPickmByMO(new PickmTransParam[]{param});
if (pickmVOS != null) {
// 获取最大的成套套数
UFDouble maxNum = UFDouble.ZERO_DBL;
for (AggPickmVO pickmVO : pickmVOS) {
PickmItemVO[] pickmItemVOS = (PickmItemVO[]) pickmVO.getChildren(PickmItemVO.class);
for (PickmItemVO pickmItemVO : pickmItemVOS) {
// 成套套数
UFDouble nbsetpartsnum = pickmItemVO.getNbsetpartsnum();
if (nbsetpartsnum != null && (MathTool.compareTo(nbsetpartsnum, maxNum) > 0)) {
maxNum = nbsetpartsnum;
}
}
}
if (MathTool.compareTo(nplanputnum, maxNum) < 0) {
ExceptionUtils.wrappBusinessException("变更后计划投入数量不能小于备料计划上的累计领料套数");
}
}
}
}
}
} catch (BusinessException e) {
logger.error("CheckPmoPlanNumJMRule-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;
}
}