From b9b44b51b201e2f5a9a1f3665c7fb76b5690f9af Mon Sep 17 00:00:00 2001 From: wu <731351411@qq.com> Date: 星期一, 23 十二月 2024 16:13:08 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java | 310 +++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 251 insertions(+), 59 deletions(-) diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java index 216e6a0..2faeee9 100644 --- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java +++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java @@ -17,6 +17,7 @@ import com.mes.bigstorage.service.BigStorageCageDetailsService; import com.mes.bigstorage.service.BigStorageCageService; import com.mes.bigstorage.service.BigStorageGlassInfoService; +import com.mes.bigstorage.service.BigStorageGlassRelationInfoService; import com.mes.bigstoragecagetask.entity.BigStorageCageHistoryTask; import com.mes.bigstoragecagetask.entity.BigStorageCageTask; import com.mes.bigstoragecagetask.service.BigStorageCageHistoryTaskService; @@ -25,6 +26,8 @@ import com.mes.common.config.Const; import com.mes.damage.entity.Damage; import com.mes.damage.service.DamageService; +import com.mes.edgglasstask.entity.EdgGlassTaskInfo; +import com.mes.edgglasstask.service.EdgGlassTaskInfoService; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.service.GlassInfoService; import com.mes.temperingglass.entity.TemperingGlassInfo; @@ -57,6 +60,8 @@ @Resource private GlassInfoService glassInfoService; @Resource + private BigStorageGlassRelationInfoService bigStorageGlassRelationInfoService; + @Resource private BigStorageCageService bigStorageCageService; @Resource private BigStorageCageHistoryTaskService bigStorageCageHistoryTaskService; @@ -64,9 +69,16 @@ private BigStorageCageTaskService bigStorageCageTaskService; @Resource private BigStorageGlassInfoService bigStorageGlassInfoService; + @Resource + private EdgGlassTaskInfoService edgGlassTaskInfoService; @Autowired(required = false) MiloService miloService; + + /** + * 鐩撮�氭牸瀛� + */ + private static final Integer THROUGH_SLOT = 920; @Resource private RedisUtil redisUtil; @@ -83,9 +95,14 @@ @Value("${mes.outCarMaxSize}") private Integer outCarMaxSize; - @Value("${mes.sequence.order}") - private boolean sequenceOrder; - + @Value("${mes.temperingOutTargetPosition}") + private Integer temperingOutTargetPosition; + @Value("${mes.artificialOutTargetPosition}") + private Integer artificialOutTargetPosition; + @Value("${mes.slotMaxHeight}") + private Integer slotMaxHeight; + @Value("${mes.slotMaxthickness}") + private Integer slotMaxthickness; @Scheduled(fixedDelay = 1000) public void inBigStorageTask() throws Exception { @@ -104,13 +121,25 @@ log.info("鏈夋鍦ㄦ墽琛岀殑浠诲姟锛岀粨鏉熻繘鐗囦换鍔�"); return; } - //鑾峰彇杩涚墖浠诲姟琛� - List<BigStorageCageTask> inTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_in_one_task"); + //鑾峰彇杩涚墖浠诲姟淇℃伅 + List<BigStorageCageTask> inTaskList = new ArrayList(); + ReadWriteEntity fromOpcUa = miloService.readFromOpcUa("DLP1A.DLP1A.FROM1"); + List<String> glassIdList = new ArrayList<>(); + for (int i = 1; i <= 6; i++) { + ReadWriteEntity requestWord = miloService.readFromOpcUa("DLP1A.DLP1A.DI" + i); + if (null != requestWord.getValue()) { + BigStorageCageTask task = new BigStorageCageTask(); + task.setGlassId(requestWord.getValue() + ""); + task.setStartSlot(Integer.parseInt(fromOpcUa.getValue() + "")); + inTaskList.add(task); + glassIdList.add(requestWord.getValue() + ""); + continue; + } + } if (CollectionUtil.isEmpty(inTaskList)) { log.info("褰撳墠澶ц溅鏃犺繘鐗囩幓鐠冿紝缁撴潫杩涚墖浠诲姟"); + return; } - - List<String> glassIdList = inTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()); log.info("鑾峰彇浠诲姟鐨勭幓鐠僫d锛歿}", glassIdList); Map<String, Long> glassCountMap = glassIdList.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting())); for (Map.Entry<String, Long> entry : glassCountMap.entrySet()) { @@ -121,7 +150,7 @@ } } List<BigStorageCageDetails> detailsList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>().in(BigStorageCageDetails::getGlassId, glassIdList) - .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL)); + .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL_ZERO)); if (CollectionUtil.isNotEmpty(detailsList)) { log.info("鐞嗙墖绗煎瓨鍦ㄧ浉鍚岀殑杩涚墖鐜荤拑{}锛岀粨鏉熸湰娆′换鍔�", detailsList); //todo:鍚憄lc鍙戦�佹姤璀� @@ -129,21 +158,82 @@ } List<GlassInfo> glassInfoList = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>().in(GlassInfo::getGlassId, glassIdList)); - Map<String, List<GlassInfo>> glassListMap = glassInfoList.stream().collect(Collectors.groupingBy(GlassInfo::getGlassId)); + if (glassInfoList.size() != inTaskList.size()) { + log.info("杩涚墖浠诲姟鏁伴噺{}涓庣幓鐠冩暟閲弡}涓嶅尮閰嶏紝缁撴潫鏈杩涚墖", inTaskList.size(), glassInfoList.size()); + //todo:鍚憄lc鍙戦�佹姤璀� + return; + } + //鎸夌収鐜荤拑鍘氬害鍒嗙粍锛屽垽鏂墿浣欐牸瀛愭槸鍚﹀彲浠ュ瓨鏀� + Map<Double, Long> thickCountMap = glassInfoList.stream().collect(Collectors.groupingBy(GlassInfo::getThickness, Collectors.counting())); + 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) + .le(BigStorageCage::getMinThickness, entry.getKey()) + .ge(BigStorageCage::getMaxThickness, entry.getKey())); + if (count < entry.getValue()) { + log.info("绗煎唴鏍煎瓙鍓╀綑鏁伴噺涓嶈冻锛岀粨鏉熸湰娆¤繘鐗�"); + //todo:鍚憄lc鍙戦�佹姤璀� + return; + } + } + //todo:瓒呭ぇ灏哄 + if (slotMaxHeight < Math.min(glassInfoList.get(0).getWidth(), glassInfoList.get(0).getHeight()) || glassInfoList.get(0).getThickness() > slotMaxthickness) { + int count = bigStorageCageDetailsService.count(new LambdaQueryWrapper<BigStorageCageDetails>() + .eq(BigStorageCageDetails::getSlot, THROUGH_SLOT) + .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL)); + if (count > 0) { + log.info("鐩撮�氱墖鍙板瓨鍦ㄧ幓鐠冿紝缁撴潫鏈杩涚墖"); + //todo:鍚憄lc鍙戦�佹姤璀� + return; + } + } + //淇敼纾ㄨ竟瀵瑰垪琛ㄧ殑鐜荤拑鐘舵�� + edgGlassTaskInfoService.update(new LambdaUpdateWrapper<EdgGlassTaskInfo>() + .set(EdgGlassTaskInfo::getState, Const.EDG_GLASS_SUCCESS).in(EdgGlassTaskInfo::getGlassId, glassIdList)); + //鎶ュ伐 + for (String glass : glassIdList) { + damageService.autoSubmitReport(glass, inTaskList.get(0).getStartSlot(), "纾ㄨ竟", "杩涘ぇ鐞嗙墖绗�"); + } + + Map<String, List<GlassInfo>> glassListMap = glassInfoList.stream().collect(Collectors.groupingBy(GlassInfo::getGlassId)); //璁$畻鐩爣鏍煎瓙 List<BigStorageCageHistoryTask> historyTasks = new ArrayList<>(); - for (BigStorageCageTask task : inTaskList) { - GlassInfo info = glassListMap.get(task.getGlassId()).get(0); - BigStorageDTO bigStorageDTO = bigStorageGlassInfoService.queryBigStorageTargetSlot(info.getGlassId()); - //鑾峰彇鐩爣鏍煎瓙淇℃伅 + //瓒呭ぇ灏哄涓庢甯稿昂瀵哥幓鐠冭绠楁柟寮忎笉涓�鏍� + if (slotMaxHeight > Math.min(glassInfoList.get(0).getWidth(), glassInfoList.get(0).getHeight())) { + for (BigStorageCageTask task : inTaskList) { + GlassInfo info = glassListMap.get(task.getGlassId()).get(0); + BigStorageDTO bigStorageDTO = bigStorageGlassInfoService.queryBigStorageTargetSlot(info.getEngineerId(), info.getTemperingLayoutId(), info.getTemperingFeedSequence()); + //鑾峰彇鐩爣鏍煎瓙淇℃伅 // BigStorageDTO bigStorageDTO = bigStorageCageDetailsService.queryTargetSlotByTempering(info); // 涓存椂鏇存柊鏍煎瓙鐨勫墿浣欏昂瀵革細闃叉鐩搁偦鐜荤拑杩涘悓涓�鏍煎瓙閫犳垚鍓╀綑灏哄涓嶈冻锛岀幓鐠冭秺鐣岀殑鎯呭喌锛屼换鍔″畬鎴愬悗鍐嶆鏇存柊澶х悊鐗囩琛ㄥ墿浣欏搴︼紙鎸夌収绗煎唴鐜荤拑鏁伴噺鏇存柊澶х悊鐗囩鍓╀綑灏哄锛� - bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>() - .set(BigStorageCage::getRemainWidth, bigStorageDTO.getWidth() - Math.max(info.getWidth(), info.getHeight()) - glassGap) - .eq(BigStorageCage::getSlot, bigStorageDTO.getSlot())); - task.setTargetSlot(bigStorageDTO.getSlot()); - task.setGlassId(info.getGlassId()); + bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>() + .set(BigStorageCage::getRemainWidth, bigStorageDTO.getWidth() - Math.max(info.getWidth(), info.getHeight()) - glassGap) + .eq(BigStorageCage::getSlot, bigStorageDTO.getSlot())); + task.setTargetSlot(bigStorageDTO.getSlot()); + task.setGlassId(info.getGlassId()); + bigStorageCageTaskService.updateTaskMessage("big_storage_cage_in_one_task", task); + //瀛樻斁鍘嗗彶浠诲姟 + BigStorageCageHistoryTask historyTask = new BigStorageCageHistoryTask(); + BeanUtils.copyProperties(task, historyTask); + historyTask.setTaskType(Const.BIG_STORAGE_BEFORE_IN); + historyTask.setGlassCount(glassInfoList.size()); + historyTask.setTaskState(Const.ENGINEERING_NEW); + historyTasks.add(historyTask); + BigStorageCageDetails cageDetails = new BigStorageCageDetails(); + BeanUtils.copyProperties(info, cageDetails); + cageDetails.setSlot(bigStorageDTO.getSlot()); + cageDetails.setState(Const.GLASS_STATE_NEW); + cageDetails.setDeviceId(bigStorageDTO.getDeviceId()); + cageDetails.setSequence(bigStorageDTO.getSlotSequence()); + cageDetails.setGap(glassGap); + cageDetails.setFilmsId(info.getFilmsid()); + cageDetails.setId(null); + bigStorageCageDetailsService.save(cageDetails); + } + } else { + BigStorageCageTask task = inTaskList.get(0); + task.setTargetSlot(THROUGH_SLOT); bigStorageCageTaskService.updateTaskMessage("big_storage_cage_in_one_task", task); //瀛樻斁鍘嗗彶浠诲姟 BigStorageCageHistoryTask historyTask = new BigStorageCageHistoryTask(); @@ -152,20 +242,27 @@ historyTask.setGlassCount(glassInfoList.size()); historyTask.setTaskState(Const.ENGINEERING_NEW); historyTasks.add(historyTask); + GlassInfo info = glassInfoList.get(0); BigStorageCageDetails cageDetails = new BigStorageCageDetails(); BeanUtils.copyProperties(info, cageDetails); - cageDetails.setSlot(bigStorageDTO.getSlot()); + cageDetails.setSlot(THROUGH_SLOT); cageDetails.setState(Const.GLASS_STATE_NEW); - cageDetails.setDeviceId(bigStorageDTO.getDeviceId()); - cageDetails.setSequence(bigStorageDTO.getSlotSequence()); + cageDetails.setDeviceId(0); + cageDetails.setSequence(0); cageDetails.setGap(glassGap); + cageDetails.setFilmsId(info.getFilmsid()); cageDetails.setId(null); bigStorageCageDetailsService.save(cageDetails); } //鍘嗗彶鏁版嵁鍏ュ簱 bigStorageCageHistoryTaskService.saveBatch(historyTasks); //鍚憃pc鍙戦�佸惎鍔ㄤ俊鍙� - miloService.writeToOpcWord(generateReadWriteEntity("DLP1A.DLP1A.MesReply", 1)); + List<ReadWriteEntity> list = new ArrayList<>(); + for (int i = 1; i <= inTaskList.size(); i++) { + list.add(generateReadWriteEntity("DLP1A.DLP1A.TO" + i, inTaskList.get(i - 1).getTargetSlot())); + } + list.add(generateReadWriteEntity("DLP1A.DLP1A.MesReply", 1)); + miloService.writeToOpcWord(list); } @Scheduled(fixedDelay = 1000) @@ -187,29 +284,32 @@ log.info("鏈夋鍦ㄦ墽琛岀殑鍑虹墖浠诲姟锛岀粨鏉熸湰娆″嚭鐗囦换鍔�"); return; } - //todo:鏄惁鍏佽閽㈠寲 - if (redisUtil.getCacheObject("temperingSwitch")) { - //鏄惁鏈夋鍦ㄩ挗鍖栫殑鐜荤拑:閽㈠寲灏忕墖琛ㄥ叧鑱斿巻鍙蹭换鍔¤〃锛岀瓫閫夋湭鍑虹鐨勭幓鐠冧俊鎭� + //鏄惁鍏佽閽㈠寲 + //鏄惁鏈夋鍦ㄩ挗鍖栫殑鐜荤拑:閽㈠寲灏忕墖琛ㄥ叧鑱斿巻鍙蹭换鍔¤〃锛岀瓫閫夋湭鍑虹鐨勭幓鐠冧俊鎭� // 鑾峰彇褰撳墠閽㈠寲浠诲姟鏈畬鎴愬嚭鐗囩殑鐜荤拑淇℃伅 - List<TemperingGlassInfo> unFinishTemperingGlassInfoList = temperingGlassInfoService.list(new LambdaQueryWrapper<TemperingGlassInfo>().eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW)); - if (CollectionUtil.isNotEmpty(unFinishTemperingGlassInfoList)) { - List<String> glassIdList = unFinishTemperingGlassInfoList.stream().map(TemperingGlassInfo::getGlassId).collect(Collectors.toList()); - List<BigStorageCageHistoryTask> historyTaskList = bigStorageCageHistoryTaskService.list(new LambdaQueryWrapper<BigStorageCageHistoryTask>() - .eq(BigStorageCageHistoryTask::getTaskType, Const.BIG_STORAGE_BEFORE_OUT) - .in(BigStorageCageHistoryTask::getGlassId, glassIdList)); - List<TemperingGlassInfo> temperingGlassList = unFinishTemperingGlassInfoList; - if (CollectionUtil.isNotEmpty(historyTaskList)) { - List<String> taskGlassList = historyTaskList.stream().map(BigStorageCageHistoryTask::getGlassId).collect(Collectors.toList()); - temperingGlassList = unFinishTemperingGlassInfoList.stream().filter(e -> !taskGlassList.contains(e.getGlassId())).collect(Collectors.toList()); - } - if (CollectionUtil.isNotEmpty(temperingGlassList)) { - log.info("鏈夋鍦ㄥ嚭鐗囩殑閽㈠寲浠诲姟"); - computeOutGlassInfo(temperingGlassList, "big_storage_cage_out_one_task", Const.TEMPERING_OUT_TARGET_POSITION, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT); - Date endDate = new Date(); - log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime()); - return; - } - } + List<TemperingGlassInfo> unFinishTemperingGlassInfoList = temperingGlassInfoService.list(new LambdaQueryWrapper<TemperingGlassInfo>() + .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW).orderByAsc(TemperingGlassInfo::getTemperingFeedSequence)); + if (CollectionUtil.isNotEmpty(unFinishTemperingGlassInfoList)) { + log.info("鏈夋鍦ㄥ嚭鐗囩殑閽㈠寲浠诲姟"); + computeOutGlassInfoByVirtualSlot(unFinishTemperingGlassInfoList, "big_storage_cage_out_one_task", temperingOutTargetPosition, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT); + Date endDate = new Date(); + log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime()); + return; + } + + BigStorageCageDetails details = bigStorageCageDetailsService.getOne(new LambdaQueryWrapper<BigStorageCageDetails>() + .eq(BigStorageCageDetails::getSlot, THROUGH_SLOT) + .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL).last("limit 1")); + if (details != null) { + TemperingGlassInfo temperingGlassInfo = new TemperingGlassInfo(); + BeanUtils.copyProperties(details, temperingGlassInfo); + temperingGlassInfo.setState(-1); + temperingGlassInfoService.save(temperingGlassInfo); + computeOutGlassInfoByVirtualSlot(Arrays.asList(temperingGlassInfo), "big_storage_cage_out_one_task", temperingOutTargetPosition, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT); + return; + } + + if (redisUtil.getCacheObject("temperingSwitch")) { //閽㈠寲浼樺厛锛氳幏鍙栫悊鐗囩 鐜荤拑灏忕墖 鐮存崯琛� 鏁伴噺 鍒ゆ柇绗煎唴鐗堝浘鏄惁鍒伴綈 List<TemperingLayoutDTO> temperingLayoutDTOList = bigStorageCageDetailsService.temperingIsAll(); if (CollectionUtil.isNotEmpty(temperingLayoutDTOList)) { @@ -225,10 +325,10 @@ .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) .eq(GlassInfo::getTemperingLayoutId, item.getTemperingLayoutId()) .eq(GlassInfo::getEngineerId, item.getEngineerId()) - .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence)); + .orderByAsc(GlassInfo::getTemperingFeedSequence)); if (CollectionUtil.isNotEmpty(temperingGlassInfos)) { temperingGlassInfoService.saveBatch(temperingGlassInfos); - computeOutGlassInfo(temperingGlassInfos, "big_storage_cage_out_one_task", Const.TEMPERING_OUT_TARGET_POSITION, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT); + computeOutGlassInfoByVirtualSlot(temperingGlassInfos, "big_storage_cage_out_one_task", temperingOutTargetPosition, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT); Date endDate = new Date(); log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime()); return; @@ -241,9 +341,9 @@ List<BigStorageCageDetails> artificialList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL) .orderByAsc(BigStorageCageDetails::getSlot) - .orderByAsc(BigStorageCageDetails::getId)); + .orderByAsc(BigStorageCageDetails::getId).last("limit " + outCarMaxSize)); if (CollectionUtil.isNotEmpty(artificialList)) { - computeOutGlassInfo(artificialList, "big_storage_cage_out_one_task", Const.ARTIFICIAL_OUT_TARGET_POSITION, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT); + computeOutGlassInfoByVirtualSlot(artificialList, "big_storage_cage_out_one_task", artificialOutTargetPosition, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT); Date endDate = new Date(); log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime()); return; @@ -257,27 +357,29 @@ return; } List<BigStorageCageDetails> list = new ArrayList<>(); + loop: for (BigStorageRelationDTO dto : virtualList) { List<BigStorageSequenceDTO> sequenceDTOList = bigStorageCageDetailsService.dispatchBigStorageGlassInfo(dto); if (CollectionUtil.isEmpty(sequenceDTOList) || sequenceDTOList.size() == 1) { continue; } int sequence = -1; - int startSlot = -1; + int targetSlot = -1; for (BigStorageSequenceDTO item : sequenceDTOList) { - if (item.getMinSequence() == sequence + 1) { + if (item.getMaxSequence() == sequence - 1) { //鐢熸垚璋冨害浠诲姟 - int targetSlot = item.getSlot(); + int startSlot = item.getSlot(); list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN).eq(BigStorageCageDetails::getSlot, startSlot)); - computeOutGlassInfo(list, "big_storage_cage_out_one_task", targetSlot, Const.GLASS_STATE_SCHEDULE_ING, Const.BIG_STORAGE_BEFORE_DISPATCH); + computeOutGlassInfoByVirtualSlot(list, "big_storage_cage_out_one_task", + targetSlot, Const.GLASS_STATE_SCHEDULE_ING, Const.BIG_STORAGE_BEFORE_DISPATCH); List<Integer> slotList = new ArrayList<>(); slotList.add(targetSlot); updateSlotRemainBySlots(slotList); - break; + break loop; } - sequence = item.getMaxSequence(); - startSlot = item.getSlot(); + sequence = item.getMinSequence(); + targetSlot = item.getSlot(); } } } @@ -294,7 +396,32 @@ return; } //鑾峰彇杩涚墖浠诲姟琛� - List<BigStorageCageTask> inTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_in_one_task"); +// List<BigStorageCageTask> inTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_in_one_task"); + List<BigStorageCageTask> inTaskList = new ArrayList(); + + List<String> glassIdList = new ArrayList<>(); + ReadWriteEntity toWord = miloService.readFromOpcUa("DLP1A.DLP1A.TO1"); + if ("0".equals(toWord.getValue() + "")) { + log.info("瀹屾垚浠诲姟宸叉墽琛岋紝缁撴潫鏈瀹屾垚杩涚墖浠诲姟"); + return; + } + for (int i = 1; i <= 6; i++) { + ReadWriteEntity requestWord = miloService.readFromOpcUa("DLP1A.DLP1A.DI" + i); + ReadWriteEntity statetWord = miloService.readFromOpcUa("DLP1A.DLP1A.STATE" + i); + ReadWriteEntity toOpcUa = miloService.readFromOpcUa("DLP1A.DLP1A.TO" + i); + ReadWriteEntity fromOpcUa = miloService.readFromOpcUa("DLP1A.DLP1A.FROM" + i); + + if (null != requestWord.getValue()) { + BigStorageCageTask task = new BigStorageCageTask(); + task.setGlassId(requestWord.getValue() + ""); + task.setTargetSlot(Integer.parseInt(toOpcUa.getValue() + "")); + task.setTaskState(Integer.parseInt(statetWord.getValue() + "")); + task.setStartSlot(Integer.parseInt(fromOpcUa.getValue() + "")); + inTaskList.add(task); + glassIdList.add(requestWord.getValue() + ""); + continue; + } + } if (CollectionUtil.isEmpty(inTaskList)) { log.info("褰撳墠澶ц溅鏃犺繘鐗囩幓鐠冿紝缁撴潫瀹屾垚杩涚墖浠诲姟"); return; @@ -341,7 +468,13 @@ } //娓呯┖鍚姩鐘舵�� //鍚憃pc鍙戦�佸惎鍔ㄤ俊鍙� - miloService.writeToOpcWord(generateReadWriteEntity("DLP1A.DLP1A.MesReply", 0)); + //鍚憃pc鍙戦�佸惎鍔ㄤ俊鍙� + List<ReadWriteEntity> list = new ArrayList<>(); + for (int i = 1; i <= 6; i++) { + list.add(generateReadWriteEntity("DLP1A.DLP1A.TO" + i, 0)); + } + list.add(generateReadWriteEntity("DLP1A.DLP1A.MesReply", 0)); + miloService.writeToOpcWord(list); } @Scheduled(fixedDelay = 1000) @@ -380,7 +513,10 @@ if (finalTaskType.equals(Const.BIG_STORAGE_BEFORE_OUT)) { outSuccessGlassSlot = v.stream().map(BigStorageCageTask::getStartSlot).collect(Collectors.toList()); } else { - outSuccessGlassSlot = v.stream().map(BigStorageCageTask::getTargetSlot).collect(Collectors.toList()); + List<Integer> targetSuccessGlassSlot = v.stream().map(BigStorageCageTask::getTargetSlot).collect(Collectors.toList()); + List<Integer> startoutSuccessGlassSlot = v.stream().map(BigStorageCageTask::getStartSlot).collect(Collectors.toList()); + outSuccessGlassSlot.addAll(targetSuccessGlassSlot); + outSuccessGlassSlot.addAll(startoutSuccessGlassSlot); } List<UpdateBigStorageCageDTO> storageCageDTOList = v.stream().map(e -> { UpdateBigStorageCageDTO storageCageDTO = new UpdateBigStorageCageDTO(); @@ -396,6 +532,10 @@ bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_OUT); } else { bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_IN); + //todo:鎸夌収鏍煎瓙淇℃伅鏇存柊瀵瑰簲鐨勮澶噄d + List<Integer> slotList = storageCageDTOList.stream().map(UpdateBigStorageCageDTO::getTargetSlot).distinct().collect(Collectors.toList()); + bigStorageCageDetailsService.updateDeviceIdBySlot(slotList); + } log.info("4銆佸ぇ鐞嗙墖绗艰繘鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", v); updateSlotRemainBySlots(outSuccessGlassSlot); @@ -448,7 +588,7 @@ Damage damage = new Damage(); damage.setGlassId(item.getGlassId()); damage.setLine(item.getStartSlot()); - damage.setWorkingProcedure("纾ㄨ竟"); + damage.setWorkingProcedure("澶х悊鐗囩"); damage.setRemark("杩涚鍓嶅崸杞珛"); damage.setStatus(1); damage.setType(item.getTaskState()); @@ -512,6 +652,7 @@ List<String> glassList = noDealTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()); bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>() .set(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) + .ne(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT) .in(BigStorageCageDetails::getGlassId, glassList)); } else { @@ -520,6 +661,7 @@ bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>() .set(BigStorageCageDetails::getSlot, item.getStartSlot()) .set(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) + .ne(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT) .eq(BigStorageCageDetails::getGlassId, item.getGlassId())); } } @@ -541,6 +683,55 @@ * @param <T> * @return */ + private <T extends BigStorageCageBaseInfo> Boolean computeOutGlassInfoByVirtualSlot(List<T> list, String tableName, int targetSlot, int state, int taskType) { + //浠诲姟鏁版嵁:鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲�,鐜荤拑闂撮殧 + List<String> glassIdList = bigStorageGlassRelationInfoService.queryNeedOutGlassId( + list.get(0).getEngineerId(), list.get(0).getTemperingLayoutId(), list.get(0).getTemperingFeedSequence()); + List<T> 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() + .map(e -> new BigStorageCageTask(e.getGlassId(), e.getSlot(), targetSlot, 0)).collect(Collectors.toList()); + + 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)); + } + //娓呯┖浠诲姟琛ㄦ暟鎹� + bigStorageCageTaskService.removeAll("big_storage_cage_out_one_task"); + bigStorageCageTaskService.saveTaskMessage(tableName, bigStorageCageTaskList); + List<BigStorageCageHistoryTask> historyList = bigStorageCageTaskList.stream().filter(e -> StringUtils.isNotBlank(e.getGlassId())).map(e -> { + BigStorageCageHistoryTask history = new BigStorageCageHistoryTask(); + BeanUtils.copyProperties(e, history); + history.setGlassCount(glassCount); + history.setTaskType(taskType); + return history; + }).collect(Collectors.toList()); + bigStorageCageHistoryTaskService.saveBatch(historyList); + + log.info("灏嗗嚭鐗囩幓鐠儃}鐜荤拑鐘舵�佹敼涓哄嚭鐗囦腑", glassIds); + bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>() + .set(BigStorageCageDetails::getState, state) + .set(Const.BIG_STORAGE_BEFORE_DISPATCH.equals(taskType), BigStorageCageBaseInfo::getSlot, targetSlot) + .ne(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT) + .in(BigStorageCageDetails::getGlassId, glassIds)); + try { + miloService.writeToOpcWord(generateReadWriteEntity("DLP1B.DLP1B.MesReply", 1)); + } catch (Exception e) { + e.printStackTrace(); + } + return Boolean.TRUE; + } + + // /** +// * 鍑虹墖涓�娆′粎鐢熸垚涓�杞︾幓鐠� +// * +// * @param list +// * @param <T> +// * @return +// */ private <T extends BigStorageCageBaseInfo> Boolean computeOutGlassInfo(List<T> list, String tableName, int targetSlot, int state, int taskType) { //浠诲姟鏁版嵁:鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲�,鐜荤拑闂撮殧 List<BigStorageCageTask> bigStorageCageTaskList = new ArrayList<>(); @@ -578,6 +769,7 @@ log.info("灏嗗嚭鐗囩幓鐠儃}鐜荤拑鐘舵�佹敼涓哄嚭鐗囦腑", glassIds); bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>() .set(BigStorageCageDetails::getState, state) + .ne(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT) .set(Const.GLASS_STATE_SCHEDULE_ING.equals(state), BigStorageCageBaseInfo::getSlot, targetSlot) .in(BigStorageCageDetails::getGlassId, glassIds)); try { -- Gitblit v1.8.0