diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/rule/fill/PMOFillSNPkAndCodeRule.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/rule/fill/PMOFillSNPkAndCodeRule.java new file mode 100644 index 00000000..11a40453 --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/rule/fill/PMOFillSNPkAndCodeRule.java @@ -0,0 +1,251 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package nc.bs.mmpac.pmo.pac0002.rule.fill; + +import java.util.*; + +import nc.bs.framework.common.NCLocator; +import nc.bs.mmpac.pmo.pac0002.bp.service.PMOSNServiceAdapter; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.pubitf.mmpac.pmo.adapter.PMOMaterlAdapter; +import nc.pubitf.sn.doc.ISnService; +import nc.pubitf.sn.doc.param.ISnDocParam; +import nc.pubitf.sn.doc.param.ISnPkandCodeParam; +import nc.pubitf.sn.doc.param.ISnResult; +import nc.pubitf.sn.doc.param.SnDocParam; +import nc.pubitf.sn.para.SnParasQuery; +import nc.pubitf.sn.snrule.param.ISnGenerateParam; +import nc.pubitf.sn.snrule.param.SnGenerateParam; +import nc.util.mmf.framework.base.MMArrayUtil; +import nc.util.mmf.framework.base.MMValueCheck; +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.mmpac.pmo.pac0002.entity.PMOSerialNoVO; +import nc.vo.mmpac.pmo.pac0002.enumeration.PMOSnsrcEnum; +import nc.vo.mmpac.pmo.pac0002.util.PMOModuleUtil; +import nc.vo.mmpac.pmo.pac0002.util.PMOSNUtil; +import nc.vo.mmpac.pmo.parameter.PMOMaterlKey; +import nc.vo.pub.BusinessException; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nc.vo.sn.doc.entity.SerialNoVO; + +public class PMOFillSNPkAndCodeRule implements IRule { + public PMOFillSNPkAndCodeRule() { + } + + public void process(PMOAggVO[] vos) { + if (!MMValueCheck.isEmpty(vos)) { + if (PMOModuleUtil.isSNEnabled()) { + for(PMOAggVO aggvo : vos) { + if (!MMValueCheck.isEmpty(aggvo.getChildrenVO())) { + boolean existsSn = this.isExistSn(aggvo); + boolean is55A2 = SnParasQuery.querySN001(aggvo.getParentVO().getPk_org(), "55A2"); + if (is55A2 || existsSn) { + List materlKeys = new ArrayList(); + + for(PMOItemVO itemvo : aggvo.getChildrenVO()) { + PMOMaterlKey materlKey = new PMOMaterlKey(itemvo.getPk_org(), itemvo.getCmaterialvid()); + materlKeys.add(materlKey); + } + + Map isSnMap = PMOMaterlAdapter.queryMaterlIsSN(materlKeys); + Map snUnitMap = PMOMaterlAdapter.queryMaterSNUnit(materlKeys); + List genParams = new ArrayList(); + + for(PMOItemVO itemvo : aggvo.getChildrenVO()) { + if (MMValueCheck.isNotEmpty(itemvo.getSerialnos())) { + this.constructSnGenPkParam(genParams, itemvo); + } else if (is55A2) { + this.autoGenPKandCode(genParams, itemvo, isSnMap, snUnitMap); + } + } + + if (genParams.size() == 0) { + return; + } + + ISnResult serialnos = PMOSNServiceAdapter.createSerialnos((ISnGenerateParam[])genParams.toArray(new ISnGenerateParam[genParams.size()])); + this.fillPMOGrandSNVoValues(aggvo, serialnos, snUnitMap); + this.fillTS4UpdateSN(aggvo); + } + } + } + + } + } + } + + private void fillTS4UpdateSN(PMOAggVO aggvo) { + List paramList = new ArrayList(); + + for(PMOItemVO itemvo : aggvo.getChildrenVO()) { + if (MMValueCheck.isNotEmpty(itemvo.getSerialnos())) { + for(PMOSerialNoVO snvo : itemvo.getSerialnos()) { + SnDocParam para = new SnDocParam(); + para.setCmaterialvid(itemvo.getCmaterialvid()); + para.setCmaterialoid(itemvo.getCmaterialid()); + para.setVcode(snvo.getVsncode()); + paramList.add(para); + } + } + } + + try { + SerialNoVO[] rets = ((ISnService)NCLocator.getInstance().lookup(ISnService.class)).querySerialnos((ISnDocParam[])paramList.toArray(new SnDocParam[0]), new String[]{"vcode", "pk_serialno", "cmaterialoid", "cmaterialvid", "ts"}); + if (MMArrayUtil.isNotEmpty(rets)) { + Map key2id = new HashMap(); + + for(SerialNoVO ret : rets) { + key2id.put(ret.getCmaterialvid() + ret.getVcode(), ret); + } + + for(PMOItemVO itemvo : aggvo.getChildrenVO()) { + if (MMValueCheck.isNotEmpty(itemvo.getSerialnos())) { + for(PMOSerialNoVO pmosnvo : itemvo.getSerialnos()) { + if (MMValueCheck.isNotEmpty(pmosnvo.getVsncode())) { + String var10001 = itemvo.getCmaterialvid(); + SerialNoVO snvo = (SerialNoVO)key2id.get(var10001 + pmosnvo.getVsncode()); + if (MMValueCheck.isNotEmpty(snvo)) { + pmosnvo.setVsrcts(snvo.getTs()); + } + } + } + } + } + } + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + + } + + private void constructSnGenPkParam(List genParams, PMOItemVO itemvo) { + for(PMOSerialNoVO snvo : itemvo.getSerialnos()) { + if ((MMValueCheck.isEmpty(snvo.getFsnsrc()) || PMOSnsrcEnum.SNREF.toIntValue() != snvo.getFsnsrc()) && (snvo.getStatus() == 2 || snvo.getStatus() == 1)) { + snvo.setCserialnoid((String)null); + } + + if (!MMValueCheck.isNotEmpty(snvo.getCserialnoid())) { + SnGenerateParam param = new SnGenerateParam(); + String var10001 = itemvo.getCmoid(); + param.setKey(var10001 + snvo.getVsncode()); + param.setSncode(new String[]{snvo.getVsncode()}); + param.setCreateSnNum(1); + param.setPk_storeorg(itemvo.getPk_org()); + param.setPk_storeorg_v(itemvo.getPk_org_v()); + param.setPk_materialvid(itemvo.getCmaterialvid()); + param.setPk_materialOID(itemvo.getCmaterialid()); + param.setProductdate(itemvo.getTplanstarttime().getDate()); + param.setVprodbatchcode(itemvo.getVbatchcode()); + param.setPk_bd_wk(itemvo.getCwkid()); + param.setPk_shift(itemvo.getCclassid()); + param.setPk_team(itemvo.getCteamid()); + param.setBillType("55A2"); + genParams.add(param); + } + } + + } + + private boolean isExistSn(PMOAggVO aggvo) { + boolean existsSn = false; + + for(PMOItemVO itemvo : aggvo.getChildrenVO()) { + if (MMValueCheck.isNotEmpty(itemvo.getSerialnos())) { + existsSn = true; + break; + } + } + + return existsSn; + } + + private void autoGenPKandCode(List genParams, PMOItemVO itemvo, Map isSnMap, Map snUnitMap) { + PMOMaterlKey materlKey = new PMOMaterlKey(itemvo.getPk_org(), itemvo.getCmaterialvid()); + Boolean isSN = (Boolean)isSnMap.get(materlKey); + if (!MMValueCheck.isEmpty(isSN) && isSN) { + this.constructSnGenPkAndCodeParam(genParams, itemvo, (String)snUnitMap.get(materlKey)); + } + } + + private void constructSnGenPkAndCodeParam(List genParams, PMOItemVO itemvo, String snunit) { + SnGenerateParam param = new SnGenerateParam(); + param.setKey(itemvo.getCmoid()); + if (snunit.equalsIgnoreCase(itemvo.getCunitid())) { + double num = itemvo.getNmmnum().toDouble(); + param.setCreateSnNum((int)num); + } + + if (snunit.equalsIgnoreCase(itemvo.getCastunitid())) { + double astnum = itemvo.getNmmastnum().toDouble(); + param.setCreateSnNum((int)astnum); + } + + param.setPk_storeorg(itemvo.getPk_org()); + param.setPk_storeorg_v(itemvo.getPk_org_v()); + param.setPk_materialvid(itemvo.getCmaterialvid()); + param.setPk_materialOID(itemvo.getCmaterialid()); + param.setProductdate(itemvo.getTplanstarttime().getDate()); + param.setVprodbatchcode(itemvo.getVbatchcode()); + param.setPk_bd_wk(itemvo.getCwkid()); + param.setPk_shift(itemvo.getCclassid()); + param.setPk_team(itemvo.getCteamid()); + param.setBillType("55A2"); + genParams.add(param); + } + + private void fillPMOGrandSNVoValues(PMOAggVO aggvo, ISnResult serialnos, Map snUnitMap) { + PMOHeadVO headVO = aggvo.getParentVO(); + String pkOrg = headVO.getPk_org(); + if (MMValueCheck.isNotEmpty(pkOrg)) { + // 交易类型编码 + String vtrantypecode = headVO.getVtrantypecode(); + Set billTypeCodes = Set.of( + "55A2-Cxx-01", "55A2-Cxx-18" + ); + // 电力电子集团下的-期初订单不填充序列号 + if (billTypeCodes.contains(vtrantypecode)) { + return; + } + } + for(PMOItemVO itemvo : aggvo.getChildrenVO()) { + if (MMValueCheck.isNotEmpty(itemvo.getSerialnos())) { + for(PMOSerialNoVO snvo : itemvo.getSerialnos()) { + if (!MMValueCheck.isNotEmpty(snvo.getCserialnoid())) { + String var10000 = itemvo.getCmoid(); + String key = var10000 + snvo.getVsncode(); + ISnPkandCodeParam[] rets = serialnos.getSnbyKey(key); + snvo.setCserialnoid(rets[0].getPk_sndoc()); + snvo.setFsnsrc(PMOSnsrcEnum.MANUAL.toIntValue()); + snvo.setCmoid(itemvo.getCmoid()); + PMOSNUtil.fillSnVOValues(itemvo, snvo, snUnitMap); + } + } + } else { + String key = itemvo.getCmoid(); + ISnPkandCodeParam[] rets = serialnos.getSnbyKey(key); + if (!MMValueCheck.isEmpty(rets)) { + List snvoList = new ArrayList(); + + for(ISnPkandCodeParam ret : rets) { + PMOSerialNoVO snvo = new PMOSerialNoVO(); + snvo.setCserialnoid(ret.getPk_sndoc()); + snvo.setVsncode(ret.getSncode()); + snvo.setFsnsrc(PMOSnsrcEnum.SNRULE.toIntValue()); + snvo.setCmoid(itemvo.getCmoid()); + snvo.setStatus(2); + PMOSNUtil.fillSnVOValues(itemvo, snvo, snUnitMap); + snvoList.add(snvo); + } + + itemvo.setSerialnos((PMOSerialNoVO[])snvoList.toArray(new PMOSerialNoVO[snvoList.size()])); + } + } + } + + } +}