| | |
| | | import com.mes.device.PlcParameterObject; |
| | | import com.mes.edgglasstask.entity.EdgGlassTaskInfo; |
| | | import com.mes.edgglasstask.service.EdgGlassTaskInfoService; |
| | | import com.mes.engineering.entity.Engineering; |
| | | import com.mes.engineering.mapper.EngineeringMapper; |
| | | import com.mes.glassinfo.entity.GlassInfo; |
| | | import com.mes.glassinfo.service.GlassInfoService; |
| | | import com.mes.temperingglass.entity.TemperingGlassInfo; |
| | |
| | | private TemperingGlassInfoService temperingGlassInfoService; |
| | | @Resource |
| | | private DamageService damageService; |
| | | @Resource |
| | | private EngineeringMapper engineeringMapper; |
| | | |
| | | @Resource |
| | | private RedisUtil redisUtil; |
| | |
| | | String d04ToMES = plcParameterObject.getPlcParameter("D04ToMES").getValue(); |
| | | |
| | | |
| | | // d01Id="P24111102|1|13"; |
| | | // d01Id="P25031806|15|3"; |
| | | // d04ToMES="1"; |
| | | // d01ToMES="1"; |
| | | |
| | |
| | | log.info("两条线卧转立均在执行任务,结束本次扫描进卧转立任务"); |
| | | return; |
| | | } |
| | | // if (REQUEST_WORD.equals(d01ToMES)) { |
| | | // List<BigStorageCageFeedTask> bigStorageCageFeedTasks = bigStorageCageFeedTaskService.list( |
| | | // new LambdaQueryWrapper<BigStorageCageFeedTask>() |
| | | // .gt(BigStorageCageFeedTask::getTargetSlot, 0) |
| | | // .eq(BigStorageCageFeedTask::getLine, Const.A09_OUT_TARGET_POSITION) |
| | | // .eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_NEW) |
| | | // .eq(BigStorageCageFeedTask::getGlassId, d01Id) |
| | | // ); |
| | | // if (CollectionUtils.isNotEmpty(bigStorageCageFeedTasks)) { |
| | | // S7object.getinstance().plccontrol.writeWord(mesD01Address, 1); |
| | | // } |
| | | // log.info("{}线再次发送进片启动", Const.A09_OUT_TARGET_POSITION); |
| | | // return; |
| | | // } |
| | | // if (REQUEST_WORD.equals(d04ToMES)) { |
| | | // List<BigStorageCageFeedTask> bigStorageCageFeedTasks = bigStorageCageFeedTaskService.list( |
| | | // new LambdaQueryWrapper<BigStorageCageFeedTask>() |
| | | // .gt(BigStorageCageFeedTask::getTargetSlot, 0) |
| | | // .eq(BigStorageCageFeedTask::getLine, Const.A10_OUT_TARGET_POSITION) |
| | | // .eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_NEW) |
| | | // .eq(BigStorageCageFeedTask::getGlassId, d01Id) |
| | | // ); |
| | | // if (CollectionUtils.isNotEmpty(bigStorageCageFeedTasks)) { |
| | | // S7object.getinstance().plccontrol.writeWord(mesD04Address, 1); |
| | | // } |
| | | // log.info("{}线再次发送进片启动", Const.A10_OUT_TARGET_POSITION); |
| | | // return; |
| | | // } |
| | | //按照线路及玻璃id获取相邻两块玻璃 卧转立上的玻璃: 状态为0不操作(D01送片,0不操作,1允许送片),请求字为1, (02玻璃id为空或者卧转立未启动) |
| | | if (!REQUEST_WORD.equals(mesD01Value) && REQUEST_WORD.equals(d01ToMES) && (StringUtils.isBlank(d02State) || !REQUEST_WORD.equals(d03State))) { |
| | | List<BigStorageCageFeedTask> bigStorageCageFeedTasks = bigStorageCageFeedTaskService.list( |
| | |
| | | //两条先均可执行进片任务,判断两条线是否进片请求是否都为空 |
| | | if (StringUtils.isBlank(d01Id) && StringUtils.isBlank(d04Id)) { |
| | | //比较最早一片任务的版图id及版序 求出卧转立的线路 |
| | | Integer line = getStartLine(); |
| | | // Integer line = getStartLine(); |
| | | Integer line = lineList.get(0); |
| | | //计算任务表进片格子 发送进片任务 |
| | | computeTargetByLine(line); |
| | | Date endDate = new Date(); |
| | |
| | | .isNull(BigStorageCageOutTask::getGlassId) |
| | | .orderBy(Boolean.TRUE, sequenceOrder, TemperingGlassInfo::getTemperingFeedSequence)); |
| | | log.info("查询的出片任务:{}", temperingGlassInfoList); |
| | | List<String> glassIds = temperingGlassInfoList.stream().map(TemperingGlassInfo::getGlassId).collect(Collectors.toList()); |
| | | List<BigStorageCageDetails> bigStorageCageDetailsList = bigStorageCageDetailsService.list( |
| | | new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .in(BigStorageCageDetails::getGlassId, glassIds) |
| | | .in(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT) |
| | | ); |
| | | if (CollectionUtils.isNotEmpty(temperingGlassInfoList)) { |
| | | List<String> detialGlassIds = bigStorageCageDetailsList.stream().map(BigStorageCageDetails::getGlassId).collect(Collectors.toList()); |
| | | temperingGlassInfoList.removeIf(info -> detialGlassIds.contains(info.getGlassId())); |
| | | log.info("笼内不存在玻璃的钢化任务{}", bigStorageCageDetailsList); |
| | | } |
| | | if (CollectionUtils.isNotEmpty(temperingGlassInfoList)) { |
| | | log.info("有正在出片的钢化任务"); |
| | | computeOutMoreGlassInfo(temperingGlassInfoList, Boolean.TRUE, 1); |
| | |
| | | //到齐,将玻璃小片数据存入钢化小片表,逻辑生成出片任务 结束 |
| | | for (TemperingLayoutDTO item : temperingLayoutDTOList) { |
| | | if (redisUtil.getCacheObject("temperingengineerId").equals(item.getEngineerId())) { |
| | | Engineering engineering = engineeringMapper.selectOne( |
| | | new LambdaQueryWrapper<Engineering>() |
| | | .eq(Engineering::getEngineerId, item.getEngineerId()) |
| | | ); |
| | | if (engineering.getState() == 2) { |
| | | redisUtil.setCacheObject("temperingengineerId", ""); |
| | | Date endDate = new Date(); |
| | | log.info("当前工程被禁止生产,大理片笼出片任务结束时间:{},共耗时:{}ms,结束扫码任务", endDate, endDate.getTime() - startDate.getTime()); |
| | | return; |
| | | } |
| | | List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.class, JoinWrappers.lambda(GlassInfo.class) |
| | | .selectAll(GlassInfo.class) |
| | | .select("-1 as state") |
| | |
| | | List<BigStorageCageDetails> overSizeGlass = bigStorageCageDetailsList.stream().filter( |
| | | t -> Math.min(t.getWidth(), t.getHeight()) > 2500 |
| | | ).collect(Collectors.toList()); |
| | | if(CollectionUtils.isEmpty(overSizeGlass)){ |
| | | if (CollectionUtils.isEmpty(overSizeGlass)) { |
| | | //当一格玻璃都到齐时 |
| | | if (bigStorageCageDetailsList.size() == valueList.size()) { |
| | | long distinctSlotCount = bigStorageCageDetailsList.stream() |
| | |
| | | } |
| | | if (CollectionUtils.isEmpty(glassIds1)) { |
| | | S7object.getinstance().plccontrol.writeWord(mesD03Address, 0); |
| | | log.info("{}线修改玻璃状态为3", Const.A09_OUT_TARGET_POSITION); |
| | | log.info("{}线修改玻璃{}状态为3", Const.A09_OUT_TARGET_POSITION, glassIds1); |
| | | bigStorageCageFeedTaskService.update( |
| | | new LambdaUpdateWrapper<BigStorageCageFeedTask>() |
| | | .eq(BigStorageCageFeedTask::getLine, Const.A09_OUT_TARGET_POSITION) |
| | |
| | | } |
| | | if (CollectionUtils.isEmpty(glassIds2)) { |
| | | S7object.getinstance().plccontrol.writeWord(mesD05Address, 0); |
| | | log.info("{}线修改玻璃状态为3", Const.A10_OUT_TARGET_POSITION); |
| | | log.info("{}线修改玻璃{}状态为3", Const.A10_OUT_TARGET_POSITION, glassIds2); |
| | | bigStorageCageFeedTaskService.update( |
| | | new LambdaUpdateWrapper<BigStorageCageFeedTask>() |
| | | .eq(BigStorageCageFeedTask::getLine, Const.A10_OUT_TARGET_POSITION) |
| | |
| | | bigStorageCageFeedTask.setWidth(width); |
| | | bigStorageCageFeedTask.setHeight(height); |
| | | bigStorageCageFeedTask.setCreateTime(new Date()); |
| | | bigStorageCageFeedTask.setTargetSlot(0); |
| | | //删除理片笼表拿走/破损数据数据 |
| | | damageService.deleteByGlassId(glassId); |
| | | Damage damage = new Damage(); |
| | |
| | | maxX = e.getXCoordinate(); |
| | | slot = e.getSlot(); |
| | | bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION, |
| | | e.getWidth() * 10, e.getHeight(), trainNumber, serialNumber++, 1, new Date())); |
| | | e.getWidth() * 10, e.getHeight() * 10, trainNumber, serialNumber++, 1, new Date())); |
| | | } |
| | | } else { |
| | | bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION, |
| | | e.getWidth() * 10, e.getHeight(), trainNumber, serialNumber++, 1, new Date())); |
| | | if (serialNumber <= outCarMaxSize && remainWidth > maxLength) { |
| | | remainWidth = remainWidth - maxLength - glassGap; |
| | | bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION, |
| | | e.getWidth() * 10, e.getHeight() * 10, trainNumber, serialNumber++, 1, new Date())); |
| | | } else { |
| | | remainWidth = carWidth - maxLength - glassGap; |
| | | trainNumber = trainNumber + 1; |
| | | serialNumber = 1; |
| | | bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION, |
| | | e.getWidth() * 10, e.getHeight() * 10, trainNumber, serialNumber++, 1, new Date())); |
| | | } |
| | | |
| | | } |
| | | } |
| | | if (isTask == 2) { |
| | |
| | | } |
| | | Assert.isFalse(CollectionUtils.isEmpty(bigStorageCageOutTaskList), "未获取出片数据,结束出片任务"); |
| | | log.info("获取出片任务数据{}条,执行保存", bigStorageCageOutTaskList.size()); |
| | | for (BigStorageCageOutTask bigStorageCageOutTask : bigStorageCageOutTaskList |
| | | ) { |
| | | bigStorageCageOutTaskService.save(bigStorageCageOutTask); |
| | | List<String> outGlassIds = bigStorageCageOutTaskList.stream() |
| | | .map(BigStorageCageOutTask::getGlassId) |
| | | .collect(Collectors.toList()); |
| | | //判断工程变更时修改出片位置 |
| | | List<GlassInfo> glassInfos = glassInfoService.list( |
| | | new LambdaQueryWrapper<GlassInfo>() |
| | | .in(GlassInfo::getGlassId, outGlassIds) |
| | | .eq(GlassInfo::getProductionStatus, 3) |
| | | ); |
| | | if (CollectionUtils.isNotEmpty(glassInfos)) { |
| | | List<String> changeGlassIds = glassInfos.stream() |
| | | .map(GlassInfo::getGlassId) |
| | | .collect(Collectors.toList()); |
| | | bigStorageCageOutTaskList.forEach(task -> { |
| | | if (changeGlassIds.contains(task.getGlassId())) { |
| | | task.setEndSlot(Const.ARTIFICIAL_OUT_TARGET_POSITION); |
| | | } |
| | | }); |
| | | } |
| | | // bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList); |
| | | |
| | | bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList); |
| | | List<String> glassIds = bigStorageCageOutTaskList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList()); |
| | | log.info("将出片玻璃{}玻璃状态改为已出片", glassIds); |
| | | bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>() |
| | |
| | | .eq(GlassInfo::getEngineerId, glassInfo.getEngineerId()) |
| | | .eq(GlassInfo::getMarkIcon, glassInfo.getMarkIcon()) |
| | | .notInSql(GlassInfo::getGlassId, "select distinct glass_id from big_storage_cage_details " + |
| | | "where state!=101 and engineer_id = '" + glassInfo.getEngineerId() + "' and width = " + glassInfo.getWidth() + " and height = " + glassInfo.getHeight()) |
| | | "where engineer_id = '" + glassInfo.getEngineerId() + "' and width = " + glassInfo.getWidth() + " and height = " + glassInfo.getHeight()) |
| | | .orderByAsc(GlassInfo::getTemperingLayoutId) |
| | | .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence) |
| | | .last("Limit 1"); |