diff --git a/ic/src/public/nccloud/openapi/ic/m4c/SaleOutResource.java b/ic/src/public/nccloud/openapi/ic/m4c/SaleOutResource.java index 6fe0a32..7ebf9c5 100644 --- a/ic/src/public/nccloud/openapi/ic/m4c/SaleOutResource.java +++ b/ic/src/public/nccloud/openapi/ic/m4c/SaleOutResource.java @@ -134,7 +134,7 @@ public class SaleOutResource extends NCCPubRestResource { paramMapList.add(paramMap); //锐制需要修改保存时走签字 String userCode = InvocationInfoProxy.getInstance().getUserCode(); - if("gaoning".equals(userCode)){ + if("rzmes".equals(userCode)){ // 修改并签字--事务一致 SaleOutVO[] signVOs =NCLocator.getInstance().lookup(IAPISaleOutMaintain.class).updateAndSign(paramMapList); diff --git a/mmpac/src/private/nc/bs/mmpac/wr/bp/WrAutoProdInFilterBP.java b/mmpac/src/private/nc/bs/mmpac/wr/bp/WrAutoProdInFilterBP.java new file mode 100644 index 0000000..95d9f8f --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/wr/bp/WrAutoProdInFilterBP.java @@ -0,0 +1,159 @@ +package nc.bs.mmpac.wr.bp; + +//import java.util.*; +import java.util.List; +import java.util.Map; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Arrays; + +import nc.bs.framework.common.InvocationInfoProxy; +import nc.bs.mmpac.wr.rule.prodin.WrProdInSetInStockOrgRule; +import nc.bs.mmpac.wr.rule.prodin.WrProdInSetWarehouseRule; +import nc.bs.uif2.validation.ValidationException; +import nc.bs.uif2.validation.ValidationFailure; +import nc.impl.pubapp.pattern.data.vo.VOQuery; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.util.mmf.framework.base.MMNumberUtil; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.vo.mmpac.wr.consts.WrptLangConst; +import nc.vo.mmpac.wr.entity.AggWrVO; +import nc.vo.mmpac.wr.entity.WrItemVO; +import nc.vo.mmpac.wr.entity.WrQualityVO; +import nc.vo.mmpac.wr.entity.WrTransTypeVO; +import nc.vo.mmpac.wr.enumeration.WrBillStatusEnum; +import nc.vo.mmpac.wr.enumeration.WrQualityProcessMethodEnum; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nc.vo.pubapp.pattern.pub.SqlBuilder; + +public class WrAutoProdInFilterBP { + + + public AggWrVO[] filter(AggWrVO[] aggWrVOs) { + // 过滤交易类型是否勾选了自动入库 + List transIDs = new ArrayList(); + for (AggWrVO aggvo : aggWrVOs) { + if (!WrBillStatusEnum.COMMITE.equalsValue(aggvo.getParentVO().getFbillstatus())) { + continue; + } + if (MMValueCheck.isEmpty(transIDs) || !transIDs.contains(aggvo.getParentVO().getVtrantypeid())) { + transIDs.add(aggvo.getParentVO().getVtrantypeid()); + } + } + Map isAutoInMap = this.getIsAutoProdIn(transIDs); + if (MMValueCheck.isEmpty(isAutoInMap)) { + return null; + } + // 入库过滤规则 + List inVOs = new ArrayList(); + for (AggWrVO aggvo : aggWrVOs) { + //审批通过 + if (!WrBillStatusEnum.COMMITE.equalsValue(aggvo.getParentVO().getFbillstatus())) { + continue; + } + //交易类型:自动入库 + String transID = aggvo.getParentVO().getVtrantypeid(); + if (!isAutoInMap.containsKey(transID) ||! MMValueCheck.isTrue(isAutoInMap.get(transID))) { + continue; + } + //过滤类型为合格入库的 + if(MMValueCheck.isEmpty(aggvo.getChildrenVO())) { + continue; + } + List initems=new ArrayList(); + for(WrItemVO item:aggvo.getChildrenVO()) { + if(MMValueCheck.isEmpty(item.getQualityvos())){ + continue; + } + List inqvos=new ArrayList(); + for(WrQualityVO qvo:item.getQualityvos()) { + if(WrQualityProcessMethodEnum.PRODIN.equalsValue( qvo.getFgprocessmethod())&&MMNumberUtil.isGtZero(qvo.getNgnum())) { + WrQualityVO inqvo=(WrQualityVO)qvo.clone(); + inqvo.setNgtoinnum(inqvo.getNgnum()); + inqvo.setNgtoinastnum(inqvo.getNgastnum()); + inqvos.add(inqvo); + } + } + if(MMValueCheck.isEmpty(inqvos)) { + continue; + } + WrItemVO initem=(WrItemVO)item.clone(); + initem.setQualityvos(inqvos.toArray(new WrQualityVO[0])); + initems.add(initem); + } + if(MMValueCheck.isEmpty(initems)) { + continue; + } + AggWrVO agg=(AggWrVO)aggvo.clone(); + agg.setChildren(WrItemVO.class, initems.toArray(new WrItemVO[0])); + inVOs.add(agg); + + } + if (MMValueCheck.isEmpty(inVOs)) { + return null; + } + AggWrVO[] filterVOs = inVOs.toArray(new AggWrVO[0]); + // 设置库存组织和仓库 + IRule wrProdInSetInStockOrgRule = new WrProdInSetInStockOrgRule(); + wrProdInSetInStockOrgRule.process(filterVOs); + //2025年5月30日08点45分 --外部系统推送接口时填了仓库,此处不清空 + String userCode = InvocationInfoProxy.getInstance().getUserCode(); + if("rzmes".equals(userCode)||"MES".equals(userCode)){ + + }else{ + // 设置入库仓库规则 + IRule wrProdInSetWarehouseRule = new WrProdInSetWarehouseRule(); + wrProdInSetWarehouseRule.process(filterVOs); + } + //过滤掉入库仓库为空的数据 + Listresult=new ArrayList(); + for(AggWrVO agg:filterVOs) { + List items=new ArrayList(); + for(WrItemVO item:agg.getChildrenVO()) { + List qvos=new ArrayList(); + for(WrQualityVO qvo:item.getQualityvos()) { + if(MMValueCheck.isNotEmpty(qvo.getCgwarehouseid())) { + qvos.add(qvo); + } + } + if(MMValueCheck.isNotEmpty(qvos)) { + item.setQualityvos(qvos.toArray(new WrQualityVO[0])); + items.add(item); + } + } + if(MMValueCheck.isNotEmpty(items)) { + agg.setChildren(WrItemVO.class, items.toArray(new WrItemVO[0])); + result.add(agg); + } + } + if(MMValueCheck.isEmpty(result)) { + /** 生产报告审批成功,倒冲成功,自动入库失败!**/ + ValidationFailure validationFailure = new ValidationFailure(WrptLangConst.ERR_Audit_ProdIn()); + ExceptionUtils.wrappException(new ValidationException(Arrays.asList(validationFailure))); + } + return result.toArray(new AggWrVO[0]); + + } + + + private Map getIsAutoProdIn(List ctrantypeids) { + if (MMValueCheck.isEmpty(ctrantypeids)) { + return null; + } + SqlBuilder whereSql = new SqlBuilder(); + whereSql.append(" and "); + whereSql.append(WrTransTypeVO.CTRANTYPEID, ctrantypeids.toArray(new String[0])); + VOQuery voQuery = new VOQuery(WrTransTypeVO.class, + new String[] { WrTransTypeVO.CTRANTYPEID, WrTransTypeVO.BCREATEPRODIN }); + WrTransTypeVO[] queryResults = voQuery.query(whereSql.toString(), null); + if (MMValueCheck.isEmpty(queryResults)) { + return null; + } + Map result = new HashMap(); + for (WrTransTypeVO queryResult : queryResults) { + result.put(queryResult.getCtrantypeid(), MMValueCheck.isTrue(queryResult.getBcreateprodin())); + } + return result; + + } +} diff --git a/mmpac/src/private/nc/bs/mmpac/wr/rule/prodin/WrProdInSetInStockOrgRule.java b/mmpac/src/private/nc/bs/mmpac/wr/rule/prodin/WrProdInSetInStockOrgRule.java new file mode 100644 index 0000000..f0b1255 --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/wr/rule/prodin/WrProdInSetInStockOrgRule.java @@ -0,0 +1,134 @@ +package nc.bs.mmpac.wr.rule.prodin; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import nc.bs.framework.common.InvocationInfoProxy; +import nc.bs.mmpac.wr.adapter.WrptServiceAdapter; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.util.mmf.busi.service.OrgUnitPubService; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.vo.mmpac.wr.entity.AggWrVO; +import nc.vo.mmpac.wr.entity.WrItemVO; +import nc.vo.mmpac.wr.entity.WrQualityVO; +import nc.vo.org.StockConsignVO; +import nc.vo.pub.BusinessException; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; + +public class WrProdInSetInStockOrgRule implements IRule { + @Override + public void process(AggWrVO[] vos) { + + // 判空 + if (MMValueCheck.isEmpty(vos)) { + return; + } + + // 取得完工入库委托关系 + Map inStockMap = new HashMap(); + try { + inStockMap = this.getInStockOrg(vos); + } + catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + List orgIds = new ArrayList(); + for (AggWrVO aggVO : vos) { + for (WrItemVO wrItemVO : (WrItemVO[]) aggVO.getChildren(WrItemVO.class)) { + String org = inStockMap.get(wrItemVO.getPk_org() + wrItemVO.getCbmaterialvid()); + orgIds.add(org); + } + } + Map map = new HashMap(); + if(MMValueCheck.isNotEmpty(orgIds)) { + try { + map = OrgUnitPubService.getNewVIDSByOrgIDS(orgIds.toArray(new String[0])); + }catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + } + for (AggWrVO aggVO : vos) { + + for (WrItemVO wrItemVO : (WrItemVO[]) aggVO.getChildren(WrItemVO.class)) { + + String org = inStockMap.get(wrItemVO.getPk_org() + wrItemVO.getCbmaterialvid()); + + if (MMValueCheck.isEmpty(org)) { + + this.setInStockOrg(wrItemVO, wrItemVO.getPk_org(), wrItemVO.getPk_org_v()); + } + else { + String orgV = map.get(org); + this.setInStockOrg(wrItemVO, org, orgV); + } + } + } + } + + /** + * 获取完工入库委托关系 + * + * @param vos + * @return + * @throws BusinessException + */ + private Map getInStockOrg(AggWrVO[] vos) throws BusinessException { + + List scvos = new ArrayList(); + StockConsignVO scvo = null; + + for (AggWrVO aggVO : vos) { + + for (WrItemVO itemVO : (WrItemVO[]) aggVO.getChildren(WrItemVO.class)) { + + scvo = new StockConsignVO(); + scvo.setPk_factory(itemVO.getPk_org()); + scvo.setPk_material(itemVO.getCbmaterialvid()); + scvos.add(scvo); + } + } + + return WrptServiceAdapter.getInStockConsignPubService().queryStockPkByFactoryPKsAndMaterialPKs( + scvos.toArray(new StockConsignVO[0])); + } + + /** + * 设定入库库存组织 + * + * @param wrItem + * @param rOrg + * @param rOrgVid + */ + private void setInStockOrg(WrItemVO wrItemVO, String rOrg, String rOrgVid) { + + // 判空 + if (MMValueCheck.isEmpty(wrItemVO)) { + return; + } + String userCode = InvocationInfoProxy.getInstance().getUserCode(); + for (WrQualityVO wrQualityVO : wrItemVO.getQualityvos()) { + + // 设定委外关系库存组织 + if (!MMValueCheck.isEmpty(rOrg) && !MMValueCheck.isEmpty(rOrgVid)) { + + wrQualityVO.setCgdepositorgid(rOrg); + wrQualityVO.setCgdepositorgvid(rOrgVid); + } + else { + wrQualityVO.setCgdepositorgid(wrItemVO.getPk_org()); + wrQualityVO.setCgdepositorgvid(wrItemVO.getPk_org_v()); + } + + + //2025年5月30日08点45分 --外部系统推送接口时填了仓库,此处不清空 + if("rzmes".equals(userCode)||"MES".equals(userCode)){ + + }else{ + // 清空入库仓库 + wrQualityVO.setCgwarehouseid(null); + } + } + } +}