From ac38ee8ec3adadd1f83725869304637ec7aade2f Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Thu, 7 Nov 2024 15:43:42 +0800 Subject: [PATCH] =?UTF-8?q?mes-ptr=E5=AE=8C=E5=96=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/busi/MesCreateWorkOrderImpl.java | 114 +++++++++++++-------- 1 file changed, 70 insertions(+), 44 deletions(-) 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 466456a..77f81ad 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 @@ -295,10 +295,19 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { /** * 总成拆bom,变成子零件 * 替换子零件,通过替换后的零件,去找排序工艺 + * + * PTR逻辑 3种场景互斥 + * 1.如果选择了客户发送PTR信息,遇到PTR info直接转换单 + * 2.如果选择了内部PTR,需要看总成是否需要替换,生成F单 + * 3.如果两个都没有选择PTR,需要看总成是否需要替换 生成P单 + * + * isCustomerSendPrtInfo 1是客户发送ptr + * isInterPrt 1是内部ptr */ Map ptrRuleListMap = new HashMap<>(); //是否修改为P单 boolean isModifyPOrder = false; + boolean isFOrder = false; //查询mes_part_ptr表,根据物料清单查找ptr替换信息 if (!workOrderPartList.isEmpty()){ Map orderPartMap = workOrderPartList.stream().collect(Collectors.toMap(MesWorkOrderPart::getPartNo, Function.identity())); @@ -308,18 +317,21 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { List ptrInfoList = Arrays.asList(ptrInfo.replace("_", "").split("\\|")); if (!ptrInfoList.isEmpty()){ List custPartPtrList = getCustPartPtrList(ptrInfoList, organizeCode); - for (MesPartPtr mesPartPtr : custPartPtrList) { - //根据mesPartPtr的目标零件号,找到零件信息 - String destPartNo = mesPartPtr.getDestPartNo(); - MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, organizeCode); - //更新物料清单 - MesWorkOrderPart orderPart = orderPartMap.get(destPartNo); - if (orderPart != null) { - orderPart.setPartNo(mesPartSap.getPartNo()); - orderPart.setPartName(mesPartSap.getPartName()); - orderPart.setShippingPartNo(mesPartSap.getPartNo()); - if (!isModifyPOrder){ - isModifyPOrder = true; + long count = custPartPtrList.stream().filter(item -> item.getIsCustomerSendPrtInfo() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()).count(); + if (count > 0){ + for (MesPartPtr mesPartPtr : custPartPtrList) { + //根据mesPartPtr的目标零件号,找到零件信息 + String destPartNo = mesPartPtr.getDestPartNo(); + MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, organizeCode); + //更新物料清单 + MesWorkOrderPart orderPart = orderPartMap.get(destPartNo); + if (orderPart != null) { + orderPart.setPartNo(mesPartSap.getPartNo()); + orderPart.setPartName(mesPartSap.getPartName()); + orderPart.setShippingPartNo(mesPartSap.getPartNo()); + if (!isModifyPOrder){ + isModifyPOrder = true; + } } } } @@ -328,46 +340,60 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); List partPtrList = getPartPtrList(organizeCode, mesWorkOrder.getWorkCenterCode(), partNoList); //装配件规则如果进行了零件替换 则使用ptr的规则 key 零件号,value 是规则 - + long count = partPtrList.stream().filter(item -> item.getIsInterPrt() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()).count(); + if (count > 0){ + isFOrder = true; + } for (MesPartPtr mesPartPtr : partPtrList) { - //根据mesPartPtr的目标零件号,找到零件信息 - String destPartNo = mesPartPtr.getDestPartNo(); - String srcPartNo = mesPartPtr.getSrcPartNo(); - MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, organizeCode); - //更新物料清单 - MesWorkOrderPart orderPart = orderPartMap.get(srcPartNo); - if (orderPart != null) { - orderPart.setPartNo(mesPartSap.getPartNo()); - orderPart.setPartName(mesPartSap.getPartName()); - orderPart.setShippingPartNo(mesPartSap.getPartNo()); - ptrRuleListMap.put(mesPartSap.getPartNo(), mesPartPtr.getReplacePartSnRule()); - if (!isModifyPOrder){ - isModifyPOrder = true; - } - //更新mes_part_ptr的实际数量 + 1 - mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1); - ConvertBean.saveOrUpdate(mesPartPtr,"JOB"); - partPtrRao.update(mesPartPtr); - DdlPackBean partPtrDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(),"ptrId",partPtrDetailPackBean); - DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"totalPartNo",partPtrDetailPackBean); - List partPtrDetailList = partPtrDetailRao.findByHqlWhere(partPtrDetailPackBean); - if (!partPtrDetailList.isEmpty()){ - MesPartPtrDetail mesPartPtrDetail = partPtrDetailList.get(0); - mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1); - ConvertBean.saveOrUpdate(mesPartPtrDetail,"JOB"); - partPtrDetailRao.update(mesPartPtrDetail); + //查询ptr总成 + DdlPackBean detailPartPtr = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(),"ptrId",detailPartPtr); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"partNo",detailPartPtr); + int detailPtrPartCount = partPtrDetailRao.findByHqlWhereCount(detailPartPtr); + if (detailPtrPartCount > 0){ + //根据mesPartPtr的目标零件号,找到零件信息 + String destPartNo = mesPartPtr.getDestPartNo(); + String srcPartNo = mesPartPtr.getSrcPartNo(); + MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, organizeCode); + //更新物料清单 + MesWorkOrderPart orderPart = orderPartMap.get(srcPartNo); + if (orderPart != null) { + orderPart.setPartNo(mesPartSap.getPartNo()); + orderPart.setPartName(mesPartSap.getPartName()); + orderPart.setShippingPartNo(mesPartSap.getPartNo()); + ptrRuleListMap.put(mesPartSap.getPartNo(), mesPartPtr.getReplacePartSnRule()); + if (!isModifyPOrder){ + isModifyPOrder = true; + } + //更新mes_part_ptr的实际数量 + 1 + mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1); + ConvertBean.saveOrUpdate(mesPartPtr,"JOB"); + partPtrRao.update(mesPartPtr); + DdlPackBean partPtrDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(),"ptrId",partPtrDetailPackBean); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"totalPartNo",partPtrDetailPackBean); + List partPtrDetailList = partPtrDetailRao.findByHqlWhere(partPtrDetailPackBean); + if (!partPtrDetailList.isEmpty()){ + MesPartPtrDetail mesPartPtrDetail = partPtrDetailList.get(0); + mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1); + ConvertBean.saveOrUpdate(mesPartPtrDetail,"JOB"); + partPtrDetailRao.update(mesPartPtrDetail); + } + //更新mes_part_ptr_detail 的workOrder.partNo 数量加 1 ;替换了几次还是什么 } - //更新mes_part_ptr_detail 的workOrder.partNo 数量加 1 ;替换了几次还是什么 } } } // 生成装配件清单 - if (isModifyPOrder){ - mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue()); + if (!isFOrder){ + if (isModifyPOrder){ + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue()); + }else { + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); + } }else { - mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.F.getValue()); } /** * 工单号修改