期初流程生产订单不填充序列号
This commit is contained in:
parent
e76a4f94f4
commit
ffd6b82aed
|
|
@ -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<PMOAggVO> {
|
||||||
|
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<PMOMaterlKey> materlKeys = new ArrayList();
|
||||||
|
|
||||||
|
for(PMOItemVO itemvo : aggvo.getChildrenVO()) {
|
||||||
|
PMOMaterlKey materlKey = new PMOMaterlKey(itemvo.getPk_org(), itemvo.getCmaterialvid());
|
||||||
|
materlKeys.add(materlKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<PMOMaterlKey, Boolean> isSnMap = PMOMaterlAdapter.queryMaterlIsSN(materlKeys);
|
||||||
|
Map<PMOMaterlKey, String> snUnitMap = PMOMaterlAdapter.queryMaterSNUnit(materlKeys);
|
||||||
|
List<ISnGenerateParam> 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<SnDocParam> 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<String, SerialNoVO> 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<ISnGenerateParam> 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<ISnGenerateParam> genParams, PMOItemVO itemvo, Map<PMOMaterlKey, Boolean> isSnMap, Map<PMOMaterlKey, String> 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<ISnGenerateParam> 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<PMOMaterlKey, String> snUnitMap) {
|
||||||
|
PMOHeadVO headVO = aggvo.getParentVO();
|
||||||
|
String pkOrg = headVO.getPk_org();
|
||||||
|
if (MMValueCheck.isNotEmpty(pkOrg)) {
|
||||||
|
// 交易类型编码
|
||||||
|
String vtrantypecode = headVO.getVtrantypecode();
|
||||||
|
Set<String> 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<PMOSerialNoVO> 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()]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue