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 |   96 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 95 insertions(+), 1 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 02228b4..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,7 +29,6 @@
 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;
@@ -59,6 +63,9 @@
 
     @Value("${mes.sequence.order}")
     private boolean sequenceOrder;
+
+    @Value("${mes.slotWidth}")
+    private Integer slotWidth;
 
     public static boolean bigStorageCageFullAlarm = false;
 
@@ -260,6 +267,93 @@
 
     @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;
+        }
 
     }
 

--
Gitblit v1.8.0