From 87bf646a21a1664575110a85a132f486d8954293 Mon Sep 17 00:00:00 2001
From: zhoushihao <zsh19950802@163.com>
Date: 星期一, 17 六月 2024 14:10:33 +0800
Subject: [PATCH] 大理片笼进出片任务逻辑初次提交:已完成进出片、调度功能,功能待调整优化
---
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java | 126 ++++++++++++++++++++++++++++++++++++++---
1 files changed, 116 insertions(+), 10 deletions(-)
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
index 40d8dd9..6bf600b 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
@@ -3,11 +3,15 @@
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.mes.bigstorage.entity.BigStorageCageDetails;
import com.mes.bigstorage.entity.BigStorageDTO;
+import com.mes.bigstorage.entity.dto.SlotSequenceDTO;
+import com.mes.bigstorage.entity.dto.TemperingLayoutDTO;
import com.mes.bigstorage.service.BigStorageCageDetailsService;
import com.mes.bigstorage.service.BigStorageCageService;
import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
+import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
import com.mes.bigstoragetask.service.BigStorageCageFeedTaskService;
import com.mes.bigstoragetask.service.BigStorageCageOutTaskService;
import com.mes.common.S7object;
@@ -17,6 +21,7 @@
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 lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
@@ -24,13 +29,13 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
@@ -58,6 +63,9 @@
@Value("${mes.sequence.order}")
private boolean sequenceOrder;
+
+ @Value("${mes.slotWidth}")
+ private Integer slotWidth;
public static boolean bigStorageCageFullAlarm = false;
@@ -257,6 +265,99 @@
computeTargetByLine(outLine, d02GoAdress, d05GoAdress);
}
+ @Scheduled(fixedDelay = 5000)
+ public void plcToHomeEdgOutTask() {
+ //todo:鏄惁鏈夋鍦ㄥ嚭鐗囩殑閽㈠寲浠诲姟
+ List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.list(new LambdaQueryWrapper<TemperingGlassInfo>()
+ .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW)
+ .orderBy(Boolean.TRUE, sequenceOrder, TemperingGlassInfo::getTemperingFeedSequence));
+ //浠诲姟鏁版嵁 鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲� 鐜荤拑闂撮殧
+ List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>();
+ if (CollectionUtils.isNotEmpty(temperingGlassInfoList)) {
+ log.info("鏈夋鍦ㄥ嚭鐗囩殑閽㈠寲浠诲姟");
+ //鎵撹溅鍓╀綑灏哄
+ AtomicReference<Integer> remainWidth = new AtomicReference<>(Const.BIG_STORAGE_WIDTH);
+ temperingGlassInfoList.stream().forEach(e -> {
+ if (bigStorageCageOutTaskList.size() > 5 || e.getWidth() > remainWidth.get()) {
+ return;
+ }
+ remainWidth.set(remainWidth.get() - e.getWidth().intValue() - Const.BIG_STORAGE_GAP);
+ bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getState(), Const.A09_OUT_TARGET_POSITION,
+ 0, 0, 1));
+ });
+ bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
+ return;
+ }
+
+ //鑾峰彇鐘舵�佸瓧 閽㈠寲浼樺厛 or 浜哄伐涓嬬墖浼樺厛
+ if (true) {
+ //閽㈠寲浼樺厛锛氳幏鍙栫悊鐗囩 鐜荤拑灏忕墖 鐮存崯琛� 鏁伴噺 鍒ゆ柇绗煎唴鐗堝浘鏄惁鍒伴綈
+ TemperingLayoutDTO temperingLayoutDTO = bigStorageCageDetailsService.temperingIsAll();
+ if (null != temperingLayoutDTO) {
+ //鐜荤拑鍒伴綈
+ //鍒伴綈锛屽皢鐜荤拑灏忕墖鏁版嵁瀛樺叆閽㈠寲灏忕墖琛紝閫昏緫鐢熸垚鍑虹墖浠诲姟 缁撴潫
+ List<BigStorageCageDetails> bigStorageCageDetails = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
+ .eq(BigStorageCageDetails::getTemperingLayoutId, temperingLayoutDTO.getTemperingLayoutId())
+ .eq(BigStorageCageDetails::getEngineerId, temperingLayoutDTO.getEngineerId()));
+ List<TemperingGlassInfo> temperingGlassInfos = bigStorageCageDetails.stream().map(e -> {
+ TemperingGlassInfo info = new TemperingGlassInfo();
+ BeanUtils.copyProperties(e, info);
+ return info;
+ }).collect(Collectors.toList());
+ temperingGlassInfoService.saveBatch(temperingGlassInfos);
+
+ //澶ц溅鍓╀綑灏哄
+ AtomicReference<Integer> remainWidth = new AtomicReference<>(Const.BIG_STORAGE_WIDTH);
+ temperingGlassInfoList.stream().forEach(e -> {
+ if (bigStorageCageOutTaskList.size() > 5 || e.getWidth() > remainWidth.get()) {
+ return;
+ }
+ remainWidth.set(remainWidth.get() - e.getWidth().intValue() - Const.BIG_STORAGE_GAP);
+ bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getState(), Const.A09_OUT_TARGET_POSITION,
+ 0, 0, 1));
+ });
+ bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
+ return;
+ }
+ //鏈埌榻� 鎵ц鍐呴儴璋冨害浠诲姟 缁撴潫
+ TemperingLayoutDTO temperingOccupySlot = bigStorageCageDetailsService.queryTemperingOccupySlot();
+ if (null != temperingOccupySlot) {
+ List<SlotSequenceDTO> slotSequenceList = bigStorageCageDetailsService.queryGlassMaxAndMin(temperingOccupySlot.getEngineerId(), temperingOccupySlot.getTemperingLayoutId());
+ for (int i = 0; i < slotSequenceList.size() - 1; i++) {
+ SlotSequenceDTO first = slotSequenceList.get(i);
+ SlotSequenceDTO second = slotSequenceList.get(i + 1);
+ if (first.getMinSequence() == second.getMaxSequence() + 1
+ && second.getRemainWidth() > Const.BIG_STORAGE_WIDTH - first.getRemainWidth() - Const.BIG_STORAGE_GAP) {
+ List<BigStorageCageDetails> list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
+ .eq(BigStorageCageDetails::getSlot, first.getSlot()).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN));
+ List<BigStorageCageOutTask> outTasks = list.stream().map(e -> new BigStorageCageOutTask(e.getGlassId(), first.getSlot(), second.getSlot(),
+ 0, 0, 1)).collect(Collectors.toList());
+ bigStorageCageOutTaskService.saveBatch(outTasks);
+ return;
+ }
+ }
+
+ }
+ }
+ //绗煎唴鏄惁鏈変汉宸ヤ笅鐗囩幓鐠� 鏈夌洿鎺ュ嚭 鏃� 缁撴潫
+ List<BigStorageCageDetails> oneList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
+ .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN).orderByDesc(BigStorageCageDetails::getWidth));
+ AtomicReference<Integer> remainWidth = new AtomicReference<>(Const.BIG_STORAGE_WIDTH);
+ if (CollectionUtils.isNotEmpty(oneList)) {
+ oneList.stream().forEach(e -> {
+ if (remainWidth.get() < e.getWidth().intValue()) {
+ return;
+ }
+ bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), 0, 0, 0, 1));
+ remainWidth.set(remainWidth.get() - e.getWidth().intValue() - Const.BIG_STORAGE_GAP);
+ });
+ bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
+ return;
+ }
+
+ }
+
+
/**
* 鎸夌収鐜荤拑id鍒ゆ柇鐜荤拑鐘舵�佸強鍗ц浆绔嬫槸鍚﹀彲鐩存帴鍚姩
*/
@@ -316,10 +417,10 @@
*
* @return
*/
- private Integer getStartLine() {
+ public Integer getStartLine() {
List<BigStorageCageFeedTask> taskList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>()
.inSql(BigStorageCageFeedTask::getId, "select min(id) from big_storage_cage_feed_task where task_state = 2 group by line"));
- Assert.isTrue(CollectionUtils.isEmpty(taskList), "鍗ц浆绔嬩袱鏉$嚎閮芥病鏈夌幓鐠冭繘鐗囦换鍔�");
+ Assert.isFalse(CollectionUtils.isEmpty(taskList), "鍗ц浆绔嬩袱鏉$嚎閮芥病鏈夌幓鐠冭繘鐗囦换鍔�");
Map<String, Integer> taskMap = taskList.stream().collect(Collectors.toMap(BigStorageCageFeedTask::getGlassId,
BigStorageCageFeedTask::getLine));
GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
@@ -333,7 +434,7 @@
/**
* 璁$畻浠诲姟琛ㄨ繘鐗囩嚎璺殑鐩爣鏍煎瓙锛屽苟鍚姩浠诲姟
*/
- private boolean computeTargetByLine(Integer line, String d02GoAdress, String d05GoAdress) {
+ public boolean computeTargetByLine(Integer line, String d02GoAdress, String d05GoAdress) {
//1銆佽幏鍙栦换鍔¤〃涓殑鎵�鏈夌幓鐠冿紙鎸囧畾绾胯矾涓斿凡缁忚繘鍗ц浆绔嬪畬鎴愶級
List<BigStorageCageFeedTask> taskList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>()
.eq(BigStorageCageFeedTask::getLine, line)
@@ -347,6 +448,7 @@
AtomicReference<BigStorageDTO> bigStorageDTO = new AtomicReference<>(new BigStorageDTO());
Map<String, GlassInfo> glassInfoMap = glassInfos.stream().collect(Collectors.toMap(GlassInfo::getGlassId, p -> p));
List<BigStorageCageDetails> bigStorageCageDetailsList = new ArrayList<>();
+ AtomicBoolean taskFlag = new AtomicBoolean(Boolean.TRUE);
taskList.stream().forEach(e -> {
BigStorageCageDetails cageDetails = new BigStorageCageDetails();
//鎸夌収鐗堝浘淇℃伅鑾峰彇杩涚墖绗煎瓙鏍煎瓙鍙�
@@ -359,21 +461,25 @@
} else {
bigStorageDTO.set(bigStorageCageDetailsService.queryTargetSlotByTempering(info));
}
- e.setTragetSlot(bigStorageDTO.get().getSlot());
+ e.setTargetSlot(bigStorageDTO.get().getSlot());
cageDetails.setSlot(bigStorageDTO.get().getSlot());
cageDetails.setState(Const.GLASS_STATE_IN);
temperingLayoutIdTemp.set(info.getTemperingLayoutId());
temperingFeedSequenceTemp.set(info.getTemperingFeedSequence());
bigStorageCageDetailsList.add(cageDetails);
+ taskFlag.set(bigStorageCageFeedTaskService.updateById(e));
+ if (!taskFlag.get()) {
+ return;
+ }
});
- //3銆佹洿鏂拌繘鐗囦换鍔¤〃
- boolean taskFlag = bigStorageCageFeedTaskService.updateBatchById(taskList);
+ //3銆佹洿鏂拌繘鐗囦换鍔¤〃 閬囧埌闂锛氭棤娉曟壒閲忔洿鏂帮紝鎵归噺鏇存柊鏃犳硶璧版寚瀹氫粠搴�
+
//4銆佸湪璇︽儏琛ㄤ腑鍔犲叆杩涚墖鐜荤拑淇℃伅
bigStorageCageDetailsService.saveBatch(bigStorageCageDetailsList);
- if (taskFlag) {
+ if (taskFlag.get()) {
String lineAddress = line.equals(Const.A09_OUT_TARGET_POSITION) ? d02GoAdress : d05GoAdress;
- S7object.getinstance().plccontrol.writeWord(lineAddress, (short) 1);
+// S7object.getinstance().plccontrol.writeWord(lineAddress, (short) 1);
}
- return taskFlag;
+ return taskFlag.get();
}
}
\ No newline at end of file
--
Gitblit v1.8.0