From e42891c570b5d4671c70f9f3512f1c6c4506c3ba Mon Sep 17 00:00:00 2001 From: jun Date: Sun, 24 Nov 2024 15:38:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=8B=E5=B7=A5=E6=9F=A5=E5=8D=95=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesWorkOrderService.java | 225 +++++++++++++-------- 1 file changed, 140 insertions(+), 85 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 315b051..d719ec8 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -327,81 +327,106 @@ public class MesWorkOrderService extends BaseMesService implements } private void insertMesWorkOrder(MesWorkOrder item, List orderPartList) { - /** - * 总成拆bom,变成子零件 - * 替换子零件,通过替换后的零件,去找排序工艺 - */ - Map ptrRuleListMap = new HashMap<>(); - //是否修改为P单 - boolean isModifyPOrder = false; - //查询mes_part_ptr表,根据物料清单查找ptr替换信息 - if (!CollectionUtils.isEmpty(orderPartList)){ - Map orderPartMap = orderPartList.stream().collect(Collectors.toMap(MesWorkOrderPart::getPartNo, Function.identity())); - //先替换客户的ptr信息 - String ptrInfo = item.getPtrInfo(); - if (!StringUtils.isEmpty(ptrInfo)) { - List ptrInfoList = Arrays.asList(ptrInfo.replace("_", "").split("\\|")); - if (!ptrInfoList.isEmpty()){ - List custPartPtrList = getCustPartPtrList(ptrInfoList, item.getOrganizeCode()); - for (MesPartPtr mesPartPtr : custPartPtrList) { - //根据mesPartPtr的目标零件号,找到零件信息 - String destPartNo = mesPartPtr.getDestPartNo(); - MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, item.getOrganizeCode()); - //更新物料清单 - MesWorkOrderPart orderPart = orderPartMap.get(destPartNo); - if (orderPart != null) { - orderPart.setPartNo(mesPartSap.getPartNo()); - orderPart.setPartName(mesPartSap.getPartName()); - orderPart.setShippingPartNo(mesPartSap.getPartNo()); - if (!isModifyPOrder){ - isModifyPOrder = true; - } - } - } - } - } + //打印目视单使用 + StringBuilder descriptionStr = new StringBuilder(); + + //客户ptr信息 + StringBuilder ptrInfos = new StringBuilder(); + boolean ptrFlag = false; + boolean fOrderFlag = false; + List assemblyList = new ArrayList<>(); + if (!CollectionUtils.isEmpty(orderPartList)) { + //是否基于排序加工规则--待定 + //查询装配目视项 + assemblyList = getAssemblyList(item.getWorkCenterCode(), item.getCarModelCode(), orderPartList, item.getOrganizeCode()); + //ptr信息 List partNoList = orderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); List partPtrList = getPartPtrList(item.getOrganizeCode(), item.getWorkCenterCode(), partNoList); - //装配件规则如果进行了零件替换 则使用ptr的规则 key 零件号,value 是规则 - - for (MesPartPtr mesPartPtr : partPtrList) { - //根据mesPartPtr的目标零件号,找到零件信息 - String destPartNo = mesPartPtr.getDestPartNo(); - String srcPartNo = mesPartPtr.getSrcPartNo(); - MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, item.getOrganizeCode()); - //更新物料清单 - 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; + + for (MesWorkOrderPart orderPart : orderPartList) { + List ptr = partPtrList.stream().filter(t -> t.getSrcPartNo().equals(orderPart.getPartNo())).collect(Collectors.toList()); + if (ptr.isEmpty()) { + continue; + } + + MesPartPtr mesPartPtr = null; + MesPartPtrDetail mesPartPtrDetail = null; + + //获取相同总成的ptrId 在ptr详情中 + List custPartPtrList = ptr.stream().filter(t -> t.getIsCustomerSendPrtInfo() == null || t.getIsCustomerSendPrtInfo() != CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(custPartPtrList)) { + mesPartPtr = custPartPtrList.iterator().next(); + //查询ptr总成--只有特定总成才会替换 + DdlPackBean detailPartPtr = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(), "ptrId", detailPartPtr); + DdlPreparedPack.getStringEqualPack(item.getPartNo(), "totalPartNo", detailPartPtr); + List ptrDetailList = partPtrDetailRao.findByHqlWhere(detailPartPtr); + if (!ptrDetailList.isEmpty()) { + mesPartPtrDetail = ptrDetailList.get(0); } - //更新mes_part_ptr的实际数量 + 1 - mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1); - ConvertBean.saveOrUpdate(mesPartPtr, item.getModifyUser()); - partPtrRao.update(mesPartPtr); - DdlPackBean partPtrDetailPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); - DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(),"ptrId",partPtrDetailPackBean); - DdlPreparedPack.getStringEqualPack(item.getPartNo(),"totalPartNo",partPtrDetailPackBean); - List partPtrDetailList = partPtrDetailRao.findByHqlWhere(partPtrDetailPackBean); - if (!partPtrDetailList.isEmpty()){ - MesPartPtrDetail mesPartPtrDetail = partPtrDetailList.get(0); - mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1); - ConvertBean.saveOrUpdate(mesPartPtrDetail, item.getModifyUser()); - partPtrDetailRao.update(mesPartPtrDetail); + } + + if (mesPartPtr == null || mesPartPtrDetail == null) { + continue; + } + + ptrFlag = true; + if (mesPartPtr.getIsInterPrt() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { + fOrderFlag = true; + } + //将工单类零件表替换位PTR条件中维护的替换零件 + MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(mesPartPtr.getDestPartNo(), item.getOrganizeCode()); + orderPart.setPartNo(mesPartSap.getPartNo()); + orderPart.setPartName(mesPartSap.getPartName()); + //用于打印目视单 + descriptionStr.append(mesPartPtr.getMemo()); + //更新mes_part_ptr的实际数量 + 1 + mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1); + ConvertBean.saveOrUpdate(mesPartPtr, "JOB"); + partPtrRao.update(mesPartPtr); + if (mesPartPtrDetail != null) { + mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1); + ConvertBean.saveOrUpdate(mesPartPtrDetail, "JOB"); + partPtrDetailRao.update(mesPartPtrDetail); + } + MesWorkOrderAssembly orderAssemblyList = null; + for (MesWorkOrderAssembly orderAssembly : assemblyList) { + String assemblyPartNo = orderAssembly.getAssemblyPartNo(); + if (!StringUtils.isEmpty(assemblyPartNo) && assemblyPartNo.equals(mesPartPtr.getSrcPartNo())) { + orderAssemblyList = orderAssembly; + } + } + /** + * 原pisces逻辑 + * add by aix 2017.4.11 增加根据PTR维护页面维护的目视单显示项来替换WORKORDERASSEMBLY中的partdesc + */ + if (!Objects.isNull(orderAssemblyList)) { + if (orderAssemblyList.getDisplaySeq() != null && orderAssemblyList.getDisplaySeq() != 0) { + orderAssemblyList.setDisplayValue(mesPartPtr.getVisualItem()); + } + orderAssemblyList.setAssemblyPartNo(mesPartSap.getPartNo()); + orderAssemblyList.setAssemblyPartName(mesPartSap.getPartName()); + orderAssemblyList.setMatchRule(mesPartPtr.getReplacePartSnRule()); + ptrInfos.append("INFO|").append(mesPartPtr.getId()); + if (mesPartPtrDetail != null) { + ptrInfos.append("PART|").append(mesPartPtrDetail.getId()); } - //更新mes_part_ptr_detail 的workOrder.partNo 数量加 1 ;替换了几次还是什么 } } } - - // 生成装配件清单 - if (isModifyPOrder){ + if (ptrFlag && !fOrderFlag) { item.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue()); + } else if (ptrFlag) { + item.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.F.getValue()); + } else { + item.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); } + item.setPtrInfo(ptrInfos.toString()); + //生成工单号 + item.setWorkOrderNo(getOrderNo(item)); + //获取车型remark用于目视单打印 + String remark = getCarRemark(item.getCustCode(), item.getCarModelCode(), item.getOrganizeCode()); + item.setDescription(descriptionStr.append(remark).toString()); if (!CollectionUtils.isEmpty(orderPartList)) { for (MesWorkOrderPart orderPart : orderPartList) { @@ -411,12 +436,8 @@ public class MesWorkOrderService extends BaseMesService implements } workOrderPartRao.saveAll(orderPartList); } - List assemblyList = getAssemblyList(item.getWorkCenterCode(), item.getCarModelCode(), orderPartList, item.getOrganizeCode()); if (!CollectionUtils.isEmpty(assemblyList)) { for (MesWorkOrderAssembly orderAssembly : assemblyList) { - if (ptrRuleListMap.get(orderAssembly.getPartNo()) != null){ - orderAssembly.setMatchRule(ptrRuleListMap.get(orderAssembly.getPartNo())); - } orderAssembly.setPartNo(item.getPartNo()); orderAssembly.setPartName(item.getPartName()); orderAssembly.setWorkOrderNo(item.getWorkOrderNo()); @@ -499,8 +520,6 @@ public class MesWorkOrderService extends BaseMesService implements //自动发布 if (CommonEnumUtil.VALID == mesPartProdGroup.getIsAutoRelease()) { item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); - // 创建工单打印队列 - insertPrintQueue(item); } else { item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); } @@ -1780,8 +1799,6 @@ public class MesWorkOrderService extends BaseMesService implements //排序工单数量为1 bean.setQty(1d); - //生成工单号 - bean.setWorkOrderNo(getOrderNo(bean)); //自动发布 List orderPartList = autoPublish(bean); //顺序号 @@ -1790,6 +1807,10 @@ public class MesWorkOrderService extends BaseMesService implements bean.setCustSn(getCustSn(bean.getCustPartNo(), bean.getOrganizeCode(), bean.getCreateUser())); //生成工单零件 工单装配件 insertMesWorkOrder(bean, orderPartList); + // 创建工单打印队列 + if(bean.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()){ + insertPrintQueue(bean); + } //物料名称不存在,从物料信息中获取 MesPartSap mesPart = mesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); @@ -2095,6 +2116,7 @@ public class MesWorkOrderService extends BaseMesService implements DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); DdlPreparedPack.getStringEqualPack(bomVersion, "bomVersion", ddlPackBean); DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "effStartTime", ddlPackBean); + DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime(true), "effEndTime", ddlPackBean); DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), ddlPackBean); List mesBoms = mesBomRDao.findByHqlWhere(ddlPackBean); if (org.springframework.util.CollectionUtils.isEmpty(mesBoms)) { @@ -2180,24 +2202,47 @@ public class MesWorkOrderService extends BaseMesService implements } private List getPartPtrList(String organizeCode,String workCenterCode, List partNoList) { + /** + * 2024/11/16 + * PTR生效 + * 1.有开始时间和结束时间 和 需要数量,达到其中一个就结束 + * 2.有开始时间无结束时间 和 需要数量 达到需要的数量结束 + * 3.有开始时间无结束时间,无结束数量 一直替换 + */ DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", partPtrPackBean); DdlPreparedPack.getInPackList(partNoList, "srcPartNo", partPtrPackBean); - DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "startTime", partPtrPackBean); - DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "endTime", partPtrPackBean); - DdlPreparedPack.getIsNotNull("prtVehicleCount", partPtrPackBean); + DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "startTime", partPtrPackBean); List partPtrList = partPtrRao.findByHqlWhere(partPtrPackBean); + /** + * 有开始时间 和 无结束时间 和 需要的数量,只有达到数量才结束 + */ + + DdlPackBean part1PtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", part1PtrPackBean); + DdlPreparedPack.getInPackList(partNoList, "srcPartNo", part1PtrPackBean); + DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "startTime", part1PtrPackBean); + DdlPreparedPack.getIsNotNull("prtVehicleCount", part1PtrPackBean); + DdlPreparedPack.getIsNull("endTime", part1PtrPackBean); + List partPtrList1 = partPtrRao.findByHqlWhere(part1PtrPackBean); + partPtrList.addAll(partPtrList1); + partPtrList = partPtrList.stream().filter(item -> item.getPrtVehicleCount() != null && item.getPrtVehicleCount() > 0) .filter(item-> item.getPrtVehicleCount() > item.getPrtVehicleActualCount()) .collect(Collectors.toList()); - return partPtrList; - } + /** + * 有开始时间 和 无结束时间 和 无需要的数量 + */ - //根据排序信息PTR零件号 获取 ptr信息 - private List getCustPartPtrList(List ptrInfoList,String organizeCode){ - DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(ptrInfoList, "seqInfoPrtPart", partPtrPackBean); - return partPtrRao.findByHqlWhere(partPtrPackBean); + DdlPackBean part2PtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", part2PtrPackBean); + DdlPreparedPack.getInPackList(partNoList, "srcPartNo", part2PtrPackBean); + DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "startTime", part2PtrPackBean); + DdlPreparedPack.getIsNull("prtVehicleCount", part2PtrPackBean); + DdlPreparedPack.getIsNull("endTime", part2PtrPackBean); + List partPtrList2 = partPtrRao.findByHqlWhere(part2PtrPackBean); + partPtrList.addAll(partPtrList2); + return partPtrList; } private MesPartProdGroup getMesPartProdGroup(String organizeCode, String workCenterCode) { @@ -2254,7 +2299,6 @@ public class MesWorkOrderService extends BaseMesService implements orderAssembly.setCraftCode(sortCfg.getCraftCode()); orderAssembly.setRouteSeq(sortCfg.getRouteSeq()); orderAssembly.setWorkCellCode(sortCfg.getWorkCellCode()); - orderAssembly.setOrderPartId(orderPart.getId().toString()); orderAssembly.setEquipmentCode(sortCfg.getEquipmentCode()); orderAssembly.setReportType(sortCfg.getReportType()); if (sortCfg.getReportType() != null && sortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ @@ -2519,4 +2563,15 @@ public class MesWorkOrderService extends BaseMesService implements return mesProductVersion; } + private String getCarRemark(String custCode,String carModelCode,String organizeCode){ + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(custCode,"custCode",ddlPackBean); + DdlPreparedPack.getStringEqualPack(carModelCode,"carModelCode",ddlPackBean); + List carModelList = customerCarModelRepository.findByHqlTopWhere(ddlPackBean, 1); + if (carModelList != null && !carModelList.isEmpty()){ + return carModelList.get(0).getRemark(); + } + return ""; + } + }