From 6acde3b011f5f1b843c6f097baf64fbd9b574b23 Mon Sep 17 00:00:00 2001
From: zhoushihao <zsh19950802@163.com>
Date: 星期一, 24 六月 2024 21:38:00 +0800
Subject: [PATCH] 下片任务进片逻辑已完成,待测试优化

---
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java            |   12 +
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java                                   |   17 +-
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/dto/DownGlassInfoDTO.java         |   32 ++++
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java                          |  226 ++++++++++++++++++++++++++++
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java                  |    7 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java          |   12 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java |   48 +++--
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java              |    5 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml                              |   69 ++++++++
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java                  |   11 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java          |    8 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java                                              |    1 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java |   24 ++
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java         |    1 
 14 files changed, 423 insertions(+), 50 deletions(-)

diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
index b18d95d..936d473 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
@@ -42,7 +42,6 @@
      * 鍗у紡鐞嗙墖绗艰鎯呰〃鐜荤拑鐘舵��
      * 杩涚墖浠诲姟1
      * 鍑虹墖浠诲姟2
-     * 鍑虹墖浠诲姟2
      */
     public static final Integer GLASS_CACHE_TYPE_IN = 1;
     public static final Integer GLASS_CACHE_TYPE_OUT = 2;
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
index 81047b7..f52662f 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
@@ -19,6 +19,7 @@
 
     /**
      * 鏌ヨ绗煎唴绂绘寚瀹氭牸瀛愭渶杩戠┖鏍�
+     * flag :鏄惁涓虹洿閫�
      *
      * @return
      */
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
index a63c890..656024e 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
@@ -182,8 +182,8 @@
      * @return
      */
     public GlassInfo queryAndChangeGlass(String glassId) {
-        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId)
-                .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1"));
+        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
+//                .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1"));
         Assert.isFalse(null == glassInfo, "鐜荤拑淇℃伅涓嶅瓨鍦�");
         //鎸夌収鐜荤拑灏哄
         LambdaQueryWrapper<GlassInfo> queryWrapper = new LambdaQueryWrapper<GlassInfo>()
@@ -277,8 +277,8 @@
                     List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(wrapper);
                     if (CollectionUtil.isEmpty(list)) {
                         MPJQueryWrapper<GlassInfo> queryWrapper = new MPJQueryWrapper<GlassInfo>()
-                                .selectAll(GlassInfo.class).eq("t.glass_id", glassId)
-                                .inSql("t.engineer_id", "select engineer_id from engineering where state = 1");
+                                .selectAll(GlassInfo.class).eq("t.glass_id", glassId);
+//                                .inSql("t.engineer_id", "select engineer_id from engineering where state = 1");
                         if (endcell == Const.A10_OUT_TARGET_POSITION) {
                             queryWrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
                                     "case when width < height then width else height end as second_length from glass_info) t1 " +
@@ -347,8 +347,8 @@
         //todo: 鑾峰彇姝e湪鎵ц鐨勫伐绋嬩俊鎭�
         if (StringUtils.isNotBlank(glassId)) {
             GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
-                    .eq(GlassInfo::getGlassId, glassId)
-                    .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1"));
+                    .eq(GlassInfo::getGlassId, glassId));
+//                    .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1"));
             EdgStorageCageDetails resultDetails = new EdgStorageCageDetails();
             BeanUtils.copyProperties(one, resultDetails);
             glassList.add(resultDetails);
@@ -401,7 +401,7 @@
         }
         GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
                 .eq(GlassInfo::getGlassId, glassId)
-                .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1")
+//                .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1")
         );
         EdgStorageCageDetails resultDetails = new EdgStorageCageDetails();
         BeanUtils.copyProperties(one, resultDetails);
@@ -451,7 +451,8 @@
             return null;
         }
         return edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getGlassId, taskCache.getGlassId())
-                .inSql(EdgStorageCageDetails::getEngineerId, "select engineer_id from engineering where state = 1").last(" limit 1 "));
+//                .inSql(EdgStorageCageDetails::getEngineerId, "select engineer_id from engineering where state = 1")
+                .last(" limit 1 "));
     }
 
     /**
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java
index 5543ab5..8f0cea5 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java
@@ -2,9 +2,7 @@
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import org.springframework.data.annotation.Id;
 import org.springframework.stereotype.Component;
-
 
 import java.io.Serializable;
 
@@ -35,6 +33,11 @@
     private String flowCardId;
 
     /**
+     * 灞傚彿
+     */
+    private Integer layer;
+
+    /**
      * 椤哄簭
      */
     private Integer sequence;
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java
index 13fbc8a..9c8a82c 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java
@@ -28,6 +28,12 @@
     private Long id;
 
     /**
+     * 鐜荤拑id
+     */
+    private String glassId;
+
+
+    /**
      * 璧峰
      */
     private String startCell;
@@ -71,11 +77,6 @@
      * 浠诲姟鐘舵�� 0 鏈紑濮�  1姝e湪杩涜   2瀹屾垚
      */
     private Integer taskStauts;
-
-    /**
-     * 鐜荤拑id
-     */
-    private String glassId;
 
     /**
      * 鍒涘缓鏃堕棿
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java
index 8ba6c01..01af6af 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java
@@ -1,14 +1,20 @@
 package com.mes.downglassinfo.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.downglassinfo.entity.DownGlassInfo;
-import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.downworkstation.entity.dto.DownGlassInfoDTO;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
-public interface DownGlassInfoMapper extends BaseMapper<DownGlassInfo>, MPJBaseMapper<DownGlassInfo> {
+public interface DownGlassInfoMapper extends BaseMapper<DownGlassInfo> {
 
 
+    DownGlassInfoDTO queryDownGlassMaxLayer(@Param(value = "flowCardId") String flowCardId);
 
+    Integer queryMaxSequence(@Param(value = "flowCardId") String flowCardId, @Param(value = "layer") int layer);
+
+    List<DownGlassInfoDTO> queryWorkStationNotIn();
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java
index 2feead5..cea55e5 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java
@@ -2,6 +2,9 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.mes.downglassinfo.entity.DownGlassInfo;
+import com.mes.downworkstation.entity.dto.DownGlassInfoDTO;
+
+import java.util.List;
 
 public interface DownGlassInfoService extends IService<DownGlassInfo> {
 
@@ -18,4 +21,9 @@
     void insertDownGlassInfo(DownGlassInfo downGlassInfo);
 
 
+    DownGlassInfoDTO queryDownGlassMaxLayer(String flowCardId);
+
+    Integer queryMaxSequence(String flowCardId, int layer);
+
+    List<DownGlassInfoDTO> queryWorkStationNotIn();
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
index e5bf336..89770f5 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
@@ -6,12 +6,17 @@
 import com.mes.downglassinfo.entity.DownGlassInfo;
 import com.mes.downglassinfo.mapper.DownGlassInfoMapper;
 import com.mes.downglassinfo.service.DownGlassInfoService;
+import com.mes.downworkstation.entity.dto.DownGlassInfoDTO;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 @Service
 public class DownGlassInfoServiceImpl extends ServiceImpl<DownGlassInfoMapper, DownGlassInfo> implements DownGlassInfoService {
 
-    // 鏍规嵁娴佺▼鍗″彿鏌ヨ鏈�澶у簭鍙�
+    /**
+     * 鏍规嵁娴佺▼鍗″彿鏌ヨ鏈�澶у簭鍙�
+     */
     @Override
     public Integer getMaxSequenceByFlowCardId(String flowCardId) {
         LambdaQueryWrapper<DownGlassInfo> lambdaQueryWrapper = Wrappers.lambdaQuery();
@@ -24,14 +29,23 @@
         return downGlassInfo != null ? downGlassInfo.getSequence() : 0;
     }
 
-
     @Override
     public void insertDownGlassInfo(DownGlassInfo downGlassInfo) {
-
-
-
         baseMapper.insert(downGlassInfo);
     }
 
+    @Override
+    public DownGlassInfoDTO queryDownGlassMaxLayer(String flowCardId) {
+        return baseMapper.queryDownGlassMaxLayer(flowCardId);
+    }
 
+    @Override
+    public Integer queryMaxSequence(String flowCardId, int layer) {
+        return baseMapper.queryMaxSequence(flowCardId, layer);
+    }
+
+    @Override
+    public List<DownGlassInfoDTO> queryWorkStationNotIn() {
+        return baseMapper.queryWorkStationNotIn();
+    }
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java
index f5d4ad5..272fb03 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java
@@ -1,6 +1,5 @@
 package com.mes.downstorage.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
 import com.github.yulichang.base.MPJBaseService;
 import com.mes.downglassinfo.entity.DownGlassTask;
 import com.mes.downstorage.entity.DownStorageCage;
@@ -21,17 +20,20 @@
 public interface DownStorageCageService extends MPJBaseService<DownStorageCage> {
 
     DownGlassTask createDownGlassTask(GlassInfo glassInfo, String startCell, String endCell, String taskType);
+
     DownGlassTask createDownGlassTask(DownStorageCageDetails glassInfo, String startCell, String endCell, String taskType);
     //    List<Map<String, Object>> selectCacheLeisure();
-
-
-
 
 
     /**
      * @return 鎵惧埌绌烘牸瀛�
      */
-    List<DownStorageCageDetails> selectCacheEmpty() ;
+    DownStorageCage selectCacheEmpty(int currentSlot, boolean flag);
+
+    /**
+     * @return 鎵惧埌绌烘牸瀛�
+     */
+    List<DownStorageCageDetails> selectCacheEmpty();
 
     /**
      * @param downStorageCage
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java
index 3643a74..4e6fe11 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java
@@ -1,17 +1,13 @@
 package com.mes.downstorage.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.yulichang.toolkit.JoinWrappers;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
-
-//import com.mes.device.PlcParameterObject;
-import com.google.common.base.Functions;
 import com.mes.common.config.Const;
 import com.mes.downglassinfo.entity.DownGlassTask;
 import com.mes.downglassinfo.service.DownGlassTaskService;
 import com.mes.downstorage.entity.DownStorageCage;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.mes.downstorage.entity.DownStorageCageDetails;
 import com.mes.downstorage.mapper.DownStorageCageDetailsMapper;
 import com.mes.downstorage.mapper.DownStorageCageMapper;
@@ -19,9 +15,7 @@
 import com.mes.downstorage.service.DownStorageCageService;
 import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.glassinfo.service.GlassInfoService;
-import com.mes.pp.entity.OptimizeDetail;
 import lombok.extern.slf4j.Slf4j;
-import net.sf.jsqlparser.statement.select.SelectItem;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -77,22 +71,40 @@
     }
 
 
-
-
     //鎵惧埌绌烘牸瀛�
     @Override
     public List<DownStorageCageDetails> selectCacheEmpty() {
-        return baseMapper.selectJoinList(DownStorageCageDetails.class,
+        return this.selectJoinList(DownStorageCageDetails.class,
                 JoinWrappers.lambda(DownStorageCage.class)
                         .selectAll(DownStorageCage.class)
-                        .select(DownStorageCageDetails::getWidth, DownStorageCageDetails::getHeight, DownStorageCageDetails::getGlassId)
                         .leftJoin(DownStorageCageDetails.class, on -> on
                                 .eq(DownStorageCageDetails::getDeviceId, DownStorageCage::getDeviceId)
                                 .eq(DownStorageCageDetails::getSlot, DownStorageCage::getSlot)
-                                .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN)
-                        )
+                                .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN))
                         .isNull(DownStorageCageDetails::getSlot)
         );
+    }
+
+    //鎵惧埌绌烘牸瀛�
+    @Override
+    public DownStorageCage selectCacheEmpty(int currentSlot, boolean flag) {
+        List<DownStorageCage> emptyList = this.selectJoinList(DownStorageCage.class,
+                JoinWrappers.lambda(DownStorageCage.class)
+                        .selectAll(DownStorageCage.class)
+                        .leftJoin(DownStorageCageDetails.class, on -> on
+                                .eq(DownStorageCageDetails::getDeviceId, DownStorageCage::getDeviceId)
+                                .eq(DownStorageCageDetails::getSlot, DownStorageCage::getSlot)
+                                .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN))
+                        .isNull(DownStorageCageDetails::getSlot)
+                        .last("order by abs(t.slot - " + currentSlot + ")  asc limit 2")
+        );
+        if (flag && CollectionUtil.isNotEmpty(emptyList)) {
+            return emptyList.get(0);
+        }
+        if (CollectionUtil.isEmpty(emptyList) || emptyList.size() == 1) {
+            return null;
+        }
+        return emptyList.get(0);
     }
 
     @Override
@@ -104,7 +116,7 @@
                         .leftJoin(DownStorageCageDetails.class, on -> on
                                 .eq(DownStorageCageDetails::getDeviceId, DownStorageCage::getDeviceId)
                                 .eq(DownStorageCageDetails::getSlot, DownStorageCage::getSlot)
-                        .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN))
+                                .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN))
                         .isNull(DownStorageCageDetails::getSlot)
                         .eq(DownStorageCage::getEnableState, 1)
                         .groupBy(DownStorageCageDetails::getFlowCardId) // 鏍规嵁 flowCardId 鍒嗙粍
@@ -113,12 +125,6 @@
 
         );
     }
-
-
-
-
-
-
 
 
     @Override
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java
index d242127..7afc44a 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java
@@ -53,6 +53,11 @@
      */
     private Integer workState;
 
+    /**
+     * 灞傛暟
+     */
+    private Integer layer;
+
 
     /**
      * 鎬绘暟閲�
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/dto/DownGlassInfoDTO.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/dto/DownGlassInfoDTO.java
new file mode 100644
index 0000000..dc3fe51
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/dto/DownGlassInfoDTO.java
@@ -0,0 +1,32 @@
+package com.mes.downworkstation.entity.dto;
+
+import com.mes.glassinfo.entity.GlassInfo;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/6/21 16:06
+ * @Description:
+ */
+@Data
+public class DownGlassInfoDTO {
+    /**
+     * 娴佺▼鍗″彿
+     */
+    private String flowCardId;
+    /**
+     * 灞傛暟
+     */
+    private Integer layer;
+    /**
+     * 钀芥灦鏁伴噺
+     */
+    private Integer count;
+
+    /**
+     * 娴佺▼鍗℃湭杩涚墖鐨勭幓鐠冧俊鎭�
+     */
+    private List<GlassInfo> glassInfoList;
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
new file mode 100644
index 0000000..01ed3ee
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
@@ -0,0 +1,226 @@
+package com.mes.job;
+
+import cn.hutool.core.lang.Assert;
+import cn.smallbun.screw.core.util.CollectionUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.mes.common.S7object;
+import com.mes.common.config.Const;
+import com.mes.device.PlcParameterObject;
+import com.mes.downglassinfo.entity.DownGlassInfo;
+import com.mes.downglassinfo.entity.DownGlassTask;
+import com.mes.downglassinfo.service.DownGlassInfoService;
+import com.mes.downglassinfo.service.DownGlassTaskService;
+import com.mes.downstorage.entity.DownStorageCage;
+import com.mes.downstorage.service.DownStorageCageDetailsService;
+import com.mes.downstorage.service.DownStorageCageService;
+import com.mes.downworkstation.entity.DownWorkstation;
+import com.mes.downworkstation.entity.dto.DownGlassInfoDTO;
+import com.mes.downworkstation.service.DownWorkstationService;
+import com.mes.downworkstation.service.DownWorkstationTaskService;
+import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.glassinfo.service.GlassInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/5/8 8:17
+ * @Description:
+ */
+@Component
+@Slf4j
+public class DownLoadCacheGlassTask {
+
+    @Autowired
+    DownGlassTaskService downGlassTaskService;
+    @Autowired
+    GlassInfoService glassInfoService;
+    @Autowired
+    DownStorageCageDetailsService downStorageCageDetailsService;
+    @Autowired
+    DownStorageCageService downStorageCageService;
+    @Autowired
+    DownWorkstationService downWorkstationService;
+    @Autowired
+    DownGlassInfoService downGlassInfoService;
+    @Autowired
+    private DownWorkstationTaskService downWorkstationTaskService;
+
+
+    @Scheduled(fixedDelay = 1000)
+    public void plcHomeEdgTask() {
+        PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
+        String taskRequestTypeValue = plcParameterObject.getPlcParameter("RequestWord").getValue();
+        String glassIdeValue = plcParameterObject.getPlcParameter("G04ID").getValue();
+        String confirmationWrodValue = plcParameterObject.getPlcParameter("MES_confirmation_word").getValue();
+        //A08  A09琛ㄧず绾胯矾鐩稿悓  鍙仛绛変环  鏃犳暟鎹浆int寮傚父
+        String out08Glassstate = plcParameterObject.getPlcParameter("A08_glass_status").getValue();
+        String out10Glassstate = plcParameterObject.getPlcParameter("A10_glass_status").getValue();
+        String confirmationWrodAddress = plcParameterObject.getPlcParameter("MES_confirmation_word").getAddress();
+        String currentSlot = plcParameterObject.getPlcParameter("Current_slot").getValue();
+
+        log.info("1銆佽幏鍙栧埌鐨勮姹傚瓧涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{}锛岃幏鍙栧埌鐨勭‘璁ゅ瓧涓猴細{}锛岃幏鍙栧埌鐨勫嚭鐗囩姸鎬佸垎鍒负锛欰09:{}銆丄10:{},褰撳墠鏍煎瓙鍙蜂负锛歿}",
+                taskRequestTypeValue, glassIdeValue, confirmationWrodValue, out08Glassstate, out10Glassstate, currentSlot);
+
+        if ("0".equals(taskRequestTypeValue)) {
+            if ("0".equals(confirmationWrodValue)) {
+                log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓�0锛屼笖纭瀛椾负0锛屼笉鎵ц浠诲姟");
+                return;
+            }
+            log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓�0锛屽皢纭瀛楁敼涓�0");
+            S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, (short) 0);
+            return;
+        }
+        if (!"0".equals(confirmationWrodValue)) {
+            log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓嶄负0锛屽皢纭瀛椾笉涓�0锛岀洿鎺ョ粨鏉�");
+            return;
+        }
+        if ("1".equals(taskRequestTypeValue)) {
+            log.info("2銆佽繘鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛岃繘鐗囦换鍔�");
+            inTo(glassIdeValue, confirmationWrodAddress, currentSlot);
+        } else if ("2".equals(taskRequestTypeValue)) {
+            //09绌洪棽 锛�1      10绌洪棽 锛�2        閮界┖闂诧細3    鍏朵粬0
+            log.info("2銆佸嚭鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛岃繘鐗囦换鍔�");
+//            outTo(Integer.parseInt(out08Glassstate),
+//                    Integer.parseInt(out10Glassstate), confirmationWrodAddress, "", 0);
+        } else if ("3".equals(taskRequestTypeValue)) {
+            log.info("2銆佽繘鐗囧拰鍑虹墖閮界┖闂诧紝鎵ц鍑虹墖浠诲姟");
+            //鍔犵瀛愰噷闈㈡槸鍚︽湁鐜荤拑锛屾湁鍏堝嚭锛屾棤鐜荤拑鍏堣繘
+//            boolean outFlase = outTo(Integer.parseInt(out08Glassstate),
+//                    Integer.parseInt(out10Glassstate), confirmationWrodAddress, glassIdeValue, Integer.parseInt(currentSlot));
+//            log.info("鍑虹墖浠诲姟鏄惁瀹屾垚锛歿},澶辫触涓旂幓鐠僫d:{}涓嶄负绌哄垯鎵ц杩涚墖浠诲姟", outFlase, glassIdeValue);
+//            if (!outFlase && StringUtils.isNotBlank(glassIdeValue)) {
+//                inTo(glassIdeValue, confirmationWrodAddress, currentSlot);
+//            }
+        }
+    }
+
+    private void inTo(String glassId, String confirmationWrodAddress, String currentSlot) {
+        log.info("1銆佹寜鐓х幓鐠僫d:{}鑾峰彇鐜荤拑灏忕墖淇℃伅,褰撳墠鏍煎瓙涓�:{}", glassId, currentSlot);
+        //娣诲姞杩涚墖浠诲姟  鏌ユ壘绌烘牸
+        DownStorageCage nearestEmpty = downStorageCageService.selectCacheEmpty(Integer.parseInt(currentSlot), Boolean.FALSE);
+        Assert.isTrue(null != nearestEmpty, "鏍煎瓙宸叉弧");
+        log.info("2銆佹煡璇㈠崸寮忕悊鐗囩閲岄潰鐨勭┖鏍�:{}", nearestEmpty);
+        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
+        Assert.isFalse(null == glassInfo, "鐜荤拑淇℃伅涓嶅瓨鍦�");
+        //鑾峰彇璇ョ幓鐠冪殑娴佺▼鍗℃槸鍚﹀凡缁戝畾鏋跺瓙
+        DownWorkstation one = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>()
+                .eq(DownWorkstation::getLayer, glassInfo.getLayer())
+                .eq(DownWorkstation::getFlowCardId, glassInfo.getFlowCardId()));
+        Boolean checkFlag = Boolean.TRUE;
+        GlassInfo tempGlassInfo = null;
+        if (null != one) {
+            log.info("璇ユ祦绋嬪崱宸茬粦瀹氭灦瀛�");
+            checkFlag = multilayerCheck(glassInfo);
+        } else {
+            log.info("璇ョ幓鐠冪殑娴佺▼鍗℃湭缁戝畾鏋跺瓙锛岃幏鍙栨槸鍚︽湁绌烘灦瀛�");
+            List<DownWorkstation> list = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>().isNull(DownWorkstation::getFlowCardId));
+            if (CollectionUtils.isNotEmpty(list)) {
+                log.info("鏈夌┖鏋跺瓙,灏嗘祦绋嬪崱涓庢灦瀛愬ソ缁戝畾锛屾墽琛岃繘鐗囦换鍔� 缁撴潫");
+                checkFlag = Boolean.TRUE;
+            } else {
+                log.info("鏃犵┖鏋跺瓙,鑾峰彇宸茬粦瀹氭灦瀛愮殑娴佺▼鍗′俊鎭�,鏌ョ湅鐜荤拑淇℃伅鏄惁鍙瀵硅皟");
+                List<DownGlassInfoDTO> downGlassInfoDTOList = downGlassInfoService.queryWorkStationNotIn();
+                log.info("鑾峰彇鏋跺瓙涓婂凡缁戝畾娴佺▼鍗¤惤鏋剁殑鏁伴噺鍙婃湭钀芥灦鐨勭幓鐠冩暟鎹細{}", downGlassInfoDTOList);
+                Assert.isTrue(CollectionUtils.isNotEmpty(downGlassInfoDTOList), "宸茬粦瀹氭祦绋嬪崱鍧囨棤鏈惤鏋剁幓鐠冿紝璇峰強鏃跺鐞嗘灦瀛愪笂鐨勭幓鐠冿紝娓呴櫎娴佺▼鍗�");
+                endLoop:
+                for (DownGlassInfoDTO e : downGlassInfoDTOList) {
+                    List<GlassInfo> glassInfoList = e.getGlassInfoList();
+                    for (GlassInfo item : glassInfoList) {
+                        if (item.getWidth().equals(glassInfo.getWidth()) && item.getHeight().equals(glassInfo.getHeight())
+                                && item.getThickness().equals(glassInfo.getThickness()) && item.getFilmsid().equals(glassInfo.getFilmsid())) {
+                            //todo:鐜荤拑鏄惁涓哄灞�
+                            checkFlag = multilayerCheck(item);
+                            if (checkFlag) {
+                                //鐜荤拑鏇挎崲 浠呮浛鎹㈡祦绋嬪崱id鍙婂眰鏁�
+                                String tempFlowCardId = item.getFlowCardId();
+                                Integer tempLayer = item.getLayer();
+                                String flowCardId = glassInfo.getFlowCardId();
+                                Integer layer = glassInfo.getLayer();
+                                log.info("鏇挎崲娴佺▼鍗′俊鎭�,褰撳墠鐜荤拑淇℃伅:{}鐨勬祦绋嬪崱鍙穥}鍙婂眰鏁皗},鏇挎崲鍚庣幓鐠冧俊鎭�:{}鐨勬祦绋嬪崱鍙穥}鍙婂眰鏁皗}",
+                                        tempGlassInfo, glassInfo, flowCardId, layer, tempFlowCardId, tempLayer);
+                                glassInfo.setFlowCardId(tempFlowCardId);
+                                glassInfo.setLayer(tempLayer);
+                                glassInfoService.updateById(glassInfo);
+                                item.setFlowCardId(flowCardId);
+                                item.setLayer(layer);
+                                glassInfoService.updateById(item);
+                                break endLoop;
+                            }
+                        }
+                    }
+                }
+
+            }
+            if (checkFlag) {
+                //鐢熸垚杩涚墖浠诲姟 鎵ц杩涚墖鎿嶄綔
+                initDownGlassTask(glassInfo, nearestEmpty.getSlot() + "", null, Const.GLASS_CACHE_TYPE_IN);
+            }
+        }
+
+
+//                log.info("3銆佸皢鐜荤拑淇℃伅鎻掑叆鍗у紡鐞嗙墖绗�,褰撳墠鐜荤拑淇℃伅:{}", glassInfo);
+//        EdgStorageCageDetails details = new EdgStorageCageDetails();
+//        BeanUtils.copyProperties(glassInfo, details);
+//        details.setState(Const.GLASS_STATE_IN);
+//        details.setSlot(nearestEmpty.getSlot());
+//        details.setDeviceId(nearestEmpty.getDeviceId());
+//        edgStorageCageDetailsService.save(details);
+//        log.info("4銆佺幓鐠冧俊鎭凡瀛樺叆鐞嗙墖绗艰鎯呰〃锛岀幓鐠冧俊鎭负{}", details);
+//        //娣诲姞杩涚墖浠诲姟
+//        boolean taskCache = saveTaskCache(details.getGlassId(), 0, nearestEmpty.getSlot(), Const.GLASS_CACHE_TYPE_IN);
+//        log.info("5銆佺敓鎴愯繘鐗囦换鍔′俊鎭瓨鍏ヤ换鍔¤〃鏄惁瀹屾垚锛歿}", taskCache);
+//
+//        S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, (short) 1);
+//        log.info("6銆佸彂閫佺‘璁ゅ瓧瀹屾垚");
+    }
+
+    private Boolean multilayerCheck(GlassInfo glassInfo) {
+        //鏌ヨ璇ユ祦绋嬪崱鏄惁涓哄灞�
+        if (glassInfo.getTotalLayer() > 1) {
+            log.info("鎸夌収娴佺▼鍗¤幏鍙栧綋鍓嶆祦绋嬪崱鍚勫眰宸茶惤鏋舵暟閲�");
+            DownGlassInfoDTO downGlassInfoDTO = downGlassInfoService.queryDownGlassMaxLayer(glassInfo.getFlowCardId());
+            if (null == downGlassInfoDTO) {
+                log.info("鏋跺瓙宸茬粡鍗犳弧锛屽灞傜幓鐠冩棤娉曟壘鍒板搴旂殑鏍煎瓙锛岄渶鎵ц鏇挎崲鐜荤拑鐨勬搷浣�");
+                return Boolean.FALSE;
+            }
+            if (downGlassInfoDTO.getLayer().equals(glassInfo.getLayer())) {
+                log.info("褰撳墠鐜荤拑鐨勬祦绋嬪湪鏋跺瓙涓婅惤鏋舵渶澶� 鐩存帴杩涚墖");
+                return Boolean.TRUE;
+            }
+            Integer sequence = downGlassInfoService.queryMaxSequence(glassInfo.getFlowCardId(), glassInfo.getLayer());
+            log.info("鑾峰彇褰撳墠鐜荤拑闇�瑕佹斁鐨勬搴忥細绗煎唴鍚屾祦绋� 鍚屽眰鏁扮殑閫氳揪娆″簭+1:{}", sequence);
+            DownGlassInfo downGlassInfo = downGlassInfoService.getOne(new LambdaQueryWrapper<DownGlassInfo>()
+                    .eq(DownGlassInfo::getFlowCardId, downGlassInfoDTO.getFlowCardId())
+                    .eq(DownGlassInfo::getLayer, downGlassInfoDTO.getLayer()).eq(DownGlassInfo::getSequence, sequence));
+            log.info("鎷垮綋鍓嶇増搴忚幏鍙栫幓鐠冧俊鎭瘂}锛屾寜鐓ф搴忓垽鏂綋鍓嶇幓鐠冩槸鍚﹀昂瀵稿搴旂殑涓婏紙涓庢暟閲忔渶澶氱殑娆″簭姣旇緝锛夈��", downGlassInfo);
+            if (null != downGlassInfoDTO && downGlassInfo.getWidth().equals(glassInfo.getWidth()) && downGlassInfo.getHeight().equals(glassInfo.getHeight())) {
+                log.info("鐩稿悓娆″簭鐜荤拑瀵瑰簲涓婏紝鍙墽琛岃繘鐗囦换鍔�");
+                return Boolean.TRUE;
+            } else {
+                log.info("鍚屾搴忕幓鐠冨搴斾笉涓婏紝闇�鎵ц鏇挎崲鐜荤拑鐨勬搷浣�");
+                return Boolean.FALSE;
+            }
+        } else {
+            log.info("闈炲灞傜幓鐠冿紝鐩存帴杩涚墖");
+            return Boolean.TRUE;
+        }
+    }
+
+    private Boolean initDownGlassTask(GlassInfo glassInfo, String startCell, String endCell, Integer taskType) {
+        DownGlassTask downGlassTask = new DownGlassTask();
+        BeanUtils.copyProperties(glassInfo, downGlassTask);
+        downGlassTask.setStartCell(startCell);
+        downGlassTask.setEndCell(endCell);
+        downGlassTask.setTaskType(taskType + "");
+        downGlassTask.setTaskStauts(0);
+        downGlassTask.setCreateTime(new Date());
+        return downGlassTaskService.save(downGlassTask);
+    }
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml
new file mode 100644
index 0000000..967696b
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.mes.downglassinfo.mapper.DownGlassInfoMapper">
+
+    <resultMap id="downGlassInfoDTO" type="com.mes.downworkstation.entity.dto.DownGlassInfoDTO">
+        <result column="flow_card_id" property="flowCardId"/>
+        <result column="layer" property="layer"/>
+        <result column="count" property="count"/>
+    </resultMap>
+    <resultMap id="downGlassInfo" type="com.mes.downworkstation.entity.dto.DownGlassInfoDTO">
+        <result column="flow_card_id" property="flowCardId"/>
+        <result column="layer" property="layer"/>
+        <result column="count" property="count"/>
+        <collection property="glassInfoList" ofType="com.mes.glassinfo.entity.GlassInfo">
+            <id column="id" property="id"/>
+            <result column="flow_card_id" property="flowCardId"/>
+            <result column="glass_type" property="glassType"/>
+            <result column="width" property="width"/>
+            <result column="height" property="height"/>
+            <result column="thickness" property="thickness"/>
+            <result column="filmsid" property="filmsid"/>
+            <result column="total_layer" property="totalLayer"/>
+            <result column="layer" property="layer"/>
+        </collection>
+    </resultMap>
+
+    <select id="queryDownGlassMaxLayer" resultMap="downGlassInfoDTO">
+        SELECT flow_card_id,
+               layer,
+               COUNT(layer) AS count
+        FROM
+            down_glass_info
+        WHERE
+            flow_card_id = #{flowCardId}
+        GROUP BY
+            flow_card_id,
+            layer
+        order by count desc limit 1
+    </select>
+    <select id="queryMaxSequence" resultType="java.lang.Integer">
+        SELECT max(sequence) + 1 as sequence
+        FROM down_glass_info
+        WHERE flow_card_id = #{flowCardId}
+          AND layer = #{layer}
+    </select>
+
+    <select id="queryWorkStationNotIn" resultMap="downGlassInfo">
+        SELECT T.*,
+               T1.*
+        FROM (
+                 SELECT T.FLOW_CARD_ID,
+                        T.LAYER,
+                        COUNT(T.LAYER) AS COUNT
+                 FROM
+                     DOWN_GLASS_INFO T
+                     INNER JOIN DOWN_WORKSTATION T1
+                 ON T.FLOW_CARD_ID = T1.FLOW_CARD_ID
+                     AND T.LAYER = T1.LAYER
+                 GROUP BY
+                     T.FLOW_CARD_ID,
+                     T.LAYER
+             ) T
+                 INNER JOIN GLASS_INFO T1 ON T.FLOW_CARD_ID = T1.FLOW_CARD_ID
+            AND T.LAYER = T1.LAYER
+                 LEFT JOIN DOWN_GLASS_INFO T2 ON T1.GLASS_ID = T2.GLASS_ID
+        WHERE T2.GLASS_ID IS NULL
+        order by t.count desc
+    </select>
+</mapper>
\ No newline at end of file

--
Gitblit v1.8.0