From ef0e52289b205d2541e563d5227035d78041da2e Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Sun, 15 Dec 2024 10:06:24 +0800 Subject: [PATCH] =?UTF-8?q?POM=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/ext/mes/api/base/IMesBomService.java | 8 ++++ .../apiservice/serviceimpl/base/MesBomService.java | 11 +++++ .../serviceimpl/busi/MesCreateWorkOrderImpl.java | 55 +++++++++++++++------- 3 files changed, 57 insertions(+), 17 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBomService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBomService.java index 67600e1..5c834dc 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBomService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBomService.java @@ -63,6 +63,14 @@ public interface IMesBomService extends IBaseMesService { */ MesBom findBom(String organizeCode, String bomVersion,String partNo); + /** + * 只根据总成查询最新的bom + * @param organizeCode + * @param partNo + * @return + */ + MesBom findBom(String organizeCode,String partNo); + @ApiOperation(value = "bom反向查询") List queryMesBomReverse(MesBom mesBom); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java index efe5087..0a44caf 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java @@ -209,6 +209,17 @@ public class MesBomService extends BaseMesService 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 bomList = this.baseRDao.findByHqlTopWhere(bomPackBean,1); + return bomList.isEmpty() ? null : bomList.get(0); + } + + @Override public List queryMesBomReverse(MesBom mesBom) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesBom.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(mesBom.getPartNo(), "itemPartNo", packBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java index 887321a..b29f5e3 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java @@ -195,19 +195,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 + * 目前排序工单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()); + } 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 { @@ -308,7 +330,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { List 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 dismantleBom(String partNo, double qty, String productTime, String bomCode, String organizeCode, String workCellCode, String workOrderNo) { + private List dismantleBom(MesBom mesBom, String partNo, double qty, String productTime, String organizeCode, String workCellCode, String workOrderNo) { List orderPartList = new ArrayList<>(); //1.根据bomCode,partNo productTime organizeCode 查询bom清单 bomList - List bomList = getPlatBom(partNo, productTime, bomCode, organizeCode); + List bomList = getPlatBom(mesBom,partNo, productTime, organizeCode); //2.根据bomList中的subPartNo 查询零件清单 partList List partNoList = bomList.stream().map(MesBom::getItemPartNo).distinct().collect(Collectors.toList()); @@ -803,8 +825,8 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { return orderPartList; } - private List getPlatBom(String partNo, String effectiveTime, String bomCode, String organizeCode) { - if (bomCode == null) { + private List 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 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 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);