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/resources/mapper/BigStorageCageDetailsMapper.xml                           |   46 +++++++++-
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java          |   22 +++++
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java |   16 ++++
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java                                   |   48 ++++++++++-
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml                                                  |    4 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingLayoutDTO.java                 |    5 +
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java            |   13 +++
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/SlotSequenceDTO.java                    |   38 +++++++++
 8 files changed, 177 insertions(+), 15 deletions(-)

diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/SlotSequenceDTO.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/SlotSequenceDTO.java
new file mode 100644
index 0000000..f22b64b
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/SlotSequenceDTO.java
@@ -0,0 +1,38 @@
+package com.mes.bigstorage.entity.dto;
+
+import lombok.Data;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/6/13 15:51
+ * @Description:
+ */
+@Data
+public class SlotSequenceDTO {
+    /**
+     * 閽㈠寲鐗堝浘id
+     */
+    private String engineerId;
+
+    /**
+     * 閽㈠寲鐗堝浘id
+     */
+    private Integer temperingLayoutId;
+    /**
+     * 澶х悊鐗囪鎯呬腑鏍煎瓙鍙�
+     */
+    private Integer slot;
+    /**
+     * 鏍煎瓙鍐呯殑鏈�澶у簭鍙�
+     */
+    private Integer maxSequence;
+    /**
+     * 鏍煎瓙鍐呯殑鏈�灏忓簭鍙�
+     */
+    private Integer minSequence;
+
+    /**
+     * 鏍煎瓙鍓╀綑瀹藉害
+     */
+    private Integer remainWidth;
+}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingLayoutDTO.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingLayoutDTO.java
index 279c335..18d4edb 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingLayoutDTO.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingLayoutDTO.java
@@ -22,4 +22,9 @@
      * 褰撳墠鐗堝浘鏁伴噺
      */
     private Integer count;
+
+    /**
+     * 褰撳墠鐗堝浘鍗犵敤鏍煎瓙鏁伴噺
+     */
+    private Integer slotCount;
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
index 1a59438..da14719 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
@@ -2,7 +2,11 @@
 
 import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
+import com.mes.bigstorage.entity.dto.SlotSequenceDTO;
 import com.mes.bigstorage.entity.dto.TemperingLayoutDTO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 
 /**
@@ -22,4 +26,13 @@
      */
     TemperingLayoutDTO temperingIsAll();
 
+    /**
+     * 鑾峰彇姣忎釜閽㈠寲鐗堝浘鍗犵敤鐨勬牸瀛愭暟閲�
+     *
+     * @return
+     */
+    TemperingLayoutDTO queryTemperingOccupySlot(@Param(value = "count") int count);
+
+
+    List<SlotSequenceDTO> queryGlassMaxAndMin(@Param(value = "engineerId") String engineerId, @Param(value = "temperingLayoutId") Integer temperingLayoutId);
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
index 9c5ad4f..d0d52d2 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 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.glassinfo.entity.GlassInfo;
 
@@ -41,5 +42,26 @@
      */
     BigStorageDTO queryTargetSlotByTempering(GlassInfo glassInfo);
 
+    /**
+     * 鑾峰彇閽㈠寲鐗堝浘宸茬粡鍒伴綈鐨勫伐绋嬪彿鍙婄増鍥緄d
+     *
+     * @return
+     */
     TemperingLayoutDTO temperingIsAll();
+
+    /**
+     * 鑾峰彇姣忎釜閽㈠寲鐗堝浘鍗犵敤鐨勬牸瀛愭暟閲�
+     *
+     * @return
+     */
+    TemperingLayoutDTO queryTemperingOccupySlot();
+
+    /**
+     * 鑾峰彇鐗堝浘姣忎釜鏍煎瓙鐨勬渶澶ф渶灏忓簭鍙�
+     *
+     * @param engineerId
+     * @param temperingLayoutId
+     * @return
+     */
+    List<SlotSequenceDTO> queryGlassMaxAndMin(String engineerId, Integer temperingLayoutId);
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
index f909c54..6d0014c 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
@@ -7,6 +7,7 @@
 import com.mes.bigstorage.entity.BigStorageCage;
 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.mapper.BigStorageCageDetailsMapper;
 import com.mes.bigstorage.service.BigStorageCageDetailsService;
@@ -21,6 +22,7 @@
 import com.mes.temperingglass.entity.TemperingGlassInfo;
 import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -49,6 +51,9 @@
     private BigStorageCageService bigStorageCageService;
     @Resource
     private GlassInfoMapper glassInfoMapper;
+
+    @Value("${mes.minCount}")
+    private int minCount;
 
     /**
      * 鏌ヨ杩�/鍑虹墖浠诲姟
@@ -259,4 +264,15 @@
     public TemperingLayoutDTO temperingIsAll() {
         return baseMapper.temperingIsAll();
     }
+
+
+    @Override
+    public TemperingLayoutDTO queryTemperingOccupySlot() {
+        return baseMapper.queryTemperingOccupySlot(minCount);
+    }
+
+    @Override
+    public List<SlotSequenceDTO> queryGlassMaxAndMin(String engineerId, Integer temperingLayoutId) {
+        return baseMapper.queryGlassMaxAndMin(engineerId, temperingLayoutId);
+    }
 }
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 281f395..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
@@ -6,6 +6,7 @@
 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;
@@ -62,6 +63,9 @@
 
     @Value("${mes.sequence.order}")
     private boolean sequenceOrder;
+
+    @Value("${mes.slotWidth}")
+    private Integer slotWidth;
 
     public static boolean bigStorageCageFullAlarm = false;
 
@@ -285,13 +289,13 @@
             return;
         }
 
-        //todo:鑾峰彇鐘舵�佸瓧  閽㈠寲浼樺厛 or 浜哄伐涓嬬墖浼樺厛
+        //鑾峰彇鐘舵�佸瓧  閽㈠寲浼樺厛 or 浜哄伐涓嬬墖浼樺厛
         if (true) {
-            //todo:閽㈠寲浼樺厛锛氳幏鍙栫悊鐗囩  鐜荤拑灏忕墖  鐮存崯琛� 鏁伴噺   鍒ゆ柇绗煎唴鐗堝浘鏄惁鍒伴綈
+            //閽㈠寲浼樺厛锛氳幏鍙栫悊鐗囩  鐜荤拑灏忕墖  鐮存崯琛� 鏁伴噺   鍒ゆ柇绗煎唴鐗堝浘鏄惁鍒伴綈
             TemperingLayoutDTO temperingLayoutDTO = bigStorageCageDetailsService.temperingIsAll();
             if (null != temperingLayoutDTO) {
                 //鐜荤拑鍒伴綈
-                //todo: 鍒伴綈锛屽皢鐜荤拑灏忕墖鏁版嵁瀛樺叆閽㈠寲灏忕墖琛紝閫昏緫鐢熸垚鍑虹墖浠诲姟  缁撴潫
+                //鍒伴綈锛屽皢鐜荤拑灏忕墖鏁版嵁瀛樺叆閽㈠寲灏忕墖琛紝閫昏緫鐢熸垚鍑虹墖浠诲姟  缁撴潫
                 List<BigStorageCageDetails> bigStorageCageDetails = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
                         .eq(BigStorageCageDetails::getTemperingLayoutId, temperingLayoutDTO.getTemperingLayoutId())
                         .eq(BigStorageCageDetails::getEngineerId, temperingLayoutDTO.getEngineerId()));
@@ -302,7 +306,7 @@
                 }).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()) {
@@ -315,11 +319,41 @@
                 bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
                 return;
             }
-            //todo: 鏈埌榻� 鎵ц鍐呴儴璋冨害浠诲姟 缁撴潫
+            //鏈埌榻� 鎵ц鍐呴儴璋冨害浠诲姟 缁撴潫
+            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;
+                    }
+                }
 
+            }
         }
-        //todo:绗煎唴鏄惁鏈変汉宸ヤ笅鐗囩幓鐠� 鏈夌洿鎺ュ嚭  鏃� 缁撴潫
-
+        //绗煎唴鏄惁鏈変汉宸ヤ笅鐗囩幓鐠� 鏈夌洿鎺ュ嚭  鏃� 缁撴潫
+        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;
+        }
 
     }
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
index 7209b1f..2a8d5ea 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
@@ -12,4 +12,6 @@
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 mes:
   sequence:
-    order: false
\ No newline at end of file
+    order: false
+  minCount: 5
+  slotWidth: 5000
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
index 1f64557..c016951 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
@@ -6,14 +6,18 @@
         <result column="engineer_id" property="engineerId"/>
         <result column="tempering_layout_id" property="temperingLayoutId"/>
         <result column="count" property="count"/>
+        <result column="slot_count" property="slotCount"/>
     </resultMap>
-    <!--    <select id="listAllTemperingCount" resultMap="temperingLayoutDTO">-->
-    <!--        select tempering_layout_id,-->
-    <!--               count(tempering_layout_id) as count-->
-    <!--        from big_storage_cage_details-->
-    <!--        where state = 100-->
-    <!--        group by tempering_layout_id-->
-    <!--    </select>-->
+
+    <resultMap id="slotSequenceDTO" type="com.mes.bigstorage.entity.dto.SlotSequenceDTO">
+        <result column="engineer_id" property="engineerId"/>
+        <result column="tempering_layout_id" property="temperingLayoutId"/>
+        <result column="slot" property="slot"/>
+        <result column="max_sequence" property="maxSequence"/>
+        <result column="min_sequence" property="minSequence"/>
+        <result column="remain_width" property="remainWidth"/>
+    </resultMap>
+
     <select id="temperingIsAll" resultMap="temperingLayoutDTO">
         SELECT T.ENGINEER_ID,
                T.TEMPERING_LAYOUT_ID,
@@ -41,4 +45,32 @@
             LIMIT 1
     </select>
 
+    <select id="queryTemperingOccupySlot" resultMap="temperingLayoutDTO">
+        SELECT TEMPERING_LAYOUT_ID,
+               COUNT(DISTINCT SLOT) as SLOT_COUNT
+        FROM BIG_STORAGE_CAGE_DETAILS
+        WHERE STATE = 100
+        GROUP BY ENGINEER_ID,
+                 TEMPERING_LAYOUT_ID
+        HAVING SLOT_COUNT &gt;= #{count} LIMIT 1
+    </select>
+    <select id="queryGlassMaxAndMin" resultMap="slotSequenceDTO">
+        SELECT T.*,
+               T1.REMAIN_WIDTH
+        FROM (
+                 SELECT ENGINEER_ID,
+                        TEMPERING_LAYOUT_ID,
+                        SLOT,
+                        MAX(TEMPERING_FEED_SEQUENCE) AS MAX_SEQUENCE,
+                        MIN(TEMPERING_FEED_SEQUENCE) AS MIN_SEQUENCE
+                 FROM BIG_STORAGE_CAGE_DETAILS
+                 WHERE ENGINEER_ID = #{engineerId}
+                   AND TEMPERING_LAYOUT_ID = #{temperingLayoutId}
+                 GROUP BY ENGINEER_ID,
+                          TEMPERING_LAYOUT_ID,
+                          SLOT
+             ) T
+                 INNER JOIN BIG_STORAGE_CAGE T1 ON T.SLOT = T1.SLOT
+        ORDER BY T.MAX_SEQUENCE DESC
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.8.0