From 21092d29c1c0cd1003bb32bf91fddae265a8baea Mon Sep 17 00:00:00 2001
From: zhoushihao <zsh19950802@163.com>
Date: 星期三, 20 十一月 2024 08:41:11 +0800
Subject: [PATCH] 1、卧理单条磨边线对接完成,另一条线等待IP确认 2、大理片笼提交部分代码

---
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecageIntask/entity/BigStorageCageInTask.java                  |   35 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/opctask/entity/LoadGlassDeviceTask.java                                                    |    4 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/mapper/RawGlassStorageDetailsMapper.java                                   |    2 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/EdgStorageDeviceTask.java                                       |   22 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecageIntask/service/BigStorageCageInTaskService.java          |   21 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/RawGlassStorageDetailsService.java                                 |    2 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java                        |   20 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageDeviceTaskMapper.xml                                             |   12 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/changelog/ywChangelog.sql                                                     |   45 +-
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageTask.java                                         |   79 +--
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/mapper/LoadGlassDeviceTaskMapper.xml                                               |    1 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java                                                     |  124 ++--
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/tools/service/impl/BigStorageBaseServiceImpl.java                      |  663 ++++++++++++++++++++++++++++++
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecageIntask/mapper/BigStorageCageInTaskMapper.java            |   22 +
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageInTaskMapper.xml                                     |   29 +
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-dev.yml                                                             |    5 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecageIntask/service/impl/BigStorageCageInTaskServiceImpl.java |   33 +
 hangzhoumesParent/common/servicebase/src/main/resources/mapper/UpPattenUsageMapper.xml                                                                |    3 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassTask.java                                                        |   99 +++-
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml                                                                |    2 
 hangzhoumesParent/common/servicebase/src/main/resources/mapper/RawGlassStorageDetailsMapper.xml                                                       |   10 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java                                                       |   15 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/opccallback/CacheGlassStartCallback.java                                   |   16 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/tools/service/BigStorageBaseService.java                               |   17 
 24 files changed, 1,066 insertions(+), 215 deletions(-)

diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/opctask/entity/LoadGlassDeviceTask.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/opctask/entity/LoadGlassDeviceTask.java
index c4bef17..70d14bf 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/opctask/entity/LoadGlassDeviceTask.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/opctask/entity/LoadGlassDeviceTask.java
@@ -31,6 +31,10 @@
     /**
      * 浠诲姟鐘舵�� 0榛樿绌轰换鍔� 1鎵ц涓� 2缁撴潫浠诲姟
      */
+    private Integer inkageState;
+    /**
+     * 浠诲姟鐘舵�� 0榛樿绌轰换鍔� 1鎵ц涓� 2缁撴潫浠诲姟
+     */
     private Integer taskState;
     /**
      * 鍒涘缓鏃堕棿
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/mapper/RawGlassStorageDetailsMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/mapper/RawGlassStorageDetailsMapper.java
index f61e2c5..a646ab1 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/mapper/RawGlassStorageDetailsMapper.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/mapper/RawGlassStorageDetailsMapper.java
@@ -23,5 +23,5 @@
      * @param state
      * @return
      */
-    List<Integer> listBySlotState(@Param("leftingStation") List<Integer> liftingStation, @Param("state") List<Integer> state);
+    List<RawGlassStorageDetails> listBySlotState(@Param("leftingStation") List<Integer> liftingStation, @Param("state") List<Integer> state);
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/RawGlassStorageDetailsService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/RawGlassStorageDetailsService.java
index e5955cf..c5fc68a 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/RawGlassStorageDetailsService.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/RawGlassStorageDetailsService.java
@@ -35,7 +35,7 @@
 
     String outWarehousing(Long slotId);
 
-    List<Integer> listBySlotState(List<Integer> liftingStation, List<Integer> state);
+    List<RawGlassStorageDetails> listBySlotState(List<Integer> liftingStation, List<Integer> state);
 
     String warehousingRequest(int leftingStation);
 
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java
index 746269b..d370c64 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java
@@ -57,17 +57,19 @@
     @Override
     public String warehousingRequest(int leftingStation) {
         RawGlassStorageDetails storageDetails = getOne(new LambdaQueryWrapper<RawGlassStorageDetails>()
-                .in(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN_ALL));
+                .in(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN_ALL)
+                .eq(RawGlassStorageDetails::getSlot, leftingStation));
         if (null != storageDetails) {
             log.info("褰撳墠鍚婅浣嶆湁鏋跺瓙锛岀粨鏉熸湰鍦板叆搴撹姹�");
             return "fail";
         }
-        List<Integer> shelfList = listBySlotState(Const.RAW_GLASS_DEVICE, Const.RAW_GLASS_STATE_IN_ALL);
+        List<RawGlassStorageDetails> shelfList = listBySlotState(Const.RAW_GLASS_DEVICE, Const.RAW_GLASS_STATE_IN_ALL);
         if (CollectionUtils.isEmpty(shelfList)) {
             log.info("褰撳墠宸ヤ綅涓嶅瓨鍦ㄥ彲鐢ㄧ殑绌烘灦瀛�");
             return "fail";
         }
-        Integer shelf = shelfList.get(0);
+        Integer shelf = shelfList.get(0).getSlot();
+        Integer deviceId = shelfList.get(0).getDeviceId();
         log.info("鐢熸垚浠诲姟");
         try {
             generateTask(shelf, leftingStation, shelf, 0, Const.RAW_GLASS_TASK_TYPE_IN_REQUEST);
@@ -78,6 +80,7 @@
         RawGlassStorageDetails details = new RawGlassStorageDetails();
         details.setSlot(shelf);
         details.setShelf(shelf);
+        details.setDeviceId(deviceId);
         details.setState(Const.RAW_GLASS_STATE_RUNNING);
         save(details);
         return "success";
@@ -126,7 +129,7 @@
     }
 
     @Override
-    public List<Integer> listBySlotState(List<Integer> liftingStation, List<Integer> state) {
+    public List<RawGlassStorageDetails> listBySlotState(List<Integer> liftingStation, List<Integer> state) {
         return baseMapper.listBySlotState(liftingStation, state);
     }
 
@@ -173,13 +176,10 @@
                 .shelf(shelf)
                 .createTime(new Date()).build();
         rawGlassStorageTaskService.save(task);
-
-
         List<ReadWriteEntity> list = new ArrayList<>();
-        list.add(generateReadWriteEntity("A01-CC.dev.taskWord", 1));
-//        list.add(generateReadWriteEntity("A01-CC.dev.taskSending", 1));
-        list.add(generateReadWriteEntity("A01-CC.dev.startSlot", startSlot));
-        list.add(generateReadWriteEntity("A01-CC.dev.endSlot", endSlot));
+        list.add(generateReadWriteEntity("PLC.CC.taskWord", 1));
+        list.add(generateReadWriteEntity("PLC.CC.startSlot", startSlot));
+        list.add(generateReadWriteEntity("PLC.CC.endSlot", endSlot));
         miloService.writeToOpcWord(list);
         return Boolean.TRUE;
     }
diff --git a/hangzhoumesParent/common/servicebase/src/main/resources/mapper/RawGlassStorageDetailsMapper.xml b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/RawGlassStorageDetailsMapper.xml
index e9fc32e..53d09c7 100644
--- a/hangzhoumesParent/common/servicebase/src/main/resources/mapper/RawGlassStorageDetailsMapper.xml
+++ b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/RawGlassStorageDetailsMapper.xml
@@ -2,9 +2,15 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.mes.rawglassdetails.mapper.RawGlassStorageDetailsMapper">
 
-    <select id="listBySlotState" resultType="java.lang.Integer">
+    <resultMap id="baseMap" type="com.mes.rawglassdetails.entity.RawGlassStorageDetails">
+        <result column="DEVICE_ID" property="deviceId"/>
+        <result column="SLOT" property="slot"/>
+    </resultMap>
+
+    <select id="listBySlotState" resultMap="baseMap">
         SELECT
-        T.SLOT
+        T.SLOT,
+        T.DEVICE_ID
         FROM
         RAW_GLASS_STORAGE_STATION T
         LEFT JOIN RAW_GLASS_STORAGE_DETAILS AS T1 ON T.DEVICE_ID = T1.DEVICE_ID
diff --git a/hangzhoumesParent/common/servicebase/src/main/resources/mapper/UpPattenUsageMapper.xml b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/UpPattenUsageMapper.xml
index e859f86..e19a528 100644
--- a/hangzhoumesParent/common/servicebase/src/main/resources/mapper/UpPattenUsageMapper.xml
+++ b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/UpPattenUsageMapper.xml
@@ -13,11 +13,10 @@
         <result column="state" property="state"/>
         <result column="group_number" property="groupNumber"/>
     </resultMap>
-    <select id="queryRawGlassByEngineeringId" resultType="com.mes.uppattenusage.entity.vo.UpPattenUsageVO">
+    <select id="queryRawGlassByEngineeringId" resultMap="baseMap">
         SET @prev_width := NULL;
         SET @prev_height := NULL;
         SET @counter := 0;
-
         SELECT t.*,
                @counter := IF(@prev_width = width and @prev_height = height, @counter, @counter + 1) AS group_number,
                @prev_width := width,
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java
index 5d92126..e57b73d 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java
@@ -1,12 +1,15 @@
 package com.mes.job;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.kangaroohy.milo.model.ReadWriteEntity;
 import com.kangaroohy.milo.runner.subscription.SubscriptionCallback;
 import com.kangaroohy.milo.service.MiloService;
 import com.mes.common.config.Const;
 import com.mes.edgglasstaskqueueinfo.entity.EdgGlassTaskQueueInfo;
 import com.mes.edgglasstaskqueueinfo.service.EdgGlassTaskQueueInfoService;
+import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.glassinfo.service.GlassInfoService;
 import com.mes.opctask.entity.EdgStorageDeviceTask;
 import com.mes.opctask.service.EdgStorageDeviceTaskService;
 import lombok.extern.slf4j.Slf4j;
@@ -17,6 +20,7 @@
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -46,80 +50,80 @@
     EdgStorageDeviceTaskService edgStorageDeviceTaskService;
     @Resource
     EdgGlassTaskQueueInfoService edgGlassTaskQueueInfoService;
-    private int sum = 0;
 
-    @Scheduled(fixedDelay = 10)
-    public void startOpcTask() throws Exception {
-//        miloService.subscriptionFromOpcUa(Arrays.asList("C101-WL.S7-1200.plc_task_state", "D101-WL.S7-1200.plc_task_state"), cacheGlassStartCallback);
-//        miloService.subscriptionFromOpcUa(Arrays.asList("mes.dec.edg_storage_device_one_task[1].task_state", "D101-WL.S7-1200.plc_task_state"), cacheGlassTestCallback);
-//        log.info("--------------------s---------------------------");
-        EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage("edg_storage_device_one_task");
-        try {
-            if (task == null) {
-                log.info("浠诲姟琛ㄥ熀纭�鏁版嵁褰曞叆澶辫触锛岃妫�鏌ユ暟鎹槸鍚﹀綍鍏ユ垚鍔�");
-                return;
-            }
-            if (task.getTaskState() == sum) {
-                return;
-            }
-            sum = task.getTaskState();
-            task.setTaskRunning(sum);
-            log.info("褰撳墠绗瑊}娆℃墽琛�", task.getTaskRunning());
-//            task.setTaskState(task.getTaskRunning());
-            edgStorageDeviceTaskService.updateTaskMessage("edg_storage_device_one_task", task);
-        } catch (Exception e) {
-            log.info("{}", e.getMessage());
-        }
+    @Resource
+    GlassInfoService glassInfoService;
+
+    private String glassIdOne = "";
+    private String glassIdTwo = "";
+
+    @Scheduled(fixedDelay = Long.MAX_VALUE)
+    public void startOneOpcTask() throws Exception {
+        miloService.subscriptionFromOpcUa(Arrays.asList("mes.WL1.edg_storage_device_one_task[1].task_state"), cacheGlassStartCallback);
     }
 
-//    mesControlWord glassId
-//    width height
-//    thickness             filmRemove
-//    deviceControlWord             deviceWarnState
+    @Scheduled(fixedDelay = Long.MAX_VALUE)
+    public void startTwoOpcTask() throws Exception {
+        miloService.subscriptionFromOpcUa(Arrays.asList("mes.WL2.edg_storage_device_two_task[1].task_state"), cacheGlassStartCallback);
+    }
 
-    //    @Scheduled(fixedDelay = 1000)
-    public void edgOpcTask() throws Exception {
-        ReadWriteEntity controlEntity = miloService.readFromOpcUa("A001-MB1.dev.deviceControlWord");
-        String deviceControlWord = (String) controlEntity.getValue();
-        if ("0".equals(deviceControlWord)) {
-            ReadWriteEntity messageEntity = miloService.readFromOpcUa("A001-MB1.dev.mesControlWord");
-            String messageValue = (String) messageEntity.getValue();
-            if ("1".equals(messageValue)) {
-                List<ReadWriteEntity> list = new ArrayList<>();
-                list.add(generateReadWriteEntity("A001-MB1.dev.mesControlWord", 0));
-                miloService.writeToOpcWord(list);
-            }
-            log.info("褰撳墠鏈敹鍒扮(杈规満鐨勮姹備换鍔�");
-            return;
-        }
+    @Scheduled(fixedDelay = 1000)
+    public void edgOneOpcTask() throws Exception {
         EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(EDG_STORAGE_DEVICE_ONE_TASK);
         String glassId = task.getGlassId();
-        if (StringUtils.isBlank(glassId)) {
-            log.info("纾ㄨ竟鍓嶇殑鏋跺瓙娌℃湁鐜荤拑淇℃伅");
+        if (StringUtils.isBlank(glassId) || glassId.equals(glassIdOne)) {
+            log.info("{}鍙风嚎纾ㄨ竟鍓嶇幓鐠冩湭灏变綅锛岀粨鏉熸湰娆′换鍔�", 1);
             return;
         }
-        //鑾峰彇纾ㄨ竟瀵瑰垪
-        EdgGlassTaskQueueInfo edgInfo = edgGlassTaskQueueInfoService.getOne(new LambdaQueryWrapper<EdgGlassTaskQueueInfo>()
-                .eq(EdgGlassTaskQueueInfo::getGlassId, glassId)
-                .eq(EdgGlassTaskQueueInfo::getState, Const.GLASS_STATE_NEW));
-        if (edgInfo == null) {
+        edgTaskChild(glassId, 1);
+    }
+
+    @Scheduled(fixedDelay = 1000)
+    public void edgTwoOpcTask() throws Exception {
+        EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(EDG_STORAGE_DEVICE_TWO_TASK);
+        String glassId = task.getGlassId();
+        if (StringUtils.isBlank(glassId) || glassId.equals(glassIdTwo)) {
+            log.info("{}鍙风嚎纾ㄨ竟鍓嶇幓鐠冩湭灏变綅锛岀粨鏉熸湰娆′换鍔�", 2);
+            return;
+        }
+        edgTaskChild(glassId, 2);
+    }
+
+    private void edgTaskChild(String glassId, int cell) throws Exception {
+        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId).last("limit 1"));
+        if (glassInfo == null) {
             log.info("瀵瑰垪琛ㄤ腑鐨勭幓鐠僫d閿欒锛岃妫�鏌ユ暟鎹紝鐜荤拑id锛歿}", glassId);
             return;
         }
+        String toEndingId = glassInfo.getTemperingLayoutId() + "" + glassInfo.getTemperingFeedSequence();
         List<ReadWriteEntity> list = new ArrayList<>();
-        list.add(generateReadWriteEntity("A001-MB1.dev.mesControlWord", 1));
-        list.add(generateReadWriteEntity("A001-MB1.dev.glassId", glassId));
-        list.add(generateReadWriteEntity("A001-MB1.dev.width", edgInfo.getWidth()));
-        list.add(generateReadWriteEntity("A001-MB1.dev.height", edgInfo.getHeight()));
-        list.add(generateReadWriteEntity("A001-MB1.dev.thickness", edgInfo.getThickness()));
-        list.add(generateReadWriteEntity("A001-MB1.dev.filmRemove", 0));
-        miloService.writeToOpcWord(list);
+        list.add(generateReadWriteEntity("PLC.MB" + cell + ".mesControl", true));
+        list.add(generateReadWriteEntity("PLC.MB" + cell + ".glassId", Integer.parseInt(toEndingId)));
+        list.add(generateReadWriteEntity("PLC.MB" + cell + ".toEdingId", Integer.parseInt(toEndingId)));
+        list.add(generateReadWriteEntity("PLC.MB" + cell + ".width", (int) Math.max(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10)));
+        list.add(generateReadWriteEntity("PLC.MB" + cell + ".height", (int) Math.min(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10)));
+
+        miloService.writeToOpcUa(list);
+        miloService.writeToOpcWord(generateReadWriteEntity("PLC.MB" + cell + ".thickness", (int) glassInfo.getThickness() * 10));
+        //淇敼纾ㄨ竟瀵瑰垪涓殑纾ㄨ竟绾胯矾鍙婄姸鎬�
+        edgGlassTaskQueueInfoService.update(new LambdaUpdateWrapper<EdgGlassTaskQueueInfo>()
+                .set(EdgGlassTaskQueueInfo::getLine, cell)
+                .set(EdgGlassTaskQueueInfo::getState, 1)
+                .eq(EdgGlassTaskQueueInfo::getGlassId, glassId)
+                .eq(EdgGlassTaskQueueInfo::getState, Const.GLASS_STATE_NEW));
+        if (cell == 1) {
+            glassIdOne = glassId;
+        } else {
+            glassIdTwo = glassId;
+        }
+
     }
 
     private ReadWriteEntity generateReadWriteEntity(String identifier, Object value) {
-        ReadWriteEntity readWriteEntity = new ReadWriteEntity();
-        readWriteEntity.setIdentifier(identifier);
-        readWriteEntity.setValue(value);
-        return readWriteEntity;
+        return ReadWriteEntity.builder()
+                .identifier(identifier)
+                //Kep涓槸Long绫诲瀷锛屽嵆锛欼nt32锛孞ava涓殑int绫诲瀷
+                .value(value)
+                .build();
     }
 }
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/opccallback/CacheGlassStartCallback.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/opccallback/CacheGlassStartCallback.java
index 68e550d..deab66e 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/opccallback/CacheGlassStartCallback.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/opccallback/CacheGlassStartCallback.java
@@ -270,10 +270,10 @@
         task.setGlassIdOut(edgStorageCageDetails.getGlassId());
         task.setStartCell(edgStorageCageDetails.getSlot());
         task.setTaskRunning(taskType);
-        task.setWidth((int) edgStorageCageDetails.getWidth() * 10);
-        task.setHeight((int) edgStorageCageDetails.getHeight() * 10);
-        task.setThickness((int) edgStorageCageDetails.getThickness() * 10);
-        task.setFilmRemove(0);
+//        task.setWidth((int) edgStorageCageDetails.getWidth() * 10);
+//        task.setHeight((int) edgStorageCageDetails.getHeight() * 10);
+//        task.setThickness((int) edgStorageCageDetails.getThickness() * 10);
+//        task.setFilmRemove(0);
         edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
         saveHistoryTask(task);
         //鏇存柊璇︽儏琛ㄤ换鍔″嚭鐗囦腑
@@ -300,10 +300,10 @@
 //        task.setTaskState(Const.GLASS_CACHE_TYPE_EMPTY);
         task.setGlassIdOut("");
         task.setStartCell(0);
-        task.setWidth(0);
-        task.setHeight(0);
-        task.setThickness(0);
-        task.setFilmRemove(0);
+//        task.setWidth(0);
+//        task.setHeight(0);
+//        task.setThickness(0);
+//        task.setFilmRemove(0);
         edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
         edgStorageDeviceTaskHistoryService.update(new LambdaUpdateWrapper<EdgStorageDeviceTaskHistory>()
                 .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW)
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/EdgStorageDeviceTask.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/EdgStorageDeviceTask.java
index dccd5ed..f0ff158 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/EdgStorageDeviceTask.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/EdgStorageDeviceTask.java
@@ -21,6 +21,10 @@
      */
     private String glassId;
     /**
+     * 鏄惁灏变綅
+     */
+    private Integer inPlace;
+    /**
      * 杩涚墖鐜荤拑id
      */
     private String glassIdIn;
@@ -48,22 +52,7 @@
      * 浠诲姟绫诲瀷
      */
     private Integer taskType;
-    /**
-     * 瀹�
-     */
-    private Integer width;
-    /**
-     * 楂�
-     */
-    private Integer height;
-    /**
-     * 鍘�
-     */
-    private Integer thickness;
-    /**
-     * 鏄惁闄よ啘
-     */
-    private Integer filmRemove;
+
     /**
      * 鍒涘缓鏃堕棿
      */
@@ -73,4 +62,5 @@
      */
     private Date updateTime;
 
+
 }
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageDeviceTaskMapper.xml b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageDeviceTaskMapper.xml
index b532cfa..8c76445 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageDeviceTaskMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageDeviceTaskMapper.xml
@@ -4,6 +4,8 @@
 
     <resultMap id="baseMap" type="com.mes.opctask.entity.EdgStorageDeviceTask">
         <id column="task_running" property="taskRunning"/>
+        <id column="glass_id" property="glassId"/>
+        <id column="in_place" property="inPlace"/>
         <id column="glass_id_in" property="glassIdIn"/>
         <id column="glass_id_out" property="glassIdOut"/>
         <id column="current_cell" property="currentCell"/>
@@ -12,10 +14,6 @@
         <id column="task_state" property="taskState"/>
         <id column="create_time" property="createTime"/>
         <id column="update_time" property="updateTime"/>
-        <id column="width" property="width"/>
-        <id column="height" property="height"/>
-        <id column="thickness" property="thickness"/>
-        <id column="film_remove" property="filmRemove"/>
     </resultMap>
 
     <select id="queryTaskMessage" resultMap="baseMap">
@@ -30,11 +28,7 @@
         glass_id_out = #{task.glassIdOut},
         current_cell = #{task.currentCell},
         start_cell = #{task.startCell},
-        end_cell = #{task.endCell},
-        width = #{task.width},
-        height = #{task.height},
-        thickness = #{task.thickness},
-        film_remove = #{task.filmRemove}
+        end_cell = #{task.endCell}
         <if test="task.taskState == 0">
             ,task_state = #{task.taskState}
         </if>
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecageIntask/entity/BigStorageCageInTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecageIntask/entity/BigStorageCageInTask.java
new file mode 100644
index 0000000..76b2923
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecageIntask/entity/BigStorageCageInTask.java
@@ -0,0 +1,35 @@
+package com.mes.bigstoragecageIntask.entity;
+
+import lombok.Data;
+
+/**
+ * (BigStorageCageInOneTask)琛ㄥ疄浣撶被
+ *
+ * @author makejava
+ * @since 2024-11-08 21:40:17
+ */
+@Data
+public class BigStorageCageInTask {
+    /**
+     * 浠诲姟璇锋眰 0鏃犱换鍔� 1鍚姩浠诲姟 2 纭瀹屾垚
+     */
+    private Integer taskRunning;
+    /**
+     * 鐜荤拑id
+     */
+    private String glassId;
+    /**
+     * 璧峰鏍煎瓙
+     */
+    private Integer startSlot;
+    /**
+     * 鐩爣鏍煎瓙
+     */
+    private Integer targetSlot;
+    /**
+     * 浠诲姟鐘舵��
+     */
+    private Integer taskState;
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecageIntask/mapper/BigStorageCageInTaskMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecageIntask/mapper/BigStorageCageInTaskMapper.java
new file mode 100644
index 0000000..5bca250
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecageIntask/mapper/BigStorageCageInTaskMapper.java
@@ -0,0 +1,22 @@
+package com.mes.bigstoragecageIntask.mapper;
+
+import com.mes.bigstoragecageIntask.entity.BigStorageCageInTask;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * (BigStorageCageInOneTask)琛ㄦ暟鎹簱璁块棶灞�
+ *
+ * @author makejava
+ * @since 2024-11-08 21:40:15
+ */
+public interface BigStorageCageInTaskMapper {
+
+    List<BigStorageCageInTask> queryTaskMessage(String tableName);
+
+    boolean updateTaskMessage(@Param("tableName") String tableName, @Param("task") BigStorageCageInTask bigStorageCageInTask);
+
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecageIntask/service/BigStorageCageInTaskService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecageIntask/service/BigStorageCageInTaskService.java
new file mode 100644
index 0000000..cd2657c
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecageIntask/service/BigStorageCageInTaskService.java
@@ -0,0 +1,21 @@
+package com.mes.bigstoragecageIntask.service;
+
+import com.mes.bigstoragecageIntask.entity.BigStorageCageInTask;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * (BigStorageCageInOneTask)琛ㄦ湇鍔℃帴鍙�
+ *
+ * @author makejava
+ * @since 2024-11-08 21:40:20
+ */
+public interface BigStorageCageInTaskService {
+
+
+    List<BigStorageCageInTask> queryTaskMessage(String tableName);
+
+    boolean updateTaskMessage(@Param("tableName") String tableName, @Param("task") BigStorageCageInTask bigStorageCageInTask);
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecageIntask/service/impl/BigStorageCageInTaskServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecageIntask/service/impl/BigStorageCageInTaskServiceImpl.java
new file mode 100644
index 0000000..736672d
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecageIntask/service/impl/BigStorageCageInTaskServiceImpl.java
@@ -0,0 +1,33 @@
+package com.mes.bigstoragecageIntask.service.impl;
+
+import com.mes.bigstoragecageIntask.entity.BigStorageCageInTask;
+import com.mes.bigstoragecageIntask.mapper.BigStorageCageInTaskMapper;
+import com.mes.bigstoragecageIntask.service.BigStorageCageInTaskService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * (BigStorageCageInOneTask)琛ㄦ湇鍔″疄鐜扮被
+ *
+ * @author makejava
+ * @since 2024-11-08 21:40:23
+ */
+@Service
+public class BigStorageCageInTaskServiceImpl implements BigStorageCageInTaskService {
+
+    @Resource
+    BigStorageCageInTaskMapper bigStorageCageInTaskMapper;
+
+    @Override
+    public List<BigStorageCageInTask> queryTaskMessage(String tableName) {
+        return bigStorageCageInTaskMapper.queryTaskMessage(tableName);
+    }
+
+    @Override
+    public boolean updateTaskMessage(String tableName, BigStorageCageInTask bigStorageCageInTask) {
+        return bigStorageCageInTaskMapper.updateTaskMessage(tableName, bigStorageCageInTask);
+    }
+}
+
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..076ad78 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
@@ -5,10 +5,10 @@
 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.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 +17,20 @@
 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.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.Arrays;
+import java.util.Date;
+import java.util.List;
 import java.util.stream.Collectors;
 
 /**
@@ -38,23 +39,21 @@
 @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;
+
+    @Resource
+    private BigStorageBaseService baseService;
+    @Resource
+    private BigStorageCageInTaskService bigStorageBaseInTaskService;
 
     @Autowired(required = false)
     MiloService miloService;
@@ -62,14 +61,6 @@
     @Resource(name = "bigStorageStartCallback")
     SubscriptionCallback bigStorageStartCallback;
 
-    @Value("${mes.carWidth}")
-    private Integer carWidth;
-
-    @Value("${mes.slotWidth}")
-    private Integer slotWidth;
-
-    @Value("${mes.glassGap}")
-    private Integer glassGap;
 
     @Scheduled(fixedDelay = Long.MAX_VALUE)
     public void startOpcTask() throws Exception {
@@ -81,6 +72,17 @@
     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("褰撳墠澶ц溅鏃犺繘鐗囦换鍔★紝缁撴潫鏈湴瀹氭椂浠诲姟");
+        }
+        inTaskList
     }
 
 
@@ -108,7 +110,7 @@
                 bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_IN);
                 log.info("4銆佸ぇ鐞嗙墖绗艰繘鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", inSuccessGlass);
                 //鏇存柊鐞嗙墖绗肩幓鐠冨昂瀵�
-                updateSlotRemainBySlots(inSuccessGlassSlot);
+                baseService.updateSlotRemainBySlots(inSuccessGlassSlot);
                 log.info("5銆佸ぇ鐞嗙墖绗艰繘鐗囩洰鏍囨牸瀛愬昂瀵告洿鏂板畬鎴�");
             }
 
@@ -153,7 +155,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 +192,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 +232,7 @@
                 slotList.add(bigStorageCageFeedTask.getTargetSlot());
             }
             //鏇存柊鏍煎瓙鍓╀綑瀹藉害
-            updateSlotRemainBySlots(slotList);
+            baseService.updateSlotRemainBySlots(slotList);
             log.info("杩涚墖浠诲姟鎵ц瀹屾垚");
         }
         //鑾峰彇鍑虹墖浠诲姟琛ㄤ腑鐘舵�佷负鐮存崯鐨勬暟鎹�
@@ -258,37 +260,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));
-        }
     }
 
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/tools/service/BigStorageBaseService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/tools/service/BigStorageBaseService.java
new file mode 100644
index 0000000..0402283
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/tools/service/BigStorageBaseService.java
@@ -0,0 +1,17 @@
+package com.mes.tools.service;
+
+import com.mes.bigstorage.entity.BigStorageDTO;
+import com.mes.glassinfo.entity.GlassInfo;
+
+import java.util.List;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/11/8 22:02
+ * @Description:
+ */
+public interface BigStorageBaseService {
+    void updateSlotRemainBySlots(List<Integer> slotList);
+
+    BigStorageDTO queryTargetSlotByTempering(GlassInfo glassInfo);
+}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/tools/service/impl/BigStorageBaseServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/tools/service/impl/BigStorageBaseServiceImpl.java
new file mode 100644
index 0000000..4b275c5
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/tools/service/impl/BigStorageBaseServiceImpl.java
@@ -0,0 +1,663 @@
+package com.mes.tools.service.impl;
+
+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.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+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.bigstoragetask.entity.BigStorageCageFeedTask;
+import com.mes.common.S7object;
+import com.mes.common.config.Const;
+import com.mes.device.PlcParameterObject;
+import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.glassinfo.service.GlassInfoService;
+import com.mes.tools.S7control;
+import com.mes.tools.service.BigStorageBaseService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/11/8 22:03
+ * @Description:
+ */
+@Service
+@Slf4j
+public class BigStorageBaseServiceImpl implements BigStorageBaseService {
+
+    @Resource
+    BigStorageCageDetailsService bigStorageCageDetailsService;
+
+    @Resource
+    BigStorageCageService bigStorageCageService;
+
+    @Resource
+    GlassInfoService glassInfoService;
+
+    @Value("${mes.slotWidth}")
+    private Integer slotWidth;
+
+    @Value("${mes.carWidth}")
+    private Integer carWidth;
+
+    @Value("${mes.outCarMaxSize}")
+    private Integer outCarMaxSize;
+
+    @Value("${mes.glassGap}")
+    private Integer glassGap;
+
+
+    @Override
+    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));
+        }
+    }
+
+    /**
+     * 鎸夌収鐜荤拑id鍒ゆ柇鐜荤拑鐘舵�佸強鍗ц浆绔嬫槸鍚﹀彲鐩存帴鍚姩
+     */
+//    public Boolean judgeGlassTypeStatus(String glassId, Integer line, String mesAddress) {
+//        //鍒ゆ柇姝ょ幓鐠冩槸鍦ㄧ鍐呮垨宸茬敓鎴愯繘鐗囦换鍔�
+//        BigStorageCageFeedTask bigStorageCageFeedTask = bigStorageCageFeedTaskService.getOne(
+//                new LambdaQueryWrapper<BigStorageCageFeedTask>()
+//                        .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT)
+//                        .eq(BigStorageCageFeedTask::getGlassId, glassId)
+//        );
+//        BigStorageCageDetails bigStorageCageDetails = bigStorageCageDetailsService.getOne(
+//                new LambdaQueryWrapper<BigStorageCageDetails>()
+//                        .eq(BigStorageCageDetails::getGlassId, glassId)
+//                        .ne(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
+//        );
+//        if (bigStorageCageFeedTask != null || bigStorageCageDetails != null) {
+//            log.info("姝ょ幓鐠冨瓨浠诲姟鎴栧凡鍦ㄧ鍐�");
+//            return Boolean.TRUE;
+//        }
+//        //1銆佽幏鍙栦换鍔¤〃涓浉閭荤幓鐠�
+//        List<EdgGlassTaskInfo> edgGlassTaskInfoList;
+//        edgGlassTaskInfoList = edgGlassTaskInfoService.list(new LambdaQueryWrapper<EdgGlassTaskInfo>()
+//                .eq(EdgGlassTaskInfo::getLine, line)
+//                .apply("time >= (select time from edg_glass_task_info where line='" + line + "' and glass_id = '" + glassId + "' and deleted = 0)")
+//                .orderByAsc(EdgGlassTaskInfo::getTime));
+//        if (edgGlassTaskInfoList.size() == 0) {
+//            edgGlassTaskInfoList = edgGlassTaskInfoService.list(new QueryWrapper<EdgGlassTaskInfo>()
+//                    .select("Top 1 *")
+//                    .eq("glass_id", glassId)
+//            );
+//            log.info("鍦ㄥ昂瀵歌〃涓幏鍙栫幓鐠冧俊鎭瘂}", edgGlassTaskInfoList);
+//            if (edgGlassTaskInfoList.size() == 0) {
+//                GlassInfo glassInfo = glassInfoService.getOne(
+//                        new LambdaQueryWrapper<GlassInfo>()
+//                                .eq(GlassInfo::getGlassId, glassId)
+//                );
+//                EdgGlassTaskInfo edgGlassTaskInfo = new EdgGlassTaskInfo();
+//                BeanUtils.copyProperties(glassInfo, edgGlassTaskInfo);
+//                edgGlassTaskInfo.setWidth((int) glassInfo.getWidth());
+//                edgGlassTaskInfo.setHeight((int) glassInfo.getHeight());
+//                edgGlassTaskInfoList.add(edgGlassTaskInfo);
+//                log.info("鍦ㄧ幓鐠冧俊鎭〃涓幏鍙栫幓鐠冧俊鎭瘂}", edgGlassTaskInfoList);
+//            }
+//        }
+//        Assert.isFalse(CollectionUtils.isEmpty(edgGlassTaskInfoList), "璇嗗埆鐜荤拑淇℃伅鏈嚭鐜板湪灏哄琛ㄤ腑,鑾峰彇鐩搁偦涓ゅ潡鐜荤拑澶辫触");
+//        //2銆佽幏鍙栧崸杞珛鍓╀綑瀹藉害
+//        BigStorageDTO sitToUpRemainWidth = bigStorageCageFeedTaskService.querySitToUpRemainWidth(line);
+//        Integer remainWidth;
+//        Integer glassCount;
+//        if (0 == sitToUpRemainWidth.getGlassCount()) {
+//            remainWidth = carWidth;
+//            glassCount = 0;
+//        } else {
+//            remainWidth = sitToUpRemainWidth.getWidth();
+//            glassCount = sitToUpRemainWidth.getGlassCount();
+//        }
+//
+//        Boolean flag = Boolean.TRUE;
+//        //2銆佽幏鍙栧崸杞珛
+//        Integer widthFirst = Math.max(edgGlassTaskInfoList.get(0).getWidth() / 10, edgGlassTaskInfoList.get(0).getHeight() / 10);
+//        Integer heightFirst = Math.min(edgGlassTaskInfoList.get(0).getWidth() / 10, edgGlassTaskInfoList.get(0).getHeight() / 10);
+//        if (edgGlassTaskInfoList.size() == 1) {
+//            if (remainWidth >= widthFirst) {
+//                if (glassCount < inCarMaxSize) {
+//                    addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst, heightFirst);
+//                } else {
+//                    if (glassCount < inCarMaxSize + 1) {
+//                        addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst, heightFirst);
+//                    } else {
+//                        return Boolean.FALSE;
+//                    }
+//                }
+//            } else {
+//                flag = Boolean.FALSE;
+//            }
+//        } else {
+//            Integer widthSecond = Math.max(edgGlassTaskInfoList.get(1).getWidth() / 10, edgGlassTaskInfoList.get(1).getHeight() / 10);
+//            Integer heightSecond = Math.min(edgGlassTaskInfoList.get(1).getWidth() / 10, edgGlassTaskInfoList.get(1).getHeight() / 10);
+//            if (remainWidth >= widthFirst) {
+//                if (remainWidth - widthFirst - glassGap >= widthSecond) {
+//                    if (glassCount < inCarMaxSize) {
+//                        addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst, heightFirst);
+//                    } else {
+//                        if (glassCount < inCarMaxSize + 1) {
+//                            addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst, heightFirst);
+//                        } else {
+//                            return Boolean.FALSE;
+//                        }
+//                    }
+//                } else {
+//                    if (glassCount < inCarMaxSize + 1) {
+//                        addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst, heightFirst);
+//                    } else {
+//                        return Boolean.FALSE;
+//                    }
+//                }
+//            } else {
+//                flag = Boolean.FALSE;
+//            }
+//        }
+//        //鍚憄lc鍙戦�佽繘鐗囩‘璁�
+//        if (flag) {
+//            //鍚憄lc鍐欏叆纭瀛�
+//            PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
+//            int returnData = 1;
+//            int count = 1;
+//            while (returnData != 0) {
+//                S7object.getinstance().plccontrol.writeWord(mesAddress, 1);
+//
+//                if (Const.A10_OUT_TARGET_POSITION.equals(line)) {
+//                    returnData = Integer.parseInt(plcParameterObject.getPlcParameter("D04ToMES").getValue());
+//                } else {
+//                    returnData = Integer.parseInt(plcParameterObject.getPlcParameter("D01ToMES").getValue());
+//                }
+////                returnData = S7object.getinstance().plccontrol.readWord(mesAddress, 1).get(0);
+//                log.info("杩涘崸杞珛绗瑊}娆″彂閫佺‘璁ゅ瓧瀹屾垚锛屽湴鍧�涓猴細{},鍐欏叆鐨勫唴瀹逛负{}", count++, mesAddress, 1);
+//            }
+//        }
+//        //璁板綍鏃犳硶鏀句笅鐜荤拑锛屽悗缁垽鏂惎鍔�
+//        return flag;
+//    }
+
+    /**
+     * 娣诲姞浠诲姟淇℃伅
+     */
+//    private Boolean addFeedTask(String glassId, Integer line, Integer taskType, Integer width, Integer height) {
+//        BigStorageCageFeedTask bigStorageCageFeedTask = new BigStorageCageFeedTask();
+//        bigStorageCageFeedTask.setGlassId(glassId);
+//        bigStorageCageFeedTask.setTaskState(Const.BIG_STORAGE_IN_NEW);
+//        bigStorageCageFeedTask.setLine(line);
+//        bigStorageCageFeedTask.setTaskType(taskType);
+//        bigStorageCageFeedTask.setWidth(width);
+//        bigStorageCageFeedTask.setHeight(height);
+//        bigStorageCageFeedTask.setCreateTime(new Date());
+//        //鍒犻櫎鐞嗙墖绗艰〃鎷胯蛋/鐮存崯鏁版嵁鏁版嵁
+//        damageService.deleteByGlassId(glassId);
+//        Damage damage = new Damage();
+//        damage.setGlassId(glassId);
+//        damage.setWorkingProcedure("纾ㄨ竟");
+//        damage.setLine(line);
+//        damage.setType(1);
+//        damage.setRemark("杩涘ぇ鐞嗙墖");
+//        damageService.insertDamage(damage);
+//        return bigStorageCageFeedTaskService.save(bigStorageCageFeedTask);
+//    }
+
+    /**
+     * 鑾峰彇闇�瑕佸惎鍔ㄧ殑绾胯矾锛氫袱鏉$嚎閮藉彲鍚姩 鑾峰彇绗竴鐗囩幓鐠冪増鍥緄d鏈�灏� 鐗堝簭鏈�澶х殑绾胯矾
+     *
+     * @return 闇�瑕佸惎鍔ㄧ殑绾胯矾
+     */
+//    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" +
+//                        "and (target_slot = 0 or target_slot is null) group by line"));
+//        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>()
+//                .in(GlassInfo::getGlassId, taskMap.keySet())
+//                .orderByAsc(GlassInfo::getTemperingLayoutId)
+//                .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence)
+//                .last("limit 1"));
+//        return taskMap.get(glassInfo.getGlassId());
+//    }
+
+    /**
+     * 璁$畻浠诲姟琛ㄨ繘鐗囩嚎璺殑鐩爣鏍煎瓙锛屽苟鍚姩浠诲姟
+     */
+//    public boolean computeTargetByLine(Integer line) {
+//        //1銆佽幏鍙栦换鍔¤〃涓殑鎵�鏈夌幓鐠冿紙鎸囧畾绾胯矾涓斿凡缁忚繘鍗ц浆绔嬪畬鎴愶級
+//        List<BigStorageCageFeedTask> taskList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>()
+//                .eq(BigStorageCageFeedTask::getLine, line)
+//                .and(e -> e.isNull(BigStorageCageFeedTask::getTargetSlot).or().eq(BigStorageCageFeedTask::getTargetSlot, Const.OUT_TARGET_POSITION_ZERO))
+//                .in(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP_ALL)
+//                .orderByAsc(BigStorageCageFeedTask::getId));
+//        //2銆佸幓绗煎瓙鍐呮煡鎵炬槸鍚﹀彲浠ョ户缁瓨鏀剧殑绗煎瓙
+//        List<String> glassIds = taskList.stream().map(BigStorageCageFeedTask::getGlassId).collect(Collectors.toList());
+//        List<GlassInfo> glassInfos = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>().in(GlassInfo::getGlassId, glassIds));
+//        return computeIsTemperingTargetByLine(glassInfos, taskList);
+//    }
+
+//    /**
+//     * 鏄惁閽㈠寲鐜荤拑杩涚鐩爣浣嶇疆
+//     *
+//     * @param glassInfos 褰撴潯绾垮崸杞珛鎵�鏈夌幓鐠�
+//     * @param taskList   褰撴潯绾垮崸杞珛鎵�鏈変换鍔�
+//     */
+//    private boolean computeIsTemperingTargetByLine(List<GlassInfo> glassInfos, List<BigStorageCageFeedTask> taskList) {
+//        //1銆佸皢鐜荤拑淇℃伅闆嗗悎杞负glassid涓簁ey鐨刴ap
+//        Map<String, GlassInfo> glassInfoMap = glassInfos.stream()
+//                .collect(Collectors.toMap(GlassInfo::getGlassId, p -> p));
+//        for (BigStorageCageFeedTask e : taskList) {
+//            GlassInfo info = glassInfoMap.get(e.getGlassId());
+//            if (info == null) {
+//                continue;
+//            }
+//            BigStorageCageDetails cageDetails = new BigStorageCageDetails();
+//            BeanUtils.copyProperties(info, cageDetails);
+//            //todo:2銆佽幏鍙栫洰鏍囨牸瀛愪俊鎭�
+//            BigStorageDTO bigStorageDTO = bigStorageCageDetailsService.queryTargetSlotByTempering(info);
+//            //3銆佷复鏃舵洿鏂版牸瀛愮殑鍓╀綑灏哄锛氶槻姝㈢浉閭荤幓鐠冭繘鍚屼竴鏍煎瓙閫犳垚鍓╀綑灏哄涓嶈冻锛岀幓鐠冭秺鐣岀殑鎯呭喌锛屼换鍔″畬鎴愬悗鍐嶆鏇存柊澶х悊鐗囩琛ㄥ墿浣欏搴︼紙鎸夌収绗煎唴鐜荤拑鏁伴噺鏇存柊澶х悊鐗囩鍓╀綑灏哄锛�
+//            bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, bigStorageDTO.getWidth() - Math.max(info.getWidth(), info.getHeight()) - glassGap)
+//                    .eq(BigStorageCage::getSlot, bigStorageDTO.getSlot()));
+//            //4銆佹洿鏂拌繘鐗囦换鍔¤〃锛岀洰鏍囨牸瀛愬強鐘舵�侊紙鐘舵�佹敼涓�2 鐢垫皵鎵埌鑷澶勭悊锛�  閬囧埌闂锛氭棤娉曟壒閲忔洿鏂帮紝鎵归噺鏇存柊鏃犳硶璧版寚瀹氫粠搴�
+//            e.setTargetSlot(bigStorageDTO.getSlot());
+//            bigStorageCageFeedTaskService.updateById(e);
+//
+//            //5銆佸皢杩涚墖淇℃伅瀛樺叆澶х悊鐗囩璇︽儏琛�
+//            cageDetails.setSlot(bigStorageDTO.getSlot());
+//            cageDetails.setState(Const.GLASS_STATE_NEW);
+//            cageDetails.setDeviceId(bigStorageDTO.getDeviceId());
+//            cageDetails.setGap(glassGap);
+//            bigStorageCageDetailsService.save(cageDetails);
+//
+//        }
+//        return Boolean.TRUE;
+//    }
+    private void sendTaskListToPLC(List<BigStorageCageFeedTask> taskList, Integer line) {
+        log.info("閫佺墖浠诲姟鍙戦�佽繘鐗囩幓鐠冧俊鎭�");
+        S7control s7control = S7object.getinstance().plccontrol;
+        PlcParameterObject plcMesObject = S7object.getinstance().PlcMesObject;
+        String mesD03Address = plcMesObject.getPlcParameter("MESToD03").getAddress();
+        String mesD05Address = plcMesObject.getPlcParameter("MESToD05").getAddress();
+        String outLine = line.equals(Const.A09_OUT_TARGET_POSITION) ? mesD03Address : mesD05Address;
+        for (int i = 1; i <= taskList.size(); i++) {
+            s7control.writeWord(plcMesObject.getPlcParameter("StartAddToImport" + i).getAddress(), taskList.get(i - 1).getLine());
+            s7control.writeWord(plcMesObject.getPlcParameter("TargetAddToImport" + i).getAddress(), taskList.get(i - 1).getTargetSlot());
+            log.info("鍚憄lc鍙戦�佺{}鐗囩幓鐠冨凡瀹屾垚,璧峰浣嶇疆鏄瘂}锛岀洰鏍囦綅缃槸", i, taskList.get(i - 1).getLine(), taskList.get(i - 1).getTargetSlot());
+        }
+        int returnData = 1;
+        int count = 1;
+        while (returnData != 0) {
+            s7control.writeWord(outLine, 2);
+            if (line.equals(Const.A09_OUT_TARGET_POSITION)) {
+                returnData = Integer.parseInt(plcMesObject.getPlcParameter("D03ToMES").getValue());
+            } else {
+                returnData = Integer.parseInt(plcMesObject.getPlcParameter("D05ToMES").getValue());
+            }
+//            returnData = s7control.readWord(outLine, 1).get(0);
+            log.info("宸插悜plc绗瑊}娆″彂閫佽繘鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{},鍐欏叆鐨勫唴瀹逛负{}", count++, outLine, 2);
+        }
+    }
+
+//    /**
+//     * 鍑虹墖涓�娆′粎鐢熸垚涓�杞︾幓鐠�
+//     *
+//     * @param list
+//     * @param isTempering
+//     * @param mesToPLCAddress
+//     * @param <T>
+//     * @return
+//     */
+//    private <T extends BigStorageCageBaseInfo> Boolean computeOutGlassInfo(List<T> list, Boolean isTempering, String mesToPLCAddress) {
+//        //浠诲姟鏁版嵁  鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲�  鐜荤拑闂撮殧
+//        List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>();
+//        //鎵撹溅鍓╀綑灏哄
+//        Integer remainWidth = carWidth;
+//        int maxX = 0;
+//        for (T e : list) {
+//            if (bigStorageCageOutTaskList.size() >= outCarMaxSize || Math.max((int) e.getWidth(), (int) e.getHeight()) > remainWidth) {
+//                break;
+//            }
+//            remainWidth = remainWidth - Math.max((int) e.getWidth(), (int) e.getHeight()) - glassGap;
+//            if (isTempering) {
+//                int minLength = Math.min((int) e.getWidth(), (int) e.getHeight());
+//                if (maxX + minLength <= xMaxSize) {
+//                    bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION,
+//                            e.getWidth() * 10, e.getHeight() * 10, 0, 0, 1, new Date()));
+//                    maxX = Math.max(maxX, e.getXCoordinate());
+//                } else {
+//                    break;
+//                }
+//
+//            } else {
+//                bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
+//                        e.getWidth() * 10, e.getHeight(), 0, 0, 1, new Date()));
+//            }
+//        }
+//        Assert.isFalse(CollectionUtils.isEmpty(bigStorageCageOutTaskList), "鏈幏鍙栧嚭鐗囨暟鎹紝缁撴潫鍑虹墖浠诲姟");
+//        log.info("鑾峰彇鍑虹墖浠诲姟鏁版嵁{}鏉★紝鎵ц淇濆瓨", bigStorageCageOutTaskList.size());
+//        bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
+//        List<String> glassIds = bigStorageCageOutTaskList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
+//        log.info("灏嗗嚭鐗囩幓鐠儃}鐜荤拑鐘舵�佹敼涓哄凡鍑虹墖", glassIds);
+//        bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
+//                .set(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING)
+//                .in(BigStorageCageDetails::getGlassId, glassIds));
+//        int returnData = 0;
+//        int count = 1;
+//        while (returnData == 0) {
+//            S7object.getinstance().plccontrol.writeWord(mesToPLCAddress, 1);
+//            returnData = S7object.getinstance().plccontrol.readWord(mesToPLCAddress, 1).get(0);
+//            log.info("宸插悜plc绗瑊}娆″彂閫佸嚭鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{},鍐欏叆鐨勫唴瀹逛负{}", count++, mesToPLCAddress, returnData);
+//        }
+//        return Boolean.TRUE;
+//    }
+
+//    /**
+//     * 鍑虹墖涓�娆$敓鎴愪竴鐐夌幓鐠�
+//     *
+//     * @param list
+//     * @param isTempering
+//     * @param mesToPLCAddress
+//     * @param <T>
+//     * @return
+//     */
+//    public <T extends BigStorageCageBaseInfo> Boolean computeOutMoreGlassInfo(List<T> list, Boolean isTempering, String mesToPLCAddress) {
+//        //浠诲姟鏁版嵁  鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲�  鐜荤拑闂撮殧
+//        List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>();
+//        //鎵撹溅鍓╀綑灏哄
+//        Integer remainWidth = carWidth;
+//        int trainNumber = 1;
+//        int serialNumber = 1;
+//        int maxX = 0;
+//        for (T e : list) {
+//            int maxLength = Math.max((int) e.getWidth(), (int) e.getHeight());
+//            if (serialNumber > outCarMaxSize || maxLength > remainWidth) {
+//                remainWidth = carWidth;
+//                trainNumber = trainNumber + 1;
+//                serialNumber = 1;
+//                maxX = 0;
+//            }
+//            remainWidth = remainWidth - maxLength - glassGap;
+//            if (isTempering) {
+//                int minLength = Math.min((int) e.getWidth(), (int) e.getHeight());
+//                if (maxX + minLength <= xMaxSize) {
+//                    bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION,
+//                            e.getWidth() * 10, e.getHeight() * 10, trainNumber, serialNumber++, 1, new Date()));
+//                    maxX = Math.max(maxX, e.getXCoordinate());
+//                } else {
+//                    remainWidth = carWidth - maxLength - glassGap;
+//                    trainNumber = trainNumber + 1;
+//                    serialNumber = 1;
+//                    maxX = e.getXCoordinate();
+//                    bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION,
+//                            e.getWidth() * 10, e.getHeight(), trainNumber, serialNumber++, 1, new Date()));
+//                }
+//            } else {
+//                bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
+//                        e.getWidth() * 10, e.getHeight(), trainNumber, serialNumber++, 1, new Date()));
+//            }
+//        }
+//        Assert.isFalse(CollectionUtils.isEmpty(bigStorageCageOutTaskList), "鏈幏鍙栧嚭鐗囨暟鎹紝缁撴潫鍑虹墖浠诲姟");
+//        log.info("鑾峰彇鍑虹墖浠诲姟鏁版嵁{}鏉★紝鎵ц淇濆瓨", bigStorageCageOutTaskList.size());
+//        for (BigStorageCageOutTask bigStorageCageOutTask : bigStorageCageOutTaskList
+//        ) {
+//            bigStorageCageOutTaskService.save(bigStorageCageOutTask);
+//        }
+////        bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
+//        List<String> glassIds = bigStorageCageOutTaskList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
+//        log.info("灏嗗嚭鐗囩幓鐠儃}鐜荤拑鐘舵�佹敼涓哄凡鍑虹墖", glassIds);
+//        bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
+//                .set(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING)
+//                .in(BigStorageCageDetails::getGlassId, glassIds)
+//                .ne(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT));
+//
+//        return Boolean.TRUE;
+//    }
+
+    @Override
+    public BigStorageDTO queryTargetSlotByTempering(GlassInfo glassInfo) {
+        BigStorageDTO bigStorageDTO = null;
+        MPJLambdaWrapper<BigStorageCage> wrapper = new MPJLambdaWrapper<>(BigStorageCage.class)
+                .selectAll(BigStorageCage.class)
+                .leftJoin(BigStorageCageDetails.class, BigStorageCageDetails::getSlot, BigStorageCage::getSlot)
+                .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
+                .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL_ZERO)
+                .eq(BigStorageCageDetails::getEngineerId, glassInfo.getEngineerId())
+                .eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId())
+                .gt(BigStorageCage::getRemainWidth, Math.max(glassInfo.getWidth(), glassInfo.getHeight()))
+                .last("limit 1");
+        if (glassInfo.getTemperingLayoutId() == 0) {
+            wrapper.eq(BigStorageCageDetails::getFlowCardId, glassInfo.getFlowCardId())
+                    .eq(BigStorageCageDetails::getLayer, glassInfo.getLayer());
+//            wrapper.eq(BigStorageCageDetails::getWidth, glassInfo.getWidth()).eq(BigStorageCageDetails::getHeight, glassInfo.getHeight());
+        } else {
+            wrapper.eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() + 1);
+        }
+        BigStorageCage bigStorageCage = bigStorageCageService.selectJoinOne(BigStorageCage.class, wrapper);
+        if (null != bigStorageCage) {
+            log.info("鏃犻挗鍖栫増鍥緄d鎴栨牴鎹綋鍓嶇幓鐠冪墖搴�+1鎵惧埌鐩爣鏍煎瓙锛歿},鐜荤拑id锛歿}", bigStorageCage.getSlot(), glassInfo.getGlassId());
+            bigStorageDTO = new BigStorageDTO();
+            bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
+            bigStorageDTO.setSlot(bigStorageCage.getSlot());
+            bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
+            return bigStorageDTO;
+        }
+        bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
+                .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
+                .eq(BigStorageCage::getRemainWidth, slotWidth)
+//                .notInSql(BigStorageCage::getSlot, "select distinct slot from big_storage_cage_details where state = 0")
+                .inSql(BigStorageCage::getDeviceId,
+                        "select distinct device_id from big_storage_cage_details where engineer_id = '" + glassInfo.getEngineerId() + "' and tempering_layout_id = " + glassInfo.getTemperingLayoutId())
+                .last("limit 1"));
+        if (null != bigStorageCage) {
+            log.info("鏍规嵁鐗堝浘id鎵惧埌绗煎瓙鍐呯殑鐩爣鏍煎瓙锛歿},鐜荤拑id锛歿}", bigStorageCage.getSlot(), glassInfo.getGlassId());
+            bigStorageDTO = new BigStorageDTO();
+            bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
+            bigStorageDTO.setSlot(bigStorageCage.getSlot());
+            bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
+            return bigStorageDTO;
+        }
+
+        //鑾峰彇鐜荤拑鐨勫帤搴︼細閲嶆柊閫夌瀛愰渶瑕佹寜鐓х瀛愬彲鏀剧幓鐠冨帤搴﹁繘琛岄�夋嫨 鍥犱负瀛愭煡璇㈡帓搴忓涓籹ql鏃犲奖鍝嶏紝鎵�浠ュ厛鎵ц瀛愭煡璇㈣幏鍙栭『搴忥紝鐒跺悗涓�娆″幓鏌ヨ
+        List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(glassInfo.getThickness());
+        List<Integer> deviceUseds = bigStorageCageService.queryFreeDeviceByUsed(glassInfo.getThickness());
+        List<BigStorageCageDetails> engineerCount1 = baseMapper.selectList(
+                new LambdaQueryWrapper<BigStorageCageDetails>()
+                        .notIn(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT, Const.GLASS_STATE_DAMAGE, Const.GLASS_STATE_TAKE)
+                        .select(BigStorageCageDetails::getEngineerId)
+                        .groupBy(BigStorageCageDetails::getEngineerId)
+                        .between(BigStorageCageDetails::getDeviceId, 1, 5)
+        );
+        List<BigStorageCageDetails> engineerCount2 = baseMapper.selectList(
+                new LambdaQueryWrapper<BigStorageCageDetails>()
+                        .notIn(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT, Const.GLASS_STATE_DAMAGE, Const.GLASS_STATE_TAKE)
+                        .select(BigStorageCageDetails::getEngineerId)
+                        .groupBy(BigStorageCageDetails::getEngineerId)
+                        .between(BigStorageCageDetails::getDeviceId, 6, 8)
+        );
+        if (engineerCount1.size() > engineerCount2.size()) {
+            deviceUsedList.removeIf(device -> device < 6);
+        } else {
+            deviceUsedList.removeIf(device -> device > 5);
+        }
+        if (CollectionUtils.isEmpty(deviceUsedList)) {
+            deviceUsedList = deviceUseds;
+        }
+        for (Integer item : deviceUsedList) {
+            bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
+                    .eq(BigStorageCage::getRemainWidth, slotWidth)
+                    .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
+                    .eq(BigStorageCage::getDeviceId, item)
+                    .last("limit 1"));
+            if (null != bigStorageCage) {
+                log.info("鎸夌収瀛樼鐜荤拑鏍煎瓙鏁板崰鐢ㄦ渶灏戞柟寮忚幏鍙栦俊鎭牸瀛愪负锛歿},鐜荤拑id锛歿}", bigStorageCage.getSlot(), glassInfo.getGlassId());
+                bigStorageDTO = new BigStorageDTO();
+                bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
+                bigStorageDTO.setSlot(bigStorageCage.getSlot());
+                bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
+                return bigStorageDTO;
+            }
+        }
+
+        //鑾峰彇鐜荤拑鐨勫帤搴︼細閲嶆柊閫夌瀛愰渶瑕佹寜鐓х瀛愬彲鏀剧幓鐠冨帤搴﹁繘琛岄�夋嫨
+//        List<Integer> deviceNotUsedList = bigStorageCageService.queryFreeDeviceByNotUsed(glassInfo.getThickness());
+//        for (Integer item : deviceNotUsedList) {
+//            bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
+//                    .eq(BigStorageCage::getRemainWidth, slotWidth)
+//                    .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
+//                    .eq(BigStorageCage::getDeviceId, item)
+//                    .last("limit 1"));
+//            if (null != bigStorageCage) {
+//                log.info("鎸夌収瀛樼鐜荤拑鏍煎瓙鏁板墿浣欐渶澶氬緱鏂瑰紡鑾峰彇淇℃伅鐗堝浘id:{},鏍煎瓙锛歿},鐜荤拑id锛歿}", glassInfo.getTemperingLayoutId(), bigStorageCage.getSlot(), glassInfo.getGlassId());
+//                bigStorageDTO = new BigStorageDTO();
+//                bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
+//                bigStorageDTO.setSlot(bigStorageCage.getSlot());
+//                bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
+//                return bigStorageDTO;
+//            }
+//        }
+        Assert.isTrue(null != bigStorageCage, "娌℃湁绌轰綑鐨勭瀛愬瓨鏀剧幓鐠�");
+        return bigStorageDTO;
+    }
+
+
+    @Scheduled(fixedDelay = 300)
+    public void querySizeByEngineerTask() {
+        log.info("鏌ヨ缁撴灉锛歿}", querySizeByEngineer("P24072402", 1, 10, 8));
+        log.info("鏌ヨ缁撴灉锛歿}", querySizeByEngineer("P24072402", 1, 5, 8));
+
+    }
+
+    public BigStorageDTO querySizeByEngineer(String engineerId, int temperingLayoutId, int temperingFeedSequence, double thickness) {
+        BigStorageDTO bigStorageDTO = null;
+        BigStorageCage bigStorageCage = null;
+        //鑾峰彇绗煎唴褰撳墠鐗堝浘姣忎釜鏍煎瓙宸叉湁鐜荤拑鐨勬渶灏忕増搴� 鑾峰彇绗煎唴褰撳墠鐗堝浘鐨勬墍鏈夌幓鐠冧俊鎭�
+        List<BigStorageCageDetails> cageDetailsList = bigStorageCageDetailsService.list(new QueryWrapper<BigStorageCageDetails>()
+                .select("slot", "min(tempering_feed_sequence) as tempering_feed_sequence")
+                .eq("engineer_id", engineerId).eq("tempering_layout_id", temperingLayoutId)
+                .in("state", Const.GLASS_STATE_IN_ALL_ZERO).groupBy("slot").orderByAsc("min(tempering_feed_sequence)"));
+        if (CollectionUtils.isNotEmpty(cageDetailsList)) {
+            Integer minLength = cageDetailsList.stream().filter(e -> e.getTemperingFeedSequence() > temperingFeedSequence)
+                    .mapToInt(BigStorageCageDetails::getTemperingFeedSequence).min().orElse(1000);
+            List<GlassInfo> infoList = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>()
+                    .notInSql(GlassInfo::getGlassId, "select glass_id from damage where tempering_layout_id = " + temperingLayoutId + " and engineer_id = '" + engineerId + "'")
+                    .eq(GlassInfo::getTemperingLayoutId, temperingLayoutId).eq(GlassInfo::getEngineerId, engineerId).orderByAsc(GlassInfo::getTemperingFeedSequence));
+            int remainWidth = carWidth;
+            int trainNumber = 1;
+            int serialNumber = 0;
+            int min = 0;
+            int temp = infoList.get(0).getTemperingFeedSequence();
+            int slot = 0;
+            int resultTrainNumber = 0;
+            for (GlassInfo e : infoList) {
+                int maxLength = Math.max((int) e.getWidth(), (int) e.getHeight());
+                if (serialNumber >= outCarMaxSize || maxLength > remainWidth || e.getTemperingFeedSequence() >= minLength) {
+                    if (resultTrainNumber != 0) {
+                        min = temp;
+                        break;
+                    }
+                    temp = e.getTemperingFeedSequence();
+                    remainWidth = carWidth;
+                    trainNumber = trainNumber + 1;
+                    serialNumber = 0;
+                }
+                if (temperingFeedSequence == e.getTemperingFeedSequence()) {
+                    resultTrainNumber = trainNumber;
+                }
+                remainWidth = remainWidth - maxLength - glassGap > 0 ? remainWidth - maxLength - glassGap : 0;
+                serialNumber += 1;
+                log.info("{},{},{}", trainNumber, remainWidth, serialNumber);
+                if (e.getTemperingFeedSequence().equals(infoList.get(infoList.size() - 1).getTemperingFeedSequence())) {
+                    min = temp;
+                }
+            }
+            for (BigStorageCageDetails item : cageDetailsList) {
+                if (min <= item.getTemperingFeedSequence() && item.getTemperingFeedSequence() < minLength) {
+                    slot = item.getSlot();
+                    bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
+                            .eq(BigStorageCage::getSlot, slot).eq(BigStorageCage::getEnableState, Const.SLOT_ON));
+                    break;
+                }
+            }
+        }
+
+        if (bigStorageCage != null) {
+            bigStorageDTO = new BigStorageDTO();
+            bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
+            bigStorageDTO.setSlot(bigStorageCage.getSlot());
+            bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
+            return bigStorageDTO;
+        }
+
+        bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
+                .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
+                .eq(BigStorageCage::getRemainWidth, slotWidth)
+                .inSql(BigStorageCage::getDeviceId,
+                        "select distinct device_id from big_storage_cage_details where engineer_id = '" + engineerId + "' and tempering_layout_id = " + temperingLayoutId)
+                .last("limit 1"));
+        if (null != bigStorageCage) {
+            log.info("鏍规嵁鐗堝浘id鎵惧埌绗煎瓙鍐呯殑鐩爣鏍煎瓙锛歿}", bigStorageCage.getSlot());
+            bigStorageDTO = new BigStorageDTO();
+            bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
+            bigStorageDTO.setSlot(bigStorageCage.getSlot());
+            bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
+            return bigStorageDTO;
+
+        }
+
+        //鑾峰彇鐜荤拑鐨勫帤搴︼細閲嶆柊閫夌瀛愰渶瑕佹寜鐓х瀛愬彲鏀剧幓鐠冨帤搴﹁繘琛岄�夋嫨 鍥犱负瀛愭煡璇㈡帓搴忓涓籹ql鏃犲奖鍝嶏紝鎵�浠ュ厛鎵ц瀛愭煡璇㈣幏鍙栭『搴忥紝鐒跺悗涓�娆″幓鏌ヨ
+        List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(thickness);
+        for (Integer item : deviceUsedList) {
+            bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
+                    .eq(BigStorageCage::getRemainWidth, slotWidth)
+                    .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
+                    .eq(BigStorageCage::getDeviceId, item)
+                    .last("limit 1"));
+            if (null != bigStorageCage) {
+                log.info("鎸夌収瀛樼鐜荤拑鏍煎瓙鏁板崰鐢ㄦ渶灏戞柟寮忚幏鍙栦俊鎭牸瀛愪负锛歿}", bigStorageCage.getSlot());
+                bigStorageDTO = new BigStorageDTO();
+                bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
+                bigStorageDTO.setSlot(bigStorageCage.getSlot());
+                bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
+                return bigStorageDTO;
+            }
+        }
+        Assert.isTrue(null != bigStorageCage, "娌℃湁绌轰綑鐨勭瀛愬瓨鏀剧幓鐠�");
+        return bigStorageDTO;
+    }
+
+
+}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageInTaskMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageInTaskMapper.xml
new file mode 100644
index 0000000..9df1a58
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageInTaskMapper.xml
@@ -0,0 +1,29 @@
+<?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.bigstoragecageIntask.mapper.BigStorageCageInTaskMapper">
+
+    <resultMap id="baseMap" type="com.mes.bigstoragecageIntask.entity.BigStorageCageInTask">
+        <id column="task_running" property="taskRunning"/>
+        <result column="glass_id" property="glassId"/>
+        <result column="start_slot" property="startSlot"/>
+        <result column="target_slot" property="targetSlot"/>
+        <result column="task_state" property="taskState"/>
+    </resultMap>
+
+    <select id="queryTaskMessage" resultMap="baseMap">
+        select *
+        from ${tableName}
+        where glass_id is not null
+           or glass_id = ''
+    </select>
+
+    <update id="updateTaskMessage">
+        UPDATE ${tableName}
+        SET task_running = #{task.taskRunning},
+            glass_id     = #{task.glassId},
+            start_slot   = #{task.startSlot},
+            target_slot  = #{task.targetSlot}
+    </update>
+
+
+</mapper>
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassTask.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassTask.java
index 57118e6..f2d1129 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassTask.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassTask.java
@@ -12,6 +12,8 @@
 import com.mes.opctask.service.LoadGlassDeviceTaskService;
 import com.mes.rawglassdetails.entity.RawGlassStorageDetails;
 import com.mes.rawglassdetails.service.RawGlassStorageDetailsService;
+import com.mes.rawglassstation.entity.RawGlassStorageStation;
+import com.mes.rawglassstation.service.RawGlassStorageStationService;
 import com.mes.rawglasstask.entity.RawGlassStorageTask;
 import com.mes.rawglasstask.service.RawGlassStorageTaskService;
 import com.mes.uppattenusage.entity.UpPattenUsage;
@@ -41,6 +43,8 @@
 
     @Autowired
     private RawGlassStorageTaskService rawGlassStorageTaskService;
+    @Autowired
+    private RawGlassStorageStationService rawGlassStorageStationService;
 
     @Resource
     private EngineeringMapper engineeringMapper;
@@ -67,22 +71,22 @@
 
     @Scheduled(fixedDelay = 1000)
     public void rawStorageTask() throws Exception {
-        ReadWriteEntity requestWord = miloService.readFromOpcUa("A01-CC.dev.request");
-        ReadWriteEntity confireWord = miloService.readFromOpcUa("A01-CC.dev.confirmationWord");
-        ReadWriteEntity reportWord = miloService.readFromOpcUa("A01-CC.dev.reportWord");
-        ReadWriteEntity taskWord = miloService.readFromOpcUa("A01-CC.dev.taskWord");
+        ReadWriteEntity requestWord = miloService.readFromOpcUa("PLC.CC.request");
+        ReadWriteEntity confireWord = miloService.readFromOpcUa("PLC.CC.confirmation");
+        ReadWriteEntity reportWord = miloService.readFromOpcUa("PLC.CC.reportWord");
+        ReadWriteEntity taskWord = miloService.readFromOpcUa("PLC.CC.taskWord");
         String requestValue = requestWord.getValue() + "";
         if ("0".equals(requestValue)) {
             if ("1".equals(confireWord.getValue() + "") && "0".equals(reportWord.getValue() + "")) {
                 List<ReadWriteEntity> list = new ArrayList<>();
-                list.add(generateReadWriteEntity("A01-CC.dev.confirmationWord", 0));
+                list.add(generateReadWriteEntity("PLC.CC.confirmation", 0));
                 miloService.writeToOpcWord(list);
             }
             if ("1".equals(taskWord.getValue() + "")) {
                 List<ReadWriteEntity> list = new ArrayList<>();
-                list.add(generateReadWriteEntity("A01-CC.dev.taskWord", 0));
-                list.add(generateReadWriteEntity("A01-CC.dev.startSlot", 0));
-                list.add(generateReadWriteEntity("A01-CC.dev.endSlot", 0));
+                list.add(generateReadWriteEntity("PLC.CC.taskWord", 0));
+                list.add(generateReadWriteEntity("PLC.CC.startSlot", 0));
+                list.add(generateReadWriteEntity("PLC.CC.endSlot", 0));
                 miloService.writeToOpcWord(list);
             }
             return;
@@ -118,7 +122,7 @@
 
     @Scheduled(fixedDelay = 1000)
     public void rawStorageInCar() throws Exception {
-        ReadWriteEntity entity = miloService.readFromOpcUa("A01-CC.dev.inCar");
+        ReadWriteEntity entity = miloService.readFromOpcUa("PLC.CC.inCar");
         String value = entity.getValue() + "";
         if (!"1".equals(value)) {
             log.info("澶ц溅涓婃病鏈夋灦瀛�");
@@ -138,7 +142,7 @@
 
     @Scheduled(fixedDelay = 1000)
     public void rawStorageFinish() throws Exception {
-        ReadWriteEntity entity = miloService.readFromOpcUa("A01-CC.dev.reportWord");
+        ReadWriteEntity entity = miloService.readFromOpcUa("PLC.CC.reportWord");
         String value = entity.getValue() + "";
         if ("0".equals(value)) {
             log.info("褰撳墠浠诲姟鏈眹鎶ワ紝缁撴潫鏈浠诲姟");
@@ -153,6 +157,7 @@
         RawGlassStorageTask task = rawGlassStorageTaskService.getOne(new LambdaQueryWrapper<RawGlassStorageTask>()
                 .in(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_NEW));
         RawGlassStorageDetails targetDetails = generateDetails(details, task.getEndSlot());
+        int deviceId = details.getDeviceId();
         Integer taskType = task.getTaskType();
         if ("1".equals(value)) {
             log.info("灏嗚鎯呰〃鐨勭姸鎬佹敼涓哄凡鍑哄簱");
@@ -165,6 +170,7 @@
                     .set(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_SUCCESS));
             switch (taskType) {
                 case 1:
+                case 3:
                     log.info("1銆佸叆搴擄紝3銆佽皟搴︿换鍔°�倇}", taskType);
                     if (targetDetails.getRemainQuantity() > 0) {
                         rawGlassStorageDetailsService.save(targetDetails);
@@ -175,6 +181,7 @@
                     log.info("2銆佸嚭鐗�,4銆佸叆搴撹姹傘�倇}", taskType);
                     targetDetails = new RawGlassStorageDetails();
                     targetDetails.setSlot(task.getEndSlot());
+                    targetDetails.setDeviceId(deviceId);
                     targetDetails.setShelf(task.getStartSlot());
                     targetDetails.setState(Const.RAW_GLASS_STATE_IN);
                     rawGlassStorageDetailsService.save(targetDetails);
@@ -200,7 +207,7 @@
 
         }
         List<ReadWriteEntity> list = new ArrayList<>();
-        list.add(generateReadWriteEntity("A01-CC.dev.confirmationWord", 1));
+        list.add(generateReadWriteEntity("PLC.CC.confirmation", 1));
         miloService.writeToOpcWord(list);
     }
 
@@ -259,10 +266,10 @@
         rawGlassStorageDetailsService.generateTask(startSlot, lefting, startSlot, rawGlassList.get(0).getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_OUT);
 
 //        List<ReadWriteEntity> list = new ArrayList<>();
-//        list.add(generateReadWriteEntity("A01-CC.dev.taskWord", 1));
-//        list.add(generateReadWriteEntity("A01-CC.dev.taskSending", 1));
-//        list.add(generateReadWriteEntity("A01-CC.dev.startSlot", startSlot));
-//        list.add(generateReadWriteEntity("A01-CC.dev.endSlot", lefting));
+//        list.add(generateReadWriteEntity("PLC.CC.taskWord", 1));
+//        list.add(generateReadWriteEntity("PLC.CC.taskSending", 1));
+//        list.add(generateReadWriteEntity("PLC.CC.startSlot", startSlot));
+//        list.add(generateReadWriteEntity("PLC.CC.endSlot", lefting));
 //        miloService.writeToOpcWord(list);
 
         //淇敼鍑虹墖浠诲姟鐘舵��
@@ -293,10 +300,10 @@
         rawGlassStorageDetailsService.generateTask(details.getSlot(), details.getShelf(), details.getShelf(),
                 details.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_IN);
 //        List<ReadWriteEntity> list = new ArrayList<>();
-//        list.add(generateReadWriteEntity("A01-CC.dev.taskWord", 1));
-//        list.add(generateReadWriteEntity("A01-CC.dev.taskSending", 1));
-//        list.add(generateReadWriteEntity("A01-CC.dev.startSlot", details.getSlot()));
-//        list.add(generateReadWriteEntity("A01-CC.dev.endSlot", details.getShelf()));
+//        list.add(generateReadWriteEntity("PLC.CC.taskWord", 1));
+//        list.add(generateReadWriteEntity("PLC.CC.taskSending", 1));
+//        list.add(generateReadWriteEntity("PLC.CC.startSlot", details.getSlot()));
+//        list.add(generateReadWriteEntity("PLC.CC.endSlot", details.getShelf()));
 //        miloService.writeToOpcWord(list);
         //鐢熸垚宸ヤ綅浠诲姟锛屽皢鍚婅浣嶇殑鐜荤拑鐘舵�佹敼浣嶈繘绗间腑
         //淇敼鍚婅浣嶇殑鍘熺墖鐘舵�佷负103 鍑虹墖涓�
@@ -327,14 +334,48 @@
         List<UpPattenUsageVO> usageVOS = upListMap.get("1");
         //鑾峰彇褰撳墠涓婄墖浣�1鍙锋灦瀛愪俊鎭�
         List<Integer> loadStation = LOAD_GLASS_ONE_DEVICE.equals(stationCell) ? LOAD_STATION_01 : LOAD_STATION_02;
+        List<RawGlassStorageStation> stations = rawGlassStorageStationService.list(new LambdaQueryWrapper<RawGlassStorageStation>()
+                .in(RawGlassStorageStation::getSlot, loadStation)
+                .eq(RawGlassStorageStation::getEnableState, Const.SLOT_ON).orderByAsc(RawGlassStorageStation::getSlot));
+        if (CollectionUtils.isEmpty(stations)) {
+            log.info("娌℃湁鍙敤鐨勪笂鐗囦綅");
+            return Boolean.FALSE;
+        }
+
 
         List<RawGlassStorageDetails> loadStationList = rawGlassStorageDetailsService.list(new LambdaQueryWrapper<RawGlassStorageDetails>()
                 .inSql(RawGlassStorageDetails::getSlot, "select slot from raw_glass_storage_station where enable_state = 1")
                 .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
                 .eq(RawGlassStorageDetails::getDeviceId, stationCell));
+        if (stations.size() == 1) {
+            if (CollectionUtils.isEmpty(loadStationList)) {
+                RawGlassStorageDetails rawDetails = getRawGlassStorageDetailsBySize(usageVOS.get(0), usageVOS.size());
+                rawGlassStorageDetailsService.generateTask(rawDetails.getSlot(), stations.get(0).getSlot(), rawDetails.getShelf(), rawDetails.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH);
+                //缁撴潫璋冨害浠诲姟 淇敼宸ヤ綅鐘舵��(璧峰浣嶏級鐘舵�佷负103 RAW_GLASS_STATE_RUNNING 浠诲姟瀹屾垚鍚庡皢鐘舵�佹敼涓�101  鐩爣浣嶆柊澧炰竴鏉℃暟鎹紝鏋跺瓙鍙蜂负锛堣捣濮嬩綅锛�
+                rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
+                        .eq(RawGlassStorageDetails::getSlot, rawDetails.getSlot()).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
+                        .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING));
+                return Boolean.TRUE;
+            }
+            RawGlassStorageDetails oneLoadStation = loadStationList.get(0);
+            if (oneLoadStation.getRemainQuantity() <= 0 || !compareRawSize(usageVOS.get(0), oneLoadStation)) {
+                rawGlassStorageDetailsService.generateTask(stations.get(0).getSlot(), oneLoadStation.getShelf(), oneLoadStation.getShelf(), oneLoadStation.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH);
+                rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
+                        .eq(RawGlassStorageDetails::getSlot, oneLoadStation.getSlot()).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
+                        .set(RawGlassStorageDetails::getDeviceId, Const.RAW_GLASS_STATE_RUNNING));
+                return Boolean.FALSE;
+            }
+        }
+
         log.info("鑾峰彇{}涓婄墖绾跨殑宸ヤ綅淇℃伅{}", stationCell, loadStationList);
         if (CollectionUtils.isEmpty(loadStationList)) {
             log.info("1鍙蜂笂鐗囦綅鐢熸垚璋冨害浠诲姟");
+            RawGlassStorageDetails rawDetails = getRawGlassStorageDetailsBySize(usageVOS.get(0), usageVOS.size());
+            rawGlassStorageDetailsService.generateTask(rawDetails.getSlot(), loadStation.get(0), rawDetails.getShelf(), rawDetails.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH);
+            //缁撴潫璋冨害浠诲姟 淇敼宸ヤ綅鐘舵��(璧峰浣嶏級鐘舵�佷负103 RAW_GLASS_STATE_RUNNING 浠诲姟瀹屾垚鍚庡皢鐘舵�佹敼涓�101  鐩爣浣嶆柊澧炰竴鏉℃暟鎹紝鏋跺瓙鍙蜂负锛堣捣濮嬩綅锛�
+            rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
+                    .eq(RawGlassStorageDetails::getSlot, rawDetails.getSlot()).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
+                    .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING));
             return Boolean.TRUE;
         }
         RawGlassStorageDetails oneLoadStation = loadStationList.stream().filter(e -> e.getSlot().equals(loadStation.get(0))).findFirst().orElse(null);
@@ -389,11 +430,15 @@
                             rawDetails = getRawGlassStorageDetailsBySize(usageVOS.get(0), usageVOS.size());
 
                         }
+                        if (null == rawDetails) {
+                            log.info("鍘熺墖浠撳偍娌℃湁鐩稿悓灏哄鐨勭幓鐠�");
+                            return Boolean.FALSE;
+                        }
                         rawGlassStorageDetailsService.generateTask(rawDetails.getSlot(), loadStation.get(1), rawDetails.getShelf(), rawDetails.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH);
                         //缁撴潫璋冨害浠诲姟 淇敼宸ヤ綅鐘舵��(璧峰浣嶏級鐘舵�佷负103 RAW_GLASS_STATE_RUNNING 浠诲姟瀹屾垚鍚庡皢鐘舵�佹敼涓�101  鐩爣浣嶆柊澧炰竴鏉℃暟鎹紝鏋跺瓙鍙蜂负锛堣捣濮嬩綅锛�
                         rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                                 .eq(RawGlassStorageDetails::getSlot, rawDetails.getSlot()).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
-                                .set(RawGlassStorageDetails::getDeviceId, Const.RAW_GLASS_STATE_RUNNING));
+                                .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING));
                         return Boolean.TRUE;
                     } else {
                         //todo:褰撲簩鍙蜂负鐨勫昂瀵稿ぇ浜�0鏃讹紝鏄惁鎵ц璋冨害浠诲姟锛屾洿鎹㈠綋鍓嶅師鐗囩殑灏哄锛岀瓑寰呬笅涓�娆′换鍔$殑鐩存帴鎵ц锛涜繕鏄户缁瓑寰咃紝褰撳昂瀵镐笉涓�鏍凤紝绛夊緟涓�鍙峰伐浣嶇殑杩涘嚭搴撹皟搴︿换鍔°��
@@ -417,7 +462,7 @@
                                 //缁撴潫璋冨害浠诲姟 淇敼宸ヤ綅鐘舵��(璧峰浣嶏級鐘舵�佷负103 RAW_GLASS_STATE_RUNNING 浠诲姟瀹屾垚鍚庡皢鐘舵�佹敼涓�101  鐩爣浣嶆柊澧炰竴鏉℃暟鎹紝鏋跺瓙鍙蜂负锛堣捣濮嬩綅锛�
                                 rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                                         .eq(RawGlassStorageDetails::getSlot, loadStation.get(1)).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
-                                        .set(RawGlassStorageDetails::getDeviceId, Const.RAW_GLASS_STATE_RUNNING));
+                                        .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING));
                                 return Boolean.TRUE;
                             }
                         } else {
@@ -426,7 +471,7 @@
                             //缁撴潫璋冨害浠诲姟 淇敼宸ヤ綅鐘舵��(璧峰浣嶏級鐘舵�佷负103 RAW_GLASS_STATE_RUNNING 浠诲姟瀹屾垚鍚庡皢鐘舵�佹敼涓�101  鐩爣浣嶆柊澧炰竴鏉℃暟鎹紝鏋跺瓙鍙蜂负锛堣捣濮嬩綅锛�
                             rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                                     .eq(RawGlassStorageDetails::getSlot, loadStation.get(1)).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
-                                    .set(RawGlassStorageDetails::getDeviceId, Const.RAW_GLASS_STATE_RUNNING));
+                                    .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING));
                             return Boolean.TRUE;
                         }
                     }
@@ -436,7 +481,7 @@
                     rawGlassStorageDetailsService.generateTask(loadStation.get(0), oneLoadStation.getShelf(), oneLoadStation.getShelf(), oneLoadStation.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH);
                     rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                             .eq(RawGlassStorageDetails::getSlot, loadStation.get(0)).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
-                            .set(RawGlassStorageDetails::getDeviceId, Const.RAW_GLASS_STATE_RUNNING));
+                            .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING));
                     return Boolean.TRUE;
                 }
             } else {
@@ -444,16 +489,17 @@
                 rawGlassStorageDetailsService.generateTask(loadStation.get(0), oneLoadStation.getSlot(), oneLoadStation.getShelf(), oneLoadStation.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH);
                 rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                         .eq(RawGlassStorageDetails::getSlot, loadStation.get(0)).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
-                        .set(RawGlassStorageDetails::getDeviceId, Const.RAW_GLASS_STATE_RUNNING));
+                        .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING));
                 return Boolean.TRUE;
             }
         }
     }
 
     private RawGlassStorageDetails generateDetails(RawGlassStorageDetails details, Integer targetSlot) {
-
         RawGlassStorageDetails targetDetails = new RawGlassStorageDetails();
-//        details.setDeviceId();
+        RawGlassStorageStation station = rawGlassStorageStationService.getOne(new LambdaQueryWrapper<RawGlassStorageStation>()
+                .eq(RawGlassStorageStation::getSlot, targetSlot));
+        targetDetails.setDeviceId(station.getDeviceId());
         targetDetails.setSlot(targetSlot);
         targetDetails.setShelf(details.getShelf());
         targetDetails.setPatternWidth(details.getPatternWidth());
@@ -480,6 +526,7 @@
                 .eq(RawGlassStorageDetails::getPatternWidth, usageVO.getWidth())
                 .eq(RawGlassStorageDetails::getPatternHeight, usageVO.getHeight())
                 .eq(RawGlassStorageDetails::getPatternThickness, usageVO.getThickness())
+                .eq(RawGlassStorageDetails::getState, Const.GLASS_STATE_IN)
                 .orderByAsc(RawGlassStorageDetails::getRemainQuantity)
                 .last("order by abs(t.remain_quantity - " + remainQuantity + ")  asc")
                 .last("limit 1"));
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-dev.yml b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-dev.yml
index 3097382..3aa2164 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-dev.yml
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-dev.yml
@@ -5,7 +5,7 @@
       strict: false #璁剧疆涓ユ牸妯″紡,榛樿false涓嶅惎鍔�. 鍚姩鍚庡湪鏈尮閰嶅埌鎸囧畾鏁版嵁婧愭椂鍊欏洖鎶涘嚭寮傚父,涓嶅惎鍔ㄤ細浣跨敤榛樿鏁版嵁婧�.
       datasource:
         hangzhoumes:
-          url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8
+          url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8&allowMultiQueries=true
           username: root
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
@@ -14,6 +14,9 @@
           username: sa
           password: beibo.123/
           driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+      druid:
+        wall:
+          multi-statement-allow: true
   cloud:
     nacos:
       discovery:
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java
index 8229684..6782761 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java
@@ -95,6 +95,10 @@
         }
         //浠诲姟鏆傚仠
         LoadGlassDeviceTask task = loadGlassDeviceTaskService.queryTaskMessage(tableName);
+        if (0 == task.getInkageState()) {
+            log.info("{}涓婄墖绾匡紝澶勪簬绂荤嚎鐘舵�侊細{}锛岀粨鏉熸湰鍦颁笂鐗囪姹�", deviceId, task.getInkageState());
+            return;
+        }
         if (task.getTaskRunning().equals(Const.ENGINEERING_RUNNING)) {
             log.info("{}涓婄墖绾匡紝鏈夋鍦ㄦ墽琛岀殑浠诲姟锛岀粨鏉熸湰鍦颁笂鐗囪姹�", deviceId);
             return;
@@ -177,11 +181,12 @@
                 .setSql("remain_quantity = remain_quantity - " + (finishCount + damageCount)));
         //鏇存柊宸ョ▼涓嬬殑鍘熺墖鏁伴噺 todo:sql寰呬紭鍖�
 
-        List<Integer> ids = upPattenUsageMapper.queryFinishByEngineering(deviceId, finishCount);
-        upPattenUsageMapper.update(null, new LambdaUpdateWrapper<UpPattenUsage>()
-                .in(UpPattenUsage::getId, ids)
-                .set(UpPattenUsage::getState, Const.LOAD_RAW_GLASS_SUCCESS));
-
+        if (finishCount > 0) {
+            List<Integer> ids = upPattenUsageMapper.queryFinishByEngineering(deviceId, finishCount);
+            upPattenUsageMapper.update(null, new LambdaUpdateWrapper<UpPattenUsage>()
+                    .in(UpPattenUsage::getId, ids)
+                    .set(UpPattenUsage::getState, Const.LOAD_RAW_GLASS_SUCCESS));
+        }
         //todo:浠诲姟琛ㄦ暟鎹儏鍐�
         task.setTaskRunning(0);
         task.setTotalCount(0);
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml
index 214b3b3..571c726 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml
@@ -5,7 +5,7 @@
       strict: false #璁剧疆涓ユ牸妯″紡,榛樿false涓嶅惎鍔�. 鍚姩鍚庡湪鏈尮閰嶅埌鎸囧畾鏁版嵁婧愭椂鍊欏洖鎶涘嚭寮傚父,涓嶅惎鍔ㄤ細浣跨敤榛樿鏁版嵁婧�.
       datasource:
         hangzhoumes:
-          url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8
+          url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8&allowMultiQueries=true
           username: root
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/mapper/LoadGlassDeviceTaskMapper.xml b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/mapper/LoadGlassDeviceTaskMapper.xml
index 4f11622..2cdaece 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/mapper/LoadGlassDeviceTaskMapper.xml
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/mapper/LoadGlassDeviceTaskMapper.xml
@@ -8,6 +8,7 @@
         <result column="raw_glass_height" property="rawGlassHeight"/>
         <result column="slot" property="slot"/>
         <result column="task_state" property="taskState"/>
+        <result column="inkage_state" property="inkageState"/>
         <result column="create_time" property="createTime"/>
         <result column="update_time" property="updateTime"/>
         <result column="total_count" property="totalCount"/>
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/changelog/ywChangelog.sql b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/changelog/ywChangelog.sql
index 5892857..a67b7f8 100644
--- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/changelog/ywChangelog.sql
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/changelog/ywChangelog.sql
@@ -9,17 +9,14 @@
     glass_id_in  varchar(20)        DEFAULT NULL COMMENT '杩涚墖鐜荤拑id',
     glass_id_out varchar(20)        DEFAULT NULL COMMENT '鍑虹墖鐜荤拑id',
     glass_id     varchar(20)        DEFAULT NULL COMMENT '纾ㄨ竟鍓嶇幓鐠僫d',
+    in_place     int                DEFAULT 0 COMMENT '灏变綅淇″彿',
     current_cell int                DEFAULT '0' COMMENT '褰撳墠灞傚彿',
     start_cell   int                DEFAULT '0' COMMENT '灞傚彿',
     end_cell     int                DEFAULT NULL COMMENT '棰勭暀灞傚彿',
     task_state   int                DEFAULT NULL COMMENT '浠诲姟鐘舵�� 0榛樿绌轰换鍔� 1鎵ц涓� 2缁撴潫浠诲姟',
     task_type    int                DEFAULT NULL COMMENT '浠诲姟绫诲瀷',
     create_time  timestamp NULL     DEFAULT CURRENT_TIMESTAMP COMMENT '鍒涘缓鏃堕棿',
-    update_time  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '鏇存柊鏃堕棿',
-    width        int                DEFAULT NULL COMMENT '瀹�',
-    height       int                DEFAULT NULL COMMENT '楂�',
-    thickness    int                DEFAULT NULL COMMENT '鍘�',
-    film_remove  int                DEFAULT NULL COMMENT '鏄惁闄よ啘'
+    update_time  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '鏇存柊鏃堕棿'
 );
 -- rollback DROP TABLE edg_storage_device_one_task;
 
@@ -27,9 +24,10 @@
 -- changeset zsh:20241107002
 -- preconditions onFail:CONTINUE onError:CONTINUE
 -- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM edg_storage_device_one_task;
-INSERT INTO edg_storage_device_one_task (task_running, glass_id, glass_id_in, glass_id_out, current_cell, start_cell,
-                                         end_cell, task_state, task_type, width, height, thickness, film_remove)
-VALUES (0, NULL, NULL, NULL, 1, 0, NULL, 0, NULL, 0, 0, 0, 0);
+INSERT INTO edg_storage_device_one_task (task_running, glass_id, in_place, glass_id_in, glass_id_out, current_cell,
+                                         start_cell,
+                                         end_cell, task_state, task_type)
+VALUES (0, NULL, 0, NULL, NULL, 1, 0, NULL, 0, NULL, 0, 0, 0, 0);
 
 
 -- changeset zsh:20241107003
@@ -41,26 +39,24 @@
     glass_id_in  varchar(20)        DEFAULT NULL COMMENT '杩涚墖鐜荤拑id',
     glass_id_out varchar(20)        DEFAULT NULL COMMENT '鍑虹墖鐜荤拑id',
     glass_id     varchar(20)        DEFAULT NULL COMMENT '纾ㄨ竟鍓嶇幓鐠僫d',
+    in_place     int                DEFAULT 0 COMMENT '灏变綅淇″彿',
     current_cell int                DEFAULT '0' COMMENT '褰撳墠灞傚彿',
     start_cell   int                DEFAULT '0' COMMENT '灞傚彿',
     end_cell     int                DEFAULT NULL COMMENT '棰勭暀灞傚彿',
     task_state   int                DEFAULT NULL COMMENT '浠诲姟鐘舵�� 0榛樿绌轰换鍔� 1鎵ц涓� 2缁撴潫浠诲姟',
     task_type    int                DEFAULT NULL COMMENT '浠诲姟绫诲瀷',
     create_time  timestamp NULL     DEFAULT CURRENT_TIMESTAMP COMMENT '鍒涘缓鏃堕棿',
-    update_time  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '鏇存柊鏃堕棿',
-    width        int                DEFAULT NULL COMMENT '瀹�',
-    height       int                DEFAULT NULL COMMENT '楂�',
-    thickness    int                DEFAULT NULL COMMENT '鍘�',
-    film_remove  int                DEFAULT NULL COMMENT '鏄惁闄よ啘'
+    update_time  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '鏇存柊鏃堕棿'
 );
 -- rollback DROP TABLE edg_storage_device_two_task;
 
 -- changeset zsh:20241107004
 -- preconditions onFail:CONTINUE onError:CONTINUE
 -- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM edg_storage_device_two_task;
-INSERT INTO edg_storage_device_two_task (task_running, glass_id, glass_id_in, glass_id_out, current_cell, start_cell,
-                                         end_cell, task_state, task_type, width, height, thickness, film_remove)
-VALUES (0, NULL, NULL, NULL, 1, 0, NULL, 0, NULL, 0, 0, 0, 0);
+INSERT INTO edg_storage_device_two_task (task_running, glass_id, in_place, glass_id_in, glass_id_out, current_cell,
+                                         start_cell,
+                                         end_cell, task_state, task_type)
+VALUES (0, NULL, 0, NULL, NULL, 1, 0, NULL, 0, NULL, 0, 0, 0, 0);
 
 
 
@@ -72,6 +68,8 @@
     id           bigint    NOT NULL AUTO_INCREMENT COMMENT '宸ョ▼琛╥d',
     glass_id_in  varchar(20)        DEFAULT NULL COMMENT '杩涚墖鐜荤拑id',
     glass_id_out varchar(20)        DEFAULT NULL COMMENT '鍑虹墖鐜荤拑id',
+    glass_id     varchar(20)        DEFAULT NULL COMMENT '纾ㄨ竟鍓嶇幓鐠僫d',
+    in_place     int                DEFAULT 0 COMMENT '灏变綅淇″彿',
     current_cell int                DEFAULT '0' COMMENT '褰撳墠灞傚彿',
     start_cell   int                DEFAULT '0' COMMENT '灞傚彿',
     end_cell     int                DEFAULT NULL COMMENT '棰勭暀灞傚彿',
@@ -108,6 +106,7 @@
     raw_glass_width  int                DEFAULT '0' COMMENT '鍘熺墖瀹�',
     raw_glass_height int                DEFAULT '0' COMMENT '鍘熺墖楂�',
     slot             int                DEFAULT '0' COMMENT '涓婄墖浣嶇紪鍙�',
+    inkage_state     int                DEFAULT '0' COMMENT '鑱旀満鐘舵��',
     task_state       int                DEFAULT NULL COMMENT '浠诲姟鐘舵�� 0榛樿绌轰换鍔� 1鎵ц涓� 2缁撴潫浠诲姟',
     create_time      timestamp NULL     DEFAULT CURRENT_TIMESTAMP COMMENT '鍒涘缓鏃堕棿',
     update_time      timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '鏇存柊鏃堕棿',
@@ -120,9 +119,9 @@
 -- changeset zsh:20241107008
 -- preconditions onFail:CONTINUE onError:CONTINUE
 -- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM load_glass_device_one_task;
-INSERT INTO load_glass_device_one_task (task_running, raw_glass_width, raw_glass_height, slot, task_state, total_count,
-                                        finish_count, damage_count)
-VALUES (0, 0, 0, 0, 0, 0, 0, 0);
+INSERT INTO load_glass_device_one_task (task_running, raw_glass_width, raw_glass_height, slot, inkage_state, task_state,
+                                        total_count, finish_count, damage_count)
+VALUES (0, 0, 0, 0, 0, 0, 0, 0, 0);
 
 -- changeset zsh:20241107009
 -- preconditions onFail:CONTINUE onError:CONTINUE
@@ -133,6 +132,7 @@
     raw_glass_width  int                DEFAULT '0' COMMENT '鍘熺墖瀹�',
     raw_glass_height int                DEFAULT '0' COMMENT '鍘熺墖楂�',
     slot             int                DEFAULT '0' COMMENT '涓婄墖浣嶇紪鍙�',
+    inkage_state     int                DEFAULT '0' COMMENT '鑱旀満鐘舵��',
     task_state       int                DEFAULT NULL COMMENT '浠诲姟鐘舵�� 0榛樿绌轰换鍔� 1鎵ц涓� 2缁撴潫浠诲姟',
     create_time      timestamp NULL     DEFAULT CURRENT_TIMESTAMP COMMENT '鍒涘缓鏃堕棿',
     update_time      timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '鏇存柊鏃堕棿',
@@ -145,9 +145,9 @@
 -- changeset zsh:20241107010
 -- preconditions onFail:CONTINUE onError:CONTINUE
 -- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM load_glass_device_two_task;
-INSERT INTO load_glass_device_two_task (task_running, raw_glass_width, raw_glass_height, slot, task_state, total_count,
-                                        finish_count, damage_count)
-VALUES (0, 0, 0, 0, 0, 0, 0, 0);
+INSERT INTO load_glass_device_two_task (task_running, raw_glass_width, raw_glass_height, slot, inkage_state, task_state,
+                                        total_count, finish_count, damage_count)
+VALUES (0, 0, 0, 0, 0, 0, 0, 0, 0);
 
 
 -- changeset zsh:20241107011
@@ -161,6 +161,7 @@
     raw_glass_height int                DEFAULT '0' COMMENT '鍘熺墖楂�',
     station          int                DEFAULT '0' COMMENT '涓婄墖璁惧缂栧彿',
     slot             int                DEFAULT '0' COMMENT '涓婄墖浣嶇紪鍙�',
+    inkage_state     int                DEFAULT '0' COMMENT '鑱旀満鐘舵��',
     task_state       int                DEFAULT NULL COMMENT '浠诲姟鐘舵�� 0榛樿绌轰换鍔� 1鎵ц涓� 2缁撴潫浠诲姟',
     create_time      timestamp NULL     DEFAULT CURRENT_TIMESTAMP COMMENT '鍒涘缓鏃堕棿',
     update_time      timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '鏇存柊鏃堕棿',

--
Gitblit v1.8.0