From 7123eadd821391cff5b285a08efb4832046eeb31 Mon Sep 17 00:00:00 2001 From: lihao Date: Mon, 19 Jan 2026 14:04:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../private/nc/bs/mmpac/wr/bp/WrInsertBP.java | 136 ++++++++++++++---- 1 file changed, 109 insertions(+), 27 deletions(-) diff --git a/mmpac/src/private/nc/bs/mmpac/wr/bp/WrInsertBP.java b/mmpac/src/private/nc/bs/mmpac/wr/bp/WrInsertBP.java index 55bb3266..3f07d2c1 100644 --- a/mmpac/src/private/nc/bs/mmpac/wr/bp/WrInsertBP.java +++ b/mmpac/src/private/nc/bs/mmpac/wr/bp/WrInsertBP.java @@ -1,12 +1,8 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by FernFlower decompiler) -// - package nc.bs.mmpac.wr.bp; import java.util.HashMap; import java.util.Map; + import nc.bs.mmpac.wr.plugin.WrPluginPoint; import nc.bs.mmpac.wr.rule.WrAuditAndApplyCheckRule; import nc.bs.mmpac.wr.rule.WrAuditAndProdInRule; @@ -14,6 +10,7 @@ import nc.bs.mmpac.wr.rule.WrCheckMaterialPermissionRule; import nc.bs.mmpac.wr.rule.WrCheckMoIsCloseRule; import nc.bs.mmpac.wr.rule.WrCheckTranstypeCodeRule; import nc.bs.mmpac.wr.rule.WrClearNullBodyRule; +//import nc.bs.mmpac.wr.rule.*; import nc.bs.mmpac.wr.rule.WrFillInsertDataRule; import nc.bs.mmpac.wr.rule.WrHeadNotNullRule; import nc.bs.mmpac.wr.rule.WrIsSaveAndApproveRule; @@ -40,6 +37,7 @@ import nc.bs.mmpac.wr.rule.serialno.WrSerialNoCheckCodeRepeat; import nc.bs.mmpac.wr.rule.serialno.WrSerialNoCheckRule; import nc.bs.mmpac.wr.rule.serialno.WrSerialNoSaveRule; import nc.bs.mmpac.wr.rule.serialno.WrSnSynToQualtiyRule; +import nc.bs.mmpac.wr.rule.setcheck.WrScIndependRule; import nc.bs.mmpub.rule.MMATOMaterialCheckRule; import nc.bs.mmpub.rule.MMAutoMaterialAssignRule; import nc.bs.pubapp.pub.rule.FieldLengthCheckRule; @@ -48,109 +46,173 @@ import nc.impl.pubapp.bd.material.assistant.MarAssistantSaveRule; import nc.impl.pubapp.bd.userdef.UserDefSaveRule; import nc.impl.pubapp.pattern.rule.IRule; import nc.impl.pubapp.pattern.rule.processer.AroundProcesser; +import nc.itf.org.IOrgConst; import nc.util.mmf.busi.rule.MMBillCodeCheckAndTrantypeRule; import nc.util.mmf.busi.rule.MMCheckMaterialVirtualRule; import nc.util.mmf.busi.rule.MMCreateBillcodeAndTrantypecodeRule; import nc.util.mmf.framework.gc.GCInsertBPTemplate; +import nc.vo.mmpac.pacpub.consts.MMPacBillTypeConstant; import nc.vo.mmpac.wr.entity.AggWrVO; import nc.vo.mmpac.wr.entity.WrItemVO; import nc.vo.mmpac.wr.entity.WrPickVO; import nc.vo.mmpac.wr.entity.WrQualityVO; import nc.vo.mmpac.wr.entity.WrVO; +import nc.vo.pub.BusinessException; +import nc.vo.pub.VOStatus; +/** 生产报告新增插入的BP */ public class WrInsertBP { private boolean isOnlyInsert = false; - public WrInsertBP() { - } - + /** + * 插入生产报告 + * + * @param vos 生产报告 + * @return AggWrVO 生产报告 + */ public AggWrVO[] insert(AggWrVO[] vos) { - GCInsertBPTemplate bp = new GCInsertBPTemplate(WrPluginPoint.INSERT); + // 创建新增数据模板BP + GCInsertBPTemplate bp = new GCInsertBPTemplate(WrPluginPoint.INSERT); AroundProcesser processor = bp.getAroundProcesser(); - Map vbatchsMap = new HashMap(); + Map vbatchsMap = new HashMap(); + // 注入新增前规则 this.addBeforeRule(processor, vos, vbatchsMap); + // 注入新增后规则 this.addAfterRule(processor, vbatchsMap); - return (AggWrVO[]) bp.insert(vos); + return bp.insert(vos); } + /** + * 新增前规则 + * + * @param vos + * @param processor + * @throws BusinessException + */ + @SuppressWarnings("unchecked") private void addBeforeRule(AroundProcesser processer, AggWrVO[] vos, Map vbatchsMap) { + // 生产报告空数据检查规则 IRule wrNullRule = new WrNullRule(); processer.addBeforeRule(wrNullRule); - IRule mmatoMaterialCheckRule = new MMATOMaterialCheckRule((String) null, "cbmaterialvid", "cbffileid"); + // 产品为ATO选配件,验证子项配置码是否为空 + IRule mmatoMaterialCheckRule = new MMATOMaterialCheckRule(null, WrItemVO.CBMATERIALVID,WrItemVO.CBFFILEID); processer.addBeforeRule(mmatoMaterialCheckRule); - IRule orgRule = new OrgDisabledCheckRule("pk_org", "FACTORYTYPE000000000"); + // 组织是否启动规则 + IRule orgRule = new OrgDisabledCheckRule(WrVO.PK_ORG, IOrgConst.FACTORYTYPE); processer.addBeforeRule(orgRule); + @SuppressWarnings("rawtypes") IRule checkDefRule = new UserDefSaveRule(new String[] { "vdef", "vbdef", "vgdef", "vpdef" }, new Class[] { WrVO.class, WrItemVO.class, WrQualityVO.class, WrPickVO.class }); processer.addBeforeRule(checkDefRule); - MarAssistantSaveRule marRule = new MarAssistantSaveRule(); + // 自由辅助属性检查的规则 + MarAssistantSaveRule marRule = new MarAssistantSaveRule(); processer.addBeforeRule(marRule); + // 补充默认值规则 重写平台方法,去掉制单人赋值 IRule fillInsertDataRule = new WrFillInsertDataRule(); processer.addBeforeRule(fillInsertDataRule); - IRule autoMaterialAssignRule = new MMAutoMaterialAssignRule((String) null, "cbmaterialvid", - new String[] { "pk_org" }, (String[]) null); + // 物料自动分配 + IRule autoMaterialAssignRule = new MMAutoMaterialAssignRule(null, WrItemVO.CBMATERIALVID, + new String[] { WrVO.PK_ORG }, null); processer.addBeforeFinalRule(autoMaterialAssignRule); + // 物料分配到主组织检查规则 IRule orgPermissionRule = new WrCheckMaterialPermissionRule(); processer.addBeforeRule(orgPermissionRule); + // 订单是否关闭的rule IRule moCloseRule = new WrCheckMoIsCloseRule(); processer.addBeforeRule(moCloseRule); - processer.addBeforeRule(new MMCheckMaterialVirtualRule(WrItemVO.class)); + // 检查产出子表的物料是否是虚项 + processer.addBeforeRule(new MMCheckMaterialVirtualRule(WrItemVO.class)); + // 补充生产报告新增数据默认值规则 IRule wrSetDefaultValueWhenInsertRule = new WrSetDefaultValueWhenInsertRule(); processer.addBeforeRule(wrSetDefaultValueWhenInsertRule); + // 补全生产报告产出子表数据默认值规则 IRule wrSetItemDefaultValueRule = new WrSetItemDefaultValueRule(); processer.addBeforeRule(wrSetItemDefaultValueRule); - IRule billcodeRule = new MMCreateBillcodeAndTrantypecodeRule("55A4", "vbillcode", "pk_group", "pk_org", - "vtrantypecode"); + // 创建单据号规则 + IRule billcodeRule = new MMCreateBillcodeAndTrantypecodeRule(MMPacBillTypeConstant.WR, WrVO.VBILLCODE, + WrVO.PK_GROUP, WrVO.PK_ORG, WrVO.VTRANTYPECODE); processer.addBeforeRule(billcodeRule); + // 生产报告表头空数据检查规则 IRule wrHeadNotNullRule = new WrHeadNotNullRule(); processer.addBeforeRule(wrHeadNotNullRule); + // 补生产批次号规则 IRule wrBatchCodeRule = new WrCreateBatchCodeRule(); processer.addBeforeRule(wrBatchCodeRule); + // 清除产出子表空行规则 IRule wrClearNullProductBodyRule = new WrClearNullBodyRule(); processer.addBeforeRule(wrClearNullProductBodyRule); + // 检查行号重复规则 processer.addBeforeRule(new WrRowNoRule()); + // 清除质量等级孙表空行规则 IRule wrQualityFilterRule = new WrQualityFilterRule(); processer.addBeforeRule(wrQualityFilterRule); + // 清除材料消耗信息孙表空行规则 IRule wrPickFilterRule = new WrPickFilterRule(); processer.addBeforeRule(wrPickFilterRule); + // 生产报告产出页签空数据检查规则 IRule wrOutputNotNullRule = new WrOutputNotNullRule(); processer.addBeforeRule(wrOutputNotNullRule); + // 联副产品BOM检查规则 IRule wrNoneMainProductBomCheckRule = new WrNoneMainProductBomCheckRule(); processer.addBeforeRule(wrNoneMainProductBomCheckRule); + // 生产报告消耗页签空数据检查规则 IRule wrConsumeNotNullRule = new WrPickNotNullRule(); processer.addBeforeRule(wrConsumeNotNullRule); + // 单据字段长度检查规则 IRule lengthCheckRule = new FieldLengthCheckRule(); processer.addBeforeRule(lengthCheckRule); + // 生产报告创建库存批次号规则 IRule wrInsertAndDelInStockBatchCodeBeforeRule = new WrInsertAndDelInStockBatchCodeBeforeRule( vbatchsMap); processer.addBeforeRule(wrInsertAndDelInStockBatchCodeBeforeRule); + // 补全质量等级孙表信息 WrSetQualityVODefaultValueRule wrSetQualityVODefaultValueRule = new WrSetQualityVODefaultValueRule(); processer.addBeforeRule(wrSetQualityVODefaultValueRule); + // 校验序列号code+matvid是否重复 add by wangjwm processer.addBeforeRule(new WrSerialNoCheckCodeRepeat()); + // 申请序列号规则 add by wangjwm WrSerialNoAutoCreateBeforeRule wrAutoCreateSnBeforeRule = new WrSerialNoAutoCreateBeforeRule(); processer.addBeforeRule(wrAutoCreateSnBeforeRule); + // 序列号检查规则 add by wangjwm WrSerialNoCheckRule wrSnCheckRule = new WrSerialNoCheckRule(); processer.addBeforeRule(wrSnCheckRule); + // 序列号按照维度汇总生成质量孙表规则 WrSnSynToQualtiyRule synToQRule = new WrSnSynToQualtiyRule(); processer.addBeforeRule(synToQRule); + // 序列号回写订单序列号引用规则 WrMoSerialNoMarkIRule mosnMarkRule = new WrMoSerialNoMarkIRule(); processer.addBeforeRule(mosnMarkRule); + // 生成生产批次号与库存批次号对应关系 IRule wrCreateBatProdRule = new WrCreateBatProdRule(); processer.addBeforeRule(wrCreateBatProdRule); + // 由于保存单据总是存在交易类型总是存在55A9的错误,没有规律特在此调整! processer.addBeforeRule(new WrCheckTranstypeCodeRule()); + } + /** + * 新增后规则 + * + * @param processor + */ + @SuppressWarnings("unchecked") private void addAfterRule(AroundProcesser processor, Map vbatchsMap) { - IRule rule = new MMBillCodeCheckAndTrantypeRule("55A4", "vbillcode", "pk_group", "pk_org", - "vtrantypecode"); + // 保存单据号唯一性校验规则 + IRule rule = new MMBillCodeCheckAndTrantypeRule(MMPacBillTypeConstant.WR, WrVO.VBILLCODE, + WrVO.PK_GROUP, WrVO.PK_ORG, WrVO.VTRANTYPECODE); processor.addAfterRule(rule); + // 库存批次号保存后规则 IRule wrCreateInStockBatchCodeAfterRule = new WrInsertInStockBatchCodeAfterRule(vbatchsMap); processor.addAfterRule(wrCreateInStockBatchCodeAfterRule); + // 回写投放计划完工数量规则 processor.addAfterRule(new WrInsertRewriteWrNumForPutPlanRule()); - IRule wrMORewriteRule = new WrMORewriteRule(2); + // 回写生产订单完工数量规则 + IRule wrMORewriteRule = new WrMORewriteRule(VOStatus.NEW); processor.addAfterRule(wrMORewriteRule); - IRule moDiscadNumRewriteRule = new MoDiscadNumRewriteRule(2); + // 回写生产订单报废数量规则 + IRule moDiscadNumRewriteRule = new MoDiscadNumRewriteRule(VOStatus.NEW); processor.addAfterRule(moDiscadNumRewriteRule); + // 序列号保持规则 IRule snSaveRule = new WrSerialNoSaveRule(); processor.addAfterRule(snSaveRule); // /** 同步修改备料计划完成 */ @@ -158,27 +220,46 @@ public class WrInsertBP { // processor.addAfterRule(pickMFinishRule); // /** ******************** */ + // 根据交易类型对保存后数据进行审批处理 和需求确认,审批和保存放在一个事物里处理 if (!this.isOnlyInsert) { processor.addAfterRule(new WrIsSaveAndApproveRule()); } - + //根据生产报告交易类型 对需要报检的数据进行报检处理 processor.addAfterRule(new WrAuditAndApplyCheckRule()); + //根据生产报告交易类型 对需要自动入库的的数据进行入库处理 processor.addAfterRule(new WrAuditAndProdInRule()); + + /** start update by liuguang 20250120 YBP-S-492290 生产报告保存时校验完工齐套检查**/ + processor.addAfterRule(new WrScIndependRule()); + /** end update by liuguang 20250120 YBP-S-492290 生产报告保存时校验完工齐套检查**/ + } - /** @deprecated */ + /** + * @deprecated 该方法将在V631版本废弃掉 + * + * @return + */ @Deprecated protected IRule getMoRewriteRule() { return null; } - /** @deprecated */ + /** + * @deprecated 该方法将在V631版本废弃掉 + * + * @return + */ @Deprecated protected IRule getMoDiscadNumRewriteRule() { return null; } - /** @deprecated */ + /** + * @deprecated 该方法将在V631版本废弃掉 + * + * @return + */ @Deprecated protected IRule getAuditRule() { return null; @@ -191,4 +272,5 @@ public class WrInsertBP { public void setOnlyInsert(boolean isOnlyInsert) { this.isOnlyInsert = isOnlyInsert; } + }