| | |
| | | private static final String ALARM_TYPE = "中空大理片"; |
| | | private static final String ALARM_CODE_SIZE = "sizeSame"; |
| | | private static final String ALARM_CODE_ID = "idSame"; |
| | | private static final String ALARM_CODE_SLOT = "slotLess"; |
| | | private static final String ALARM_CODE_OVER = "overSize"; |
| | | |
| | | /** |
| | | * 直通格子 |
| | |
| | | .ge(HollowBigStorageCage::getMaxThickness, entry.getKey())); |
| | | if (count < entry.getValue()) { |
| | | log.info("笼内格子剩余数量不足,结束本次进片"); |
| | | ProductAlarmInfo alarmInfo = new ProductAlarmInfo(); |
| | | alarmInfo.setState(Const.LOAD_RAW_GLASS_NEW); |
| | | alarmInfo.setAlarmModule(ALARM_MODULE); |
| | | alarmInfo.setAlarmType(ALARM_TYPE); |
| | | alarmInfo.setAlarmCode(ALARM_CODE_SLOT); |
| | | alarmInfo.setAlarmMessage(count + ""); |
| | | productAlarmInfoService.save(alarmInfo); |
| | | //向plc发送报警:笼内格子剩余数量不足 |
| | | s7DataZKDLPOne = new S7DataZKDLPOne(); |
| | | s7DataZKDLPOne.setAlramSignal(16); |
| | |
| | | //是否有正在中空的玻璃:中空小片表筛选未出笼的玻璃信息 |
| | | // 获取当前中空任务未完成出片的玻璃信息 |
| | | List<HollowGlassQueueInfo> unFinishHollowQueueList = hollowGlassQueueInfoService.list(new LambdaQueryWrapper<HollowGlassQueueInfo>() |
| | | .eq(HollowGlassQueueInfo::getFlowCardId, hollowGlassOutRelationInfo.getFlowCardId()) |
| | | .eq(HollowGlassQueueInfo::getCell, hollowGlassOutRelationInfo.getCell()) |
| | | .eq(HollowGlassQueueInfo::getState, Const.TEMPERING_NEW) |
| | | .eq(HollowGlassQueueInfo::getRelationId, hollowGlassOutRelationInfo.getId()) |
| | | .orderByAsc(HollowGlassQueueInfo::getHollowSequence)); |
| | | if (CollectionUtil.isNotEmpty(unFinishHollowQueueList)) { |
| | | HollowGlassQueueInfo queueInfo = unFinishHollowQueueList.get(0); |
| | | //直通台有玻璃时将中空出片队列中对应玻璃id的格子号替换未直通台 |
| | | HollowBigStorageCageDetails details = hollowBigStorageCageDetailsService.getOne(new LambdaQueryWrapper<HollowBigStorageCageDetails>() |
| | | .eq(HollowBigStorageCageDetails::getSlot, THROUGH_SLOT) |
| | | .in(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL).last("limit 1")); |
| | | if (details != null && details.getGlassId().equals(queueInfo.getGlassId())) { |
| | | queueInfo.setCell(THROUGH_SLOT); |
| | | unFinishHollowQueueList.get(0).setCell(THROUGH_SLOT); |
| | | log.info("中空大理片直通台玻璃信息{}", details); |
| | | if (details != null) { |
| | | unFinishHollowQueueList.stream().forEach(e -> { |
| | | if (e.getGlassId().equals(details.getGlassId())) { |
| | | e.setSlot(THROUGH_SLOT); |
| | | e.setDeviceId(0); |
| | | log.info("将中空队列中的格子号替换为直通台{}", e); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | List<HollowGlassQueueInfo> infoList = unFinishHollowQueueList.stream().filter(e -> !(e.getSlot() >= 500 && e.getSlot() < 900 && e.getIsPair() != 1)).collect(Collectors.toList()); |
| | | log.info("有正在出片的中空任务"); |
| | | Integer isPair = unFinishHollowQueueList.get(0).getIsPair(); |
| | | hollowOutGlassByIsPair(unFinishHollowQueueList, hollowGlassOutRelationInfo.getCell(), isPair, hollowGlassOutRelationInfo.getTotalLayer(), hollowGlassOutRelationInfo.getIsForce()); |
| | | Integer isPair = infoList.get(0).getIsPair(); |
| | | hollowOutGlassByIsPair(infoList, hollowGlassOutRelationInfo.getCell(), isPair, hollowGlassOutRelationInfo.getTotalLayer(), hollowGlassOutRelationInfo.getIsForce()); |
| | | Date endDate = new Date(); |
| | | log.info("大理片笼出片任务结束时间:{},共耗时:{}ms,结束扫码任务", endDate, endDate.getTime() - startDate.getTime()); |
| | | return; |
| | |
| | | log.info("当前为非联机状态,结束进片任务"); |
| | | return; |
| | | } |
| | | if (StringUtils.isNotBlank(s7DataZKDLPOne.getId7())) { |
| | | Integer requestEntity = s7DataZKDLPOne.getRequestMes(); |
| | | if (StringUtils.isNotBlank(s7DataZKDLPOne.getId7()) && requestEntity == 0) { |
| | | //汇报字为1 启动字为1是 清除所有任务信息 |
| | | if (s7DataZKDLPOne.getId7().equals(s7DataZKDLPOne.getId1())) { |
| | | //todo:清空任务 |
| | | S7DataZKDLPOne sendTask = new S7DataZKDLPOne(); |
| | | sendTask.setFrom7(0); |
| | | sendTask.setId1(""); |
| | | sendTask.setId7(""); |
| | | s7SerializerZKDLPOne.write(sendTask); |
| | | log.info("清除所有任务信息{}", sendTask); |
| | | s7DataZKDLPOne = s7SerializerZKDLPOne.read(S7DataZKDLPOne.class); |
| | | log.info("清空任务后再读取{}", s7DataZKDLPOne); |
| | | } |
| | | log.info("存在任务,结束"); |
| | | return; |
| | | } |
| | | Integer requestEntity = s7DataZKDLPOne.getRequestMes(); |
| | | if (1 != requestEntity) { |
| | | log.info("当前未收到进片请求,结束进片任务"); |
| | | return; |
| | | } |
| | | if (StringUtils.isNotBlank(s7DataZKDLPOne.getId1())) { |
| | | log.info("当前存在进片任务,结束"); |
| | | return; |
| | | } |
| | | if (StringUtils.isNotBlank(s7DataZKDLPOne.getId1())) { |
| | | log.info("当前存在进片任务请求,结束本次大笼子调度"); |
| | | return; |
| | | } |
| | | //有请求信号 |
| | |
| | | int count = hollowBigStorageCageDetailsService.count(new LambdaQueryWrapper<HollowBigStorageCageDetails>() |
| | | .eq(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | .eq(HollowBigStorageCageDetails::getSlot, THROUGH_SLOT)); |
| | | log.info("直通片台的任务数量为:{}", count); |
| | | if (count > 0) { |
| | | return; |
| | | } |
| | | List<HollowBigStorageCageDetails> list = hollowBigStorageCageDetailsService.list(new LambdaQueryWrapper<HollowBigStorageCageDetails>() |
| | | .eq(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | .in(HollowBigStorageCageDetails::getDeviceId, 6) |
| | | .in(HollowBigStorageCageDetails::getGlassId, glassIdList)); |
| | | if (CollectionUtil.isEmpty(list)) { |
| | | HollowBigStorageCageDetails details = null; |
| | | for (String glassId : glassIdList) { |
| | | details = hollowBigStorageCageDetailsService.getOne(new LambdaQueryWrapper<HollowBigStorageCageDetails>() |
| | | .eq(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | .eq(HollowBigStorageCageDetails::getGlassId, glassId).last("limit 1")); |
| | | log.info("获取调度任务:{}", details); |
| | | if (details != null) { |
| | | break; |
| | | } |
| | | } |
| | | if (details == null) { |
| | | return; |
| | | } |
| | | HollowBigStorageCageDetails details = list.get(0); |
| | | //todo:生成进进片大车任务 |
| | | log.info("获取需要调度的单条任务:{}", details); |
| | | //生成进进片大车任务 |
| | | hollowBigStorageCageDetailsService.update(new LambdaUpdateWrapper<HollowBigStorageCageDetails>() |
| | | .set(HollowBigStorageCageDetails::getState, Const.RAW_GLASS_STATE_OUT) |
| | | .eq(HollowBigStorageCageDetails::getGlassId, details.getGlassId())); |
| | | S7DataZKDLPOne sendTask = new S7DataZKDLPOne(); |
| | | sendTask.setFrom7(THROUGH_SLOT); |
| | | sendTask.setFrom7(details.getSlot()); |
| | | sendTask.setId7(details.getGlassId()); |
| | | s7SerializerZKDLPOne.write(sendTask); |
| | | log.info("新笼子写入id与from{}", sendTask); |
| | | updateSlotRemainBySlots(Arrays.asList(details.getSlot())); |
| | | } |
| | | |
| | | |
| | |
| | | S7DataZKDLPOne s7DataZKDLPOne = new S7DataZKDLPOne(); |
| | | s7DataZKDLPOne.setAlramSignal(16); |
| | | s7SerializerZKDLPOne.write(s7DataZKDLPOne); |
| | | ProductAlarmInfo alarmInfo = new ProductAlarmInfo(); |
| | | alarmInfo.setState(Const.LOAD_RAW_GLASS_NEW); |
| | | alarmInfo.setAlarmModule(ALARM_MODULE); |
| | | alarmInfo.setAlarmType(ALARM_TYPE); |
| | | alarmInfo.setAlarmCode(ALARM_CODE_SLOT); |
| | | alarmInfo.setAlarmMessage(""); |
| | | productAlarmInfoService.save(alarmInfo); |
| | | Assert.isFalse(storageCage == null, "任务调度没有多余格子,结束调度任务"); |
| | | } |
| | | |
| | |
| | | Integer outCarMaxSize = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_OUT_CAR_SIZE); |
| | | // Integer glassGap = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_GLASS_GAP); |
| | | Integer glassGap = hollowGlassRelationInfoService.getGlassGapByThickness(list.get(0).getThickness()); |
| | | log.info("中空生成一车任务:{}", list); |
| | | for (T e : list) { |
| | | //格子为第五个笼子时不添加出片任务 |
| | | HollowBigStorageCage hollowBigStorageCage = hollowBigStorageCageService.getOne( |
| | | new LambdaQueryWrapper<HollowBigStorageCage>() |
| | | .eq(HollowBigStorageCage::getSlot, e.getSlot()) |
| | | ); |
| | | if (hollowBigStorageCage.getDeviceId() == 6) { |
| | | break; |
| | | } |
| | | if (templist.size() >= outCarMaxSize || Math.max((int) e.getWidth(), (int) e.getHeight()) > remainWidth) { |
| | | break; |
| | | } |
| | |
| | | for (T t : baseInfoList) { |
| | | bigStorageCageTaskList.add(new BigStorageCageTask(t.getGlassId(), t.getSlot(), targetSlot, 0)); |
| | | } |
| | | |
| | | List<BigStorageCageTask> tasks = bigStorageCageTaskList.stream().filter(e -> e.getStartSlot() >= 500 && e.getStartSlot() < 900).collect(Collectors.toList()); |
| | | if (CollectionUtil.isNotEmpty(tasks)) { |
| | | log.info("当前出片队列存在新笼子的玻璃小片,结束本次任务:{}", tasks); |
| | | return false; |
| | | } |
| | | //清空任务表数据 |
| | | resetOutTask(); |
| | | log.info("生成出片任务数据{}", bigStorageCageTaskList); |