From 5850e660e084c78ffdabb7477b5b0554e6c13b13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=AD=A3=40=E7=94=A8=E5=8F=8B?= Date: Fri, 30 May 2025 09:28:12 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E7=94=9F=E6=88=90=E6=8A=A5=E5=91=8A?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E8=87=AA=E5=8A=A8=E5=85=A5=E5=BA=93=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E9=80=82=E9=85=8D=E7=94=B5=E7=BC=86=E4=BA=92=E6=84=9F?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bs/mmpac/wr/bp/WrAutoProdInFilterBP.java | 159 ++++++++++++++++++ .../prodin/WrProdInSetInStockOrgRule.java | 134 +++++++++++++++ 2 files changed, 293 insertions(+) create mode 100644 mmpac/src/private/nc/bs/mmpac/wr/bp/WrAutoProdInFilterBP.java create mode 100644 mmpac/src/private/nc/bs/mmpac/wr/rule/prodin/WrProdInSetInStockOrgRule.java 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); + } + } + } +} From 96e3e2020bef92fc1da351bd47eeb358811c0687 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=AD=A3=40=E7=94=A8=E5=8F=8B?= Date: Fri, 30 May 2025 09:28:56 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E9=94=80=E5=94=AE=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E6=8E=A5=E5=8F=A3=E7=AD=BE=E5=AD=97=E4=B8=8A?= =?UTF-8?q?=E4=B8=8B=E6=96=87=E7=BC=96=E7=A0=81=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ic/src/public/nccloud/openapi/ic/m4c/SaleOutResource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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);