From 9152c5394d4fd9d14d1a5fb9de9d441450b2bac6 Mon Sep 17 00:00:00 2001 From: zhoushihao <zsh19950802@163.com> Date: 星期三, 20 十一月 2024 08:41:13 +0800 Subject: [PATCH] 1、卧理进出片订阅功能直接按订阅结果判断,订阅后查询数据库,可能造成数据重复读,任务重复执行问题 2、大理片笼新增任务表、任务历史表脚本 3、大理片笼进片任务功能开发已完成50% --- hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageTask.java | 131 +++++++++++++++++++++++-------------------- 1 files changed, 70 insertions(+), 61 deletions(-) diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageTask.java index b51000b..2284d1e 100644 --- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageTask.java +++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageTask.java @@ -3,12 +3,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.kangaroohy.milo.runner.subscription.SubscriptionCallback; -import com.kangaroohy.milo.service.MiloService; import com.mes.bigstorage.entity.BigStorageCage; import com.mes.bigstorage.entity.BigStorageCageDetails; +import com.mes.bigstorage.entity.BigStorageDTO; import com.mes.bigstorage.service.BigStorageCageDetailsService; import com.mes.bigstorage.service.BigStorageCageService; +import com.mes.bigstoragecageIntask.entity.BigStorageCageInTask; +import com.mes.bigstoragecageIntask.service.BigStorageCageInTaskService; import com.mes.bigstoragetask.entity.BigStorageCageFeedTask; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import com.mes.bigstoragetask.entity.UpdateBigStorageCageDTO; @@ -17,19 +18,22 @@ import com.mes.common.config.Const; import com.mes.damage.entity.Damage; import com.mes.damage.service.DamageService; -import com.mes.edgglasstask.service.EdgGlassTaskInfoService; +import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.service.GlassInfoService; import com.mes.temperingglass.entity.TemperingGlassInfo; import com.mes.temperingglass.service.TemperingGlassInfoService; +import com.mes.tools.service.BigStorageBaseService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -38,49 +42,79 @@ @Component @Slf4j public class OpcPlcStorageCageTask { - - @Resource - private BigStorageCageService bigStorageCageService; @Resource private BigStorageCageDetailsService bigStorageCageDetailsService; - @Resource - private GlassInfoService glassInfoService; @Resource private BigStorageCageFeedTaskService bigStorageCageFeedTaskService; @Resource private BigStorageCageOutTaskService bigStorageCageOutTaskService; @Resource - private EdgGlassTaskInfoService edgGlassTaskInfoService; - @Resource private TemperingGlassInfoService temperingGlassInfoService; @Resource private DamageService damageService; - @Autowired(required = false) - MiloService miloService; + @Resource + private GlassInfoService glassInfoService; + @Resource + private BigStorageCageService bigStorageCageService; - @Resource(name = "bigStorageStartCallback") - SubscriptionCallback bigStorageStartCallback; - - @Value("${mes.carWidth}") - private Integer carWidth; - - @Value("${mes.slotWidth}") - private Integer slotWidth; + @Resource + private BigStorageBaseService baseService; + @Resource + private BigStorageCageInTaskService bigStorageBaseInTaskService; @Value("${mes.glassGap}") private Integer glassGap; - @Scheduled(fixedDelay = Long.MAX_VALUE) - public void startOpcTask() throws Exception { - //璁惧涓�浜岀殑杩涚墖璇锋眰 - miloService.subscriptionFromOpcUa(Arrays.asList("my.device01.x1", "my.device02.x1"), bigStorageStartCallback); - } +// @Resource +// private BigStorageCage bigStorageBaseInTaskService; - @Scheduled(fixedDelay = Long.MAX_VALUE) - public void outOpcTask() throws Exception { - //璁惧1鐨勫嚭鐗囪姹� - miloService.subscriptionFromOpcUa(Arrays.asList("my.device03.x1"), bigStorageStartCallback); +// @Autowired(required = false) +// MiloService miloService; +// +// @Resource(name = "bigStorageStartCallback") +// SubscriptionCallback bigStorageStartCallback; + + +// @Scheduled(fixedDelay = Long.MAX_VALUE) +// public void startOpcTask() throws Exception { +// //璁惧涓�浜岀殑杩涚墖璇锋眰 +// miloService.subscriptionFromOpcUa(Arrays.asList("my.device01.x1", "my.device02.x1"), bigStorageStartCallback); +// } + +// @Scheduled(fixedDelay = Long.MAX_VALUE) +// public void outOpcTask() throws Exception { +// //璁惧1鐨勫嚭鐗囪姹� +// miloService.subscriptionFromOpcUa(Arrays.asList("my.device03.x1"), bigStorageStartCallback); +// } + + + @Scheduled(fixedDelay = 200) + public void inBigStorageTask() { + //todo:鑾峰彇杩涚墖浠诲姟琛� + List<BigStorageCageInTask> inTaskList = bigStorageBaseInTaskService.queryTaskMessage("big_storage_cage_in_one_task"); + if (CollectionUtils.isEmpty(inTaskList)) { + log.info("褰撳墠澶ц溅鏃犺繘鐗囦换鍔★紝缁撴潫鏈湴瀹氭椂浠诲姟"); + } + List<String> glassIdList = inTaskList.stream().map(BigStorageCageInTask::getGlassId).collect(Collectors.toList()); + Map<String, List<BigStorageCageInTask>> taskMap = inTaskList.stream().collect(Collectors.groupingBy(BigStorageCageInTask::getGlassId)); + List<GlassInfo> glassInfoList = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>().in(GlassInfo::getGlassId, glassIdList)); + //todo:璁$畻鐩爣鏍煎瓙 + for (GlassInfo info : glassInfoList) { + //鑾峰彇鐩爣鏍煎瓙淇℃伅 + 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())); + BigStorageCageInTask task = taskMap.get(info.getGlassId()).get(0); + task.setTargetSlot(bigStorageDTO.getSlot()); + task.setGlassId(info.getGlassId()); + task.setTaskRunning(Const.BIG_STORAGE_TASK_RUNNING); + bigStorageBaseInTaskService.updateTaskMessage("", task); + //todo:瀛樻斁鍘嗗彶浠诲姟 + } + } @@ -108,7 +142,7 @@ bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_IN); log.info("4銆佸ぇ鐞嗙墖绗艰繘鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", inSuccessGlass); //鏇存柊鐞嗙墖绗肩幓鐠冨昂瀵� - updateSlotRemainBySlots(inSuccessGlassSlot); + baseService.updateSlotRemainBySlots(inSuccessGlassSlot); log.info("5銆佸ぇ鐞嗙墖绗艰繘鐗囩洰鏍囨牸瀛愬昂瀵告洿鏂板畬鎴�"); } @@ -153,7 +187,7 @@ List<Integer> outSuccessSlotList = outSuccessGlass.stream().map(BigStorageCageOutTask::getStartSlot).collect(Collectors.toList()); log.info("4銆佸ぇ鐞嗙墖绗煎嚭鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", outSuccessGlass); //鏇存柊鐞嗙墖绗肩幓鐠冨昂瀵� - updateSlotRemainBySlots(outSuccessSlotList); + baseService.updateSlotRemainBySlots(outSuccessSlotList); log.info("5銆佸ぇ鐞嗙墖绗艰繘鐗囩洰鏍囨牸瀛愬昂瀵告洿鏂板畬鎴�"); } } @@ -190,7 +224,7 @@ //鏇存柊鐞嗙墖绗肩幓鐠冨昂瀵� List<Integer> slotList = scheduleSuccessGlass.stream().map(BigStorageCageOutTask::getStartSlot).distinct().collect(Collectors.toList()); slotList.addAll(scheduleSuccessGlass.stream().map(BigStorageCageOutTask::getEndSlot).distinct().collect(Collectors.toList())); - updateSlotRemainBySlots(slotList); + baseService.updateSlotRemainBySlots(slotList); log.info("5銆佸ぇ鐞嗙墖绗艰繘鐗囩洰鏍囨牸瀛愬昂瀵告洿鏂板畬鎴�"); } } @@ -230,7 +264,7 @@ slotList.add(bigStorageCageFeedTask.getTargetSlot()); } //鏇存柊鏍煎瓙鍓╀綑瀹藉害 - updateSlotRemainBySlots(slotList); + baseService.updateSlotRemainBySlots(slotList); log.info("杩涚墖浠诲姟鎵ц瀹屾垚"); } //鑾峰彇鍑虹墖浠诲姟琛ㄤ腑鐘舵�佷负鐮存崯鐨勬暟鎹� @@ -258,37 +292,12 @@ slotList.add(bigStorageCageOutTask.getStartSlot()); } //鏇存柊鏍煎瓙鍓╀綑瀹藉害 - updateSlotRemainBySlots(slotList); + baseService.updateSlotRemainBySlots(slotList); log.info("鍑虹墖浠诲姟鎵ц瀹屾垚"); } Date endDate = new Date(); log.info("澶х悊鐗囩鐮存崯鐜荤拑娓呴櫎浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime()); return; - } - - public void updateSlotRemainBySlots(List<Integer> slotList) { - //鑾峰彇鏍煎瓙鍐呮墍鏈夌殑鐜荤拑淇℃伅 - List<BigStorageCageDetails> inSlotGlassList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() - .in(BigStorageCageDetails::getSlot, slotList).in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL)); - Map<Integer, Double> slotRemainMap = new HashMap<>(); - //鏄惁瀛樺湪鏈夋牸瀛愰潪绌虹殑鐜荤拑 - if (CollectionUtils.isNotEmpty(inSlotGlassList)) { - //瀛樺湪 灏嗘牸瀛愬唴鐨勭幓鐠冨垎鍒繘琛屾洿鏂� - slotRemainMap = inSlotGlassList.stream() - .collect(Collectors.groupingBy(BigStorageCageDetails::getSlot, Collectors.summingDouble(item -> Math.max(item.getWidth(), item.getHeight()) + glassGap))); - slotRemainMap.forEach((e, v) -> { - double remainWidth = slotWidth - v >= 0 ? slotWidth - v : 0; - bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, remainWidth) - .eq(BigStorageCage::getSlot, e)); - }); - } - //杩囨护涓嶅瓨鍦ㄧ幓鐠冪殑鏍煎瓙 灏嗗搴﹂噸缃负鍘熷瀹藉害5000 - Set<Integer> remainSlotList = slotRemainMap.keySet(); - slotList.removeAll(remainSlotList); - if (CollectionUtils.isNotEmpty(slotList)) { - bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, slotWidth) - .in(BigStorageCage::getSlot, slotList)); - } } -- Gitblit v1.8.0