| | |
| | | import com.mes.base.entity.BigStorageCageBaseInfo; |
| | | import com.mes.bigstorage.entity.BigStorageCage; |
| | | import com.mes.bigstorage.entity.BigStorageCageDetails; |
| | | import com.mes.bigstorage.entity.dto.BigStorageDTO; |
| | | import com.mes.bigstorage.entity.dto.BigStorageRelationDTO; |
| | | import com.mes.bigstorage.entity.dto.BigStorageSequenceDTO; |
| | | import com.mes.bigstorage.entity.dto.TemperingLayoutDTO; |
| | | import com.mes.bigstorage.entity.dto.*; |
| | | import com.mes.bigstorage.service.BigStorageCageDetailsService; |
| | | import com.mes.bigstorage.service.BigStorageCageService; |
| | | import com.mes.bigstorage.service.BigStorageGlassInfoService; |
| | |
| | | String fromOpcUa = s7DataDLPOne.getFrom1().toString(); |
| | | |
| | | List<String> ids = s7DataDLPOne.getIds(); |
| | | log.info("获取到进片任务 玻璃id:{}", ids); |
| | | List<String> glassIdList = new ArrayList<>(); |
| | | for (int i = 0; i < 6; i++) { |
| | | String requestWord = ids.get(i); |
| | | if (null != requestWord && !requestWord.isEmpty()) { |
| | | if (StringUtils.isNotBlank(requestWord)) { |
| | | log.info("玻璃id{}加入进片任务", requestWord); |
| | | BigStorageCageTask task = new BigStorageCageTask(); |
| | | task.setGlassId(requestWord); |
| | | task.setStartSlot(Integer.parseInt(fromOpcUa)); |
| | | inTaskList.add(task); |
| | | glassIdList.add(requestWord); |
| | | break; |
| | | } |
| | | } |
| | | if (CollectionUtil.isEmpty(inTaskList)) { |
| | |
| | | return; |
| | | } |
| | | log.info("获取任务的玻璃id:{}", glassIdList); |
| | | String countEntity = s7DataDLPOne.getGlassCount().toString(); |
| | | if (null == countEntity || Integer.parseInt(countEntity) != glassIdList.size()) { |
| | | log.info("当前大车进片玻璃数量{}与mes读取到的数量{}不匹配,结束进片任务", countEntity, glassIdList.size()); |
| | | Integer glassCount = s7DataDLPOne.getGlassCount(); |
| | | if (glassCount != glassIdList.size()) { |
| | | log.info("当前大车进片玻璃数量{}与mes读取到的数量{}不匹配,结束进片任务", glassCount, glassIdList.size()); |
| | | //向plc发送报警:当前大车进片玻璃数量与mes读取到的数量不匹配 |
| | | s7DataDLPOne = new S7DataDLPOne(); |
| | | s7DataDLPOne.setAlarmSignal(1); |
| | |
| | | for (Map.Entry<Double, Long> entry : thickCountMap.entrySet()) { |
| | | int count = bigStorageCageService.count(new LambdaQueryWrapper<BigStorageCage>() |
| | | .eq(BigStorageCage::getEnableState, Const.SLOT_ON).eq(BigStorageCage::getRemainWidth, slotWidth) |
| | | .ge(BigStorageCage::getDeviceId, 4) |
| | | .le(BigStorageCage::getDeviceId, 4) |
| | | .le(BigStorageCage::getMinThickness, entry.getKey()) |
| | | .ge(BigStorageCage::getMaxThickness, entry.getKey())); |
| | | if (count < entry.getValue()) { |
| | |
| | | log.info("有正在执行的出片任务,结束本次出片任务"); |
| | | return; |
| | | } |
| | | |
| | | Integer glassGap = sysConfigService.queryConfigValue(ConstSysConfig.VERTICAL_GLASS_GAP); |
| | | Integer slotWidth = sysConfigService.queryConfigValue(ConstSysConfig.VERTICAL_SLOT_WIDTH); |
| | | Integer slotMaxThickness = sysConfigService.queryConfigValue(ConstSysConfig.VERTICAL_SLOT_MAX_THICKNESS); |
| | | Integer slotMaxHeight = sysConfigService.queryConfigValue(ConstSysConfig.VERTICAL_SLOT_MAX_HEIGHT); |
| | | List<BigStorageCageDetails> detailsList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .eq(BigStorageCageDetails::getSlot, THROUGH_SLOT) |
| | | .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL).orderByAsc(BigStorageCageDetails::getId)); |
| | | if (CollectionUtil.isNotEmpty(detailsList)) { |
| | | List<BigStorageCageHistoryTask> historyTasks = new ArrayList<>(); |
| | | List<BigStorageCageTask> taskList = new ArrayList<>(); |
| | | Integer glassGap = sysConfigService.queryConfigValue(ConstSysConfig.VERTICAL_GLASS_GAP); |
| | | Integer slotWidth = sysConfigService.queryConfigValue(ConstSysConfig.VERTICAL_SLOT_WIDTH); |
| | | Integer slotMaxThickness = sysConfigService.queryConfigValue(ConstSysConfig.VERTICAL_SLOT_MAX_THICKNESS); |
| | | Integer slotMaxHeight = sysConfigService.queryConfigValue(ConstSysConfig.VERTICAL_SLOT_MAX_HEIGHT); |
| | | for (BigStorageCageDetails info : detailsList) { |
| | | BigStorageCageTask task = new BigStorageCageTask(); |
| | | task.setGlassId(info.getGlassId()); |
| | |
| | | task.setTaskState(Const.ENGINEERING_NEW); |
| | | |
| | | LambdaQueryWrapper<BigStorageCage> queryWrapper = new LambdaQueryWrapper<BigStorageCage>() |
| | | .eq(BigStorageCage::getRemainWidth, slotWidth).orderByAsc(BigStorageCage::getSlot) |
| | | .eq(BigStorageCage::getRemainWidth, slotWidth) |
| | | .eq(BigStorageCage::getEnableState, Const.SLOT_ON) |
| | | .orderByAsc(BigStorageCage::getDeviceId).orderByAsc(BigStorageCage::getSlot) |
| | | .last("limit 1"); |
| | | |
| | | if (slotMaxHeight > Math.min(info.getWidth(), info.getHeight()) && info.getThickness() < slotMaxThickness) { |
| | | if (slotMaxHeight > Math.min(info.getWidth(), info.getHeight())) { |
| | | queryWrapper.in(BigStorageCage::getDeviceId, Arrays.asList(5, 6)); |
| | | } else { |
| | | queryWrapper.eq(BigStorageCage::getDeviceId, 6); |
| | |
| | | cageDetails.setState(Const.GLASS_STATE_NEW); |
| | | cageDetails.setDeviceId(bigStorageCage.getDeviceId()); |
| | | cageDetails.setSequence(0); |
| | | cageDetails.setAngle((int) info.getAngle()); |
| | | cageDetails.setAngle(info.getAngle()); |
| | | cageDetails.setGap(glassGap); |
| | | cageDetails.setFilmsId(info.getFilmsId()); |
| | | cageDetails.setId(null); |
| | | bigStorageCageDetailsService.save(cageDetails); |
| | | info.setState(Const.GLASS_STATE_OUT); |
| | | bigStorageCageDetailsService.updateById(info); |
| | | } |
| | | //历史数据入库 |
| | | bigStorageCageHistoryTaskService.saveBatch(historyTasks); |
| | | extracted(taskList); |
| | | S7DataDLPTwo s7DataDLPTwo = new S7DataDLPTwo(); |
| | | s7DataDLPTwo.setMesReply(1); |
| | | s7SerializerDLPTwo.write(s7DataDLPTwo); |
| | | return; |
| | | } |
| | | |
| | |
| | | Integer outCarMaxSize = sysConfigService.queryConfigValue(ConstSysConfig.VERTICAL_OUT_CAR_SIZE); |
| | | List<BigStorageCageDetails> artificialList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL) |
| | | .orderByAsc(BigStorageCageDetails::getSlot) |
| | | .orderByAsc(BigStorageCageDetails::getDeviceId) |
| | | .orderByAsc(BigStorageCageDetails::getId) |
| | | .orderByAsc(BigStorageCageDetails::getId).last("limit " + outCarMaxSize)); |
| | | if (CollectionUtil.isNotEmpty(artificialList)) { |
| | | computeOutGlassInfoByVirtualSlot(artificialList, "big_storage_cage_out_one_task", artificialOutTargetPosition, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT); |
| | |
| | | log.info("有正在执行的进片任务,结束调度任务"); |
| | | return; |
| | | } |
| | | //todo:4号获取笼内单格已经到齐的玻璃格子信息 |
| | | //4号获取笼内单格已经到齐的玻璃格子信息 |
| | | List<BigStorageCageDetails> list = new ArrayList<>(); |
| | | List<BigStorageRelationDTO> virtualList = bigStorageCageDetailsService.queryIsAllNeedDispatchVirtualSlot(Arrays.asList(4)); |
| | | for (BigStorageRelationDTO dto : virtualList) { |
| | | List<BigStorageSequenceDTO> sequenceDTOList = bigStorageCageDetailsService.dispatchBigStorageGlassInfo(dto); |
| | | if (CollectionUtil.isEmpty(sequenceDTOList) || sequenceDTOList.size() == 1) { |
| | | continue; |
| | | } |
| | | BigStorageCage bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>() |
| | | .eq(BigStorageCage::getRemainWidth, slotWidth) |
| | | .eq(BigStorageCage::getEnableState, Const.SLOT_ON) |
| | | .in(BigStorageCage::getDeviceId, Arrays.asList(5, 6)) |
| | | .orderByAsc(BigStorageCage::getDeviceId).orderByAsc(BigStorageCage::getSlot) |
| | | .last("limit 1")); |
| | | List<Integer> slotList = sequenceDTOList.stream().map(BigStorageSequenceDTO::getSlot).collect(Collectors.toList()); |
| | | list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | .in(BigStorageCageDetails::getSlot, slotList) |
| | | .orderByAsc(BigStorageCageDetails::getTemperingFeedSequence) |
| | | ); |
| | | computeOutGlassInfoByVirtualSlot(list, "big_storage_cage_out_one_task", |
| | | bigStorageCage.getSlot(), Const.GLASS_STATE_SCHEDULE_ING, Const.BIG_STORAGE_BEFORE_DISPATCH); |
| | | slotList.add(bigStorageCage.getSlot()); |
| | | updateSlotRemainBySlots(slotList); |
| | | return; |
| | | } |
| | | //有:统一往5号笼子送 |
| | | // todo:无 4号笼子使用数量是否超过阈值 有 生成调度任务按照组号组序由1开始依次往5号笼子送小片 |
| | | // 无 4号笼子使用数量是否超过阈值 有 生成调度任务按照组号组序由1开始依次往5号笼子送小片 |
| | | int count = bigStorageCageService.count(new LambdaQueryWrapper<BigStorageCage>().eq(BigStorageCage::getDeviceId, 4).eq(BigStorageCage::getRemainWidth, slotWidth) |
| | | .eq(BigStorageCage::getEnableState, Const.SLOT_ON)); |
| | | //定义10个格子为阈值 |
| | | if (count <= 10) { |
| | | //获取序号为1的格子 将格子内的所有玻璃送到对应的笼子 |
| | | BigStorageCage bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>() |
| | | .eq(BigStorageCage::getRemainWidth, slotWidth) |
| | | .eq(BigStorageCage::getEnableState, Const.SLOT_ON) |
| | | .in(BigStorageCage::getDeviceId, Arrays.asList(5, 6)) |
| | | .orderByAsc(BigStorageCage::getDeviceId).orderByAsc(BigStorageCage::getSlot) |
| | | .last("limit 1")); |
| | | |
| | | list = bigStorageCageDetailsService.queryNeedDispatch(); |
| | | computeOutGlassInfoByVirtualSlot(list, "big_storage_cage_out_one_task", |
| | | bigStorageCage.getSlot(), Const.GLASS_STATE_SCHEDULE_ING, Const.BIG_STORAGE_BEFORE_DISPATCH); |
| | | List<Integer> slotList = new ArrayList<>(); |
| | | slotList.add(bigStorageCage.getSlot()); |
| | | slotList.add(list.get(0).getSlot()); |
| | | updateSlotRemainBySlots(slotList); |
| | | return; |
| | | } |
| | | //生成调度任务按照组号组序由1开始依次往5号笼子送小片 |
| | | BigStorageSlotDTO slotDTO = bigStorageCageDetailsService.queryNeedDispatchSlotBySequence(); |
| | | if (null != slotDTO) { |
| | | list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | .in(BigStorageCageDetails::getSlot, slotDTO.getStartSlot()) |
| | | .orderByAsc(BigStorageCageDetails::getTemperingFeedSequence) |
| | | ); |
| | | computeOutGlassInfoByVirtualSlot(list, "big_storage_cage_out_one_task", |
| | | slotDTO.getTargetSlot(), Const.GLASS_STATE_SCHEDULE_ING, Const.BIG_STORAGE_BEFORE_DISPATCH); |
| | | List<Integer> slotList = new ArrayList<>(); |
| | | slotList.add(slotDTO.getStartSlot()); |
| | | slotList.add(slotDTO.getTargetSlot()); |
| | | updateSlotRemainBySlots(slotList); |
| | | return; |
| | | } |
| | | //1-3号获取笼内单格已经到齐的玻璃格子信息 |
| | | virtualList = bigStorageCageDetailsService.queryIsAllNeedDispatchVirtualSlot(Arrays.asList(1, 2, 3)); |
| | | if (CollectionUtil.isNotEmpty(virtualList)) { |
| | | List<BigStorageCageDetails> list = new ArrayList<>(); |
| | | |
| | | loop: |
| | | for (BigStorageRelationDTO dto : virtualList) { |
| | | List<BigStorageSequenceDTO> sequenceDTOList = bigStorageCageDetailsService.dispatchBigStorageGlassInfo(dto); |
| | |
| | | computeOutGlassInfoByVirtualSlot(List<T> list, String tableName, int targetSlot, int state, int taskType) { |
| | | //任务数据:获取车子存放玻璃最大数量,玻璃间隔 |
| | | List<T> outGlassList = list; |
| | | if (!THROUGH_SLOT.equals(list.get(0).getSlot())) { |
| | | //todo:临时解决方案:出片时考虑玻璃碰撞,改为一片一出 |
| | | // 界面关闭调度开关 !Const.BIG_STORAGE_BEFORE_DISPATCH.equals(taskType) |
| | | if (list.get(0).getThickness() >= 8) { |
| | | outGlassList = list.subList(0, 1); |
| | | } else { |
| | | List<String> glassIdList = bigStorageGlassRelationInfoService.queryNeedOutGlassId( |
| | | list.get(0).getEngineerId(), list.get(0).getTemperingLayoutId(), list.get(0).getTemperingFeedSequence()); |
| | | outGlassList = list.stream().filter(e -> glassIdList.contains(e.getGlassId())).collect(Collectors.toList()); |
| | | } |
| | | // if (!THROUGH_SLOT.equals(list.get(0).getSlot())) { |
| | | // 临时解决方案:出片时考虑玻璃碰撞,改为一片一出 |
| | | // 界面关闭调度开关 !Const.BIG_STORAGE_BEFORE_DISPATCH.equals(taskType) |
| | | if (list.get(0).getSlot() >= 500 && list.get(0).getThickness() > 8) { |
| | | outGlassList = list.subList(0, 1); |
| | | } else { |
| | | List<String> glassIdList = bigStorageGlassRelationInfoService.queryNeedOutGlassId( |
| | | list.get(0).getEngineerId(), list.get(0).getTemperingLayoutId(), list.get(0).getTemperingFeedSequence()); |
| | | outGlassList = list.stream().filter(e -> glassIdList.contains(e.getGlassId())).collect(Collectors.toList()); |
| | | } |
| | | // } |
| | | Assert.isFalse(CollectionUtil.isEmpty(outGlassList), "未获取出片数据,结束出片任务"); |
| | | log.info("获取出片任务数据{}条,执行保存", outGlassList.size()); |
| | | List<BigStorageCageTask> bigStorageCageTaskList = outGlassList.stream() |
| | |
| | | |
| | | List<String> glassIds = bigStorageCageTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()); |
| | | int glassCount = bigStorageCageTaskList.size(); |
| | | //生成出片任务条数不足6补全 |
| | | // while (bigStorageCageTaskList.size() < 6) { |
| | | // bigStorageCageTaskList.add(new BigStorageCageTask("", 0, 0, 0)); |
| | | // } |
| | | //清空任务表数据 |
| | | extracted(bigStorageCageTaskList); |
| | | S7DataDLPTwo s7DataDLPTwo; |
| | |
| | | * @return |
| | | */ |
| | | private Boolean extracted(List<BigStorageCageTask> bigStorageCageTaskList) { |
| | | resetOutTask(); |
| | | // resetOutTask(); |
| | | S7DataDLPTwo s7DataDLPTwo = new S7DataDLPTwo(); |
| | | for (int i = 0; i < bigStorageCageTaskList.size() && i < 6; i++) { |
| | | String glassId = bigStorageCageTaskList.get(i).getGlassId(); |