dev-temp-xw-202501031219-44700
臧学普 4 months ago
parent 2469dba755
commit bc76beab75

@ -63,6 +63,8 @@ public interface IMesBomService extends IBaseMesService<MesBom> {
*/
MesBom findBom(String organizeCode, String bomVersion,String partNo);
MesBom findBom(String organizeCode, String partNo);
@ApiOperation(value = "bom反向查询")
List<MesBom> queryMesBomReverse(MesBom mesBom);
}

@ -167,7 +167,9 @@ public class MesBomService extends BaseMesService<MesBom> implements IMesBomServ
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean);
if (!StringUtils.isEmpty(bomVersion)) {
DdlPreparedPack.getStringEqualPack(bomVersion, "bomVersion", ddlPackBean);
}
DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), MesExtConstWords.EFF_START_TIME, ddlPackBean);
if (isWithEffEndTime) DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime(true), MesExtConstWords.EFF_END_TIME, ddlPackBean);
DdlPreparedPack.getOrderBy(MesExtConstWords.EFF_START_TIME, CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), ddlPackBean);
@ -175,9 +177,14 @@ public class MesBomService extends BaseMesService<MesBom> implements IMesBomServ
if (CollectionUtils.isEmpty(mesBoms)) {
MesException.throwMesBusiException("物料【%s】生产版本【%s】对应bom信息不存在", partNo, bomVersion);
}
MesBom next = mesBoms.iterator().next();
//如果存在多个bomCode取最新的一个
return mesBoms.stream().collect(Collectors.groupingBy(t -> t.getBomCode() + t.getEffStartTime())).get(next.getBomCode() + next.getEffStartTime());
MesBom mesBom = mesBoms.get(0);
String bomCode = mesBom.getBomCode();
String effStartTime = mesBom.getEffStartTime();
DdlPackBean ddlPackBean1= DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean1);
DdlPreparedPack.getStringEqualPack(bomCode, "bomCode", ddlPackBean1);
DdlPreparedPack.getStringEqualPack(effStartTime, "effStartTime", ddlPackBean1);
return baseRDao.findByHqlWhere(ddlPackBean);
}
@Override
@ -224,6 +231,24 @@ public class MesBomService extends BaseMesService<MesBom> implements IMesBomServ
DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomPackBean);
DdlPreparedPack.getStringEqualPack(bomVersion, "bomVersion", bomPackBean);
DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), bomPackBean);
List<MesBom> bomList = this.baseRDao.findByHqlTopWhere(bomPackBean,1);
return bomList.isEmpty() ? null : bomList.get(0);
}
@Override
public MesBom findBom(String organizeCode, String partNo) {
//MES汇报查询BOM是否携带结束查询条件
MesConfig config = mesConfigService.getCfgValueByCode(organizeCode, MesExtConstWords.MES_REPORT_FIND_BOM_WITH_EFFENDTIME);
Boolean isWithEffEndTime = (null != config && !StringUtils.isEmpty(config.getCfgValue()) && config.getCfgValue().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? true : false;
DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomPackBean);
DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "effStartTime", bomPackBean);
if (isWithEffEndTime){
DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime(true), "effEndTime", bomPackBean);
}
DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), bomPackBean);
List<MesBom> bomList = this.baseRDao.findByHqlTopWhere(bomPackBean,1);
return bomList.isEmpty() ? null : bomList.get(0);
}

@ -19,7 +19,6 @@ import cn.estsh.i3plus.pojo.mes.repository.*;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
@ -200,6 +199,25 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
/**
* erp
*/
/**
* 2024-12-13 bug 44316 bom by castle
* EDIBOM
*
* -线
* 1使BOM
* 2使BOM
*
*
* 1BOM
* 2BOM
* BOM
*
* BOM;
* limit 1ECN
* ***BOM > BOM <= yyyy-mm-dd hh:MM:ss
*/
MesBom bom;
if (partProdGroup.getEnableBomVersion() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()){
MesProductVersion prodVersion = getProdVersion(organizeCode, mesPartProdGroupDetail.getProductPartNo());
if (prodVersion == null) {
log.info("请配置工厂:{},partNo:{}的生产版本", mesPartProdGroupDetail.organizeCode, mesPartProdGroupDetail.getProductPartNo());
@ -207,12 +225,15 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
String productVersion = prodVersion.getProductVersion();
mesWorkOrder.setProductVersion(productVersion);
}
bom = mesBomService.findBom(organizeCode, prodVersion == null ? null : prodVersion.getAlternativePartList(), mesPartProdGroupDetail.getProductPartNo());
}else {
bom = mesBomService.findBom(organizeCode, mesPartProdGroupDetail.getProductPartNo());
}
// bom prodVersion.alternativePartList bom版本
/**
* bom
*/
MesBom bom = mesBomService.findBom(organizeCode, prodVersion == null ? null : prodVersion.getAlternativePartList(), mesPartProdGroupDetail.getProductPartNo());
if (bom != null) {
mesWorkOrder.setBomCode(bom.getBomCode());
} else {
@ -313,7 +334,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
List<MesWorkOrderPart> workOrderPartList = new ArrayList<>();
if (partProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
//打散bom使用生产零件号
workOrderPartList = dismantleBom(mesPartProdGroupDetail.getProductPartNo(), mesWorkOrder.getQty(), sortInfo.getMatchTime(), bom.getBomCode(), sortInfo.getOrganizeCode(), mesPartProdGroupDetail.getWorkCellCode(), mesWorkOrder.getWorkOrderNo());
workOrderPartList = dismantleBom(bom, mesPartProdGroupDetail.getProductPartNo(), mesWorkOrder.getQty(), sortInfo.getMatchTime(), sortInfo.getOrganizeCode(), mesPartProdGroupDetail.getWorkCellCode(), mesWorkOrder.getWorkOrderNo());
}
@ -362,7 +383,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
//客户ptr信息
StringBuilder ptrInfos = new StringBuilder();
String ptrInfo = mesWorkOrder.getPtrInfo();
List<String> custPtrPartList = Arrays.asList(ptrInfo.replaceAll("_","").split("\\|"));
List<String> custPtrPartList = Arrays.asList(ptrInfo.split("\\|"));
boolean ptrFlag = false;
boolean custFlag = false;
boolean fOrderFlag = false;
@ -784,11 +805,11 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
}
return null;
}
private List<MesWorkOrderPart> dismantleBom(String partNo, double qty, String productTime, String bomCode, String organizeCode, String workCellCode, String workOrderNo) {
private List<MesWorkOrderPart> dismantleBom(MesBom mesBom, String partNo, double qty, String productTime, String organizeCode, String workCellCode, String workOrderNo) {
List<MesWorkOrderPart> orderPartList = new ArrayList<>();
//1.根据bomCode,partNo productTime organizeCode 查询bom清单 bomList
List<MesBom> bomList = getPlatBom(partNo, productTime, bomCode, organizeCode);
List<MesBom> bomList = getPlatBom(mesBom,partNo, productTime, organizeCode);
//2.根据bomList中的subPartNo 查询零件清单 partList
List<String> partNoList = bomList.stream().map(MesBom::getItemPartNo).distinct().collect(Collectors.toList());
@ -828,13 +849,12 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
return orderPartList;
}
private List<MesBom> getPlatBom(String partNo, String effectiveTime, String bomCode, String organizeCode) {
private List<MesBom> getPlatBom(MesBom mesBom,String partNo, String effectiveTime,String organizeCode) {
//MES汇报查询BOM是否携带结束查询条件
MesConfig config = mesConfigService.getCfgValueByCode(organizeCode, MesExtConstWords.MES_REPORT_FIND_BOM_WITH_EFFENDTIME);
Boolean isWithEffEndTime = (null != config && !org.springframework.util.StringUtils.isEmpty(config.getCfgValue()) && config.getCfgValue().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? true : false;
if (bomCode == null) {
if (mesBom == null) {
//首先根据虚结构的零件号查询出最新的一条bom信息作为bomCode
DdlPackBean bomCodePackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, bomCodePackBean);
@ -845,12 +865,12 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
if (bomList == null || bomList.isEmpty()) {
return new ArrayList<>();
}
bomCode = bomList.get(0).getBomCode();
mesBom = bomList.get(0);
}
List<MesBom> bomResultList = new ArrayList<>();
DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(bomCode, "bomCode", bomPackBean);
DdlPreparedPack.getStringEqualPack(mesBom.getBomCode(), "bomCode", bomPackBean);
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, bomPackBean);
DdlPreparedPack.getStringSmallerPack(effectiveTime, MesExtConstWords.EFF_START_TIME, bomPackBean);
if (isWithEffEndTime) DdlPreparedPack.getStringBiggerPack(effectiveTime, MesExtConstWords.EFF_END_TIME, bomPackBean);
@ -858,7 +878,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
for (MesBom bom : bomList) {
if (bom.getPartType() != null && bom.getPartType().equalsIgnoreCase("X")) {
getPlatBom(bom.getItemPartNo(), effectiveTime, null, organizeCode);
getPlatBom(null,bom.getItemPartNo(), effectiveTime, organizeCode);
} else {
bom.setBomCode(bom.getBomCode().toLowerCase());
bomResultList.add(bom);

Loading…
Cancel
Save