From 66dcc038b2f967f04c7bf77d778e8f9a37409b25 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Sun, 17 Nov 2024 15:01:16 +0800 Subject: [PATCH] =?UTF-8?q?PTR=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 --- .../serviceimpl/busi/MesCreateWorkOrderImpl.java | 414 +++++++++++---------- 1 file changed, 215 insertions(+), 199 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 057508c..ca6deea 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 @@ -87,12 +87,12 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { @Transactional(propagation = Propagation.REQUIRES_NEW) - public void createWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo,Long productSeq) { + public void createWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo,Long productSeq) { //判断vin是否已经生成了S单,如果已经生成S单 则不再生成工单 String vinCode = sortInfo.getVinCode(); DdlPackBean existPackBean = DdlPackBean.getDdlPackBean(sortInfo.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(vinCode,"vinCode",existPackBean); + DdlPreparedPack.getStringEqualPack(vinCode, "vinCode", existPackBean); // DdlPreparedPack.getStringEqualPack(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue(),"orderFlag",existPackBean); List workOrderList = mesWorkOrderRao.findByHqlWhere(existPackBean); if (!workOrderList.isEmpty()) { @@ -118,9 +118,9 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { mesWorkOrder.setWorkCenterCode(partProdGroup.getWorkCenterCode()); //根据产线查找区域代码 DdlPackBean centerPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(partProdGroup.getWorkCenterCode(),"workCenterCode", centerPackBean); + DdlPreparedPack.getStringEqualPack(partProdGroup.getWorkCenterCode(), "workCenterCode", centerPackBean); List workCenterList = workCenterRao.findByHqlTopWhere(centerPackBean, 1); - if (!workCenterList.isEmpty()){ + if (!workCenterList.isEmpty()) { mesWorkOrder.setAreaCode(workCenterList.get(0).getAreaCode()); } mesWorkOrder.setWorkCellCode(mesPartProdGroupDetail.getWorkCellCode()); @@ -150,7 +150,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { DdlPreparedPack.getStringEqualPack(mesPartProdGroupDetail.getWorkCenterCode(), "workCenterCode", shiftPackBean); List shiftList = mesShiftRao.findByHqlWhere(shiftPackBean); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date=new Date(); + Date date = new Date(); try { date = sdf.parse(sortInfo.getMatchTime()); } catch (ParseException e) { @@ -161,17 +161,17 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { int hours = calendar.get(Calendar.HOUR_OF_DAY); int minutes = calendar.get(Calendar.MINUTE); - long shiftTime = Long.parseLong(String.format("%02d:%02d:00", hours, minutes).replaceAll(":","")); + long shiftTime = Long.parseLong(String.format("%02d:%02d:00", hours, minutes).replaceAll(":", "")); if (!shiftList.isEmpty()) { for (MesShift shift : shiftList) { long startTime = Long.parseLong(shift.getStartTime().replaceAll(":", "")); long endTime = Long.parseLong(shift.getEndTime().replaceAll(":", "")); - if (startTime < endTime){ + if (startTime < endTime) { if (shiftTime >= startTime && shiftTime < endTime) { mesWorkOrder.setShiftName(shift.getShiftName()); mesWorkOrder.setShiftCode(shift.getShiftCode()); } - }else { + } else { if (shiftTime >= startTime || shiftTime < endTime) { mesWorkOrder.setShiftName(shift.getShiftName()); mesWorkOrder.setShiftCode(shift.getShiftCode()); @@ -204,9 +204,9 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { * bom也需要根据生产零件号拆分 */ MesBom bom = mesBomService.findBom(organizeCode, prodVersion == null ? null : prodVersion.getAlternativePartList(), mesPartProdGroupDetail.getProductPartNo()); - if (bom != null){ + if (bom != null) { mesWorkOrder.setBomCode(bom.getBomCode()); - }else { + } else { log.info("工厂:{},生产零件号:{}没有维护bom", organizeCode, mesPartProdGroupDetail.getProductPartNo()); return; } @@ -266,32 +266,32 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { Calendar custCalendar = Calendar.getInstance(); custCalendar.setTime(new Date()); - GenSerialNoModel custGenSerialNoModel= new GenSerialNoModel("WH_CUST_SN_RULE"); + GenSerialNoModel custGenSerialNoModel = new GenSerialNoModel("WH_CUST_SN_RULE"); String partNo = mesWorkOrder.getCustPartNo(); String prefix = partNo.substring(0, partNo.length() - 4); String partNo4 = partNo.substring(partNo.length() - 4).toUpperCase(); - custGenSerialNoModel.setPartNo(prefix+partNo4); - String year = custCalendar.get(Calendar.YEAR)+""; + custGenSerialNoModel.setPartNo(prefix + partNo4); + String year = custCalendar.get(Calendar.YEAR) + ""; custGenSerialNoModel.setYear(year.substring(2)); - custGenSerialNoModel.setDay(String.format("%03d",custCalendar.get(Calendar.DAY_OF_YEAR))); + custGenSerialNoModel.setDay(String.format("%03d", custCalendar.get(Calendar.DAY_OF_YEAR))); List custNumRuleList = syncFuncService.syncSerialNo(custGenSerialNoModel, "edi", organizeCode, 1).getResultList(); // [)>%RS%06%GS%Y,4110000000000X,%GS%P,%GS%12V,545238347,%GS%T1A,A2B4C,%RS%%EOT% //截取替换为ascii码 String snOriginal = custNumRuleList.get(0); String[] split = snOriginal.split("%RS%"); StringBuilder rsStr = new StringBuilder(); - for (int i = 0; i < split.length-1; i++) { + for (int i = 0; i < split.length - 1; i++) { rsStr.append(split[i]).append((char) 30); } rsStr.append(split[split.length - 1]); StringBuilder gsStr = new StringBuilder(); String[] split1 = rsStr.toString().split("%GS%"); - for (int i = 0; i < split1.length-1; i++) { + for (int i = 0; i < split1.length - 1; i++) { gsStr.append(split1[i]).append((char) 29); } - gsStr.append(split1[split1.length-1]); + gsStr.append(split1[split1.length - 1]); String[] split2 = gsStr.toString().split("%EOT%"); - String sn = split2[0]+(char)4; + String sn = split2[0] + (char) 4; //保存条码 mesWorkOrder.setCustSn(sn); @@ -301,6 +301,18 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { //打散bom使用生产零件号 workOrderPartList = dismantleBom(mesPartProdGroupDetail.getProductPartNo(), mesWorkOrder.getQty(), sortInfo.getMatchTime(), bom.getBomCode(), sortInfo.getOrganizeCode(), mesPartProdGroupDetail.getWorkCellCode(), mesWorkOrder.getWorkOrderNo()); } + + /** + * 工单号修改 + * {ORG}{dynamicRule}{dynamicRule}{dynamicrule}{serialNo} + * 工厂代码+工单类型 +客户工厂代码+班次+流水号 + */ + GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_NO_WU_HAN"); + List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); + String serialNo = resultList.get(0).replace("MES_WORK_ORDER_NO_WU_HAN", ""); + String orderNoWuHan = organizeCode + mesWorkOrder.getOrderFlag() + sortInfo.getCustOrderCode() + mesWorkOrder.getShiftCode() + serialNo; + mesWorkOrder.setWorkOrderNo(orderNoWuHan); + /** * 总成拆bom,变成子零件 * 替换子零件,通过替换后的零件,去找排序工艺 @@ -313,7 +325,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { * isCustomerSendPrtInfo 1是客户发送ptr * isInterPrt 1是内部ptr */ - Map ptrRuleListMap = new HashMap<>(); +// Map ptrRuleListMap = new HashMap<>(); //是否修改为P单 boolean isModifyPOrder = false; boolean isFOrder = false; @@ -324,100 +336,112 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { * 2.有开始时间无结束时间 和 需要数量 达到需要的数量结束 * 3.有开始时间无结束时间,无结束数量 一直替换 */ - if (!workOrderPartList.isEmpty()){ - Map orderPartMap = workOrderPartList.stream().collect(Collectors.toMap(MesWorkOrderPart::getPartNo, Function.identity())); - //先替换客户的ptr信息 - String ptrInfo = mesWorkOrder.getPtrInfo(); - if (StringUtils.isNotBlank(ptrInfo)) { - List ptrInfoList = Arrays.asList(ptrInfo.replaceAll("_", "").split("\\|")); - if (!ptrInfoList.isEmpty()){ - List custPartPtrList = getCustPartPtrList(ptrInfoList, organizeCode); - 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; - } - } - } - } - } - } + /** + * 2024/11/16 + * PTR 分三种场景 --- mes_part_ptr + * 1.基于排序加工规则 mes_part_ptr 中 create_by_assembly_setting 1 true --暂时没有使用 + * 替换零件及替换装配工位 + * + * 2.不基于排序加工规则 2 false + * 替换的零件装配工位不变,只改变零件信息 + * + * 3.是否客户发送 is_cust_send_info is_customer_send_prt_info = 1 true + * 遇到就替换,不用管ptrPart的总成 + */ + //是否基于排序加工规则 + // boolean isCreateByAssemblySetting=false; + + //客户ptr信息 + StringBuilder ptrInfos = new StringBuilder(); + String ptrInfo = mesWorkOrder.getPtrInfo(); + List custPtrPartList = Arrays.asList(ptrInfo.split("\\|")); + boolean ptrFlag = false; + boolean fOrderFlag = false; + if (!workOrderPartList.isEmpty()) { + //是否基于排序加工规则--待定 + //查询装配目视项 + List assemblyList = getAssemblyList(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getCarModelCode(), workOrderPartList, partProdGroup); + //ptr信息 List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); List partPtrList = getPartPtrList(organizeCode, mesWorkOrder.getWorkCenterCode(), partNoList); - //装配件规则如果进行了零件替换 则使用ptr的规则 key 零件号,value 是规则 - List fPartPtrPartList = partPtrList.stream().filter(item -> item.getIsInterPrt() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()).map(MesPartPtr::getSrcPartNo).collect(Collectors.toList()); - - for (MesPartPtr mesPartPtr : partPtrList) { - //查询ptr总成--只有特定总成才会替换 - DdlPackBean detailPartPtr = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(),"ptrId",detailPartPtr); - DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"totalPartNo",detailPartPtr); - List ptrDetailList = partPtrDetailRao.findByHqlWhere(detailPartPtr); - if (!ptrDetailList.isEmpty()){ - //根据mesPartPtr的目标零件号,找到零件信息 - String destPartNo = mesPartPtr.getDestPartNo(); - String srcPartNo = mesPartPtr.getSrcPartNo(); - MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, organizeCode); - //更新物料清单 - MesWorkOrderPart orderPart = orderPartMap.get(srcPartNo); - if (orderPart != null) { - MesPartPtrDetail mesPartPtrDetail = ptrDetailList.get(0); - orderPart.setPartNo(mesPartSap.getPartNo()); - orderPart.setPartName(mesPartSap.getPartName()); - orderPart.setShippingPartNo(mesPartSap.getPartNo()); - ptrRuleListMap.put(mesPartSap.getPartNo(), mesPartPtr.getReplacePartSnRule()); - if (!isModifyPOrder){ - isModifyPOrder = true; - } - if (fPartPtrPartList.contains(mesPartPtr.getSrcPartNo())){ - isFOrder = true; + //遍历workOrderPartList + for (MesWorkOrderPart orderPart : workOrderPartList) { + List ptr = partPtrList.stream().filter(item -> item.getSrcPartNo().equals(orderPart.getPartNo())).collect(Collectors.toList()); + if (ptr.isEmpty()) { + continue; + } + //判断是否是客户替换 + boolean isCust = false; + for (MesPartPtr mesPartPtr : ptr) { + if (custPtrPartList.contains(mesPartPtr.getSrcPartNo())) { + isCust = true; + break; + } + } + MesPartPtr mesPartPtr = null; + MesPartPtrDetail mesPartPtrDetail = null; + if (isCust) { + //查找客户发送的ptr信息 + List custPartPtrList = ptr.stream().filter(item -> item.getIsCustomerSendPrtInfo() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() && custPtrPartList.contains(item.getSrcPartNo())).collect(Collectors.toList()); + if (!custPartPtrList.isEmpty()) { + mesPartPtr = custPartPtrList.get(0); + } + } else { + //获取相同总成的ptrId 在ptr详情中 + List custPartPtrList = ptr.stream().filter(item -> item.getIsCustomerSendPrtInfo() == null || item.getIsCustomerSendPrtInfo() != CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()).collect(Collectors.toList()); + if (!custPtrPartList.isEmpty()) { + mesPartPtr = custPartPtrList.get(0); + //查询ptr总成--只有特定总成才会替换 + DdlPackBean detailPartPtr = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(), "ptrId", detailPartPtr); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(), "totalPartNo", detailPartPtr); + List ptrDetailList = partPtrDetailRao.findByHqlWhere(detailPartPtr); + if (!ptrDetailList.isEmpty()) { + mesPartPtrDetail = ptrDetailList.get(0); } - mesWorkOrder.setRemark(mesPartPtr.getRemark()); - String ptrInfoStr = "INFO"+mesPartPtr.getId()+"|PART"+mesPartPtrDetail.getId(); - mesWorkOrder.setPtrInfo(ptrInfoStr); - //更新mes_part_ptr的实际数量 + 1 - mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1); - ConvertBean.saveOrUpdate(mesPartPtr,"JOB"); - partPtrRao.update(mesPartPtr); - mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1); - ConvertBean.saveOrUpdate(mesPartPtrDetail,"JOB"); - partPtrDetailRao.update(mesPartPtrDetail); - //更新mes_part_ptr_detail 的workOrder.partNo 数量加 1 ;替换了几次还是什么 } } - } - } - // 生成装配件清单 - if (!isFOrder){ - if (isModifyPOrder){ - mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue()); - }else { - mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); + if (!isCust && mesPartPtrDetail == null) { + continue; + } + + ptrFlag = true; + if (!isCust && mesPartPtr.getIsInterPrt()==CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()){ + fOrderFlag = true; + } + //将工单类零件表替换位PTR条件中维护的替换零件 + MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(mesPartPtr.getDestPartNo(), organizeCode); + orderPart.setPartNo(mesPartSap.getPartNo()); + orderPart.setPartName(mesPartSap.getPartName()); + //更新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); + } + List orderAssemblyList = assemblyList.stream().filter(item -> item.getAssemblyPartNo().equals(orderPart.getPartNo())).collect(Collectors.toList()); + MesWorkOrderAssembly orderAssembly = orderAssemblyList.get(0); + orderAssembly.setAssemblyPartNo(mesPartSap.getPartNo()); + orderAssembly.setAssemblyPartName(mesPartSap.getPartName()); + orderAssembly.setMatchRule(mesPartPtr.getReplacePartSnRule()); + ptrInfos.append("INFO|").append(mesPartPtr.getId()); + if (mesPartPtrDetail != null) { + ptrInfos.append("PART|").append(mesPartPtrDetail.getId()); + } } - }else { + + } + if (ptrFlag && !fOrderFlag){ + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue()); + }else if (ptrFlag){ mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.F.getValue()); + }else { + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); } - /** - * 工单号修改 - * {ORG}{dynamicRule}{dynamicRule}{dynamicrule}{serialNo} - * 工厂代码+工单类型 +客户工厂代码+班次+流水号 - */ - GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_NO_WU_HAN"); - List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); - String serialNo = resultList.get(0).replace("MES_WORK_ORDER_NO_WU_HAN", ""); - String orderNoWuHan=organizeCode+mesWorkOrder.getOrderFlag()+sortInfo.getCustOrderCode()+mesWorkOrder.getShiftCode() + serialNo; - mesWorkOrder.setWorkOrderNo(orderNoWuHan); List assemblyList = new ArrayList<>(); if (!workOrderPartList.isEmpty()) { for (MesWorkOrderPart orderPart : workOrderPartList) { @@ -426,101 +450,83 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { ConvertBean.saveOrUpdate(orderPart, "MES-JOB"); } workOrderPartRao.saveAll(workOrderPartList); - assemblyList = getAssemblyList(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getCarModelCode(), workOrderPartList, partProdGroup); - } -// /** -// * 生产序号 -// * 工厂-产线-9位流水号,跳号10 -// */ -// GenSerialNoModel prodSeqSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_SEQ_WU_HAN"); -// prodSeqSerialNoModel.setProdLocation(mesWorkOrder.getWorkCenterCode()); -// List proSeqResultList = syncFuncService.syncSerialNo(prodSeqSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); -// String proSeqStr = proSeqResultList.get(0); - mesWorkOrder.setProductSeq(productSeq); - - mesWorkOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); - ConvertBean.saveOrUpdate(mesWorkOrder, "MES-JOB"); - mesWorkOrderRao.insert(mesWorkOrder); - - /** - * 插入工单打印队列数据 - */ - mesWorkOrderService.doSaveWorkOrderPrintQueue(mesWorkOrder); - if (!assemblyList.isEmpty()) { - for (MesWorkOrderAssembly orderAssembly : assemblyList) { - if (ptrRuleListMap.get(orderAssembly.getPartNo()) != null){ - orderAssembly.setMatchRule(ptrRuleListMap.get(orderAssembly.getPartNo())); + mesWorkOrder.setProductSeq(productSeq); + mesWorkOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); + ConvertBean.saveOrUpdate(mesWorkOrder, "MES-JOB"); + mesWorkOrderRao.insert(mesWorkOrder); + /** + * 插入工单打印队列数据 + */ + mesWorkOrderService.doSaveWorkOrderPrintQueue(mesWorkOrder); + if (!assemblyList.isEmpty()) { + for (MesWorkOrderAssembly orderAssembly : assemblyList) { + orderAssembly.setPartNo(mesWorkOrder.getPartNo()); + orderAssembly.setPartName(mesWorkOrder.getPartName()); + orderAssembly.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + orderAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()); + orderAssembly.setOrganizeCode(organizeCode); + orderAssembly.setProductSn(mesWorkOrder.getWorkOrderNo()); + orderAssembly.setAreaCode(mesWorkOrder.getAreaCode()); + ConvertBean.saveOrUpdate(orderAssembly, "MES-JOB"); } - orderAssembly.setPartNo(mesWorkOrder.getPartNo()); - orderAssembly.setPartName(mesWorkOrder.getPartName()); - orderAssembly.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); - orderAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()); - orderAssembly.setOrganizeCode(organizeCode); - orderAssembly.setProductSn(mesWorkOrder.getWorkOrderNo()); - orderAssembly.setAreaCode(mesWorkOrder.getAreaCode()); - ConvertBean.saveOrUpdate(orderAssembly, "MES-JOB"); - } - workOrderAssemblyRao.saveAll(assemblyList); - - List cellCodeList = assemblyList.stream().map(MesWorkOrderAssembly::getWorkCellCode).distinct().collect(Collectors.toList()); - Map> cellCodeMap = assemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkCellCode)); - for (String cellCode : cellCodeList) { - MesQueueOrder mesQueueOrder = new MesQueueOrder(); - mesQueueOrder.setCarModelCode(mesWorkOrder.getCarModelCode()); - mesQueueOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); - mesQueueOrder.setOrganizeCode(organizeCode); - mesQueueOrder.setWorkCellCode(cellCode); - mesQueueOrder.setPartProdGroupCode(partProdGroup.getPartProdGroupCode()); - mesQueueOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); - mesQueueOrder.setProcessSeq(cellCodeMap.get(cellCode).get(0).getProcessSeq()); - mesQueueOrder.setPartNo(mesWorkOrder.getPartNo()); - mesQueueOrder.setPartName(mesWorkOrder.getPartName()); - mesQueueOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); - mesQueueOrder.setSerialNumber(mesWorkOrder.getWorkOrderNo()); - mesQueueOrder.setProductSn(mesWorkOrder.getWorkOrderNo()); - mesQueueOrder.setCustSn(mesWorkOrder.getCustSn()); - mesQueueOrder.setStatus(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()); - mesQueueOrder.setProductSeq(mesWorkOrder.getProductSeq()); - mesQueueOrder.setWorkOrderSeq(mesWorkOrder.getWorkOrderSeq()); - mesQueueOrder.setCustPartNo(mesWorkOrder.getCustPartNo()); - mesQueueOrder.setCustOrderNo(mesWorkOrder.getCustOrderNo()); - mesQueueOrder.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); - mesQueueOrder.setAreaCode(mesWorkOrder.getAreaCode()); - mesQueueOrder.setOrderFlag(mesWorkOrder.getOrderFlag()); - ConvertBean.saveOrUpdate(mesQueueOrder, "MES-JOB"); - queueOrderRao.insert(mesQueueOrder); + workOrderAssemblyRao.saveAll(assemblyList); + + List cellCodeList = assemblyList.stream().map(MesWorkOrderAssembly::getWorkCellCode).distinct().collect(Collectors.toList()); + Map> cellCodeMap = assemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkCellCode)); + for (String cellCode : cellCodeList) { + MesQueueOrder mesQueueOrder = new MesQueueOrder(); + mesQueueOrder.setCarModelCode(mesWorkOrder.getCarModelCode()); + mesQueueOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setOrganizeCode(organizeCode); + mesQueueOrder.setWorkCellCode(cellCode); + mesQueueOrder.setPartProdGroupCode(partProdGroup.getPartProdGroupCode()); + mesQueueOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); + mesQueueOrder.setProcessSeq(cellCodeMap.get(cellCode).get(0).getProcessSeq()); + mesQueueOrder.setPartNo(mesWorkOrder.getPartNo()); + mesQueueOrder.setPartName(mesWorkOrder.getPartName()); + mesQueueOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setSerialNumber(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setProductSn(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setCustSn(mesWorkOrder.getCustSn()); + mesQueueOrder.setStatus(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()); + mesQueueOrder.setProductSeq(mesWorkOrder.getProductSeq()); + mesQueueOrder.setWorkOrderSeq(mesWorkOrder.getWorkOrderSeq()); + mesQueueOrder.setCustPartNo(mesWorkOrder.getCustPartNo()); + mesQueueOrder.setCustOrderNo(mesWorkOrder.getCustOrderNo()); + mesQueueOrder.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); + mesQueueOrder.setAreaCode(mesWorkOrder.getAreaCode()); + mesQueueOrder.setOrderFlag(mesWorkOrder.getOrderFlag()); + ConvertBean.saveOrUpdate(mesQueueOrder, "MES-JOB"); + queueOrderRao.insert(mesQueueOrder); + } + } + //生成条码表 + MesProduceSn mesProduceSn = new MesProduceSn(); + mesProduceSn.setProductSn(mesWorkOrder.getWorkOrderNo()); + mesProduceSn.setCustSn(mesWorkOrder.getCustSn()); + mesProduceSn.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + mesProduceSn.setOrganizeCode(organizeCode); + mesProduceSn.setFid(UUID.randomUUID().toString()); + mesProduceSn.setCustCode(mesWorkOrder.getCustCode()); + mesProduceSn.setCustPartNo(mesWorkOrder.getCustPartNo()); + mesProduceSn.setPartNo(mesWorkOrder.getPartNo()); + mesProduceSn.setPartName(mesWorkOrder.getPartName()); + mesProduceSn.setShiftCode(mesWorkOrder.getShiftCode()); + mesProduceSn.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); + mesProduceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); + mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + mesProduceSn.setQty(1.0); + mesProduceSn.setSerialNumber(mesWorkOrder.getWorkOrderNo()); + mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()); + mesProduceSn.setSnType(MesExtEnumUtil.PRODUCE_SN_TYPE.STANDARD.getValue()); + mesProduceSn.setFid(UUID.randomUUID().toString()); + mesProduceSn.setAreaCode(mesWorkOrder.getAreaCode()); + ConvertBean.saveOrUpdate(mesProduceSn, "MES-JOB"); + mesProduceSnRao.insert(mesProduceSn); } - - //生成条码表 - MesProduceSn mesProduceSn = new MesProduceSn(); - mesProduceSn.setProductSn(mesWorkOrder.getWorkOrderNo()); - mesProduceSn.setCustSn(mesWorkOrder.getCustSn()); - mesProduceSn.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); - mesProduceSn.setOrganizeCode(organizeCode); - mesProduceSn.setFid(UUID.randomUUID().toString()); - mesProduceSn.setCustCode(mesWorkOrder.getCustCode()); - mesProduceSn.setCustPartNo(mesWorkOrder.getCustPartNo()); - mesProduceSn.setPartNo(mesWorkOrder.getPartNo()); - mesProduceSn.setPartName(mesWorkOrder.getPartName()); - mesProduceSn.setShiftCode(mesWorkOrder.getShiftCode()); - mesProduceSn.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); - mesProduceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); - mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); - mesProduceSn.setQty(1.0); - mesProduceSn.setSerialNumber(mesWorkOrder.getWorkOrderNo()); - mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()); - mesProduceSn.setSnType(MesExtEnumUtil.PRODUCE_SN_TYPE.STANDARD.getValue()); - mesProduceSn.setFid(UUID.randomUUID().toString()); - mesProduceSn.setAreaCode(mesWorkOrder.getAreaCode()); - ConvertBean.saveOrUpdate(mesProduceSn, "MES-JOB"); - mesProduceSnRao.insert(mesProduceSn); - - - } - private List getAssemblyList(String workCenterCode, String vehicleNo, List workOrderPartList, MesPartProdGroup mesPartProdGroup) { //TM_BAS_WORK_ORDER_ASSEMBLY_SETTING 对应 mes_prod_rule_sort_cfg 排序生产规则 @@ -569,7 +575,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { // orderAssembly.setPartNo(orderPart.getPartNo()); // orderAssembly.setPartName(orderPart.getPartName()); orderAssembly.setWorkCellCode(sortCfg.getWorkCellCode()); - orderAssembly.setOrderPartId(orderPart.getId().toString()); +// 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()){ @@ -671,6 +677,19 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { return workOrderAssemblyList; } + private MesProdRuleSortCfg getSortRuleCfg (String organizeCode,String workCenterCode,String partNo ){ + DdlPackBean prodRuleSortPackBean = DdlPackBean.getDdlPackBean(organizeCode); +// DdlPreparedPack.getStringEqualPack(mesPartProdGroup.getPartProdGroupCode(),"productGroupCode",prodRuleSortPackBean); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPackBean); + DdlPreparedPack.getStringEqualPack(partNo, "assemblyPartNo", prodRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 + List sortCfgList = mesProdRuleSortCfgRao.findByHqlTopWhere(prodRuleSortPackBean,1); + + if (sortCfgList != null && !sortCfgList.isEmpty()){ + return sortCfgList.get(0); + } + return null; + } private List dismantleBom(String partNo, double qty, String productTime, String bomCode, String organizeCode, String workCellCode, String workOrderNo) { List orderPartList = new ArrayList<>(); @@ -764,6 +783,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { return mesProductVersionList.isEmpty() ? null : mesProductVersionList.get(0); } + private List getPartPtrList(String organizeCode,String workCenterCode, List partNoList) { /** * 2024/11/16 @@ -777,10 +797,6 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { DdlPreparedPack.getInPackList(partNoList, "srcPartNo", partPtrPackBean); DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "startTime", partPtrPackBean); List partPtrList = partPtrRao.findByHqlWhere(partPtrPackBean); - DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "endTime", partPtrPackBean); - DdlPreparedPack.getIsNotNull("prtVehicleCount", partPtrPackBean); - DdlPreparedPack.getIsNotNull("endTime", partPtrPackBean); - /** * 有开始时间 和 无结束时间 和 需要的数量,只有达到数量才结束 */