同步其它仓库的BOM代码

This commit is contained in:
mzr 2025-08-25 10:42:57 +08:00
parent 0a7bdc4334
commit 078d370a34
1 changed files with 171 additions and 74 deletions

View File

@ -1,15 +1,17 @@
package nccloud.api.impl.mmbd.bom;
import nc.bs.dao.BaseDAO;
import nc.bs.framework.common.InvocationInfoProxy;
import nc.bs.framework.common.NCLocator;
import nc.bs.logging.Log;
import nc.itf.bd.bom.bom0202.IBomBillMaintainService;
import nc.itf.bd.bom.bom0202.IBomBillQueryService;
import nc.itf.mmf.busi.measure.IMeasesureService;
import nc.itf.uif.pub.IUifService;
import nc.jdbc.framework.SQLParameter;
import nc.jdbc.framework.processor.ColumnProcessor;
import nc.md.model.MetaDataException;
import nc.md.persist.framework.MDPersistenceService;
import nc.mmbd.utils.factoryparam.MMBDFactoryParameter;
import nc.pubitf.uapbd.IMaterialPubService;
import nc.pubitf.uapbd.IMaterialPubService_C;
@ -54,9 +56,13 @@ import java.util.stream.Stream;
public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
// 2025年5月28日 电缆组织金思维BOM版本号自动计算处理
private static final BaseDAO DAO = new BaseDAO();
private static final IHttpPostOtherSys HTTP_POST_OTHER_SYS = NCLocator.getInstance().lookup(IHttpPostOtherSys.class);
private static final BaseDAO DAO = new BaseDAO();
private static final IHttpPostOtherSys HTTP_POST_OTHER_SYS = NCLocator.getInstance().lookup(IHttpPostOtherSys.class);
// 2025年7月4日 添加日志支持
private static final String LOG_INFO_NAME = "OALOG";
private static final Log obmlog = Log.getInstance(LOG_INFO_NAME);
public static final String MESUSERCODE = "MES";
@ -80,7 +86,7 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
private static Map<String, Object> tsMap = new HashMap();
private String orgCodeFlag =null;
private String orgCodeFlag = null;
private static Map<String, Object> voMap = new HashMap();
@ -106,21 +112,21 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
list.add(agg);
}
AggBomVO[] aggVOs = (AggBomVO[]) list.toArray(new AggBomVO[list.size()]);
if(aggVOs[0].getParentVO().getAttributeValue("pk_org")==null||aggVOs[0].getParentVO().getAttributeValue("pk_org")==""){
if (aggVOs[0].getParentVO().getAttributeValue("pk_org") == null || aggVOs[0].getParentVO().getAttributeValue("pk_org") == "") {
ExceptionUtils.wrappBusinessException("请求参数pk_org为空请检查");
}else{
this.orgCodeFlag=aggVOs[0].getParentVO().getAttributeValue("pk_org").toString();
} else {
this.orgCodeFlag = aggVOs[0].getParentVO().getAttributeValue("pk_org").toString();
}
BillFieldsCodeToPkUtil.doTranslateVOFields(aggVOs);
IUifService iUifService = NCLocator.getInstance().lookup(IUifService.class);
for (AggBomVO aggtwo : aggVOs) {
BomItemVO[] items = aggtwo.getChildrenVO();
//2025年5月9日08点56分--添加表头物料翻译校验 start
if(aggtwo.getParent().getAttributeValue("hcmaterialid")!=null){
if (aggtwo.getParent().getAttributeValue("hcmaterialid") != null) {
MaterialVO headMaterialVO = (MaterialVO) iUifService.queryByPrimaryKey(MaterialVO.class,
aggtwo.getParent().getAttributeValue("hcmaterialid").toString());
if(headMaterialVO==null){
ExceptionUtils.wrappBusinessException("根据物料【"+aggtwo.getParent().getAttributeValue("hcmaterialid").toString()+"】查询物料失败请在BIP里确认是否物料已存在");
if (headMaterialVO == null) {
ExceptionUtils.wrappBusinessException("根据物料【" + aggtwo.getParent().getAttributeValue("hcmaterialid").toString() + "】查询物料失败请在BIP里确认是否物料已存在");
}
}
//2025年5月9日08点56分--添加表头物料翻译校验 end
@ -128,8 +134,8 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
MaterialVO bankAccSub = (MaterialVO) iUifService.queryByPrimaryKey(MaterialVO.class,
items[i].getAttributeValue("cmaterialid").toString());
//2025年5月7日08点41分 添加为空校验 sdlizheng --start
if(bankAccSub==null){
ExceptionUtils.wrappBusinessException("根据物料【"+items[i].getAttributeValue("cmaterialid").toString()+"】查询物料失败请在BIP里确认是否物料已存在");
if (bankAccSub == null) {
ExceptionUtils.wrappBusinessException("根据物料【" + items[i].getAttributeValue("cmaterialid").toString() + "】查询物料失败请在BIP里确认是否物料已存在");
}
//2025年5月7日08点41分 添加为空校验 sdlizheng --end
items[i].setAttributeValue("cmaterialvid", bankAccSub.getAttributeValue("pk_source"));
@ -172,16 +178,17 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
result = service.insertBom((AggBomVO[]) addAggvoList.toArray(new AggBomVO[0]));
} else if (!commitAggvoList.isEmpty() && addAggvoList.isEmpty()) {
List<AggBomVO> newAggVOList = new ArrayList<>();
if ("gaoning".equals(userCode)|| "C029".equals(orgCodeFlag)) {
if ("gaoning".equals(userCode) || "C029".equals(orgCodeFlag)) {
for (AggBomVO aggvo : commitAggvoList) {
result = service.insertCommitBomWithParam(new AggBomVO[] { aggvo }, true, true);
result = service.insertCommitBomWithParam(new AggBomVO[]{aggvo}, true, true);
// insertBomMatchRt(result);
newAggVOList.add(result[0]);
}
return ResultMessageUtil.toJSON(newAggVOList.toArray(new AggBomVO[0]), "BOM保存成功");
} else if ("dlkgsrm".equals(userCode)) {
} else if ("dlkgsrm".equals(userCode) || "hgqwms".equals(userCode)) {
for (AggBomVO aggvo : commitAggvoList) {
try {
result = service.insertCommitBomWithParam_RequiresNew(new AggBomVO[] { aggvo }, true, true);
result = service.insertCommitBomWithParam_RequiresNew(new AggBomVO[]{aggvo}, true, true);
newAggVOList.add(result[0]);
} catch (Exception e) {
if (e.getMessage() != null) {
@ -204,25 +211,25 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
} else {
try {
IHttpPostOtherSys httpPostOtherSys = NCLocator.getInstance().lookup(IHttpPostOtherSys.class);
// 检查当前用户是否为排除用户
if (httpPostOtherSys.checkIfExcludeUser()) {
// 排除用户直接跳过同步处理执行普通保存逻辑
for (AggBomVO aggvo : commitAggvoList) {
result = service.insertBom(new AggBomVO[] { aggvo });
result = service.insertBom(new AggBomVO[]{aggvo});
newAggVOList.add(result[0]);
}
return ResultMessageUtil.toJSON(newAggVOList.toArray(new AggBomVO[0]), "BOM保存成功(排除用户)");
}
// 检查当前组织是否属于金思维MES同步组织(电缆组织)
String currentOrgCode = this.orgCodeFlag;
boolean isIncludeOrg = httpPostOtherSys.checkIfIncludeOrg(currentOrgCode);
if (isIncludeOrg) {
// 属于金思维MES同步组织执行特殊处理逻辑
for (AggBomVO aggvo : commitAggvoList) {
result = service.insertCommitBomWithParam(new AggBomVO[] { aggvo }, true, true);
result = service.insertCommitBomWithParam(new AggBomVO[]{aggvo}, true, true);
newAggVOList.add(result[0]);
}
return ResultMessageUtil.toJSON(newAggVOList.toArray(new AggBomVO[0]), "BOM保存成功(金思维MES同步组织)");
@ -230,7 +237,7 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
// 不属于金思维MES同步组织执行默认处理逻辑
for (AggBomVO aggvo : commitAggvoList) {
try {
result = service.insertCommitBomWithParam_RequiresNew(new AggBomVO[] { aggvo }, true, true);
result = service.insertCommitBomWithParam_RequiresNew(new AggBomVO[]{aggvo}, true, true);
newAggVOList.add(result[0]);
} catch (Exception e) {
if (e.getMessage() != null) {
@ -252,10 +259,10 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
}
} catch (BusinessException e) {
// HTTP工具类调用失败时回退到原有的异常处理
ExceptionUtils.wrappBusinessException("HTTP工具类判断失败" + e.getMessage() + ",未匹配到符合条件的三方注册用户账号【"+userCode+"】,请检查!!!");
ExceptionUtils.wrappBusinessException("HTTP工具类判断失败" + e.getMessage() + ",未匹配到符合条件的三方注册用户账号【" + userCode + "】,请检查!!!");
}
}
} else {
return ResultMessageUtil.exceptionToJSON("BOM保存失败,新增不允许单据状态自由或者空和审批通过同时存在", "999");
}
@ -266,6 +273,41 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
}
}
//
// private void insertBomMatchRt(AggBomVO[] result) throws BusinessException {
// AggBomVO aggBomVO = result[0];
// BomVO bomVO = (BomVO) aggBomVO.getParentVO();
// BomItemVO[] bomItemVOs = aggBomVO.getChildrenVO();
// SuperVOUtil.sortByAttributeName(bomItemVOs,"cbeginperiod",false);
//
// BomMatchRtVO bomMatchRtVO = new BomMatchRtVO();
// bomMatchRtVO.setStatus(VOStatus.NEW);
// bomMatchRtVO.setDr(0);
// bomMatchRtVO.setPk_group(PubEnv.getPk_group());
// bomMatchRtVO.setPk_org(bomVO.getPk_org());
// bomMatchRtVO.setPk_org_v(bomVO.getPk_org_v());
// bomMatchRtVO.setCmaterialid(bomVO.getHcmaterialid());
// bomMatchRtVO.setCmaterialvid(bomVO.getHcmaterialvid());
//
// String hversion = bomVO.getHversion();
// String whereSql = " project_code ='" + hversion + "' and pk_org='" + bomVO.getPk_org() + "' and nvl(dr,0)=0 ";
//// IBean bean = MDManageUtil.getBeanByContainedObject(new AggBomVO());
//// String hcprojectid = TranslateUtils.trancelateCodeToID(bean, "hcprojectid", hversion, PubEnv.getPk_group());
// List<ProjectHeadVO> projectList = (List<ProjectHeadVO>) new BaseDAO().retrieveByClause(ProjectHeadVO.class,
// whereSql);
// if (projectList != null && projectList.size() > 0) {
// bomMatchRtVO.setCprojectid(projectList.get(0).getPk_project());
// }
//
// bomMatchRtVO.setDeffectdate(bomItemVOs[0].getCbeginperiod());
// bomMatchRtVO.setDloseeffectdate(bomItemVOs[0].getCendperiod());
// bomMatchRtVO.setProduction(UFBoolean.TRUE);
// bomMatchRtVO.setEntrust(UFBoolean.FALSE);
// bomMatchRtVO.setCbomid(bomVO.getPrimaryKey());
// IBmrtMaintain iBmrtMaintain = NCLocator.getInstance().lookup(IBmrtMaintain.class);
// BomMatchRtVO[] insert = iBmrtMaintain.insert(new BomMatchRtVO[]{bomMatchRtVO});
// System.out.println(insert);
// }
private void dealWithMaterial(AggBomVO agg) {
String hcmaterialvid = (String) agg.getParentVO().getAttributeValue("hcmaterialvid");
String hcmaterialid = (String) agg.getParentVO().getAttributeValue("hcmaterialid");
@ -331,11 +373,11 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
IUifService iUifService = NCLocator.getInstance().lookup(IUifService.class);
for (AggBomVO aggtwo : aggVOs) {
//2025年5月9日08点56分--添加表头物料翻译校验 start
if(aggtwo.getParent().getAttributeValue("hcmaterialid")!=null){
if (aggtwo.getParent().getAttributeValue("hcmaterialid") != null) {
MaterialVO headMaterialVO = (MaterialVO) iUifService.queryByPrimaryKey(MaterialVO.class,
aggtwo.getParent().getAttributeValue("hcmaterialid").toString());
if(headMaterialVO==null){
ExceptionUtils.wrappBusinessException("根据物料【"+aggtwo.getParent().getAttributeValue("hcmaterialid").toString()+"】查询物料失败请在BIP里确认是否物料已存在");
if (headMaterialVO == null) {
ExceptionUtils.wrappBusinessException("根据物料【" + aggtwo.getParent().getAttributeValue("hcmaterialid").toString() + "】查询物料失败请在BIP里确认是否物料已存在");
}
}
//2025年5月9日08点56分--添加表头物料翻译校验 end
@ -344,8 +386,8 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
MaterialVO bankAccSub = (MaterialVO) iUifService.queryByPrimaryKey(MaterialVO.class,
items[i].getAttributeValue("cmaterialid").toString());
//2025年5月7日08点41分 添加为空校验 sdlizheng --start
if(bankAccSub==null){
ExceptionUtils.wrappBusinessException("根据物料【"+items[i].getAttributeValue("cmaterialid").toString()+"】查询物料失败请在BIP里确认是否物料已存在");
if (bankAccSub == null) {
ExceptionUtils.wrappBusinessException("根据物料【" + items[i].getAttributeValue("cmaterialid").toString() + "】查询物料失败请在BIP里确认是否物料已存在");
}
//2025年5月7日08点41分 添加为空校验 sdlizheng --end
items[i].setAttributeValue("cmaterialvid", bankAccSub.getAttributeValue("pk_source"));
@ -788,7 +830,7 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
if (VersionTypeEnum.AVAILABLE.equalsValue(head.getHfversiontype())
&& !head.getCbomid().equals(headvo.getCbomid())) {
// sdlizheng --添加独立判断--plm三方越过此校验
if ("gaoning".equals(userCode) || "dlkgsrm".equals(userCode)|| "C029".equals(this.orgCodeFlag)) {
if ("gaoning".equals(userCode) || "dlkgsrm".equals(userCode) || "C029".equals(this.orgCodeFlag) || "hgqwms".equals(userCode)) {
// AggBomVO afterVO = service.canceldefault(aggBomVO);
} else if (MESUSERCODE.equals(userCode)) {
//2025-6-20 添加MES用户判断
@ -812,7 +854,7 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
return (IBomBillQueryService) NCLocator.getInstance().lookup(IBomBillQueryService.class);
}
private void dataSupplement(AggBomVO agg, String userCode) {
private void dataSupplement(AggBomVO agg, String userCode) throws BusinessException {
orgSupplement(agg, userCode);
// 2025年6月20日 - 处理MES用户的hbdefault(默认)字段设置
@ -847,14 +889,14 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
agg.getParent().setAttributeValue("fbillstatus", Integer.valueOf(-1));
agg.getParent().setAttributeValue("hfbomsource", Integer.valueOf(1));
agg.getParent().setAttributeValue("hfbomcategory", Integer.valueOf(1));
if ("gaoning".equals(userCode) || "dlkgsrm".equals(userCode)|| "C029".equals(this.orgCodeFlag)) {
if ("gaoning".equals(userCode) || "dlkgsrm".equals(userCode) || "C029".equals(this.orgCodeFlag) || "hgqwms".equals(userCode)) {
// sdlizheng
// 1对于之前不存在的BOM新增时如果是传自由态不默认且无效走标准逻辑如果传的是审批态默认且有效2025年4月11日16点28分 start
if (fbillstatus != null && "1".equals(fbillstatus.toString())) {
agg.getParent().setAttributeValue("hfversiontype", Integer.valueOf(1));
agg.getParent().setAttributeValue("hbdefault", UFBoolean.TRUE);
}else if(fbillstatus != null && "-1".equals(fbillstatus.toString())){
if("gaoning".equals(userCode)|| "C029".equals(this.orgCodeFlag)){
} else if (fbillstatus != null && "-1".equals(fbillstatus.toString())) {
if ("gaoning".equals(userCode) || "C029".equals(this.orgCodeFlag)) {
agg.getParent().setAttributeValue("hfversiontype", Integer.valueOf(1));
agg.getParent().setAttributeValue("hbdefault", UFBoolean.TRUE);
}
@ -979,7 +1021,7 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
return relation;
}
private void itemSupplement(AggBomVO agg) {
private void itemSupplement(AggBomVO agg) throws BusinessException {
String pk_org = (String) agg.getParent().getAttributeValue("pk_org");
BomItemVO[] items = agg.getChildrenVO();
for (BomItemVO item : items) {
@ -1027,6 +1069,13 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
}
handleEvent(items);
//
// IHttpPostOtherSys mesUtils = NCLocator.getInstance().lookup(IHttpPostOtherSys.class);
//
// String code = mesUtils.transferCodeByPk(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pk_org);
// if(mesUtils.checkIfIncludeOrg(code)) {
// this.handleEventTwo(agg);
// }
}
private void replMaterialOidFill(BomReplVO replVO) {
@ -1053,11 +1102,11 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
hcmaterialvid = ((MaterialVersionVO) ((IMaterialPubService_C) NCLocator.getInstance()
.lookup(IMaterialPubService_C.class))
.queryMaterialBaseInfoByOidPks(new String[] { hcmaterialoid }, new String[] { "pk_material" })
.queryMaterialBaseInfoByOidPks(new String[]{hcmaterialoid}, new String[]{"pk_material"})
.get(hcmaterialoid)).toString();
}
Map<String, MaterialPlanVO> map = queryMaterialPlanInfoByPks(new String[] { hcmaterialvid }, pkorg,
new String[] { "fixedahead" });
Map<String, MaterialPlanVO> map = queryMaterialPlanInfoByPks(new String[]{hcmaterialvid}, pkorg,
new String[]{"fixedahead"});
UFDouble fixedahead = UFDouble.ZERO_DBL;
if (MMValueCheck.isNotEmpty(map) && MMValueCheck.isNotEmpty((SuperVO) map.get(hcmaterialvid))
@ -1075,7 +1124,7 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
}
public static Map<String, MaterialPlanVO> queryMaterialPlanInfoByPks(String[] pks, String pk_stockorg,
String[] fields) throws BusinessException {
String[] fields) throws BusinessException {
Map<String, MaterialPlanVO> map = null;
List<String> vids = (List) Stream.of(pks).filter(e -> (e != null)).distinct().collect(Collectors.toList());
@ -1305,7 +1354,7 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
return (BomLossVO[]) list.toArray(new BomLossVO[0]);
}
public BomItemVO[] handleEvent(BomItemVO[] items) {
public BomItemVO[] handleEvent(BomItemVO[] items) throws BusinessException {
List<String> itemCmaterialvids = new ArrayList<String>();
for (BomItemVO item : items) {
if (MMValueCheck.isNotEmpty(item.getCmaterialvid())) {
@ -1385,6 +1434,36 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
return items;
}
public BomItemVO[] handleEventTwo( AggBomVO agg) throws MetaDataException {
IUifService iUifService = NCLocator.getInstance().lookup(IUifService.class);
BomItemVO[] items = agg.getChildrenVO();
for(BomItemVO item : items) {
StringBuffer whereSqlitem = new StringBuffer();
whereSqlitem.append(" hcmaterialid = '"+item.getCmaterialid()+"'").append(" and dr ='0'");
Collection<AggBomVO> aggBomVOitem;
try {
aggBomVOitem = MDPersistenceService.lookupPersistenceQueryService().queryBillOfVOByCond(AggBomVO.class, whereSqlitem.toString(), false);
if(Objects.nonNull(aggBomVOitem)&&!aggBomVOitem.isEmpty() ) {
StringBuffer whereSql = new StringBuffer();
whereSql.append(" hcmaterialid = '"+item.getCmaterialid()+"'").append(" and hvdef3 ='"+agg.getParent().getAttributeValue("hvdef3")+"'").append(" and hvdef2 ='"+agg.getParent().getAttributeValue("hvdef2")+"'").append(" and dr ='0'");
Collection<AggBomVO> aggBomVO;
aggBomVO = MDPersistenceService.lookupPersistenceQueryService().queryBillOfVOByCond(AggBomVO.class, whereSql.toString(), false);
if(Objects.nonNull(aggBomVO) && aggBomVO.size()==1) {
for (AggBomVO aggBom : aggBomVO) {
item.setVitemversion(aggBom.getPrimaryKey());
}
}else {
nccloud.base.exception.ExceptionUtils.wrapBusinessException("根据条件未查出bom或者查出多条bom不唯一"+whereSql);
}
}
} catch (MetaDataException e1) {
e1.printStackTrace();
ExceptionUtils.wrappBusinessException(e1.toString());
}
}
return items;
}
void setMaterialInfo(Map<String, BomMaterialParam> materialMap, BomItemVO item) {
String materialvid = item.getCmaterialvid();
if (!materialMap.containsKey(materialvid)) {
@ -1456,11 +1535,11 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
for (BomOutputsVO item : items) {
try {
materialMap = ((IBomBillQueryService) NCLocator.getInstance().lookup(IBomBillQueryService.class))
.queryMaterialInfo(item.getPk_org(), new String[] { item.getCmaterialvid() });
.queryMaterialInfo(item.getPk_org(), new String[]{item.getCmaterialvid()});
Map<String, MeasureVO> measurevoMap = new HashMap<String, MeasureVO>();
IMeasesureService service = (IMeasesureService) NCLocator.getInstance().lookup(IMeasesureService.class);
measurevoMap.putAll(service.getMeasureInfoMap(new String[] { item.getCmaterialvid() }));
measurevoMap.putAll(service.getMeasureInfoMap(new String[]{item.getCmaterialvid()}));
if (measurevoMap.containsKey(item.getCmaterialvid())) {
item.setVchangerate(((MeasureVO) measurevoMap.get(item.getCmaterialvid())).getVchangeRate());
item.setCastunitid(((MeasureVO) measurevoMap.get(item.getCmaterialvid())).getCassMeasures());
@ -1533,7 +1612,7 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
|| MMValueCheck.isEmpty(fsupplymode) || MMValueCheck.isEmpty(fcontrol)
|| MMValueCheck.isEmpty(cbeginperiod) || MMValueCheck.isEmpty(cendperiod)
|| MMValueCheck.isEmpty(fbackflushtype)) {
return ResultMessageUtil.exceptionToJSON("传入数据异常,子表材料第" + i + 1 + "存在未填的必输项", "1");
return ResultMessageUtil.exceptionToJSON("传入数据异常,子表材料第" + i + 1 + ""+ cmaterialvid +"存在未填的必输项", "1");
}
}
@ -1547,7 +1626,7 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
String cmaterialvid = outputsVO.getCmaterialvid();
if (MMValueCheck.isEmpty(foutputtype) || MMValueCheck.isEmpty(cmaterialvid)) {
return ResultMessageUtil.exceptionToJSON("传入数据异常,联副产品第" + j + 1 + "存在未填的必输项", "1");
return ResultMessageUtil.exceptionToJSON("传入数据异常,联副产品第" + j + 1 + ""+cmaterialvid+"存在未填的必输项", "1");
}
}
@ -1558,8 +1637,8 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
Map<String, MaterialVO> materialSourceMap = new HashMap<String, MaterialVO>();
try {
materialSourceMap = ((IMaterialPubService_C) NCLocator.getInstance().lookup(IMaterialPubService_C.class))
.queryMaterialBaseInfoByPks(new String[] { materialVid },
new String[] { "pk_source", "graphid", "materialspec", "materialtype" });
.queryMaterialBaseInfoByPks(new String[]{materialVid},
new String[]{"pk_source", "graphid", "materialspec", "materialtype"});
} catch (BusinessException e1) {
ResultMessageUtil.exceptionToJSON(e1);
@ -1590,7 +1669,7 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
String hvnote = (String) agg.getParent().getAttributeValue("hvnote");
// 检查必要字段
if (MMValueCheck.isEmpty(hcmaterialid) || MMValueCheck.isEmpty(hversion)) {
if (MMValueCheck.isEmpty(hcmaterialid) || MMValueCheck.isEmpty(hversion)) {
return;
}
@ -1599,7 +1678,7 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
if (isCableOrgJinSiWei) {
// 计算版本号
String calculatedVersion = calculateBomVersion(pk_org, hcmaterialid );
String calculatedVersion = calculateBomVersion(pk_org, hcmaterialid);
agg.getParent().setAttributeValue("hversion", calculatedVersion);
}
} catch (Exception e) {
@ -1609,6 +1688,7 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
/**
* 判断是否为电缆组织且备注包含金思维
*
* @param pk_org 组织主键
* @param hvnote 备注信息
* @return 是否符合条件
@ -1640,33 +1720,34 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
/**
* 计算BOM版本号
* @param pk_org 组织主键
*
* @param pk_org 组织主键
* @param hcmaterialid 物料编码
* @return 计算出的版本号
*/
private String calculateBomVersion(String pk_org, String hcmaterialid ) throws BusinessException {
private String calculateBomVersion(String pk_org, String hcmaterialid) throws BusinessException {
try {
// 构建查询条件
StringBuilder sql = new StringBuilder();
sql.append("SELECT MAX(TO_NUMBER(hversion)) as max_version ");
sql.append("FROM bd_bom ");
sql.append("SELECT MAX(TO_NUMBER(hversion)) as max_version ");
sql.append("FROM bd_bom ");
sql.append("WHERE dr = 0 and pk_org = ? ");
SQLParameter param = new SQLParameter();
param.addParam(pk_org);
// 根据物料情况添加查询条件
sql.append("AND hcmaterialid = ? ");
param.addParam(hcmaterialid);
sql.append("AND hcmaterialid = ? ");
param.addParam(hcmaterialid);
// 只查询数字版本号排除非数字版本
sql.append("AND REGEXP_LIKE(hversion, '^[0-9]+$') ");
// 如果查询不到数据默认版本号为1否则最大版本号加1
Object mayBeNullVersion = DAO.executeQuery(sql.toString(), param, new ColumnProcessor());
String number = Objects.isNull(mayBeNullVersion) ? "1" : DAO.executeQuery(sql.toString(), param, new ColumnProcessor()).toString();
return String.valueOf(Long.parseLong(number)+1);
// 只查询数字版本号排除非数字版本
sql.append("AND REGEXP_LIKE(hversion, '^[0-9]+$') ");
// 如果查询不到数据默认版本号为1否则最大版本号加1
Object mayBeNullVersion = DAO.executeQuery(sql.toString(), param, new ColumnProcessor());
String number = Objects.isNull(mayBeNullVersion) ? "1" : DAO.executeQuery(sql.toString(), param, new ColumnProcessor()).toString();
return String.valueOf(Long.parseLong(number) + 1);
} catch (Exception e) {
} catch (Exception e) {
throw new BusinessException("计算BOM版本号异常" + e.getMessage());
}
}
@ -1674,28 +1755,44 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
/**
* 处理MES用户的hbdefault字段设置逻辑
* 2025年6月20日新增 - 专门用于MES用户的处理
* 仿照orgSupplement方法编写
* 2025年7月10日修改 - 改为根据自定义项hvdef4判断是否为定制BOM
* 同步MES时只有标准版本的bom "默认"hbdefault 生效hfversiontype的等于1
* 定制bomhvdef4值为Y取消 "默认"hbdefault值为N 但生效hfversiontype的等于1
* @auther 毛磊
* @param agg AggBomVO对象
* @param userCode 用户代码
*/
private void handleMesUserDefaultSetting(AggBomVO agg, String userCode) {
obmlog.debug("handleMesUserDefaultSetting - 开始处理MES用户的默认设置逻辑用户代码" + userCode);
// 仅针对MES用户进行处理
if (!MESUSERCODE.equals(userCode)) {
obmlog.debug("handleMesUserDefaultSetting - 非MES用户跳过处理");
return;
}
Object fbillstatus = agg.getParent().getAttributeValue("fbillstatus");
// MES用户新增时按照与gaoning和dlkgsrm相同的逻辑处理hbdefault字段
if (fbillstatus != null && "1".equals(fbillstatus.toString())) {
// 审批态时设置为默认且有效
agg.getParent().setAttributeValue("hfversiontype", Integer.valueOf(1));
agg.getParent().setAttributeValue("hbdefault", UFBoolean.TRUE);
} else if (fbillstatus != null && "-1".equals(fbillstatus.toString())) {
// 自由态时设置为默认且有效与gaoning用户逻辑一致
agg.getParent().setAttributeValue("hfversiontype", Integer.valueOf(1));
agg.getParent().setAttributeValue("hbdefault", UFBoolean.TRUE);
// 获取自定义项hvdef4的值
String hvdef4 = (String) agg.getParent().getAttributeValue("hvdef4");
obmlog.debug("handleMesUserDefaultSetting - 获取到自定义项hvdef4的值" + hvdef4);
// 判断是否为定制BOMhvdef4值为Y时为定制BOM其余情况为标准版本
boolean isCustomBom = "Y".equals(hvdef4);
obmlog.debug("handleMesUserDefaultSetting - 是否为定制BOM" + isCustomBom);
// 所有MES用户的BOM都设置为生效状态
agg.getParent().setAttributeValue("hfversiontype", 1);
obmlog.debug("handleMesUserDefaultSetting - 设置版本类型为生效状态(hfversiontype=1)");
if (isCustomBom) {
// 定制BOM取消默认但仍然生效
agg.getParent().setAttributeValue("hbdefault","N");
obmlog.debug("handleMesUserDefaultSetting - 定制BOM取消默认(hbdefault=false)");
} else {
// 标准版本设置为默认且生效
agg.getParent().setAttributeValue("hbdefault", "Y");
obmlog.debug("handleMesUserDefaultSetting - 标准版本,设置为默认(hbdefault=true)");
}
obmlog.debug("handleMesUserDefaultSetting - MES用户默认设置处理完成");
}
}