From 7bb1fa3ace96ba519c98e122a2280eef3d11bbd5 Mon Sep 17 00:00:00 2001 From: lihao Date: Tue, 2 Dec 2025 13:58:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=9D=8E=E6=AD=A3=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mmpac/pmo/pac0002/bp/util/PMOBPUtil.java | 620 ++++++++++++++---- 1 file changed, 481 insertions(+), 139 deletions(-) diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/util/PMOBPUtil.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/util/PMOBPUtil.java index 8bf96b5c..0522cfa8 100644 --- a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/util/PMOBPUtil.java +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/util/PMOBPUtil.java @@ -1,35 +1,27 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by FernFlower decompiler) -// - package nc.bs.mmpac.pmo.pac0002.bp.util; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; import nc.bs.dao.BaseDAO; import nc.bs.dao.DAOException; import nc.bs.framework.common.InvocationInfoProxy; import nc.bs.framework.common.NCLocator; +import nc.bs.logging.Log; +import nc.bs.logging.Logger; import nc.bs.mmpac.pmo.pac0002.bp.query.PMOHeadVOQueryBP; import nc.bs.mmpac.pmo.pac0002.bp.query.PMOItemVOQueryBP; import nc.bs.mmpac.pmo.pac0002.bp.service.PMOBPService; import nc.bs.pubapp.AppBsContext; import nc.bs.trade.business.HYPubBO; import nc.impl.pubapp.bd.userdef.UserDefSaveRule; +import nc.itf.arap.goldentax.SysParaInitQuery; import nc.itf.bd.material.baseinfo.IMaterialBaseInfoQueryService; import nc.itf.uap.rbac.IUserManageQuery_C; import nc.jdbc.framework.generator.SequenceGenerator; import nc.jdbc.framework.processor.ColumnListProcessor; +import nc.jdbc.framework.processor.ColumnProcessor; import nc.mmbd.utils.factoryparam.OTDimensionSetUtil; import nc.pub.billcode.itf.IBillcodeManage; import nc.pubitf.initgroup.InitGroupQuery; +import nc.pubitf.para.SysInitQuery; import nc.pubitf.sn.doc.param.ISnPkandCodeParam; import nc.pubitf.sn.doc.param.SnDocParam; import nc.pubitf.sn.doc.param.SnResult; @@ -37,34 +29,24 @@ import nc.pubitf.uapbd.IMaterialPubService_C; import nc.util.mmf.busi.measure.MeasureHelper; import nc.util.mmf.busi.service.MaterialPubService; import nc.util.mmf.busi.service.OrgUnitPubService; -import nc.util.mmf.framework.base.MMArrayUtil; -import nc.util.mmf.framework.base.MMCollectionUtil; -import nc.util.mmf.framework.base.MMMapUtil; -import nc.util.mmf.framework.base.MMNumberUtil; -import nc.util.mmf.framework.base.MMValueCheck; +import nc.util.mmf.framework.base.*; import nc.util.mmf.framework.db.MMSqlBuilder; +import nc.vo.bd.bom.bom0202.entity.BomVO; import nc.vo.bd.material.MaterialVO; import nc.vo.bd.material.prod.MaterialProdVO; import nc.vo.bd.material.stock.MaterialStockVO; import nc.vo.bd.vermatch.enumeration.MfgTypeEnum; import nc.vo.bd.vermatch.param.ppac.PpacMaterialParamVO; +import nc.vo.cmp.util.StringUtils; import nc.vo.mmbd.pub.TraceDimensionParaVO; import nc.vo.mmpac.pickm.param.MOSubItemParam; import nc.vo.mmpac.pickm.param.MoChangeParam; -import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO; -import nc.vo.mmpac.pmo.pac0002.entity.PMOHeadVO; -import nc.vo.mmpac.pmo.pac0002.entity.PMOItemMeasureParam; -import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO; -import nc.vo.mmpac.pmo.pac0002.entity.PMOMaterialRelationVO; -import nc.vo.mmpac.pmo.pac0002.entity.PMOMaterialViewVO; -import nc.vo.mmpac.pmo.pac0002.entity.PMOPlanOutputVO; -import nc.vo.mmpac.pmo.pac0002.entity.PMOProcedureVO; -import nc.vo.mmpac.pmo.pac0002.entity.PMOSerialNoVO; -import nc.vo.mmpac.pmo.pac0002.entity.PMOTaskDetailVO; +import nc.vo.mmpac.pmo.pac0002.entity.*; import nc.vo.mmpac.pmo.pac0002.enumeration.PMOFBillstatusEnum; import nc.vo.mmpac.pmo.pac0002.util.PMOFillTransTypeUtil; import nc.vo.mmpac.pmo.parameter.PMOMaterlKey; import nc.vo.mmpac.pmo.parameter.PMORewriteParaVO; +import nc.vo.org.OrgVO; import nc.vo.pub.BusinessException; import nc.vo.pub.CircularlyAccessibleValueObject; import nc.vo.pub.SuperVO; @@ -74,35 +56,43 @@ import nc.vo.pub.lang.UFDouble; import nc.vo.pubapp.AppContext; import nc.vo.pubapp.pattern.exception.ExceptionUtils; import nc.vo.pubapp.pattern.pub.MapList; +import nc.vo.pubapp.pattern.pub.SqlBuilder; +import nc.vo.so.m30.entity.SaleOrderBVO; +import nc.vo.so.m30.entity.SaleOrderHVO; +import nccloud.pubift.commen.itf.utils.IHttpPostOtherSys; + +import java.util.*; public class PMOBPUtil { - public PMOBPUtil() { - } + + private static final String LOG_INFO_NAME = "OALOG"; + + private static final Log log = Log.getInstance(LOG_INFO_NAME); public static Map queryMaterProcManaged(PMOAggVO[] vos) { Map> marvids = new HashMap(); - for(PMOAggVO vo : vos) { + for (PMOAggVO vo : vos) { PMOHeadVO headvo = vo.getParentVO(); - Set set = (Set)marvids.get(headvo.getPk_org()); + Set set = (Set) marvids.get(headvo.getPk_org()); if (MMValueCheck.isEmpty(set)) { set = new HashSet(); marvids.put(headvo.getPk_org(), set); } - for(PMOItemVO item : vo.getChildrenVO()) { + for (PMOItemVO item : vo.getChildrenVO()) { set.add(item.getCmaterialvid()); } } Map rets = new HashMap(); - for(Map.Entry> entry : marvids.entrySet()) { - Map prodMap = MaterialPubService.queryMaterialProduceInfoByPks((String[])((Set)entry.getValue()).toArray(new String[0]), (String)entry.getKey(), new String[]{"workprocemanage", "pk_org"}); + for (Map.Entry> entry : marvids.entrySet()) { + Map prodMap = MaterialPubService.queryMaterialProduceInfoByPks((String[]) ((Set) entry.getValue()).toArray(new String[0]), (String) entry.getKey(), new String[]{"workprocemanage", "pk_org"}); - for(Map.Entry ret : prodMap.entrySet()) { - String cmatervid = (String)ret.getKey(); - MaterialProdVO prodVO = (MaterialProdVO)ret.getValue(); + for (Map.Entry ret : prodMap.entrySet()) { + String cmatervid = (String) ret.getKey(); + MaterialProdVO prodVO = (MaterialProdVO) ret.getValue(); UFBoolean isProcManage = UFBoolean.FALSE; if (MMValueCheck.isTrue(prodVO.getWorkprocemanage())) { isProcManage = UFBoolean.TRUE; @@ -119,12 +109,12 @@ public class PMOBPUtil { if (MMValueCheck.isEmpty(vo)) { return false; } else { - for(PMOItemVO itemvo : vo.getChildrenVO()) { + for (PMOItemVO itemvo : vo.getChildrenVO()) { if (MMValueCheck.isEmpty(itemvo.getProcedures())) { return false; } - for(PMOProcedureVO procvo : itemvo.getProcedures()) { + for (PMOProcedureVO procvo : itemvo.getProcedures()) { if (MMNumberUtil.isGtZero(procvo.getNscnum())) { return true; } @@ -141,7 +131,7 @@ public class PMOBPUtil { } else if (MMValueCheck.isEmpty(itemvo.getProcedures())) { return false; } else { - for(PMOProcedureVO procvo : itemvo.getProcedures()) { + for (PMOProcedureVO procvo : itemvo.getProcedures()) { if (MMNumberUtil.isGtZero(procvo.getNscnum())) { return true; } @@ -157,7 +147,7 @@ public class PMOBPUtil { } else { List aggvos = new ArrayList(); - for(PMOAggVO vo : vos) { + for (PMOAggVO vo : vos) { if (PMOFBillstatusEnum.AUDIT.toIntValue() == vo.getParentVO().getFbillstatus()) { aggvos.add(vo); } @@ -166,7 +156,7 @@ public class PMOBPUtil { if (MMValueCheck.isEmpty(aggvos)) { return null; } else { - return (PMOAggVO[])aggvos.toArray(new PMOAggVO[aggvos.size()]); + return (PMOAggVO[]) aggvos.toArray(new PMOAggVO[aggvos.size()]); } } } @@ -178,38 +168,38 @@ public class PMOBPUtil { List hidList = new ArrayList(); List bidList = new ArrayList(); - for(PMOAggVO aggvo : aggvos) { + for (PMOAggVO aggvo : aggvos) { PMOHeadVO head = aggvo.getParentVO(); hidList.add(head.getCpmohid()); PMOItemVO[] items = aggvo.getChildrenVO(); if (!MMArrayUtil.isEmpty(items)) { - for(PMOItemVO item : items) { + for (PMOItemVO item : items) { bidList.add(item.getCmoid()); } } } - PMOHeadVO[] heads = PMOHeadVOQueryBP.getPMOHeadByids((String[])hidList.toArray(new String[hidList.size()])); - PMOItemVO[] items = PMOItemVOQueryBP.getPMOItemVOsByids((String[])bidList.toArray(new String[bidList.size()])); + PMOHeadVO[] heads = PMOHeadVOQueryBP.getPMOHeadByids((String[]) hidList.toArray(new String[hidList.size()])); + PMOItemVO[] items = PMOItemVOQueryBP.getPMOItemVOsByids((String[]) bidList.toArray(new String[bidList.size()])); MapList itemMapList = new MapList(); - for(PMOItemVO item : items) { + for (PMOItemVO item : items) { itemMapList.put(item.getCpmohid(), item); } List aggvoList = new ArrayList(); - for(PMOHeadVO head : heads) { + for (PMOHeadVO head : heads) { List itemList = itemMapList.get(head.getCpmohid()); if (itemList.size() > 0) { PMOAggVO newaggvo = new PMOAggVO(); newaggvo.setParentVO(head); - newaggvo.setChildrenVO((CircularlyAccessibleValueObject[])itemList.toArray(new PMOItemVO[itemList.size()])); + newaggvo.setChildrenVO((CircularlyAccessibleValueObject[]) itemList.toArray(new PMOItemVO[itemList.size()])); aggvoList.add(newaggvo); } } - return (PMOAggVO[])aggvoList.toArray(new PMOAggVO[aggvoList.size()]); + return (PMOAggVO[]) aggvoList.toArray(new PMOAggVO[aggvoList.size()]); } } @@ -220,27 +210,27 @@ public class PMOBPUtil { List hidList = new ArrayList(); List bidList = new ArrayList(); - for(PMOAggVO aggvo : aggvos) { + for (PMOAggVO aggvo : aggvos) { PMOHeadVO head = aggvo.getParentVO(); hidList.add(head.getCpmohid()); PMOItemVO[] items = aggvo.getChildrenVO(); if (!MMArrayUtil.isEmpty(items)) { - for(PMOItemVO item : items) { + for (PMOItemVO item : items) { bidList.add(item.getCmoid()); } } } - Map headMap = PMOHeadVOQueryBP.getPMOHeadMap((String[])hidList.toArray(new String[hidList.size()])); - Map itemMap = PMOItemVOQueryBP.getPMOItemVOMap((String[])bidList.toArray(new String[bidList.size()])); + Map headMap = PMOHeadVOQueryBP.getPMOHeadMap((String[]) hidList.toArray(new String[hidList.size()])); + Map itemMap = PMOItemVOQueryBP.getPMOItemVOMap((String[]) bidList.toArray(new String[bidList.size()])); - for(PMOAggVO aggvo : aggvos) { + for (PMOAggVO aggvo : aggvos) { PMOHeadVO head = aggvo.getParentVO(); - head.setTs(((PMOHeadVO)headMap.get(head.getCpmohid())).getTs()); + head.setTs(((PMOHeadVO) headMap.get(head.getCpmohid())).getTs()); PMOItemVO[] items = aggvo.getChildrenVO(); if (!MMArrayUtil.isEmpty(items)) { - for(PMOItemVO item : items) { - item.setTs(((PMOItemVO)itemMap.get(item.getCmoid())).getTs()); + for (PMOItemVO item : items) { + item.setTs(((PMOItemVO) itemMap.get(item.getCmoid())).getTs()); } } } @@ -256,7 +246,7 @@ public class PMOBPUtil { List hidList = new ArrayList(); List bidList = new ArrayList(); - for(PMORewriteParaVO para : paras) { + for (PMORewriteParaVO para : paras) { if (!hidList.contains(para.getCpmohid())) { hidList.add(para.getCpmohid()); } @@ -268,16 +258,16 @@ public class PMOBPUtil { if (hidList.size() > 0) { try { - PMOAggVO[] aggvos = PMOBPService.getIPMOQueryService().queryByPks((String[])hidList.toArray(new String[hidList.size()])); + PMOAggVO[] aggvos = PMOBPService.getIPMOQueryService().queryByPks((String[]) hidList.toArray(new String[hidList.size()])); Map planoutMap = new HashMap(); if (!MMArrayUtil.isEmpty(aggvos)) { - for(PMOAggVO aggvo : aggvos) { + for (PMOAggVO aggvo : aggvos) { PMOItemVO[] items = aggvo.getChildrenVO(); if (!MMArrayUtil.isEmpty(items)) { - for(PMOItemVO item : items) { + for (PMOItemVO item : items) { PMOPlanOutputVO[] planoutvos = item.getPlanoutputs(); if (!MMArrayUtil.isEmpty(planoutvos)) { - for(PMOPlanOutputVO planoutvo : planoutvos) { + for (PMOPlanOutputVO planoutvo : planoutvos) { planoutMap.put(planoutvo.getCplanoutputid(), planoutvo); } } @@ -287,10 +277,10 @@ public class PMOBPUtil { } new HashMap(); - Map var23 = PMOItemVOQueryBP.getPMOItemVOMap((String[])bidList.toArray(new String[bidList.size()])); + Map var23 = PMOItemVOQueryBP.getPMOItemVOMap((String[]) bidList.toArray(new String[bidList.size()])); List newparaList = new ArrayList(); - for(PMORewriteParaVO para : paras) { + for (PMORewriteParaVO para : paras) { String hid = para.getCpmohid(); String bid = para.getCpmobid(); UFDouble delNum = para.getDelNum(); @@ -299,7 +289,7 @@ public class PMOBPUtil { } if (planoutMap.containsKey(bid)) { - PMOPlanOutputVO planoutvo = (PMOPlanOutputVO)planoutMap.get(bid); + PMOPlanOutputVO planoutvo = (PMOPlanOutputVO) planoutMap.get(bid); PMORewriteParaVO newpara = new PMORewriteParaVO(); newpara.setCpmohid(hid); newpara.setCpmobid(planoutvo.getCmoid()); @@ -311,7 +301,7 @@ public class PMOBPUtil { } } - return (PMORewriteParaVO[])newparaList.toArray(new PMORewriteParaVO[newparaList.size()]); + return (PMORewriteParaVO[]) newparaList.toArray(new PMORewriteParaVO[newparaList.size()]); } catch (BusinessException e) { ExceptionUtils.wrappException(e); } @@ -323,23 +313,23 @@ public class PMOBPUtil { public static PpacMaterialParamVO getMaterialParamVO(PMOItemVO item) { PpacMaterialParamVO materialParam = new PpacMaterialParamVO(); - String cmaterialvid = (String)item.getAttributeValue("cmaterialvid"); - String cmaterialoid = (String)item.getAttributeValue("cmaterialid"); - String ccustomerid = (String)item.getAttributeValue("ccustomerid"); - String cvendorid = (String)item.getAttributeValue("cvendorid"); - String cproductorid = (String)item.getAttributeValue("cproductorid"); - String cprojectid = (String)item.getAttributeValue("cprojectid"); - String ccustmarid = (String)item.getAttributeValue("ccustmaterialid"); - String vfree1 = (String)item.getAttributeValue("vfree1"); - String vfree2 = (String)item.getAttributeValue("vfree2"); - String vfree3 = (String)item.getAttributeValue("vfree3"); - String vfree4 = (String)item.getAttributeValue("vfree4"); - String vfree5 = (String)item.getAttributeValue("vfree5"); - String vfree6 = (String)item.getAttributeValue("vfree6"); - String vfree7 = (String)item.getAttributeValue("vfree7"); - String vfree8 = (String)item.getAttributeValue("vfree8"); - String vfree9 = (String)item.getAttributeValue("vfree9"); - String vfree10 = (String)item.getAttributeValue("vfree10"); + String cmaterialvid = (String) item.getAttributeValue("cmaterialvid"); + String cmaterialoid = (String) item.getAttributeValue("cmaterialid"); + String ccustomerid = (String) item.getAttributeValue("ccustomerid"); + String cvendorid = (String) item.getAttributeValue("cvendorid"); + String cproductorid = (String) item.getAttributeValue("cproductorid"); + String cprojectid = (String) item.getAttributeValue("cprojectid"); + String ccustmarid = (String) item.getAttributeValue("ccustmaterialid"); + String vfree1 = (String) item.getAttributeValue("vfree1"); + String vfree2 = (String) item.getAttributeValue("vfree2"); + String vfree3 = (String) item.getAttributeValue("vfree3"); + String vfree4 = (String) item.getAttributeValue("vfree4"); + String vfree5 = (String) item.getAttributeValue("vfree5"); + String vfree6 = (String) item.getAttributeValue("vfree6"); + String vfree7 = (String) item.getAttributeValue("vfree7"); + String vfree8 = (String) item.getAttributeValue("vfree8"); + String vfree9 = (String) item.getAttributeValue("vfree9"); + String vfree10 = (String) item.getAttributeValue("vfree10"); materialParam.setPk_group(item.getPk_group()); materialParam.setPk_org(item.getPk_org()); materialParam.setPk_org_v(item.getPk_org_v()); @@ -373,15 +363,15 @@ public class PMOBPUtil { List resultList = OTDimensionSetUtil.queryDimensionVOs(item.getPk_org()); if (MMValueCheck.isNotEmpty(resultList)) { - for(TraceDimensionParaVO tdParaVO : resultList) { + for (TraceDimensionParaVO tdParaVO : resultList) { if (tdParaVO.getSocode().booleanValue() && !tdParaVO.getSolinecode().booleanValue()) { Object soRowCode = item.getAttributeValue(tdParaVO.getFieldCode()); - materialParam.setVbillcode((String)soRowCode); + materialParam.setVbillcode((String) soRowCode); } if (!tdParaVO.getSocode().booleanValue() && tdParaVO.getSolinecode().booleanValue()) { Object soRowNo = item.getAttributeValue(tdParaVO.getFieldCode()); - materialParam.setVbillrowno((String)soRowNo); + materialParam.setVbillrowno((String) soRowNo); } } } @@ -402,21 +392,21 @@ public class PMOBPUtil { public static void setGrandVOStatusUpdate(PMOItemVO item) { PMOPlanOutputVO[] plans = item.getPlanoutputs(); if (!MMArrayUtil.isEmpty(plans)) { - for(PMOPlanOutputVO plan : plans) { + for (PMOPlanOutputVO plan : plans) { plan.setStatus(1); } } PMOTaskDetailVO[] tasks = item.getTaskdetails(); if (!MMArrayUtil.isEmpty(tasks)) { - for(PMOTaskDetailVO task : tasks) { + for (PMOTaskDetailVO task : tasks) { task.setStatus(1); } } PMOProcedureVO[] procs = item.getProcedures(); if (!MMArrayUtil.isEmpty(procs)) { - for(PMOProcedureVO proc : procs) { + for (PMOProcedureVO proc : procs) { proc.setStatus(1); } } @@ -501,14 +491,14 @@ public class PMOBPUtil { } else { Map originProcedureMap = new HashMap(); - for(PMOProcedureVO pmoProcedureVO : originProcedureVOs) { + for (PMOProcedureVO pmoProcedureVO : originProcedureVOs) { originProcedureMap.put(pmoProcedureVO.getCprocedureid(), pmoProcedureVO); } List list = new ArrayList(); - for(PMOProcedureVO pmoProcedureVO : procedureVOs) { - PMOProcedureVO originProcedure = (PMOProcedureVO)originProcedureMap.get(pmoProcedureVO.getCprocedureid()); + for (PMOProcedureVO pmoProcedureVO : procedureVOs) { + PMOProcedureVO originProcedure = (PMOProcedureVO) originProcedureMap.get(pmoProcedureVO.getCprocedureid()); MOSubItemParam param = new MOSubItemParam(); param.setMoprocessid(pmoProcedureVO.getCprocedureid()); param.setNnewplanastnum(pmoProcedureVO.getNplanmmastnum()); @@ -531,7 +521,7 @@ public class PMOBPUtil { if (list.isEmpty()) { return null; } else { - return (MOSubItemParam[])list.toArray(new MOSubItemParam[list.size()]); + return (MOSubItemParam[]) list.toArray(new MOSubItemParam[list.size()]); } } } @@ -565,18 +555,18 @@ public class PMOBPUtil { Map newItemMap = new HashMap(); Set deleteItemSet = new HashSet(); - for(PMOAggVO newpmoAggVO : vos) { + for (PMOAggVO newpmoAggVO : vos) { PMOItemVO[] itemVOs = newpmoAggVO.getChildrenVO(); - for(PMOItemVO itemVO : itemVOs) { + for (PMOItemVO itemVO : itemVOs) { newItemMap.put(itemVO.getCmoid(), itemVO); } } - for(PMOAggVO oldpmoAggVO : originVOs) { + for (PMOAggVO oldpmoAggVO : originVOs) { PMOItemVO[] itemVOs = oldpmoAggVO.getChildrenVO(); - for(PMOItemVO itemVO : itemVOs) { + for (PMOItemVO itemVO : itemVOs) { if (!newItemMap.containsKey(itemVO.getCmoid())) { deleteItemSet.add(itemVO.getCmoid()); } @@ -628,7 +618,7 @@ public class PMOBPUtil { docParam.setVcode(snvo.getVsncode()); docParam.setPk_serialno(snvo.getCserialnoid()); if (MMValueCheck.isNotEmpty(snUnitMap)) { - String snUnit = (String)snUnitMap.get(new PMOMaterlKey(itemvo.getPk_org(), itemvo.getCmaterialvid())); + String snUnit = (String) snUnitMap.get(new PMOMaterlKey(itemvo.getPk_org(), itemvo.getCmaterialvid())); docParam.setCsnunitid(snUnit); } @@ -684,11 +674,11 @@ public class PMOBPUtil { if (MMValueCheck.isEmpty(vos)) { return saveDocParams; } else { - for(PMOAggVO vo : vos) { + for (PMOAggVO vo : vos) { if (!MMValueCheck.isEmpty(vo.getChildrenVO())) { - for(PMOItemVO itemvo : vo.getChildrenVO()) { + for (PMOItemVO itemvo : vo.getChildrenVO()) { if (!MMValueCheck.isEmpty(itemvo.getSerialnos())) { - for(PMOSerialNoVO snvo : itemvo.getSerialnos()) { + for (PMOSerialNoVO snvo : itemvo.getSerialnos()) { String var10000 = itemvo.getCmoid(); String key = var10000 + snvo.getVsncode(); ISnPkandCodeParam[] ret = rets.getSnbyKey(key); @@ -714,7 +704,7 @@ public class PMOBPUtil { String cemployeeid = null; if (!MMValueCheck.isEmpty(pk_user)) { try { - cemployeeid = ((IUserManageQuery_C)NCLocator.getInstance().lookup(IUserManageQuery_C.class)).queryPsndocByUserid(pk_user); + cemployeeid = ((IUserManageQuery_C) NCLocator.getInstance().lookup(IUserManageQuery_C.class)).queryPsndocByUserid(pk_user); } catch (BusinessException ex) { ExceptionUtils.wrappException(ex); } @@ -726,47 +716,61 @@ public class PMOBPUtil { List itemList = new ArrayList(); MapList orgMapList = new MapList(); - for(PMOAggVO aggvo : aggvos) { + for (PMOAggVO aggvo : aggvos) { String pk_org = aggvo.getParentVO().getPk_org(); + //2025年10月17日17点44分--添加全局参数过滤组织 + String orgCode = transferCodeByPk("org_factory","code","pk_factory",pk_org); + boolean isCludeOrg = checkIfIncludeOrg_dev(orgCode); orgMapList.put(pk_org, aggvo); PMOItemVO[] items = aggvo.getChildrenVO(); Map waterRateMap = PMOBPCalUtil.getWasterrate(aggvo); if (!MMArrayUtil.isEmpty(items)) { - for(PMOItemVO item : items) { + for (PMOItemVO item : items) { if (MMValueCheck.isEmpty(item.getCemployeeid()) && MMValueCheck.isNotEmpty(cemployeeid)) { item.setCemployeeid(cemployeeid); } item.setNmmnum(item.getNnum()); - UFDouble wastrate = (UFDouble)waterRateMap.get(item.getCmaterialvid()); + UFDouble wastrate = (UFDouble) waterRateMap.get(item.getCmaterialvid()); UFDouble nNum = item.getNmmnum().div((new UFDouble(1)).sub(wastrate)); - item.setNplanputnum(nNum); + if(isCludeOrg){ + //2025年10月15日15点38分--带出编辑态的生产订单的计划投入数量向上取整--自定义项27赋值做初版值不可修改 + //投入=产出=vdef27=数量 + UFDouble upWardRoundNumber = MMNumberUtil.toUpWardRoundNumber(nNum); + item.setAttributeValue("vdef27",upWardRoundNumber); + item.setNplanputnum(upWardRoundNumber); + item.setNmmnum(upWardRoundNumber); + item.setNnum(upWardRoundNumber); + //2025年10月15日15点38分--带出编辑态的生产订单的计划投入数量向上取整--自定义项27赋值做初版值不可修改 + }else{ + item.setNplanputnum(nNum); + } item.setNrwxis(wastrate); itemList.add(item); } } } - MeasureHelper.fillMeasAndVchangerate((SuperVO[])itemList.toArray(new PMOItemVO[0]), "cmaterialvid", "vchangerate", "cunitid", "castunitid"); + MeasureHelper.fillMeasAndVchangerate((SuperVO[]) itemList.toArray(new PMOItemVO[0]), "cmaterialvid", "vchangerate", "cunitid", "castunitid"); PMOItemMeasureParam param = new PMOItemMeasureParam(); - MeasureHelper.fillAssNumber((SuperVO[])itemList.toArray(new PMOItemVO[itemList.size()]), param, "nmmnum", "nmmastnum"); - MeasureHelper.fillAssNumber((SuperVO[])itemList.toArray(new PMOItemVO[itemList.size()]), param, "nplanputnum", "nplanputastnum"); - MeasureHelper.fillAssNumber((SuperVO[])itemList.toArray(new PMOItemVO[itemList.size()]), param, "nnum", "nastnum"); + MeasureHelper.fillAssNumber((SuperVO[]) itemList.toArray(new PMOItemVO[itemList.size()]), param, "nmmnum", "nmmastnum"); + MeasureHelper.fillAssNumber((SuperVO[]) itemList.toArray(new PMOItemVO[itemList.size()]), param, "nplanputnum", "nplanputastnum"); + MeasureHelper.fillAssNumber((SuperVO[]) itemList.toArray(new PMOItemVO[itemList.size()]), param, "nnum", "nastnum"); Set orgids = orgMapList.keySet(); Map orgoid2Vid = new HashMap(); if (orgids.size() > 0) { - orgoid2Vid = OrgUnitPubService.getNewVIDSByOrgIDS((String[])orgids.toArray(new String[orgids.size()])); + orgoid2Vid = OrgUnitPubService.getNewVIDSByOrgIDS((String[]) orgids.toArray(new String[orgids.size()])); } if (MMMapUtil.isNotEmpty(orgoid2Vid)) { - for(PMOAggVO aggvo : aggvos) { + for (PMOAggVO aggvo : aggvos) { PMOHeadVO head = aggvo.getParentVO(); String pk_org = head.getPk_org(); String pk_org_v = head.getPk_org_v(); String pk_group = head.getPk_group(); if (orgoid2Vid.containsKey(pk_org)) { - head.setPk_org_v((String)orgoid2Vid.get(pk_org)); - pk_org_v = (String)orgoid2Vid.get(pk_org); + head.setPk_org_v((String) orgoid2Vid.get(pk_org)); + pk_org_v = (String) orgoid2Vid.get(pk_org); } if (MMValueCheck.isEmpty(head.getCplanfactoryid())) { @@ -776,7 +780,7 @@ public class PMOBPUtil { PMOItemVO[] items = aggvo.getChildrenVO(); if (!MMArrayUtil.isEmpty(items)) { - for(PMOItemVO item : items) { + for (PMOItemVO item : items) { item.setPk_group(pk_group); item.setPk_org(pk_org); item.setPk_org_v(pk_org_v); @@ -785,16 +789,16 @@ public class PMOBPUtil { } } - for(String orgid : orgids) { + for (String orgid : orgids) { List moList = orgMapList.get(orgid); MapList marMapList = new MapList(); - for(PMOAggVO aggvo : moList) { + for (PMOAggVO aggvo : moList) { PMOItemVO[] items = aggvo.getChildrenVO(); SequenceGenerator sgkey = new SequenceGenerator(); String[] cmoids = sgkey.generate(items.length); - for(int i = 0; i < items.length; ++i) { + for (int i = 0; i < items.length; ++i) { if (null == items[i].getCmoid()) { items[i].setCmoid(cmoids[i]); } @@ -806,13 +810,45 @@ public class PMOBPUtil { Set marSet = marMapList.keySet(); String[] marPlanFields = new String[]{"prevahead", "endahead", "fixedahead", "aheadbatch", "aheadcoff", "planprop"}; String[] marProdFields = new String[]{"pk_prodeptdoc", "pk_propsndoc"}; - Map infoMap = PMOBPService.getIPMOQueryService().queryMaterialRelationArray(marMapList, marPlanFields, marProdFields, orgid, ((PMOAggVO)orgMapList.get(orgid).get(0)).getParentVO().getPk_group()); + + // 2025年7月17日 毛磊 + // 检查是否使用自定义BOM选择逻辑 + boolean useCustomBomLogic = false; + try { + IHttpPostOtherSys httpPostOtherSys = NCLocator.getInstance().lookup(IHttpPostOtherSys.class); + if (httpPostOtherSys != null) { + // 获取组织编码 + String orgCode = transferCodeByPk(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, orgid); + if (httpPostOtherSys.checkIfIncludeOrg(orgCode) && + !httpPostOtherSys.checkIfExcludeUser()) { + useCustomBomLogic = true; + } + } + } catch (Exception e) { + Logger.error("检查自定义BOM逻辑条件时发生异常", e); + } + + Map infoMap = null; + if (useCustomBomLogic) { + log.info("开始使用自定义BOM选择逻辑,组织ID: " + orgid); + // 先获取标品逻辑的infoMap作为基础 + infoMap = PMOBPService.getIPMOQueryService().queryMaterialRelationArray(marMapList, marPlanFields, marProdFields, orgid, ((PMOAggVO) orgMapList.get(orgid).get(0)).getParentVO().getPk_group()); + log.info("标品逻辑获取到BOM信息数量: " + (infoMap != null ? infoMap.size() : 0)); + + // 然后尝试替换能找到销售订单匹配BOM的元素 + replaceWithCustomBomInfo(marMapList, infoMap, orgid); + } else { + log.info("使用标品BOM选择逻辑,组织ID: " + orgid); + // 使用标品逻辑 + infoMap = PMOBPService.getIPMOQueryService().queryMaterialRelationArray(marMapList, marPlanFields, marProdFields, orgid, ((PMOAggVO) orgMapList.get(orgid).get(0)).getParentVO().getPk_group()); + log.info("标品逻辑获取到BOM信息数量: " + (infoMap != null ? infoMap.size() : 0)); + } if (!MMMapUtil.isEmpty(infoMap)) { - for(String key : marSet) { - PMOItemVO[] hvos = (PMOItemVO[])marMapList.get(key).toArray(new PMOItemVO[0]); + for (String key : marSet) { + PMOItemVO[] hvos = (PMOItemVO[]) marMapList.get(key).toArray(new PMOItemVO[0]); if (!MMArrayUtil.isEmpty(hvos)) { - for(PMOItemVO hvo : hvos) { - PMOMaterialRelationVO infovo = (PMOMaterialRelationVO)infoMap.get(key + hvo.getCmoid()); + for (PMOItemVO hvo : hvos) { + PMOMaterialRelationVO infovo = (PMOMaterialRelationVO) infoMap.get(key + hvo.getCmoid()); if (MMValueCheck.isEmpty(hvo.getCbomversionid())) { hvo.setCbomversionid(infovo.getCbomversionid()); hvo.setVbomversion(infovo.getVbomversion()); @@ -861,8 +897,8 @@ public class PMOBPUtil { // // if(itemVO.getVsrctype().equals("30")){ // // xbitemList.add(itemVO); // // } -// if(checkMaterial(itemVO.getCmaterialvid(),itemVO.getPk_org()) && (null==itemVO.getVbatchcode() || itemVO.getVbatchcode().equals(""))){ -// // xbitemList.add(itemVO); +// if(checkMaterial(itemVO.getCmaterialvid(),itemVO.getPk_org())){ +// xbitemList.add(itemVO); // } // } // } @@ -891,14 +927,12 @@ public class PMOBPUtil { // } } - return aggvos; } catch (BusinessException e) { ExceptionUtils.marsh(e); return null; } } - private boolean checkMaterial(String cmaterialid,String org) throws BusinessException { // 根据物料档案库存信息页签批次管理字段判断是否生成批次号,只有勾选批次管理的物料才生成生产批次号 @@ -909,7 +943,7 @@ public class PMOBPUtil { try { list = (List) new BaseDAO().retrieveByClause(MaterialStockVO.class, whereSql); } catch (DAOException e) { - e.printStackTrace(); + throw new BusinessException(e.getMessage()); } if(!list.isEmpty()){ for (MaterialStockVO materialStockVO:list){ @@ -923,13 +957,25 @@ public class PMOBPUtil { return false; } - + public boolean checkIfIncludeOrg_dev(String code) throws BusinessException { + String targetCode = SysInitQuery.getParaString("GLOBLE00000000000000", "SM_MMFeipin"); + if (StringUtils.isEmpty(targetCode)) { + throw new BusinessException("未配置组织参数,请前往 [业务参数设置-全局] 配置SM_MMFeipin 参数"); + } + String[] orgItem = targetCode.split(";"); + for (String orgCode : orgItem) { + if (!orgCode.isEmpty() && orgCode.equals(code)) { + return true; + } + } + return false; + } public Map getInwarehouseid(String[] cmaterialvids, String pk_org) { Map stockMap = new HashMap(); if (MMArrayUtil.isEmpty(cmaterialvids)) { return stockMap; } else { - IMaterialPubService_C serv = (IMaterialPubService_C)NCLocator.getInstance().lookup(IMaterialPubService_C.class); + IMaterialPubService_C serv = (IMaterialPubService_C) NCLocator.getInstance().lookup(IMaterialPubService_C.class); try { stockMap = serv.queryMaterialStockInfoByPks(cmaterialvids, pk_org, new String[]{"pk_material", "pk_stordoc"}); @@ -939,9 +985,9 @@ public class PMOBPUtil { Set stockids = new HashSet(); - for(Map.Entry entry : stockMap.entrySet()) { - if (MMValueCheck.isNotEmpty(((MaterialStockVO)entry.getValue()).getPk_stordoc())) { - stockids.add(((MaterialStockVO)entry.getValue()).getPk_stordoc()); + for (Map.Entry entry : stockMap.entrySet()) { + if (MMValueCheck.isNotEmpty(((MaterialStockVO) entry.getValue()).getPk_stordoc())) { + stockids.add(((MaterialStockVO) entry.getValue()).getPk_stordoc()); } } @@ -955,13 +1001,13 @@ public class PMOBPUtil { List storedocList = new ArrayList(); try { - storedocList = (List)dao.executeQuery(sql.toString(), new ColumnListProcessor()); + storedocList = (List) dao.executeQuery(sql.toString(), new ColumnListProcessor()); } catch (DAOException e) { ExceptionUtils.wrappException(e); } if (MMCollectionUtil.isNotEmpty(storedocList)) { - for(Object storedoc : storedocList) { + for (Object storedoc : storedocList) { if (MMValueCheck.isNotEmpty(storedoc)) { storeSet.add(storedoc.toString()); } @@ -970,8 +1016,8 @@ public class PMOBPUtil { } if (MMValueCheck.isNotEmpty(stockMap)) { - for(Map.Entry entry : stockMap.entrySet()) { - if (MMValueCheck.isNotEmpty(((MaterialStockVO)entry.getValue()).getPk_stordoc()) && !storeSet.contains(((MaterialStockVO)entry.getValue()).getPk_stordoc())) { + for (Map.Entry entry : stockMap.entrySet()) { + if (MMValueCheck.isNotEmpty(((MaterialStockVO) entry.getValue()).getPk_stordoc()) && !storeSet.contains(((MaterialStockVO) entry.getValue()).getPk_stordoc())) { stockMap.remove(entry.getKey()); } } @@ -980,4 +1026,300 @@ public class PMOBPUtil { return stockMap; } } + + /** + * 替换能找到销售订单匹配BOM的元素 + * + * @param marMapList 物料映射列表 + * @param infoMap 标品逻辑获取的BOM信息映射 + * @param orgid 组织ID + */ + private void replaceWithCustomBomInfo(MapList marMapList, + Map infoMap, + String orgid) throws BusinessException { + try { + log.info("开始提取销售订单信息进行BOM替换,组织ID: " + orgid); + + // 首先获取生产订单中的销售订单信息 + Map salesOrderInfoMap = extractSalesOrderInfo(marMapList); + log.info("提取到销售订单信息数量: " + salesOrderInfoMap.size()); + + if (!MMMapUtil.isEmpty(salesOrderInfoMap)) { + // 根据销售订单信息查询匹配的BOM版本 + Map bomMap = queryBomBySalesOrder(salesOrderInfoMap, orgid); + log.info("根据销售订单信息查询到BOM数量: " + bomMap.size()); + + if (!MMMapUtil.isEmpty(bomMap)) { + int replacedCount = 0; + Set marSet = marMapList.keySet(); + + for (String key : marSet) { + PMOItemVO[] hvos = marMapList.get(key).toArray(new PMOItemVO[0]); + if (!MMArrayUtil.isEmpty(hvos)) { + for (PMOItemVO hvo : hvos) { + String orderInfo = salesOrderInfoMap.get(hvo.getCmaterialid()); + if (MMValueCheck.isNotEmpty(orderInfo)) { + BomVO bomVO = bomMap.get(orderInfo); + + if (bomVO != null) { + // 找到匹配的BOM,替换infoMap中对应的BOM信息 + String mapKey = key + hvo.getCmoid(); + PMOMaterialRelationVO relationVO = infoMap.get(mapKey); + + if (relationVO != null) { + log.info("替换BOM信息,物料ID: " + hvo.getCmaterialid() + + ", 原BOM版本ID: " + relationVO.getCbomversionid() + + ", 新BOM版本ID: " + bomVO.getCbomid() + + ", 销售订单信息: " + orderInfo); + + relationVO.setCbomversionid(bomVO.getCbomid()); + relationVO.setVbomversion(bomVO.getHversion()); + replacedCount++; + } else { + log.warn("未找到对应的PMOMaterialRelationVO,mapKey: " + mapKey); + } + } else { + log.info("未找到匹配的BOM,保持原有BOM信息,物料ID: " + hvo.getCmaterialid() + + ", 销售订单信息: " + orderInfo); + } + } + } + } + } + + log.info("BOM信息替换完成,总替换数量: " + replacedCount); + } else { + log.info("未查询到自定义BOM信息,保持标品逻辑结果"); + } + } else { + log.info("未提取到销售订单信息,保持标品逻辑结果"); + } + } catch (Exception e) { + log.error("替换自定义BOM信息时发生异常", e); + throw new BusinessException(e); + } + } + + + /** + * 从生产订单项中提取销售订单信息 + * + * @param marMapList 物料映射列表 + * @return 物料ID->销售订单信息的映射 + */ + private Map extractSalesOrderInfo(MapList marMapList) throws BusinessException { + Map salesOrderInfoMap = new HashMap<>(); + + try { + Set marSet = marMapList.keySet(); + log.info("开始提取销售订单信息,物料种类数量: " + marSet.size()); + + int totalItems = 0; + int salesOrderItems = 0; + + for (String key : marSet) { + PMOItemVO[] hvos = (PMOItemVO[]) marMapList.get(key).toArray(new PMOItemVO[0]); + if (!MMArrayUtil.isEmpty(hvos)) { + for (PMOItemVO hvo : hvos) { + totalItems++; + log.debug("检查生产订单项,物料ID: " + hvo.getCmaterialid() + + ", vsrctype: " + hvo.getVsrctype() + + ", vsrcbid: " + hvo.getVsrcbid()); + + // 判断是否来自销售订单(vsrctype等于"30") + if ("30".equals(hvo.getVsrctype()) && MMValueCheck.isNotEmpty(hvo.getVsrcbid())) { + salesOrderItems++; + log.info("发现来自销售订单的生产订单项,物料ID: " + hvo.getCmaterialid() + + ", vsrcbid: " + hvo.getVsrcbid()); + + // 通过销售订单明细行ID获取销售订单信息 + String salesOrderInfo = getSalesOrderInfoByBid(hvo.getVsrcbid()); + if (MMValueCheck.isNotEmpty(salesOrderInfo)) { + salesOrderInfoMap.put(hvo.getCmaterialid(), salesOrderInfo); + log.info("成功获取销售订单信息,物料ID: " + hvo.getCmaterialid() + + ", 销售订单信息: " + salesOrderInfo); + } else { + log.warn("未能获取销售订单信息,物料ID: " + hvo.getCmaterialid() + + ", vsrcbid: " + hvo.getVsrcbid()); + } + } + } + } + } + + log.info("销售订单信息提取完成,总生产订单项数: " + totalItems + + ", 来自销售订单的项数: " + salesOrderItems + + ", 成功提取销售订单信息的项数: " + salesOrderInfoMap.size()); + + } catch (Exception e) { + log.error("提取销售订单信息时发生异常", e); + throw new BusinessException(e); + } + + return salesOrderInfoMap; + } + + /** + * 根据销售订单明细行ID获取销售订单信息 + * + * @param vsrcbid 销售订单明细行ID + * @return 销售订单号|销售订单行号 + */ + private String getSalesOrderInfoByBid(String vsrcbid) throws BusinessException { + try { + log.debug("查询销售订单信息,vsrcbid: " + vsrcbid); + + BaseDAO dao = new BaseDAO(); + // 直接通过主键查询销售订单明细 + SaleOrderBVO saleOrderBVO = (SaleOrderBVO) dao.retrieveByPK(SaleOrderBVO.class, vsrcbid); + // 2025年7月25日,刘成非定制不走替换逻辑 + boolean isCustomer = "Y".equals(saleOrderBVO.getVbdef18()); + if (!isCustomer) { + log.info("非定制不走替换逻辑表体id" + saleOrderBVO.getCmaterialid() + ", vbdef18:" + saleOrderBVO.getVbdef18()); + return null; + } + if (saleOrderBVO != null) { + log.debug("成功查询到销售订单明细,销售订单主键: " + saleOrderBVO.getCsaleorderid()); + + // 查询主单 + SaleOrderHVO saleOrderHVO = (SaleOrderHVO) dao.retrieveByPK(SaleOrderHVO.class, saleOrderBVO.getCsaleorderid()); + if (saleOrderHVO != null) { + String orderCode = saleOrderHVO.getVbillcode(); // 销售订单号 + String rowNo = saleOrderBVO.getCrowno(); // 销售订单行号 + String vbdef16 = saleOrderBVO.getVbdef16();// BOM配置完成时间 + String vdef12 = saleOrderHVO.getVdef12(); // 是否传MES + + log.debug("对应销售订单的自定义项12“是否传MES”为" + vdef12); + if ("Y".equals(vdef12)) { + if (Objects.isNull(vbdef16)) { + throw new BusinessException("对应销售订单的BOM配置完成时间不能为空"); + } + if (vbdef16.isEmpty()) { + throw new BusinessException("对应销售订单的BOM配置完成时间不能为空"); + } + } else { + return null; + } + + log.debug("销售订单信息查询结果,订单号: " + orderCode + ", 行号: " + rowNo); + + if (MMValueCheck.isNotEmpty(orderCode) && MMValueCheck.isNotEmpty(rowNo)) { + String result = orderCode + "|" + rowNo; + log.info("成功获取销售订单信息,vsrcbid: " + vsrcbid + ", 结果: " + result); + return result; + } else { + log.warn("销售订单号或行号为空,vsrcbid: " + vsrcbid + + ", orderCode: " + orderCode + ", rowNo: " + rowNo); + } + } else { + log.warn("未找到销售订单主表记录,销售订单主键: " + saleOrderBVO.getCsaleorderid()); + } + } else { + log.warn("未找到销售订单明细记录,vsrcbid: " + vsrcbid); + } + } catch (Exception e) { + log.error("根据销售订单明细行ID获取销售订单信息时发生异常,vsrcbid: " + vsrcbid, e); + throw new BusinessException(e); + } + + return null; + } + + /** + * 根据销售订单信息查询匹配的BOM版本 + * + * @param salesOrderInfoMap 销售订单信息映射 + * @param orgid 组织ID + * @return 订单信息->BOM的映射 + */ + private Map queryBomBySalesOrder(Map salesOrderInfoMap, String orgid) throws BusinessException { + Map bomMap = new HashMap<>(); + + try { + log.info("开始根据销售订单信息查询BOM,组织ID: " + orgid + ", 销售订单信息数量: " + salesOrderInfoMap.size()); + + BaseDAO dao = new BaseDAO(); + int foundCount = 0; + + for (Map.Entry entry : salesOrderInfoMap.entrySet()) { + String materialid = entry.getKey(); + String orderInfo = entry.getValue(); + String[] orderParts = orderInfo.split("\\|"); + + if (orderParts.length == 2) { + String orderCode = orderParts[0]; + String orderRowNo = orderParts[1]; + + log.debug("查询BOM,销售订单号: " + orderCode + ", 行号: " + orderRowNo + ", 物料ID: " + materialid); + + // 使用retrieveByClause查询BOM表,匹配hvdef2和hvdef3字段 + String whereClause = "pk_org = '" + orgid + "' AND dr = 0" + + " AND hcmaterialid = '" + materialid + "'" + + " AND hvdef2 = '" + orderCode + "'" + + " AND hvdef3 = '" + orderRowNo + "'"; + + log.debug("BOM查询条件: " + whereClause); + + @SuppressWarnings("unchecked") + List bomList = (List) dao.retrieveByClause(BomVO.class, whereClause); + + if (MMCollectionUtil.isNotEmpty(bomList)) { + if (bomList.size() > 1) { + throw new BusinessException("根据销售订单信息找到多个BOM版本,请检查BOM数据。销售订单号: " + orderCode + ", 行号: " + orderRowNo + ", 物料ID: " + materialid + ", BOM版本数量: " + bomList.size()); + } + // 取第一条记录 + BomVO bomVO = bomList.get(0); + bomMap.put(orderInfo, bomVO); + foundCount++; + + log.info("找到匹配的BOM,销售订单信息: " + orderInfo + + ", BOM版本ID: " + bomVO.getCbomid() + + ", BOM版本: " + bomVO.getHversion() + + ", 物料ID: " + materialid); + } else { + log.info("未找到匹配的BOM,销售订单信息: " + orderInfo + ", 物料ID: " + materialid); + } + } else { + log.warn("销售订单信息格式错误,orderInfo: " + orderInfo + ", 物料ID: " + materialid); + } + } + + log.info("BOM查询完成,总查询数量: " + salesOrderInfoMap.size() + ", 找到BOM数量: " + foundCount); + + } catch (Exception e) { + log.error("根据销售订单信息查询BOM时发生异常", e); + if (e instanceof BusinessException) { + throw (BusinessException) e; + } + } + + return bomMap; + } + + /** + * 根据主键查询编码 + * + * @param tableName 表名 + * @param selectField 查询字段 + * @param pkField 主键字段 + * @param pk 主键值 + * @return 编码 + * @throws BusinessException + */ + private String transferCodeByPk(String tableName, String selectField, String pkField, String pk) throws BusinessException { + if (StringUtils.isEmpty(pk)) { + return null; + } + BaseDAO dao = new BaseDAO(); + SqlBuilder sqlBuilder = new SqlBuilder(); + sqlBuilder.append(" select " + selectField); + sqlBuilder.append(" from " + tableName); + sqlBuilder.append(" where "); + sqlBuilder.append(pkField, pk); + Object o = dao.executeQuery(sqlBuilder.toString(), new ColumnProcessor()); + if (o == null) { + throw new BusinessException("未查询到编码信息,sql【" + sqlBuilder + "】"); + } + return o.toString(); + } }