| | |
| | | //玻璃到齐包括已出片的 |
| | | //到齐,将玻璃小片数据存入钢化小片表,逻辑生成出片任务 结束 |
| | | for (TemperingLayoutDTO item : temperingLayoutDTOList) { |
| | | List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.class, JoinWrappers.lambda(GlassInfo.class) |
| | | .selectAll(GlassInfo.class) |
| | | .select("-1 as state") |
| | | .selectAs(BigStorageCageDetails::getSlot, TemperingGlassInfo::getSlot) |
| | | .innerJoin(BigStorageCageDetails.class, BigStorageCageDetails::getGlassId, GlassInfo::getGlassId) |
| | | .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | .eq(GlassInfo::getTemperingLayoutId, item.getTemperingLayoutId()) |
| | | .eq(GlassInfo::getEngineerId, item.getEngineerId()) |
| | | .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence)); |
| | | if (CollectionUtils.isNotEmpty(temperingGlassInfos)) { |
| | | temperingGlassInfoService.saveBatch(temperingGlassInfos); |
| | | computeOutMoreGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress); |
| | | Date endDate = new Date(); |
| | | log.info("大理片笼出片任务结束时间:{},共耗时:{}ms,结束扫码任务", endDate, endDate.getTime() - startDate.getTime()); |
| | | return; |
| | | if (redisUtil.getCacheObject("temperingengineerId").equals(item.getEngineerId())) { |
| | | List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.class, JoinWrappers.lambda(GlassInfo.class) |
| | | .selectAll(GlassInfo.class) |
| | | .select("-1 as state") |
| | | .selectAs(BigStorageCageDetails::getSlot, TemperingGlassInfo::getSlot) |
| | | .innerJoin(BigStorageCageDetails.class, BigStorageCageDetails::getGlassId, GlassInfo::getGlassId) |
| | | .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | .eq(GlassInfo::getTemperingLayoutId, item.getTemperingLayoutId()) |
| | | .eq(GlassInfo::getEngineerId, item.getEngineerId()) |
| | | .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence)); |
| | | if (CollectionUtils.isNotEmpty(temperingGlassInfos)) { |
| | | temperingGlassInfoService.saveBatch(temperingGlassInfos); |
| | | computeOutMoreGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress); |
| | | Date endDate = new Date(); |
| | | log.info("大理片笼出片任务结束时间:{},共耗时:{}ms,结束扫码任务", endDate, endDate.getTime() - startDate.getTime()); |
| | | return; |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | int serialNumber = 1; |
| | | for (BigStorageCageDetails item : list) { |
| | | outTasks.add(new BigStorageCageOutTask(item.getGlassId(), first.getSlot(), second.getSlot(), |
| | | item.getWidth() * 10, item.getHeight() * 10, 1, serialNumber++, Const.BIG_STORAGE_OUT_NEW)); |
| | | item.getWidth() * 10, item.getHeight() * 10, 1, serialNumber++, Const.BIG_STORAGE_OUT_NEW, new Date())); |
| | | } |
| | | //新增调度任务 |
| | | bigStorageCageOutTaskService.saveBatch(outTasks); |
| | |
| | | List<BigStorageCageOutTask> outSuccessGlass = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>() |
| | | .in(BigStorageCageOutTask::getGlassId, glassIds).in(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_ALL)); |
| | | if (CollectionUtils.isNotEmpty(outSuccessGlass)) { |
| | | for (BigStorageCageOutTask bigStorageCageOutTask : outSuccessGlass |
| | | ) { |
| | | if (bigStorageCageOutTask.getEndSlot().equals(Const.ARTIFICIAL_OUT_TARGET_POSITION)) { |
| | | temperingGlassInfoService.update( |
| | | new LambdaUpdateWrapper<TemperingGlassInfo>() |
| | | .set(TemperingGlassInfo::getState, Const.TEMPERING_END) |
| | | .eq(TemperingGlassInfo::getGlassId, bigStorageCageOutTask.getGlassId()) |
| | | ); |
| | | } |
| | | } |
| | | log.info("3、获取出片已完成的玻璃信息id:{}", outSuccessGlass); |
| | | List<UpdateBigStorageCageDTO> storageCageDTOList = outSuccessGlass.stream().map(e -> { |
| | | UpdateBigStorageCageDTO storageCageDTO = new UpdateBigStorageCageDTO(); |
| | |
| | | Damage damage = new Damage(); |
| | | damage.setGlassId(bigStorageCageFeedTask.getGlassId()); |
| | | damage.setLine(bigStorageCageFeedTask.getLine()); |
| | | damage.setWorkingProcedure("冷加工"); |
| | | damage.setWorkingProcedure("磨边"); |
| | | damage.setRemark("进笼前卧转立"); |
| | | damage.setStatus(0); |
| | | damage.setStatus(1); |
| | | damage.setType(bigStorageCageFeedTask.getTaskState()); |
| | | damageService.insertDamage(damage); |
| | | slotList.add(bigStorageCageFeedTask.getTargetSlot()); |
| | |
| | | Damage damage = new Damage(); |
| | | damage.setGlassId(bigStorageCageOutTask.getGlassId()); |
| | | damage.setLine(bigStorageCageOutTask.getEndSlot()); |
| | | damage.setWorkingProcedure("冷加工"); |
| | | damage.setWorkingProcedure("钢化"); |
| | | damage.setRemark("出片后卧转立"); |
| | | damage.setStatus(0); |
| | | damage.setStatus(1); |
| | | damage.setType(bigStorageCageOutTask.getTaskState()); |
| | | damageService.insertDamage(damage); |
| | | slotList.add(bigStorageCageOutTask.getStartSlot()); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 确认字清空 |
| | | */ |
| | | @Scheduled(fixedDelay = 300) |
| | | public void confirmClear() { |
| | | PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject; |
| | | String d01ToMES = plcParameterObject.getPlcParameter("D01ToMES").getValue(); |
| | | String d04ToMES = plcParameterObject.getPlcParameter("D04ToMES").getValue(); |
| | | String mesD01Address = plcParameterObject.getPlcParameter("MESToD01").getAddress(); |
| | | String mesD04Address = plcParameterObject.getPlcParameter("MESToD04").getAddress(); |
| | | String d03ToMES = plcParameterObject.getPlcParameter("D03ToMES").getValue(); |
| | | String d05ToMES = plcParameterObject.getPlcParameter("D05ToMES").getValue(); |
| | | String mesD03Address = plcParameterObject.getPlcParameter("MESToD03").getAddress(); |
| | | String mesD05Address = plcParameterObject.getPlcParameter("MESToD05").getAddress(); |
| | | if (!REQUEST_WORD.equals(d01ToMES)) { |
| | | S7object.getinstance().plccontrol.writeWord(mesD01Address, 0); |
| | | } |
| | | if (!REQUEST_WORD.equals(d04ToMES)) { |
| | | S7object.getinstance().plccontrol.writeWord(mesD04Address, 0); |
| | | } |
| | | if (!REQUEST_WORD.equals(d03ToMES)) { |
| | | S7object.getinstance().plccontrol.writeWord(mesD03Address, 0); |
| | | } |
| | | if (!REQUEST_WORD.equals(d05ToMES)) { |
| | | S7object.getinstance().plccontrol.writeWord(mesD05Address, 0); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 进片状态修改 |
| | | */ |
| | | @Scheduled(fixedDelay = 300) |
| | | public void feedStatusUpdate() { |
| | | PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject; |
| | | List<String> glassIds1 = new ArrayList<>(); |
| | | List<String> glassIds2 = new ArrayList<>(); |
| | | // for (int i = 1; i <= 6; i++) { |
| | | // String line1GlassId = plcParameterObject.getPlcParameter("D03ID" + i).getValue(); |
| | | // if (StringUtils.isNotEmpty(line1GlassId)) { |
| | | // glassIds1.add(line1GlassId); |
| | | // } |
| | | // String line2GlassId = plcParameterObject.getPlcParameter("D05ID" + i).getValue(); |
| | | // if (StringUtils.isNotEmpty(line2GlassId)) { |
| | | // glassIds1.add(line2GlassId); |
| | | // } |
| | | // } |
| | | List<BigStorageCageFeedTask> bigStorageCageFeedTasks1 = bigStorageCageFeedTaskService.list( |
| | | new LambdaQueryWrapper<BigStorageCageFeedTask>() |
| | | .eq(BigStorageCageFeedTask::getTaskState, 1) |
| | | .eq(BigStorageCageFeedTask::getLine, Const.A09_OUT_TARGET_POSITION) |
| | | ); |
| | | List<BigStorageCageFeedTask> bigStorageCageFeedTasks2 = bigStorageCageFeedTaskService.list( |
| | | new LambdaQueryWrapper<BigStorageCageFeedTask>() |
| | | .eq(BigStorageCageFeedTask::getTaskState, 1) |
| | | .eq(BigStorageCageFeedTask::getLine, Const.A10_OUT_TARGET_POSITION) |
| | | ); |
| | | if (CollectionUtils.isNotEmpty(bigStorageCageFeedTasks1)&& glassIds1 != null) { |
| | | List<String> matchingIds1 = bigStorageCageFeedTasks1.stream() |
| | | .map(BigStorageCageFeedTask::getGlassId) |
| | | .filter(glassIds1::contains) |
| | | .distinct() |
| | | .collect(Collectors.toList()); |
| | | bigStorageCageFeedTaskService.update( |
| | | new LambdaUpdateWrapper<BigStorageCageFeedTask>() |
| | | .in(BigStorageCageFeedTask::getGlassId, matchingIds1) |
| | | .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT) |
| | | .set(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP) |
| | | ); |
| | | } |
| | | if (CollectionUtils.isNotEmpty(bigStorageCageFeedTasks2)&& glassIds2 != null) { |
| | | List<String> matchingIds2 = bigStorageCageFeedTasks2.stream() |
| | | .map(BigStorageCageFeedTask::getGlassId) |
| | | .filter(glassIds2::contains) |
| | | .distinct() |
| | | .collect(Collectors.toList()); |
| | | bigStorageCageFeedTaskService.update( |
| | | new LambdaUpdateWrapper<BigStorageCageFeedTask>() |
| | | .in(BigStorageCageFeedTask::getGlassId, matchingIds2) |
| | | .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT) |
| | | .set(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP) |
| | | ); |
| | | } |
| | | if (CollectionUtils.isEmpty(glassIds1)) { |
| | | bigStorageCageFeedTaskService.update( |
| | | new LambdaUpdateWrapper<BigStorageCageFeedTask>() |
| | | .eq(BigStorageCageFeedTask::getLine,Const.A09_OUT_TARGET_POSITION) |
| | | .eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP) |
| | | .gt(BigStorageCageFeedTask::getTargetSlot, 0) |
| | | .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT) |
| | | .set(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_CAR) |
| | | ); |
| | | } |
| | | if (CollectionUtils.isEmpty(glassIds2)) { |
| | | bigStorageCageFeedTaskService.update( |
| | | new LambdaUpdateWrapper<BigStorageCageFeedTask>() |
| | | .eq(BigStorageCageFeedTask::getLine,Const.A10_OUT_TARGET_POSITION) |
| | | .eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP) |
| | | .gt(BigStorageCageFeedTask::getTargetSlot, 0) |
| | | .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT) |
| | | .set(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_CAR) |
| | | ); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 按照玻璃id判断玻璃状态及卧转立是否可直接启动 |
| | | */ |
| | | public Boolean judgeGlassTypeStatus(String glassId, Integer line, String mesAddress) { |
| | |
| | | .eq(EdgGlassTaskInfo::getLine, line) |
| | | .apply("time >= (select time from edg_glass_task_info where line='" + line + "' and glass_id = '" + glassId + "' and deleted = 0)") |
| | | .orderByAsc(EdgGlassTaskInfo::getTime)); |
| | | if (edgGlassTaskInfoList == null) { |
| | | log.info("线路:{}识别玻璃信息未出现在尺寸表中,获取相邻两块玻璃失败", line); |
| | | } else { |
| | | if (edgGlassTaskInfoList.size() == 0) { |
| | | edgGlassTaskInfoList = edgGlassTaskInfoService.list(new QueryWrapper<EdgGlassTaskInfo>() |
| | | .select("Top 1 *") |
| | | .eq("glass_id", glassId) |
| | | ); |
| | | log.info("在尺寸表中获取玻璃信息{}", edgGlassTaskInfoList); |
| | | if (edgGlassTaskInfoList.size() == 0) { |
| | | GlassInfo glassInfo = glassInfoService.getOne( |
| | | new LambdaQueryWrapper<GlassInfo>() |
| | | .eq(GlassInfo::getGlassId, glassId) |
| | | ); |
| | | EdgGlassTaskInfo edgGlassTaskInfo = new EdgGlassTaskInfo(); |
| | | BeanUtils.copyProperties(glassInfo, edgGlassTaskInfo); |
| | | edgGlassTaskInfo.setWidth((int) glassInfo.getWidth()); |
| | | edgGlassTaskInfo.setHeight((int) glassInfo.getHeight()); |
| | | edgGlassTaskInfoList.add(edgGlassTaskInfo); |
| | | log.info("在玻璃信息表中获取玻璃信息{}", edgGlassTaskInfoList); |
| | | } |
| | | } |
| | | Assert.isFalse(CollectionUtils.isEmpty(edgGlassTaskInfoList), "识别玻璃信息未出现在尺寸表中,获取相邻两块玻璃失败"); |
| | | //2、获取卧转立剩余宽度 |
| | |
| | | //向plc发送进片确认 |
| | | if (flag) { |
| | | //向plc写入确认字 |
| | | int returnData = 0; |
| | | PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject; |
| | | int returnData = 1; |
| | | int count = 1; |
| | | while (returnData == 0) { |
| | | while (returnData != 0) { |
| | | S7object.getinstance().plccontrol.writeWord(mesAddress, 1); |
| | | returnData = S7object.getinstance().plccontrol.readWord(mesAddress, 1).get(0); |
| | | log.info("进卧转立第{}次发送确认字完成,地址为:{},写入的内容为{}", count++, mesAddress, returnData); |
| | | |
| | | if (Const.A10_OUT_TARGET_POSITION.equals(line)) { |
| | | returnData = Integer.parseInt(plcParameterObject.getPlcParameter("D04ToMES").getValue()); |
| | | } else { |
| | | returnData = Integer.parseInt(plcParameterObject.getPlcParameter("D01ToMES").getValue()); |
| | | } |
| | | // returnData = S7object.getinstance().plccontrol.readWord(mesAddress, 1).get(0); |
| | | log.info("进卧转立第{}次发送确认字完成,地址为:{},写入的内容为{}", count++, mesAddress, 1); |
| | | } |
| | | } |
| | | //记录无法放下玻璃,后续判断启动 |
| | |
| | | bigStorageCageFeedTask.setCreateTime(new Date()); |
| | | //删除理片笼表拿走/破损数据数据 |
| | | damageService.deleteByGlassId(glassId); |
| | | Damage damage = new Damage(); |
| | | damage.setGlassId(glassId); |
| | | damage.setWorkingProcedure("磨边"); |
| | | damage.setLine(line); |
| | | damage.setType(1); |
| | | damage.setRemark("进大理片"); |
| | | damageService.insertDamage(damage); |
| | | return bigStorageCageFeedTaskService.save(bigStorageCageFeedTask); |
| | | } |
| | | |
| | |
| | | s7control.writeWord(plcMesObject.getPlcParameter("TargetAddToImport" + i).getAddress(), taskList.get(i - 1).getTargetSlot()); |
| | | log.info("向plc发送第{}片玻璃已完成,起始位置是{},目标位置是", i, taskList.get(i - 1).getLine(), taskList.get(i - 1).getTargetSlot()); |
| | | } |
| | | int returnData = 0; |
| | | int returnData = 1; |
| | | int count = 1; |
| | | while (returnData == 0) { |
| | | while (returnData != 0) { |
| | | s7control.writeWord(outLine, 2); |
| | | returnData = s7control.readWord(outLine, 1).get(0); |
| | | log.info("已向plc第{}次发送进片任务确认,地址为:{},写入的内容为{}", count++, outLine, returnData); |
| | | if (line.equals(Const.A09_OUT_TARGET_POSITION)) { |
| | | returnData = Integer.parseInt(plcMesObject.getPlcParameter("D03ToMES").getValue()); |
| | | } else { |
| | | returnData = Integer.parseInt(plcMesObject.getPlcParameter("D05ToMES").getValue()); |
| | | } |
| | | // returnData = s7control.readWord(outLine, 1).get(0); |
| | | log.info("已向plc第{}次发送进片任务确认,地址为:{},写入的内容为{}", count++, outLine, 2); |
| | | } |
| | | } |
| | | |
| | |
| | | int minLength = Math.min((int) e.getWidth(), (int) e.getHeight()); |
| | | if (maxX + minLength <= xMaxSize) { |
| | | bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION, |
| | | e.getWidth() * 10, e.getHeight() * 10, 0, 0, 1)); |
| | | e.getWidth() * 10, e.getHeight() * 10, 0, 0, 1, new Date())); |
| | | maxX = Math.max(maxX, e.getXCoordinate()); |
| | | } else { |
| | | break; |
| | |
| | | |
| | | } else { |
| | | bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION, |
| | | e.getWidth() * 10, e.getHeight(), 0, 0, 1)); |
| | | e.getWidth() * 10, e.getHeight(), 0, 0, 1, new Date())); |
| | | } |
| | | } |
| | | Assert.isFalse(CollectionUtils.isEmpty(bigStorageCageOutTaskList), "未获取出片数据,结束出片任务"); |
| | |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | private <T extends BigStorageCageBaseInfo> Boolean computeOutMoreGlassInfo(List<T> list, Boolean isTempering, String mesToPLCAddress) { |
| | | public <T extends BigStorageCageBaseInfo> Boolean computeOutMoreGlassInfo(List<T> list, Boolean isTempering, String mesToPLCAddress) { |
| | | //任务数据 获取车子存放玻璃最大数量 玻璃间隔 |
| | | List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>(); |
| | | //打车剩余尺寸 |
| | |
| | | int minLength = Math.min((int) e.getWidth(), (int) e.getHeight()); |
| | | if (maxX + minLength <= xMaxSize) { |
| | | bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION, |
| | | e.getWidth() * 10, e.getHeight() * 10, trainNumber, serialNumber++, 1)); |
| | | e.getWidth() * 10, e.getHeight() * 10, trainNumber, serialNumber++, 1, new Date())); |
| | | maxX = Math.max(maxX, e.getXCoordinate()); |
| | | } else { |
| | | remainWidth = carWidth - maxLength - glassGap; |
| | |
| | | serialNumber = 1; |
| | | maxX = e.getXCoordinate(); |
| | | bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION, |
| | | e.getWidth() * 10, e.getHeight(), trainNumber, serialNumber++, 1)); |
| | | e.getWidth() * 10, e.getHeight(), 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)); |
| | | e.getWidth() * 10, e.getHeight(), trainNumber, serialNumber++, 1, new Date())); |
| | | } |
| | | } |
| | | Assert.isFalse(CollectionUtils.isEmpty(bigStorageCageOutTaskList), "未获取出片数据,结束出片任务"); |
| | | log.info("获取出片任务数据{}条,执行保存", bigStorageCageOutTaskList.size()); |
| | | bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList); |
| | | for (BigStorageCageOutTask bigStorageCageOutTask : bigStorageCageOutTaskList |
| | | ) { |
| | | bigStorageCageOutTaskService.save(bigStorageCageOutTask); |
| | | } |
| | | // bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList); |
| | | List<String> glassIds = bigStorageCageOutTaskList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList()); |
| | | log.info("将出片玻璃{}玻璃状态改为已出片", glassIds); |
| | | bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>() |
| | | .set(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING) |
| | | .in(BigStorageCageDetails::getGlassId, glassIds)); |
| | | .in(BigStorageCageDetails::getGlassId, glassIds) |
| | | .ne(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT)); |
| | | // int returnData = 0; |
| | | // int count = 1; |
| | | // while (returnData == 0) { |