From 0f5d8323cfb2eb60f7318973ad6ea2da57de3cf6 Mon Sep 17 00:00:00 2001 From: lihao Date: Thu, 27 Mar 2025 10:42:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A7=94=E5=A4=96=E8=AE=A2=E5=8D=95=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=A4=87=E6=96=99=E6=98=8E=E7=BB=86=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bs/mmpac/pickm/bp/PickmInsertForScBP.java | 182 ++++++++++++++++++ .../maintain/rule/SCOrderPushMoRule.java | 112 +++++++++++ 2 files changed, 294 insertions(+) create mode 100644 mmpac/src/private/nc/bs/mmpac/pickm/bp/PickmInsertForScBP.java create mode 100644 mmpac/src/private/nc/impl/sc/m61/action/maintain/rule/SCOrderPushMoRule.java diff --git a/mmpac/src/private/nc/bs/mmpac/pickm/bp/PickmInsertForScBP.java b/mmpac/src/private/nc/bs/mmpac/pickm/bp/PickmInsertForScBP.java new file mode 100644 index 0000000..9b082eb --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/pickm/bp/PickmInsertForScBP.java @@ -0,0 +1,182 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package nc.bs.mmpac.pickm.bp; + +import java.util.ArrayList; +import java.util.List; +import nc.bs.mmpac.pickm.plugin.PickmPluginPoint; +import nc.bs.mmpac.pickm.rule.PickmAutoApproveAfterSaveRule; +import nc.bs.mmpac.pickm.rule.PickmCheckItemMaterialPermissionRule; +import nc.bs.mmpac.pickm.rule.PickmCheckMaterialPermissionRule; +import nc.bs.mmpac.pickm.rule.PickmCheckSameStockRule; +import nc.bs.mmpac.pickm.rule.PickmCreateSubItemRule; +import nc.bs.mmpac.pickm.rule.PickmMakeDateRule; +import nc.bs.mmpac.pickm.rule.PickmRowNoRule; +import nc.bs.mmpac.pickm.rule.PickmSaveRule; +import nc.bs.mmpac.pickm.rule.ic.PickmATPCheckRule; +import nc.bs.mmpac.pickm.rule.ic.PickmAutoReserveRule; +import nc.bs.mmpac.pickm.rule.sc.PickmSetDeftValueForScRule; +import nc.bs.mmpac.pickm.rule.sc.PickmSetItemDeftValueForScRule; +import nc.bs.mmpub.rule.MMAutoMaterialAssignRule; +import nc.bs.pubapp.pub.rule.FieldLengthCheckRule; +import nc.bs.pubapp.pub.rule.OrgDisabledCheckRule; +import nc.bsutil.mmpac.pickm.PickmSagasUtil; +import nc.impl.pubapp.bd.userdef.UserDefSaveRule; +import nc.impl.pubapp.pattern.data.bill.template.BillInsertOperator; +import nc.impl.pubapp.pattern.data.bill.template.InsertBPTemplate; +import nc.impl.pubapp.pattern.data.bill.tool.BillTransferTool; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.impl.pubapp.pattern.rule.processer.AroundProcesser; +import nc.impl.pubapp.pattern.rule.template.IOperator; +import nc.util.mmf.busi.rule.MMBillCodeCheckAndTrantypeRule; +import nc.util.mmf.busi.rule.MMCreateBillcodeAndTrantypecodeRule; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.vo.mmpac.pickm.entity.AggPickmVO; +import nc.vo.mmpac.pickm.entity.PickmHeadVO; +import nc.vo.mmpac.pickm.entity.PickmItemVO; +import nc.vo.mmpac.pickm.enumeration.FsourcetypeEnum; + +public class PickmInsertForScBP { + public PickmInsertForScBP() { + } + + public void savePickmForSc(PickmHeadVO[] headVOs) { + if (!MMValueCheck.isEmpty(headVOs)) { + List aggPickmVOList = new ArrayList(); + AggPickmVO aggPickmVO = null; + + for(PickmHeadVO headVO : headVOs) { + headVO.setFsourcetype(FsourcetypeEnum.WWBILL_STATE.toInteger()); + aggPickmVO = new AggPickmVO(); + aggPickmVO.setParent(headVO); + aggPickmVOList.add(aggPickmVO); + } + + AggPickmVO[] retVOs = this.savePickmForSc((AggPickmVO[])aggPickmVOList.toArray(new AggPickmVO[0])); + IRule pickmAutoApproveRule = new PickmAutoApproveAfterSaveRule(); + pickmAutoApproveRule.process(retVOs); + } + } + + public void savePickmForSc2(AggPickmVO[] vos) { + if (!MMValueCheck.isEmpty(vos)) { + AggPickmVO[] retVOs = this.savePickmForSc(vos); + IRule pickmAutoApproveRule = new PickmAutoApproveAfterSaveRule(); + pickmAutoApproveRule.process(retVOs); + } + } + + private void addAfterRule(AroundProcesser processor) { + IRule billCodeCheckRule = new MMBillCodeCheckAndTrantypeRule("55A3", "vbillcode", "pk_group", "pk_org", "vbusitype"); + processor.addAfterRule(billCodeCheckRule); + IRule atpCheckRule = new PickmATPCheckRule(false, (AggPickmVO[])null); + processor.addAfterRule(atpCheckRule); + IRule autoReserveRule = new PickmAutoReserveRule(); + processor.addAfterRule(autoReserveRule); + } + + private void addBeforeRule(AroundProcesser processor) { + IRule orgRule = new OrgDisabledCheckRule("pk_org", "FACTORYTYPE000000000"); + processor.addBeforeRule(orgRule); + IRule getMakeDateRule = new PickmMakeDateRule(); + processor.addBeforeRule(getMakeDateRule); + IRule setForScRule = new PickmSetDeftValueForScRule(); + processor.addBeforeRule(setForScRule); + + IRule billcodeRule = new MMCreateBillcodeAndTrantypecodeRule("55A3", "vbillcode", "pk_group", "pk_org", "vbusitype"); + processor.addBeforeRule(billcodeRule); + IRule createSubItemRule = new PickmCreateSubItemRule(false); + processor.addBeforeRule(createSubItemRule); + IRule setItemForScRule = new PickmSetItemDeftValueForScRule(); + processor.addBeforeRule(setItemForScRule); + IRule sameRule = new PickmCheckSameStockRule(); + processor.addBeforeRule(sameRule); + + IRule checkSameRow = new PickmRowNoRule(); + processor.addBeforeRule(checkSameRow); + IRule lengthCheckRule = new FieldLengthCheckRule(); + processor.addBeforeRule(lengthCheckRule); + IRule autoHMaterialAssignRule = new MMAutoMaterialAssignRule("cmaterialvid", (String)null, new String[]{"pk_org"}, (String[])null); + processor.addBeforeFinalRule(autoHMaterialAssignRule); + IRule autobMaterialAssignRule = new MMAutoMaterialAssignRule((String)null, "cbmaterialvid", new String[]{"pk_org"}, new String[]{"cdeliverorgid", "csupplyorgid"}); + processor.addBeforeFinalRule(autobMaterialAssignRule); + IRule marperRule = new PickmCheckMaterialPermissionRule(); + processor.addBeforeRule(marperRule); + IRule bmarperRule = new PickmCheckItemMaterialPermissionRule(); + processor.addBeforeRule(bmarperRule); + IRule pickmSaveRule = new PickmSaveRule(); + processor.addBeforeRule(pickmSaveRule); + IRule atpCheckRule = new PickmATPCheckRule(true, (AggPickmVO[])null); + processor.addBeforeRule(atpCheckRule); + IRule userDefSaveRule = new UserDefSaveRule(new String[]{"vdef", "vbdef"}, new Class[]{PickmHeadVO.class, PickmItemVO.class}); + processor.addBeforeRule(userDefSaveRule); + } + + private AggPickmVO[] savePickmForSc(AggPickmVO[] vos) { + if (MMValueCheck.isEmpty(vos)) { + return null; + } else { + new BillTransferTool(vos); + InsertBPTemplate bp = new InsertBPTemplate(PickmPluginPoint.INSERTFORSC); + this.addBeforeRule(bp.getAroundProcesser()); + this.addAfterRule(bp.getAroundProcesser()); + bp.getAroundProcesser().before(vos); + IOperator operator = new BillInsertOperator(); + AggPickmVO[] aggvos = (AggPickmVO[])operator.operate(vos); + PickmSagasUtil.addSagaAndCompensate4Insert(aggvos); + bp.getAroundProcesser().after(aggvos); + return aggvos; + } + } + + public void savePickmForScSagasCheck(PickmHeadVO[] headVOs) { + if (!MMValueCheck.isEmpty(headVOs)) { + List aggPickmVOList = new ArrayList(); + AggPickmVO aggPickmVO = null; + + for(PickmHeadVO headVO : headVOs) { + headVO.setFsourcetype(FsourcetypeEnum.WWBILL_STATE.toInteger()); + aggPickmVO = new AggPickmVO(); + aggPickmVO.setParent(headVO); + aggPickmVOList.add(aggPickmVO); + } + + new BillTransferTool((AggPickmVO[])aggPickmVOList.toArray(new AggPickmVO[0])); + InsertBPTemplate bp = new InsertBPTemplate(PickmPluginPoint.INSERTFORSC); + this.addBeforeRuleSagasCheck(bp.getAroundProcesser()); + bp.getAroundProcesser().before((AggPickmVO[])aggPickmVOList.toArray(new AggPickmVO[0])); + } + } + + private void addBeforeRuleSagasCheck(AroundProcesser processor) { + IRule orgRule = new OrgDisabledCheckRule("pk_org", "FACTORYTYPE000000000"); + processor.addBeforeRule(orgRule); + IRule getMakeDateRule = new PickmMakeDateRule(); + processor.addBeforeRule(getMakeDateRule); + IRule setForScRule = new PickmSetDeftValueForScRule(); + processor.addBeforeRule(setForScRule); + IRule createSubItemRule = new PickmCreateSubItemRule(false); + processor.addBeforeRule(createSubItemRule); + IRule setItemForScRule = new PickmSetItemDeftValueForScRule(); + processor.addBeforeRule(setItemForScRule); + IRule sameRule = new PickmCheckSameStockRule(); + processor.addBeforeRule(sameRule); + IRule checkSameRow = new PickmRowNoRule(); + processor.addBeforeRule(checkSameRow); + IRule lengthCheckRule = new FieldLengthCheckRule(); + processor.addBeforeRule(lengthCheckRule); + IRule marperRule = new PickmCheckMaterialPermissionRule(); + processor.addBeforeRule(marperRule); + IRule bmarperRule = new PickmCheckItemMaterialPermissionRule(); + processor.addBeforeRule(bmarperRule); + IRule pickmSaveRule = new PickmSaveRule(); + processor.addBeforeRule(pickmSaveRule); + IRule atpCheckRule = new PickmATPCheckRule(true, (AggPickmVO[])null); + processor.addBeforeRule(atpCheckRule); + IRule userDefSaveRule = new UserDefSaveRule(new String[]{"vdef", "vbdef"}, new Class[]{PickmHeadVO.class, PickmItemVO.class}); + processor.addBeforeRule(userDefSaveRule); + } +} diff --git a/mmpac/src/private/nc/impl/sc/m61/action/maintain/rule/SCOrderPushMoRule.java b/mmpac/src/private/nc/impl/sc/m61/action/maintain/rule/SCOrderPushMoRule.java new file mode 100644 index 0000000..4ed86aa --- /dev/null +++ b/mmpac/src/private/nc/impl/sc/m61/action/maintain/rule/SCOrderPushMoRule.java @@ -0,0 +1,112 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package nc.impl.sc.m61.action.maintain.rule; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import nc.bs.mmpac.pickm.bp.PickmInsertForScBP; +import nc.bs.mmpac.pickm.rule.PickmAutoApproveAfterSaveRule; +import nc.impl.mmpac.pickm.PickmMaintainServiceImpl; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.itf.sc.m61.compenstate.IScOrderSagasCompensate; +import nc.itf.sc.reference.mm.PubMMPACService; +import nc.itf.scmpub.reference.uap.pf.PfServiceScmUtil; +import nc.vo.mmpac.pickm.entity.AggPickmVO; +import nc.vo.mmpac.pickm.entity.PickmHeadVO; +import nc.vo.pub.BusinessException; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nc.vo.sc.m61.entity.SCOrderItemVO; +import nc.vo.sc.m61.entity.SCOrderVO; +import nc.vo.scmpub.res.billtype.MMBillType; +import nc.vo.scmpub.res.billtype.SCBillType; +import nc.vo.scmpub.util.ArrayUtil; +import nccloud.commons.lang.ArrayUtils; +import nccloud.pubitf.sc.pub.util.ScSagasUtil; + +public class SCOrderPushMoRule implements IRule { + public SCOrderPushMoRule() { + } + + public void process(SCOrderVO[] vos) { + if (!ArrayUtils.isEmpty(vos)) { + try { + // 分组处理逻辑 + List specialList = new ArrayList<>(); + List normalList = new ArrayList<>(); + for (SCOrderVO vo : vos) { + // 假设通过 getBilltype() 获取单据类型,请根据实际字段调整 + if ("61-Cxx-01".equals(vo.getParentVO().getVtrantypecode()) ){ + specialList.add(vo); + } else { + normalList.add(vo); + } + } + + List headList = new ArrayList<>(); + // 特殊类型处理 + if (!specialList.isEmpty()) { + AggPickmVO[] specialPickVos = (AggPickmVO[]) PfServiceScmUtil.exeVOChangeByBillItfDef( + "61-Cxx-01", // 特殊类型编码 + MMBillType.PickMo.getCode(), + vos); + PickmMaintainServiceImpl pickmMaintainService = new PickmMaintainServiceImpl(); + pickmMaintainService.insert(specialPickVos); +// PickmInsertForScBP bp = new PickmInsertForScBP(); +// bp.savePickmForSc2((AggPickmVO[])specialPickVos); + } + + // 常规处理 + if (!normalList.isEmpty()) { + AggPickmVO[] normalPickVos = (AggPickmVO[]) PfServiceScmUtil.exeVOChangeByBillItfDef( + SCBillType.Order.getCode(), + MMBillType.PickMo.getCode(), + normalList.toArray(new SCOrderVO[0])); + for(AggPickmVO vo : normalPickVos) { + PickmHeadVO head = (PickmHeadVO)vo.getParent(); + headList.add(head); + } + } + if (headList.size() > 0) { + this.addSagaAndCompensate(vos); + PubMMPACService.pushMMPac((PickmHeadVO[])headList.toArray(new PickmHeadVO[headList.size()])); + } + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + + } + } + + private void addSagaAndCompensate(SCOrderVO[] vos) { + ScSagasUtil.frozenAndAddSaga(vos, "pickMo", SCBillType.Order.getCode()); + if (!ArrayUtil.isEmpty(vos)) { + Map map = new HashMap(); + map.put("opertaion", "pickMo"); + List bids = new ArrayList(); + + for(SCOrderVO scOrderVO : vos) { + SCOrderItemVO[] itemVOs = scOrderVO.getChildrenVO(); + + for(SCOrderItemVO bvo : itemVOs) { + bids.add(bvo.getPk_order_b()); + } + } + + map.put("pk_order_b", bids.toArray(new String[0])); + + try { + ScSagasUtil.compensate(IScOrderSagasCompensate.class, map); + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + } + + } +}