|
|
|
@ -195,6 +195,25 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
|
|
|
|
|
/**
|
|
|
|
|
* 生产版本是根据 生产零检号查询,不是根据erp零件号查询
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* 2024-12-13 bug 44316 排序工单bom拆分 修改 by castle
|
|
|
|
|
* 目前排序工单EDI解析和手工插单,获取BOM的逻辑需要调整
|
|
|
|
|
*
|
|
|
|
|
* -武汉排序线为移库,不做汇报;其他工厂排序存在汇报情况
|
|
|
|
|
* 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.getRemark() != "xxx"){
|
|
|
|
|
MesProductVersion prodVersion = getProdVersion(organizeCode, mesPartProdGroupDetail.getProductPartNo());
|
|
|
|
|
if (prodVersion == null) {
|
|
|
|
|
log.info("请配置工厂:{},partNo:{}的生产版本", mesPartProdGroupDetail.organizeCode, mesPartProdGroupDetail.getProductPartNo());
|
|
|
|
@ -202,12 +221,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 {
|
|
|
|
@ -308,7 +330,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());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -759,11 +781,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());
|
|
|
|
|
|
|
|
|
@ -803,8 +825,8 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
|
|
|
|
|
return orderPartList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<MesBom> getPlatBom(String partNo, String effectiveTime, String bomCode, String organizeCode) {
|
|
|
|
|
if (bomCode == null) {
|
|
|
|
|
private List<MesBom> getPlatBom(MesBom mesBom,String partNo, String effectiveTime,String organizeCode) {
|
|
|
|
|
if (mesBom == null) {
|
|
|
|
|
//首先根据虚结构的零件号查询出最新的一条bom信息作为bomCode
|
|
|
|
|
DdlPackBean bomCodePackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomCodePackBean);
|
|
|
|
@ -814,19 +836,18 @@ 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, "partNo", bomPackBean);
|
|
|
|
|
DdlPreparedPack.getStringSmallerPack(effectiveTime, "effStartTime", bomPackBean);
|
|
|
|
|
DdlPreparedPack.getStringBiggerPack(effectiveTime, "effEndTime", bomPackBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(effectiveTime, "effStartTime", bomPackBean);
|
|
|
|
|
List<MesBom> bomList = bomRao.findByHqlWhere(bomPackBean);
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|