|
|
@ -19,7 +19,6 @@ import cn.estsh.i3plus.pojo.mes.repository.*;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
|
import org.apache.logging.log4j.util.Strings;
|
|
|
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import org.springframework.transaction.annotation.Propagation;
|
|
|
|
import org.springframework.transaction.annotation.Propagation;
|
|
|
@ -200,19 +199,41 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 生产版本是根据 生产零检号查询,不是根据erp零件号查询
|
|
|
|
* 生产版本是根据 生产零检号查询,不是根据erp零件号查询
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
MesProductVersion prodVersion = getProdVersion(organizeCode, mesPartProdGroupDetail.getProductPartNo());
|
|
|
|
/**
|
|
|
|
if (prodVersion == null) {
|
|
|
|
* 2024-12-13 bug 44316 排序工单bom拆分 修改 by castle
|
|
|
|
log.info("请配置工厂:{},partNo:{}的生产版本", mesPartProdGroupDetail.organizeCode, mesPartProdGroupDetail.getProductPartNo());
|
|
|
|
* 目前排序工单EDI解析和手工插单,获取BOM的逻辑需要调整
|
|
|
|
} else {
|
|
|
|
*
|
|
|
|
String productVersion = prodVersion.getProductVersion();
|
|
|
|
* -武汉排序线为移库,不做汇报;其他工厂排序存在汇报情况
|
|
|
|
mesWorkOrder.setProductVersion(productVersion);
|
|
|
|
* 1)不使用生产版本获取BOM
|
|
|
|
|
|
|
|
* 2)使用生产版本获取BOM
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* 暂定方案:
|
|
|
|
|
|
|
|
* 1)零件生产组增加配置:是否根据生产版本拆分BOM
|
|
|
|
|
|
|
|
* 2)根据配置确认获取BOM方式
|
|
|
|
|
|
|
|
* 是:根据现有方式获取BOM
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* 否:不根据生产版本获取BOM;
|
|
|
|
|
|
|
|
* 根据总成零件号取最近的生效时间limit 1,取ECN变更号一致且生效时间一致的一组数据
|
|
|
|
|
|
|
|
* ***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 prodVersion.alternativePartList bom版本
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* bom也需要根据生产零件号拆分
|
|
|
|
* bom也需要根据生产零件号拆分
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
MesBom bom = mesBomService.findBom(organizeCode, prodVersion == null ? null : prodVersion.getAlternativePartList(), mesPartProdGroupDetail.getProductPartNo());
|
|
|
|
|
|
|
|
if (bom != null) {
|
|
|
|
if (bom != null) {
|
|
|
|
mesWorkOrder.setBomCode(bom.getBomCode());
|
|
|
|
mesWorkOrder.setBomCode(bom.getBomCode());
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
@ -313,7 +334,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
|
|
|
|
List<MesWorkOrderPart> workOrderPartList = new ArrayList<>();
|
|
|
|
List<MesWorkOrderPart> workOrderPartList = new ArrayList<>();
|
|
|
|
if (partProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
|
|
|
|
if (partProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
|
|
|
|
//打散bom使用生产零件号
|
|
|
|
//打散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信息
|
|
|
|
//客户ptr信息
|
|
|
|
StringBuilder ptrInfos = new StringBuilder();
|
|
|
|
StringBuilder ptrInfos = new StringBuilder();
|
|
|
|
String ptrInfo = mesWorkOrder.getPtrInfo();
|
|
|
|
String ptrInfo = mesWorkOrder.getPtrInfo();
|
|
|
|
List<String> custPtrPartList = Arrays.asList(ptrInfo.replaceAll("_","").split("\\|"));
|
|
|
|
List<String> custPtrPartList = Arrays.asList(ptrInfo.split("\\|"));
|
|
|
|
boolean ptrFlag = false;
|
|
|
|
boolean ptrFlag = false;
|
|
|
|
boolean custFlag = false;
|
|
|
|
boolean custFlag = false;
|
|
|
|
boolean fOrderFlag = false;
|
|
|
|
boolean fOrderFlag = false;
|
|
|
@ -784,11 +805,11 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
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<>();
|
|
|
|
List<MesWorkOrderPart> orderPartList = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
|
|
//1.根据bomCode,partNo productTime organizeCode 查询bom清单 bomList
|
|
|
|
//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
|
|
|
|
//2.根据bomList中的subPartNo 查询零件清单 partList
|
|
|
|
List<String> partNoList = bomList.stream().map(MesBom::getItemPartNo).distinct().collect(Collectors.toList());
|
|
|
|
List<String> partNoList = bomList.stream().map(MesBom::getItemPartNo).distinct().collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
|
@ -828,13 +849,12 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
|
|
|
|
return orderPartList;
|
|
|
|
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是否携带结束查询条件
|
|
|
|
//MES汇报查询BOM是否携带结束查询条件
|
|
|
|
MesConfig config = mesConfigService.getCfgValueByCode(organizeCode, MesExtConstWords.MES_REPORT_FIND_BOM_WITH_EFFENDTIME);
|
|
|
|
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;
|
|
|
|
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
|
|
|
|
//首先根据虚结构的零件号查询出最新的一条bom信息作为bomCode
|
|
|
|
DdlPackBean bomCodePackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
DdlPackBean bomCodePackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, bomCodePackBean);
|
|
|
|
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, bomCodePackBean);
|
|
|
@ -845,12 +865,12 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
|
|
|
|
if (bomList == null || bomList.isEmpty()) {
|
|
|
|
if (bomList == null || bomList.isEmpty()) {
|
|
|
|
return new ArrayList<>();
|
|
|
|
return new ArrayList<>();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
bomCode = bomList.get(0).getBomCode();
|
|
|
|
mesBom = bomList.get(0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
List<MesBom> bomResultList = new ArrayList<>();
|
|
|
|
List<MesBom> bomResultList = new ArrayList<>();
|
|
|
|
DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
|
|
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(bomCode, "bomCode", bomPackBean);
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesBom.getBomCode(), "bomCode", bomPackBean);
|
|
|
|
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, bomPackBean);
|
|
|
|
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, bomPackBean);
|
|
|
|
DdlPreparedPack.getStringSmallerPack(effectiveTime, MesExtConstWords.EFF_START_TIME, bomPackBean);
|
|
|
|
DdlPreparedPack.getStringSmallerPack(effectiveTime, MesExtConstWords.EFF_START_TIME, bomPackBean);
|
|
|
|
if (isWithEffEndTime) DdlPreparedPack.getStringBiggerPack(effectiveTime, MesExtConstWords.EFF_END_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) {
|
|
|
|
for (MesBom bom : bomList) {
|
|
|
|
if (bom.getPartType() != null && bom.getPartType().equalsIgnoreCase("X")) {
|
|
|
|
if (bom.getPartType() != null && bom.getPartType().equalsIgnoreCase("X")) {
|
|
|
|
getPlatBom(bom.getItemPartNo(), effectiveTime, null, organizeCode);
|
|
|
|
getPlatBom(null,bom.getItemPartNo(), effectiveTime, organizeCode);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
bom.setBomCode(bom.getBomCode().toLowerCase());
|
|
|
|
bom.setBomCode(bom.getBomCode().toLowerCase());
|
|
|
|
bomResultList.add(bom);
|
|
|
|
bomResultList.add(bom);
|
|
|
|