同步李正代码
This commit is contained in:
parent
06ba782f15
commit
7bb1fa3ace
|
|
@ -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,10 +56,18 @@ 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<String, UFBoolean> queryMaterProcManaged(PMOAggVO[] vos) {
|
||||
Map<String, Set<String>> marvids = new HashMap();
|
||||
|
|
@ -728,6 +718,9 @@ public class PMOBPUtil {
|
|||
|
||||
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<String, UFDouble> waterRateMap = PMOBPCalUtil.getWasterrate(aggvo);
|
||||
|
|
@ -740,7 +733,18 @@ public class PMOBPUtil {
|
|||
item.setNmmnum(item.getNnum());
|
||||
UFDouble wastrate = (UFDouble) waterRateMap.get(item.getCmaterialvid());
|
||||
UFDouble nNum = item.getNmmnum().div((new UFDouble(1)).sub(wastrate));
|
||||
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);
|
||||
}
|
||||
|
|
@ -806,7 +810,39 @@ public class PMOBPUtil {
|
|||
Set<String> marSet = marMapList.keySet();
|
||||
String[] marPlanFields = new String[]{"prevahead", "endahead", "fixedahead", "aheadbatch", "aheadcoff", "planprop"};
|
||||
String[] marProdFields = new String[]{"pk_prodeptdoc", "pk_propsndoc"};
|
||||
Map<String, PMOMaterialRelationVO> 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<String, PMOMaterialRelationVO> 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]);
|
||||
|
|
@ -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<MaterialStockVO>) new BaseDAO().retrieveByClause(MaterialStockVO.class, whereSql);
|
||||
} catch (DAOException e) {
|
||||
e.printStackTrace();
|
||||
throw new BusinessException(e.getMessage());
|
||||
}
|
||||
if(!list.isEmpty()){
|
||||
for (MaterialStockVO materialStockVO:list){
|
||||
|
|
@ -923,7 +957,19 @@ 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<String, MaterialStockVO> getInwarehouseid(String[] cmaterialvids, String pk_org) {
|
||||
Map<String, MaterialStockVO> stockMap = new HashMap();
|
||||
if (MMArrayUtil.isEmpty(cmaterialvids)) {
|
||||
|
|
@ -980,4 +1026,300 @@ public class PMOBPUtil {
|
|||
return stockMap;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 替换能找到销售订单匹配BOM的元素
|
||||
*
|
||||
* @param marMapList 物料映射列表
|
||||
* @param infoMap 标品逻辑获取的BOM信息映射
|
||||
* @param orgid 组织ID
|
||||
*/
|
||||
private void replaceWithCustomBomInfo(MapList<String, PMOItemVO> marMapList,
|
||||
Map<String, PMOMaterialRelationVO> infoMap,
|
||||
String orgid) throws BusinessException {
|
||||
try {
|
||||
log.info("开始提取销售订单信息进行BOM替换,组织ID: " + orgid);
|
||||
|
||||
// 首先获取生产订单中的销售订单信息
|
||||
Map<String, String> salesOrderInfoMap = extractSalesOrderInfo(marMapList);
|
||||
log.info("提取到销售订单信息数量: " + salesOrderInfoMap.size());
|
||||
|
||||
if (!MMMapUtil.isEmpty(salesOrderInfoMap)) {
|
||||
// 根据销售订单信息查询匹配的BOM版本
|
||||
Map<String, BomVO> bomMap = queryBomBySalesOrder(salesOrderInfoMap, orgid);
|
||||
log.info("根据销售订单信息查询到BOM数量: " + bomMap.size());
|
||||
|
||||
if (!MMMapUtil.isEmpty(bomMap)) {
|
||||
int replacedCount = 0;
|
||||
Set<String> 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<String, String> extractSalesOrderInfo(MapList<String, PMOItemVO> marMapList) throws BusinessException {
|
||||
Map<String, String> salesOrderInfoMap = new HashMap<>();
|
||||
|
||||
try {
|
||||
Set<String> 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<String, BomVO> queryBomBySalesOrder(Map<String, String> salesOrderInfoMap, String orgid) throws BusinessException {
|
||||
Map<String, BomVO> bomMap = new HashMap<>();
|
||||
|
||||
try {
|
||||
log.info("开始根据销售订单信息查询BOM,组织ID: " + orgid + ", 销售订单信息数量: " + salesOrderInfoMap.size());
|
||||
|
||||
BaseDAO dao = new BaseDAO();
|
||||
int foundCount = 0;
|
||||
|
||||
for (Map.Entry<String, String> 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<BomVO> bomList = (List<BomVO>) 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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue