diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesCreateWorkOrder.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesCreateWorkOrder.java new file mode 100644 index 0000000..e5f543f --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesCreateWorkOrder.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.ext.mes.api.busi; + +import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroup; +import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupDetail; +import cn.estsh.i3plus.pojo.mes.bean.MesPartSap; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo; + +public interface IMesCreateWorkOrder { + /** + * 武汉按包装圆整事务管理 + * @param partProdGroup + * @param mesPartProdGroupDetail + * @param partSap + * @param sortInfo + */ + void createWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo); + + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index e92b22b..1382918 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.api.base.strategy.IRoundnessStrategy; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesBomService; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesPartSapService; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesWorkOrderService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi.MesCreateWorkOrderImpl; import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.TimeTool; @@ -97,6 +98,9 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { @Autowired private MesPartPtrDetailRepository partPtrDetailRao; + @Autowired + private MesCreateWorkOrderImpl mesCreateWorkOrder; + @Override public void execute(MesPartProdGroup partProdGroup, List sortInfoList, List details) { try { @@ -183,8 +187,8 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { return; } - - doCreateWorkOrder(partProdGroup, mesPartProdGroupDetail, mesPart, sortInfo); + mesCreateWorkOrder.createWorkOrder(partProdGroup, mesPartProdGroupDetail, mesPart, sortInfo); +// doCreateWorkOrder(partProdGroup, mesPartProdGroupDetail, mesPart, sortInfo); qty -= custQty; sortInfoList.remove(sortInfo); // 更新排序信息 已完成 @@ -734,9 +738,6 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { return workOrderAssemblyList; } - - - private List dismantleBom(String partNo, double qty, String productTime, String bomCode, String organizeCode, String workCellCode, String workOrderNo) { List orderPartList = new ArrayList<>(); 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 new file mode 100644 index 0000000..7a37c2f --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java @@ -0,0 +1,728 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.api.busi.IMesCreateWorkOrder; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesBomService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesPartSapService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesWorkOrderService; +import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { + @Autowired + private MesPartSapRepository mesPartSapRao; + + @Autowired + private MesProductVersionRepository mesProductVersionRao; + + @Autowired + private MesWorkOrderRepository mesWorkOrderRao; + + + @Autowired + private MesShiftRepository mesShiftRao; + + + @Autowired + private MesBomService mesBomService; + + @Autowired + private MesBomRepository bomRao; + + @Autowired + private MesProdRuleSortCfgRepository mesProdRuleSortCfgRao; + + @Autowired + private MesWorkOrderPartRepository workOrderPartRao; + + @Autowired + private MesWorkOrderAssemblyRepository workOrderAssemblyRao; + + @Autowired + private ISyncFuncService syncFuncService; + + + @Autowired + private MesPartPtrRepository partPtrRao; + + @Autowired + private MesPartSapService mesPartSapService; + + @Autowired + private MesProduceSnRepository mesProduceSnRao; + + @Autowired + private MesQueueOrderRepository queueOrderRao; + + @Autowired + private MesWorkOrderService mesWorkOrderService; + + @Autowired + private MesWorkCenterRepository workCenterRao; + + @Autowired + private MesPartPtrDetailRepository partPtrDetailRao; + + + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void createWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo) { + + String organizeCode = partProdGroup.getOrganizeCode(); + MesWorkOrder mesWorkOrder = new MesWorkOrder(); + mesWorkOrder.setCustCode(partProdGroup.getCustCode()); + //工单版本号 + mesWorkOrder.setProductVersion("1"); + //工单类型 + mesWorkOrder.setWorkOrderType(MesExtEnumUtil.ORDER_TYPE.SORT.getValue()); + //订单序号=客户排序信息的序号 + mesWorkOrder.setWorkOrderSeq(sortInfo.getCustInfoSeq().toString()); + mesWorkOrder.setOrganizeCode(sortInfo.getOrganizeCode()); + mesWorkOrder.setWorkCenterCode(partProdGroup.getWorkCenterCode()); + //根据产线查找区域代码 + DdlPackBean centerPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partProdGroup.getWorkCenterCode(),"workCenterCode", centerPackBean); + List workCenterList = workCenterRao.findByHqlTopWhere(centerPackBean, 1); + if (!workCenterList.isEmpty()){ + mesWorkOrder.setAreaCode(workCenterList.get(0).getAreaCode()); + } + mesWorkOrder.setWorkCellCode(mesPartProdGroupDetail.getWorkCellCode()); + + //来源 + mesWorkOrder.setWorkOrderSource(sortInfo.getId().toString()); + + mesWorkOrder.setVinCode(sortInfo.getVinCode()); + mesWorkOrder.setProductTime(sortInfo.getMatchTime()); + mesWorkOrder.setProduceTime(sortInfo.getMatchTime()); + mesWorkOrder.setPlanStartTime(sortInfo.getMatchTime()); + mesWorkOrder.setPlanEndTime(sortInfo.getInfoPointTime()); + mesWorkOrder.setPtrInfo(sortInfo.getRemark()); + //客户订单号 + mesWorkOrder.setCustOrderNo(sortInfo.getCustOrderCode()); + //车型代码 + mesWorkOrder.setCarModelCode(sortInfo.getVehicleCategory()); + //车型描述 mesWorkOrder.setCarName = vehicleClassCode + + //备注取自于车型配置表中 + //todo 根据VehicleNo车型代码,sortInfo.custCode,sortInfo.CustPlantCode,organizeCode 查询表TI_CIM_VEHICLE_MODEL的 remark 作为从车型配置表中获取打印备注信息 + + mesWorkOrder.setCustPartNo(sortInfo.getCustPartNo()); + // 11. 是否将生成日期减一天 + // 班次 根据产线+计划时间匹配班次 + DdlPackBean shiftPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(mesPartProdGroupDetail.getWorkCenterCode(), "workCenterCode", shiftPackBean); + List shiftList = mesShiftRao.findByHqlWhere(shiftPackBean); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); + Date date=new Date(); + try { + date = sdf.parse(sortInfo.getMatchTime()); + } catch (ParseException e) { + log.error("解析时间报错,无法转换成时间,matchTime:{}", sortInfo.getMatchTime()); + } + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + 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(":","")); + 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 (shiftTime > startTime && shiftTime < endTime) { + mesWorkOrder.setShiftName(shift.getShiftName()); + mesWorkOrder.setShiftCode(shift.getShiftCode()); + } + }else { + if (shiftTime < startTime && shiftTime > endTime) { + mesWorkOrder.setShiftName(shift.getShiftName()); + mesWorkOrder.setShiftCode(shift.getShiftCode()); + } + } + } + } else { + log.info("当前产线:{} 没有配置班次", mesPartProdGroupDetail.getWorkCenterCode()); + } + //零件相关 + mesWorkOrder.setPartNo(partSap.getPartNo()); + mesWorkOrder.setPartName(partSap.getPartName()); + + //工单号生成规则 【工厂号+yyyyMMdd+5位流水】 + + // 13.生产版本 organizeCode + partNo + MesProductVersion prodVersion = getProdVersion(organizeCode, partSap.getPartNo()); + if (prodVersion == null) { + log.info("请配置工厂:{},partNo:{}的生产版本", mesPartProdGroupDetail.organizeCode, partSap.getPartNo()); + } else { + String productVersion = prodVersion.getProductVersion(); + mesWorkOrder.setProductVersion(productVersion); + } + + // bom prodVersion.alternativePartList bom版本 + MesBom bom = mesBomService.findBom(organizeCode, prodVersion == null ? null : prodVersion.getAlternativePartList(), partSap.getPartNo()); + if (bom != null){ + mesWorkOrder.setBomCode(bom.getBomCode()); + } + + mesWorkOrder.setQty(sortInfo.getQty()); + mesWorkOrder.setUnCompleteQty(sortInfo.getQty()); + mesWorkOrder.setUnit(partSap.getUnit()); + + if (partProdGroup.getIsAutoRelease() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { + mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); + } else { + mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); + } + + mesWorkOrder.setPartProdGroupCode(partProdGroup.getPartProdGroupCode()); + mesWorkOrder.setCarModelCode(sortInfo.getVehicleNo()); + mesWorkOrder.setFid(UUID.randomUUID().toString()); + mesWorkOrder.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + /** + * RS 为记录分隔符ASCII:30 + * GS 为分组符ASCII:29 + * EOT 为传输结束符ASCII:04 + * {splitRule} [)>%RS%06%GS%Y + * {splitRule} vpps= 4110000000000X + * {splitRule} %GS%P + * {partNo} 8位客户零件号 + * {splitRule} %GS%12V + * {splitRule} duns 545238347 + * {splitRule} %GS%T1A + * {yydayofyear} + * {splitRule} A2B4C + * {serialNo} 4位 步长1 + * {splitRule}%RS%%EOT% + *{spiltRule}{spiltRule}{spiltRule}{partNo}{spiltRule}{spiltRule}{spiltRule}{year}{day}{spiltRule}{serialNo}{spiltRule} + * [)>%RS%06%GS%Y,4110000000000X,%GS%P,%GS%12V,545238347,%GS%T1A,A2B4C,%RS%%EOT% + * 通用二维码组成部分('RS'为记录分隔符ASCII:30,'GS'为分组符ASCII:29,'EOT'为传输结束符ASCII:04) + * [)>+'RS'+06+'GS'+Y+vpps+'GS'+P+8位客户零件号+'GS'+12V+DUNS+'GS'+T+1位line num+1位班次号+2位年份+3位天数+1位追溯(精确追溯A,批次追溯@)+2工程更改记录+2位自定义+4位流水号+'RS'+'EOT' + * 如:[)>+'RS'+06+'GS'+Y+4110000000000X+'GS'+P+12345678+'GS'+12V+545295227+'GS'+T+1A13304A2B4C0001+'RS'+'EOT' + * + * vpps = Y00000000000000 + * 8位客户零件号=最后四位要大写 + * Duns是什么? + * 1位lineNumber是什么? 固定值 1 + * 1位班次号是什么? + * 2位年YY 24 + * 3位天-~365/366 + * 追溯 + * A--精确追溯 + * @--批次追溯 + * + * 2位工程更改记录 + * 2位供应商自定义信息 + * 4位流水号,当班班次计数,每班班次归零 + * + * WH_CUST_SN_RULE + */ + + Calendar custCalendar = Calendar.getInstance(); + custCalendar.setTime(new Date()); + 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.setYear(year.substring(2)); + 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++) { + 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++) { + gsStr.append(split1[i]).append((char) 29); + } + gsStr.append(split1[split1.length-1]); + String[] split2 = gsStr.toString().split("%EOT%"); + String sn = split2[0]+(char)4; + //保存条码 + mesWorkOrder.setCustSn(sn); + + // 打散bom + List workOrderPartList = new ArrayList<>(); + if (partProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { + workOrderPartList = dismantleBom(partSap.getPartNo(), mesWorkOrder.getQty(), sortInfo.getMatchTime(), bom.getBomCode(), sortInfo.getOrganizeCode(), mesPartProdGroupDetail.getWorkCellCode(), mesWorkOrder.getWorkOrderNo()); + + } + /** + * 总成拆bom,变成子零件 + * 替换子零件,通过替换后的零件,去找排序工艺 + */ + Map ptrRuleListMap = new HashMap<>(); + //是否修改为P单 + boolean isModifyPOrder = false; + //查询mes_part_ptr表,根据物料清单查找ptr替换信息 + 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.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; + } + } + } + } + } + List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); + List partPtrList = getPartPtrList(organizeCode, mesWorkOrder.getWorkCenterCode(), partNoList); + //装配件规则如果进行了零件替换 则使用ptr的规则 key 零件号,value 是规则 + + 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); + } + //更新mes_part_ptr_detail 的workOrder.partNo 数量加 1 ;替换了几次还是什么 + } + } + } + + // 生成装配件清单 + if (isModifyPOrder){ + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.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); + + if (!workOrderPartList.isEmpty()) { + for (MesWorkOrderPart orderPart : workOrderPartList) { + orderPart.setOrganizeCode(organizeCode); + orderPart.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + ConvertBean.saveOrUpdate(orderPart, "MES-JOB"); + } + workOrderPartRao.saveAll(workOrderPartList); + } + List 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(Long.parseLong(proSeqStr.replace("MES_WORK_ORDER_SEQ_WU_HAN", ""))); + 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())); + } + 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); + } + + } + + //生成条码表 + 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 排序生产规则 + + List workOrderAssemblyList = new ArrayList<>(); + List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); + DdlPackBean prodRuleSortPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); +// DdlPreparedPack.getStringEqualPack(mesPartProdGroup.getPartProdGroupCode(),"productGroupCode",prodRuleSortPackBean); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPackBean); + DdlPreparedPack.getInPackList(partNoList, "assemblyPartNo", prodRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 + List sortCfgList = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPackBean); + List sortCfgListFilter = sortCfgList.stream().filter(item -> partNoList.contains(item.getAssemblyPartNo())).collect(Collectors.toList()); + Map> orderPartMap = workOrderPartList.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getPartNo)); + //遍历排序生产规则 + for (MesProdRuleSortCfg sortCfg : sortCfgListFilter) { + List orderPartList = orderPartMap.get(sortCfg.getAssemblyPartNo()); + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + MesWorkOrderPart orderPart = orderPartList.get(0); + //1.逻辑储量程序sortCfg.isLogicNum + if ((sortCfg.getIsLogicNum() !=null && sortCfg.getIsLogicNum() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) && (sortCfg.getLogicNum()!=null && sortCfg.getLogicNum() >0 )){ + Double total = orderPartList.stream().map(MesWorkOrderPart::getItemQty).reduce(Double::sum).get(); + if (!total.equals(sortCfg.getLogicNum())){ + log.info("零件号:{}的数量:{}对应排序规则{}的逻辑数量:{}不一致",orderPart.getPartNo(),total,sortCfg.getWorkCenterCode(),sortCfg.getLogicNum()); + continue; + } + } + //2.当排序规则的车型不为空时,则需要与参数匹配,如果不符合 则不加这个装配项 + if (StringUtils.isNotBlank(sortCfg.getVehicleNo()) && !sortCfg.getVehicleNo().equals(vehicleNo)){ + continue; + } + orderAssembly.setAssemblyPartNo(sortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(sortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(sortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(sortCfg.getWorkCenterCode()); + orderAssembly.setDisplayRule(sortCfg.getDisplayRule()); + orderAssembly.setMatchRule(sortCfg.getMatchRule()); + orderAssembly.setMatchType(sortCfg.getMatchType()); + orderAssembly.setPrintType(sortCfg.getPrintType()); + orderAssembly.setProcessCode(sortCfg.getProcessCode()); + orderAssembly.setDisplaySeq(sortCfg.getDisplaySeq()); + orderAssembly.setDisplayValue(sortCfg.getDisplayValue()); + orderAssembly.setProcessSeq(sortCfg.getProcessSeq()); + orderAssembly.setCraftName(sortCfg.getCraftName()); + orderAssembly.setCraftCode(sortCfg.getCraftCode()); + orderAssembly.setRouteSeq(sortCfg.getRouteSeq()); +// orderAssembly.setPartNo(orderPart.getPartNo()); +// orderAssembly.setPartName(orderPart.getPartName()); + 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()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(sortCfg.getReportPartNo()); + orderAssembly.setImageFileId(sortCfg.getImageFileId()); + orderAssembly.setCraftCode(sortCfg.getCraftCode()); + orderAssembly.setCraftName(sortCfg.getCraftName()); + orderAssembly.setPartTypeCode(sortCfg.getPartTypeCode()); + orderAssembly.setShowColor(sortCfg.getShowColor()); + orderAssembly.setProductPartNo(sortCfg.getProductPartNo()); + orderAssembly.setPid(sortCfg.getId()); + orderAssembly.setWorkCenterCode(workCenterCode); + workOrderAssemblyList.add(orderAssembly); + } + + //车型不为空的逻辑--用于报工 + DdlPackBean reportRuleSortPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", reportRuleSortPackBean); + DdlPreparedPack.getStringEqualPack(vehicleNo, "vehicleNo", reportRuleSortPackBean); + DdlPreparedPack.getNotInPack(partNoList, "assemblyPartNo", reportRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 + List prodCfgList = mesProdRuleSortCfgRao.findByHqlWhere(reportRuleSortPackBean); + for (MesProdRuleSortCfg ruleSortCfg : prodCfgList) { + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setAssemblyPartNo(ruleSortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(ruleSortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(ruleSortCfg.getWorkCenterCode()); + + orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule()); + orderAssembly.setMatchRule(ruleSortCfg.getMatchRule()); + orderAssembly.setMatchType(ruleSortCfg.getMatchType()); + orderAssembly.setPrintType(ruleSortCfg.getPrintType()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setCraftCode(ruleSortCfg.getCraftCode()); + orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq()); + orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode()); + orderAssembly.setReportType(ruleSortCfg.getReportType()); + if (ruleSortCfg.getReportType() != null && ruleSortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo()); + orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq()); + orderAssembly.setPid(ruleSortCfg.getId()); + orderAssembly.setImageFileId(ruleSortCfg.getImageFileId()); + orderAssembly.setPartTypeCode(ruleSortCfg.getPartTypeCode()); + orderAssembly.setMaxValue(ruleSortCfg.getMaxValue()); + orderAssembly.setMinValue(ruleSortCfg.getMinValue()); + orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo()); + workOrderAssemblyList.add(orderAssembly); + } + //查询所有共用的零件 且没有零件号,多用于螺钉---查询排序加工规则 + DdlPackBean prodRuleSortPublicPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPublicPackBean); + DdlPreparedPack.getIsNull("assemblyPartNo", prodRuleSortPublicPackBean); + List ruleSortCfgs = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPublicPackBean); + for (MesProdRuleSortCfg ruleSortCfg : ruleSortCfgs) { + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setAssemblyPartNo(ruleSortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(ruleSortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(ruleSortCfg.getWorkCenterCode()); + orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule()); + orderAssembly.setMatchRule(ruleSortCfg.getMatchRule()); + orderAssembly.setMatchType(ruleSortCfg.getMatchType()); + orderAssembly.setPrintType(ruleSortCfg.getPrintType()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setCraftCode(ruleSortCfg.getCraftCode()); + orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq()); + orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode()); + orderAssembly.setReportType(ruleSortCfg.getReportType()); + if (ruleSortCfg.getReportType() != null && ruleSortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo()); + orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq()); + orderAssembly.setPid(ruleSortCfg.getId()); + orderAssembly.setImageFileId(ruleSortCfg.getImageFileId()); + orderAssembly.setPartTypeCode(ruleSortCfg.getPartTypeCode()); + orderAssembly.setMaxValue(ruleSortCfg.getMaxValue()); + orderAssembly.setMinValue(ruleSortCfg.getMinValue()); + orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo()); + workOrderAssemblyList.add(orderAssembly); + } + return workOrderAssemblyList; + } + + private List dismantleBom(String partNo, double qty, String productTime, String bomCode, String organizeCode, String workCellCode, String workOrderNo) { + List orderPartList = new ArrayList<>(); + + //1.根据bomCode,partNo productTime organizeCode 查询bom清单 bomList + List bomList = getPlatBom(partNo, productTime, bomCode, organizeCode); + //2.根据bomList中的subPartNo 查询零件清单 partList + List partNoList = bomList.stream().map(MesBom::getItemPartNo).distinct().collect(Collectors.toList()); + + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(partNoList, "partNo", partPackBean); + List partSapList = mesPartSapRao.findByHqlWhere(partPackBean); + Map partMap = partSapList.stream().collect(Collectors.toMap(MesPartSap::getPartNo, Function.identity())); + + + for (MesBom bom : bomList) { + MesWorkOrderPart orderPart = new MesWorkOrderPart(); + MesPartSap partSap = partMap.get(bom.getItemPartNo()); + if (partSap == null) { + log.info("工厂:{},零件号:{}未查到零件信息", organizeCode, bom.getItemPartNo()); + return new ArrayList<>(); + } + List orderParts = orderPartList.stream().filter(item -> item.getPartNo().equals(partSap.getPartNo())).collect(Collectors.toList()); + if (!orderParts.isEmpty()) { + MesWorkOrderPart tempPart = orderParts.get(0); + tempPart.setItemQty(tempPart.getItemQty() + bom.getItemQty() * qty); + continue; + } + orderPart.setPartName(partSap.getPartName()); + orderPart.setPartNo(partSap.getPartNo()); + orderPart.setItemQty(bom.getItemQty() * qty); + orderPart.setItemUnit(partSap.getUnit()); + orderPart.setSourceId(bom.getId()); + orderPart.setShippingPartNo(partSap.getPartNo()); + orderPart.setWorkOrderNo(workOrderNo); + orderPart.setWorkCellCode(workCellCode); + orderPartList.add(orderPart); + } + //3.遍历bomList + return orderPartList; + } + + private List getPlatBom(String partNo, String effectiveTime, String bomCode, String organizeCode) { + if (bomCode == null) { + //首先根据虚结构的零件号查询出最新的一条bom信息作为bomCode + DdlPackBean bomCodePackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomCodePackBean); + DdlPreparedPack.getTimeBetweenCol(effectiveTime, "effStartTime", "effEndTime", bomCodePackBean, false); + DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), bomCodePackBean); + List bomList = bomRao.findByHqlTopWhere(bomCodePackBean, 1); + if (bomList == null || bomList.isEmpty()) { + return new ArrayList<>(); + } + bomCode = bomList.get(0).getBomCode(); + } + List bomResultList = new ArrayList<>(); + DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(bomCode, "bomCode", bomPackBean); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomPackBean); + DdlPreparedPack.getStringSmallerPack(effectiveTime, "effStartTime", bomPackBean); + DdlPreparedPack.getStringBiggerPack(effectiveTime, "effEndTime", bomPackBean); + List bomList = bomRao.findByHqlWhere(bomPackBean); + + for (MesBom bom : bomList) { + if (bom.getPartType() != null && bom.getPartType().equalsIgnoreCase("X")) { + getPlatBom(bom.getItemPartNo(), effectiveTime, null, organizeCode); + } else { + bom.setBomCode(bom.getBomCode().toLowerCase()); + bomResultList.add(bom); + } + + } + + return bomResultList; + } + + private MesPartSap getMesPart(String productPartNo, String organizeCode) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(productPartNo, "partNo", ddlPackBean); + List parts = mesPartSapRao.findByHqlWhere(ddlPackBean); + return parts.isEmpty() ? null : parts.get(0); + } + + private MesProductVersion getProdVersion(String organizeCode, String partNo) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); + List mesProductVersionList = mesProductVersionRao.findByHqlWhere(ddlPackBean); + return mesProductVersionList.isEmpty() ? null : mesProductVersionList.get(0); + } + + private List getPartPtrList(String organizeCode,String workCenterCode, List partNoList) { + 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); + List partPtrList = partPtrRao.findByHqlWhere(partPtrPackBean); + 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); + + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java index 9173b08..8b5ad08 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java @@ -122,18 +122,20 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { MesCimGmGepics lastCimGmGepics = gmGepicsList.get(0); //3.获取最新的一条报文信息 List gmGepicsListOne = getlastDataList(custOnlineInfo, jacInfoPoint, organizeCode, 1); - MesCimGmGepics lastOne = gmGepicsListOne.get(0); + MesCimGmGepics lastOne = !gmGepicsListOne.isEmpty() ?gmGepicsListOne.get(0) : null; if (lastOne==null){ - return new MesKanBanShowModel(); + MesKanBanShowModel mesKanBanShowModel = new MesKanBanShowModel(); + mesKanBanShowModel.setWorkOrderCenter(kanBan.getWorkCenterCode()); + return mesKanBanShowModel; } //4.获取最新工位单号 获取工单的产线和工位的最新的工单 MesWorkOrder lastWorkOrder = getLastWorkOrder(workCenterCode, workCellCode, organizeCode); //5.获取最新下线工单 MesWorkOrder lastOfflineOrder = getLastOfflineOrder(workCenterCode, organizeCode); - if (lastWorkOrder == null){ - //todo 暂时 - lastWorkOrder = lastOfflineOrder; - } +// if (lastWorkOrder == null){ +// //todo 暂时 +// lastWorkOrder = lastOfflineOrder; +// } //6.查询报警产量 & 获取开班起始时间 Date now = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); @@ -240,7 +242,7 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { List workOrderNoQueueList = queueOrderList.stream().map(MesQueueOrder::getWorkOrderNo).distinct().collect(Collectors.toList()); DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getInPackList(workOrderNoQueueList,"workOrderNo",orderPackBean); - DdlPreparedPack.getInPackList(orderStatusList,"workOrderStatus",orderPackBean); + DdlPreparedPack.getNotInPackList(orderStatusList,"workOrderStatus",orderPackBean); DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), orderPackBean); List workOrderList = workOrderRao.findByHqlTopWhere(orderPackBean, 1); return !workOrderList.isEmpty() ? workOrderList.get(0) : null;