merge dev-temp-castle-2412131528-44316 解决冲突

dev-temp-xw-202501150000-44852
王杰 5 months ago
commit 17fb826dd7

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

@ -165,13 +165,18 @@ public class MesBomService extends BaseMesService<MesBom> implements IMesBomServ
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);
List<MesBom> mesBoms = baseRDao.findByHqlWhere(ddlPackBean);
List<MesBom> mesBoms = baseRDao.findByHqlTopWhere(ddlPackBean,1);
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
@ -223,6 +228,17 @@ public class MesBomService extends BaseMesService<MesBom> implements IMesBomServ
}
@Override
public MesBom findBom(String organizeCode, String partNo) {
DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomPackBean);
DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "effStartTime", bomPackBean);
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);
}
@Override
public List<MesBom> queryMesBomReverse(MesBom mesBom) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesBom.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesBom.getPartNo(), "itemPartNo", packBean);

@ -186,6 +186,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
@Autowired
private EntityManager entityManager;
@Autowired
private MesPartProdGroupRepository mesPartProdGroupRao;
@Override
public MesWorkOrder insert(MesWorkOrder bean) {
// 数据校验
@ -548,10 +551,20 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue());
}
Integer enableBomVersion = mesPartProdGroup.getEnableBomVersion();
String bomVersion ="";
/**
* 2024-12-20 bomVersion
*/
if (enableBomVersion == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()){
if(!Objects.isNull(mesProductVersion)){
bomVersion = mesProductVersion.getAlternativePartList();
}
}
// 打散bom
List<MesWorkOrderPart> workOrderPartList = new ArrayList<>();
if (mesPartProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() && !Objects.isNull(mesProductVersion)) {
workOrderPartList = dismantleBom(findBomList(item.getOrganizeCode(), iMesPartService.getPartByPartNo(item.getPartNo(), item.getOrganizeCode()),mesProductVersion.getAlternativePartList()), item.getQty(), item.getOrganizeCode(), item.getWorkCellCode(), item.getWorkOrderNo());
if (mesPartProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
workOrderPartList = dismantleBom(findBomList(item.getOrganizeCode(), iMesPartService.getPartByPartNo(item.getPartNo(), item.getOrganizeCode()),bomVersion), item.getQty(), item.getOrganizeCode(), item.getWorkCellCode(), item.getWorkOrderNo());
}
return workOrderPartList;
}
@ -1054,10 +1067,23 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
mesWorkOrder.getAdjustQty(), mesWorkOrder.getReportedQty());
}
}
//获取生产版本
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder.getOrganizeCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getProductVersion());
String partProdGroupCode = mesWorkOrder.getPartProdGroupCode();
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(partProdGroupCode,"partProdGroupCode",ddlPackBean);
List<MesPartProdGroup> mesPartProdGroupList = mesPartProdGroupRao.findByHqlTopWhere(ddlPackBean, 1);
String bomVersion = "";
MesProductVersion mesProductVersion = new MesProductVersion();
if (!mesPartProdGroupList.isEmpty()){
MesPartProdGroup mesPartProdGroup = mesPartProdGroupList.get(0);
if (mesPartProdGroup.getEnableBomVersion() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()){
//获取生产版本
mesProductVersion = getMesProductVersion(mesWorkOrder.getOrganizeCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getProductVersion());
bomVersion = mesProductVersion.getAlternativePartList();
}
}
//物料+生产版本获取bom信息
List<MesBom> mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
List<MesBom> mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, bomVersion);
//生成条码
String sn = getStringList(mesWorkOrderNew.getOrganizeCode(), AuthUtilExt.getUserName());
//保存数据
@ -1608,7 +1634,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
newMesProductOffLine.setWorkCenterCode(mesWorkOrder.getWorkCenterCode());
newMesProductOffLine.setWorkCellCode(mesWorkOrder.getWorkCellCode());
newMesProductOffLine.setReportType(mesWorkOrder.getReportType());
newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode());
newMesProductOffLine.setSapWorkCenter(mesWorkOrder.getWorkCenterCode());
newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode());
newMesProductOffLine.setDescription(nowTime);
newMesProductOffLine.setBomTotalSize(bomSize);
@ -1641,8 +1667,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
newMesProductOffLine.setWorkOrderType(mesWorkOrder.getWorkOrderType());
newMesProductOffLine.setWorkCellCode(mesWorkOrder.getWorkCellCode());
newMesProductOffLine.setReportType(mesWorkOrder.getReportType());
newMesProductOffLine.setWorkCenterCode(mesProductVersion.getWorkCenterCode());
newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode());
newMesProductOffLine.setWorkCenterCode(mesWorkOrder.getWorkCenterCode());
newMesProductOffLine.setSapWorkCenter(mesWorkOrder.getWorkCenterCode());
newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode());
newMesProductOffLine.setDescription(nowTime);
@ -2196,7 +2222,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
// 递归展开 BOM
expendBomChild(organizeCode, mesPart.getPartNo(), bomVersion, bomData);
if (bomData.size() == 0) {
if (bomData.isEmpty()) {
MesException.throwMesBusiException("零件号 %s 没找找到 ERP 同步的原始 BOM 数据,请检查接口是否正常!", mesPart.getPartNo());
}
@ -2264,17 +2290,27 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, ddlPackBean);
DdlPreparedPack.getStringEqualPack(bomVersion, MesExtConstWords.BOM_VERSION, ddlPackBean);
if (!StringUtils.isEmpty(partNo)) {
DdlPreparedPack.getStringEqualPack(bomVersion, MesExtConstWords.BOM_VERSION, 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);
List<MesBom> mesBoms = mesBomRDao.findByHqlWhere(ddlPackBean);
List<MesBom> mesBoms = mesBomRDao.findByHqlTopWhere(ddlPackBean,1);
if (org.springframework.util.CollectionUtils.isEmpty(mesBoms)) {
MesException.throwMesBusiException("物料【%s】生产版本【%s】对应bom信息不存在", partNo, bomVersion);
MesException.throwMesBusiException("物料【%s】对应bom信息不存在", partNo);
}
MesBom next = mesBoms.iterator().next();
MesBom mesBom = mesBoms.get(0);
String effEndTime = mesBom.getEffEndTime();
String bomCode = mesBom.getBomCode();
DdlPackBean ddlPackBean1 = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, ddlPackBean1);
DdlPreparedPack.getStringEqualPack(effEndTime, MesExtConstWords.EFF_START_TIME, ddlPackBean);
DdlPreparedPack.getStringEqualPack(bomCode, "bomCode", ddlPackBean);
//如果存在多个bomCode取最新的一个
return mesBoms.stream().collect(Collectors.groupingBy(t -> t.getBomCode() + t.getEffStartTime())).get(next.getBomCode() + next.getEffStartTime());
return mesBomRDao.findByHqlWhere(ddlPackBean1);
}
@ -2723,9 +2759,12 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
private MesProductVersion getMesProductVersion(String organizeCode, String partNo, String productVersion) {
MesProductVersion mesProductVersion = mesProductVersionService.getMesProductVersionByPartNoAndProductVersion(organizeCode, partNo, productVersion);
if (Objects.isNull(mesProductVersion)) {
MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", partNo, productVersion);
MesProductVersion mesProductVersion = new MesProductVersion();
if (!StringUtils.isEmpty(productVersion)){
mesProductVersion = mesProductVersionService.getMesProductVersionByPartNoAndProductVersion(organizeCode, partNo, productVersion);
if (Objects.isNull(mesProductVersion)) {
MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", partNo, productVersion);
}
}
return mesProductVersion;
}

@ -200,19 +200,41 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
/**
* erp
*/
MesProductVersion prodVersion = getProdVersion(organizeCode, mesPartProdGroupDetail.getProductPartNo());
if (prodVersion == null) {
log.info("请配置工厂:{},partNo:{}的生产版本", mesPartProdGroupDetail.organizeCode, mesPartProdGroupDetail.getProductPartNo());
} else {
String productVersion = prodVersion.getProductVersion();
mesWorkOrder.setProductVersion(productVersion);
/**
* 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());
} else {
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 +335,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());
}
@ -784,11 +806,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 +850,13 @@ 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 +867,11 @@ 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 +879,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