From ca1ae93196be366e707647c42e3039512a2cf45f Mon Sep 17 00:00:00 2001
From: wu <731351411@qq.com>
Date: 星期二, 12 十一月 2024 14:00:24 +0800
Subject: [PATCH] 字段显示,结束任务功能更新,界面调整,测量显示

---
 springboot-vue3/src/main/java/com/example/springboot/mapper/AlbaniaMapper.java       |   10 
 springboot-vue3/src/main/java/com/example/springboot/mapper/QueueMapper.java         |    3 
 Albania_Mes-ui/src/lang/locales/en-US.json                                           |    1 
 Albania_Mes-ui/src/views/home/index.vue                                              |  152 ++++++++++++++--
 springboot-vue3/src/main/java/com/example/springboot/component/PlcHoldNew.java       |   36 ++-
 springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java          |   11 
 springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java          |   20 +
 springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java  |    5 
 springboot-vue3/src/main/java/com/example/springboot/mapper/GlassInfoMapper.java     |    2 
 springboot-vue3/src/main/java/com/example/springboot/service/StorageCageService.java |   94 +++++++---
 Albania_Mes-ui/src/api/home.js                                                       |    7 
 Albania_Mes-ui/src/lang/locales/zh-CN.json                                           |    1 
 springboot-vue3/src/main/java/com/example/springboot/component/PLCAutoMes.java       |    2 
 springboot-vue3/src/main/java/com/example/springboot/service/SpianServiceNew.java    |  188 ++++++++++++++------
 14 files changed, 400 insertions(+), 132 deletions(-)

diff --git a/Albania_Mes-ui/src/api/home.js b/Albania_Mes-ui/src/api/home.js
index 440cffd..2cdcf17 100644
--- a/Albania_Mes-ui/src/api/home.js
+++ b/Albania_Mes-ui/src/api/home.js
@@ -332,6 +332,13 @@
         data:""
     })
 }
+export function TerminateTask(id) {
+    return request({
+        url: '/home/TerminateTask?id='+id,
+        method: 'post',
+        data:""
+    })
+}
 
 export function SelectGlassInfo(width,height,thickness,films) {
     return request({
diff --git a/Albania_Mes-ui/src/lang/locales/en-US.json b/Albania_Mes-ui/src/lang/locales/en-US.json
index 3989053..aa863fe 100644
--- a/Albania_Mes-ui/src/lang/locales/en-US.json
+++ b/Albania_Mes-ui/src/lang/locales/en-US.json
@@ -302,6 +302,7 @@
   "Width":"Width",
   "Operate":"Operate",
   "Terminate Task":"Terminate Task",
+  "Terminate":"Terminate",
   "cancel":"cancel",
   "confirm":"confirm",
   "Number":"Number",
diff --git a/Albania_Mes-ui/src/lang/locales/zh-CN.json b/Albania_Mes-ui/src/lang/locales/zh-CN.json
index 559a1bb..5484d3f 100644
--- a/Albania_Mes-ui/src/lang/locales/zh-CN.json
+++ b/Albania_Mes-ui/src/lang/locales/zh-CN.json
@@ -286,6 +286,7 @@
   "Width": "瀹�",
   "Operate": "鎿嶄綔",
   "Terminate Task":"缁撴潫浠诲姟",
+  "Terminate":"缁撴潫",
   "end task": "瀹屾垚浠诲姟",
   "Number": "鏁伴噺",
   "Outfeed glass barcode": "鍑虹墖鐜荤拑id",
diff --git a/Albania_Mes-ui/src/views/home/index.vue b/Albania_Mes-ui/src/views/home/index.vue
index c873062..c7389e0 100644
--- a/Albania_Mes-ui/src/views/home/index.vue
+++ b/Albania_Mes-ui/src/views/home/index.vue
@@ -220,6 +220,8 @@
 
 .el-table .cell {
     display: flex;
+    /* height: 30px; 
+    line-height: 30px; */
 }
 
 .device {
@@ -332,6 +334,14 @@
     font-weight: bold;
     text-align: center;
 }
+.el-table .el-table__body-wrapper tr {
+  height: 40px;  /* 璁剧疆姣忚鐨勯珮搴︿负 30px */
+  line-height: 30px;
+}
+
+.el-table .el-table__body-wrapper td {
+    /* 纭繚鍗曞厓鏍煎唴瀹瑰瀭鐩村眳涓� */
+}
 </style>
 <template>
     <el-container>
@@ -368,6 +378,9 @@
                 <el-button type="primary" @click="showform(4)" :disabled="SoftEmergencyStopState" style="z-index: 999;"
                     :class="SoftEmergencyStopState == true ? 'hide' : ''">
                     {{ $t('Task queue') }}</el-button>
+                    <el-button type="primary" @click="showform(5)" :disabled="SoftEmergencyStopState" style="z-index: 999;"
+                    :class="SoftEmergencyStopState == true ? 'hide' : ''">
+                    {{ $t('Outing Queue') }}</el-button>
 
             </div>
             <div style="display: flex;align-items: center;overflow: hidden;">
@@ -444,10 +457,12 @@
                         <el-table-column prop="storageCage.glassHeight" :label="$t('Height')"></el-table-column>
                         <el-table-column prop="storageCage.thickness" :label="$t('Thickness')"></el-table-column>
                         <el-table-column prop="storageCage.films" :label="$t('Films')"></el-table-column>
-                        <el-table-column :min-width="100" :label="$t('Terminate Task')">
+                        <el-table-column :min-width="120" :label="$t('Terminate Task')">
                             <template slot-scope='scope'>
                                 <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                                     @click="FinishTask(scope.row.id)">{{ $t('Complete') }}</el-button>
+                                    <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
+                                    @click="TerminateTask(scope.row.id)">{{ $t('Terminate') }}</el-button>
                             </template>
                         </el-table-column>
                     </el-table>
@@ -460,10 +475,12 @@
                         <el-table-column prop="storageCage.thickness" :label="$t('Thickness')"></el-table-column>
                         <el-table-column prop="storageCage.films" :label="$t('Films')"></el-table-column>
 
-                        <el-table-column :min-width="100" :label="$t('Terminate Task')">
+                        <el-table-column :min-width="120" :label="$t('Terminate Task')">
                             <template slot-scope='scope'>
                                 <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                                     @click="FinishTask(scope.row.id)">{{ $t('Complete') }}</el-button>
+                                    <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
+                                    @click="TerminateTask(scope.row.id)">{{ $t('Terminate') }}</el-button>
                             </template>
                         </el-table-column>
                     </el-table>
@@ -509,12 +526,12 @@
 
         <el-dialog :visible.sync="Measure" :title="$t('Measure')" top="5vh"><!--娴嬮噺椤甸潰-->
             <!--娴嬮噺椤甸潰涓讳綋-->
-            <div style="height: 800px;">
+            <div style="height: 760px;">
                 <!--鍔熻兘-->
                 <div>
-                    <el-button type="primary" @click="ManualMatching()" :disabled="(this.LastQueue.state > 1)"
+                    <el-button type="primary" @click="ManualMatching()" :disabled="(this.LastQueue.state > 0)"
                         style="z-index: 999;">{{ $t('Manual matching') }}</el-button>
-                    <el-button type="primary" @click="ManualTake()" :disabled="(this.LastQueue.state > 1)"
+                    <el-button type="primary" @click="ManualTake()" :disabled="(this.LastQueue.state > 0)"
                         style="z-index: 999;">{{
                 $t('Manual removal') }}</el-button> 
                     <el-button type="primary" @click="AnewMeasure()" 
@@ -541,21 +558,20 @@
                 </div>
                 <br>
                 <!--鏄剧ず-->
-                <div style="width:1000px;height: 720px;border: 2px solid #d1d1d1;float: left;">
+                <div style="width:900px;height: 720px;border: 2px solid #d1d1d1;float: left;">
                     <!--鐜荤拑鍥�  #81b337-->
-                    <div
-                        :style="'top:10px;bottom: 10px;left: 10px;right: 10px;margin:' + ((720 - (this.LastQueue.glassheight / 25 * 7)) / 2) + 'px auto;width:'
+                    <div :style="'top:10px;bottom: 10px;left: 10px;right: 10px;margin:' 
+                            + ((720 - (this.LastQueue.glassheight / 25 * 7)) / 2) + 'px auto;width:'
                             + (this.LastQueue.glasswidth / 25 * 7) + 'px;height:'
                             + (this.LastQueue.glassheight / 25 * 7) + 'px;line-height: '
                             + (this.LastQueue.glassheight / 25 * 7 / 3) + 'px; background-color: '
-                            + (this.LastQueue.state > 0 ? '#4CCCE4' : (this.LastQueue.state == 0 ? '#E4CA4C' : '#E4CA4C')) + ';text-align: center;font-size:50px'">
+                            + (this.LastQueue.state > 0 ? '#4CCCE4' : (this.LastQueue.state == 0 ? '#E4CA4C' : 'red')) + ';text-align: center;font-size:50px'">
                         <div>
                             {{ $t('Measure') }}
                         </div>
                         <div>
-                            {{ $t('Width') + "*" + $t('Height') }}:{{ (this.LastQueue.glasswidth +
-                                this.LastQueue.glassheight) != 0 ? (this.LastQueue.glasswidth +
-                                    "*" + this.LastQueue.glassheight) + "" : "" }}
+                            {{ $t('Width') + "*" + $t('Height') }}:{{ (this.LastQueue.glasswidth +this.LastQueue.glassheight) != 0 ? 
+                            (this.LastQueue.glasswidth +"*" + this.LastQueue.glassheight) + "" : "" }}
                         </div>
 
                         <div>
@@ -699,19 +715,105 @@
                                 :value="item.value">
                             </el-option>
                         </el-select>
-                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;margin-left: 6px;"
-                            v-show="scope.row.state >= 0 ? true : false"
-                            @click="ClaimTasks(scope.row.flowcard, scope.row.state, selected[scope.$index], scope.row.line)">
-                            {{ scope.row.state > 0 ? $t('Stop Task') : $t('Start Task') }}</el-button>
+                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
+                            v-show="scope.row.state >= 0 ? true : false" @click="StartChange(scope.row.flowcard, scope.row.orderstate)">
+                            {{ scope.row.orderstate > 0 ? $t('stop work') : $t('start work') }}</el-button>
+                       
 
                         <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                             v-show="scope.row.state >= 0 ? true : false"
                             @click="ModeChange(scope.row.flowcard, scope.row.method)">
                             {{ $t('Mode Change') }}</el-button>
 
+                            <el-button type="primary" style="padding: 4px 10px;font-size: 12px;margin-left: 6px;"
+                            v-show="scope.row.state >= 0 ? true : false"
+                            @click="ClaimTasks(scope.row.flowcard, scope.row.state, selected[scope.$index], scope.row.line)">
+                            {{ scope.row.state > 0 ? $t('Stop Task') : $t('Start Task') }}</el-button>
+
+                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
+                            v-show="scope.row.state >= 0 ? true : false" @click="deleteTasks(scope.row.flowcard)">
+                            {{ $t('langDelete') }}</el-button>
+
+                    </template>
+                </el-table-column>
+            </el-table>
+        </el-dialog>
+         <!-- 鍑虹墖闃熷垪鏄剧ず琛� -->
+         <el-dialog :visible.sync="Outqueue" :title="$t('Outing Queue')" top="5vh">
+            <el-table :data="tableData2" style="width: 100%;margin-bottom: 20px;" row-key="id" border lazy
+                :tree-props="{ children: 'glassinfo', hasChildren: 'hasChildren' }">
+                <el-table-column prop="flowcard" :label="$t('Order')" width="150" align="center">
+                    <template slot-scope='scope'>
+                        <div>
+                            {{ scope.row.flowcard }}
+                        </div>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="mateid" :label="$t('Mateid')" align="center">
+                </el-table-column>
+                <el-table-column prop="tier" :label="$t('Tier')" align="center">
+                </el-table-column>
+                <el-table-column prop="number" :label="$t('Number')" align="center">
+                </el-table-column>
+                <el-table-column prop="cageno" :label="$t('Cage GlassNumber')" align="center">
+                </el-table-column>
+                <el-table-column prop="finishnumber" :label="$t('Finish No')" align="center">
+                </el-table-column>
+                <el-table-column prop="mateid" :label="$t('Mate No')" align="center">
+                </el-table-column>
+                <el-table-column prop="films" :label="$t('Films')" align="center">
+                </el-table-column>
+                <el-table-column prop="thickness" :label="$t('Thickness')" align="center">
+                </el-table-column>
+                <el-table-column prop="width" :label="$t('Width')" align="center">
+                </el-table-column>
+                <el-table-column prop="height" :label="$t('Height')" align="center">
+                </el-table-column>
+                <el-table-column prop="state" :label="$t('Task State')" align="center">
+                    <template slot-scope='scope'>
+                        <div
+                            :style="{ backgroundColor: scope.row.state === 0 ? '' : '#00FFFF', width: '105%', height: '125%', lineHeight: '50px' }">
+                            {{ scope.row.state >= 0 ? scope.row.state == 0 ? $t('Stop') : $t('Start') : "" }}
+                        </div>
+                    </template>
+                </el-table-column>
+                <!-- <el-table-column prop="state" :label="$t('Task State')" align="center">
+                    <template slot-scope='scope'>
+                        {{ scope.row.state >= 0 ? scope.row.state == 0 ? $t('Stop') : $t('Start') : "" }}
+                    </template>
+                </el-table-column> -->
+                <el-table-column prop="method" :label="$t('Task Method')" align="center">
+                    <template slot-scope='scope'>
+                        <div style="text-align: center;width: 105%;">
+                            {{ scope.row.state >= 0 ? (scope.row.method == 0 ? $t('Out') : $t('All Out')) : "" }}
+                        </div>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="line" :label="$t('Task Line')">
+                </el-table-column>
+                <el-table-column width="380" :label="$t('Operate')">
+
+                    <template slot-scope='scope'>
+                        <el-select v-model="selected[scope.$index]" :placeholder="$t('Line')"
+                            v-show="scope.row.state >= 0 ? true : false">
+                            <el-option v-for="item in options" :key="item.value" :label="item.label"
+                                :value="item.value">
+                            </el-option>
+                        </el-select>
                         <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                             v-show="scope.row.state >= 0 ? true : false" @click="StartChange(scope.row.flowcard, scope.row.orderstate)">
                             {{ scope.row.orderstate > 0 ? $t('stop work') : $t('start work') }}</el-button>
+                       
+
+                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
+                            v-show="scope.row.state >= 0 ? true : false"
+                            @click="ModeChange(scope.row.flowcard, scope.row.method)">
+                            {{ $t('Mode Change') }}</el-button>
+
+                            <el-button type="primary" style="padding: 4px 10px;font-size: 12px;margin-left: 6px;"
+                            v-show="scope.row.state >= 0 ? true : false"
+                            @click="ClaimTasks(scope.row.flowcard, scope.row.state, selected[scope.$index], scope.row.line)">
+                            {{ scope.row.state > 0 ? $t('Stop Task') : $t('Start Task') }}</el-button>
 
                         <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                             v-show="scope.row.state >= 0 ? true : false" @click="deleteTasks(scope.row.flowcard)">
@@ -738,11 +840,11 @@
             <el-table :data="this.StorageCageAddInfo" :height="700" border style="width: 100%;overflow: auto;">
                 <el-table-column prop="flowcard" :label="$t('Flowcard')"></el-table-column>
                 <el-table-column prop="tier" :label="$t('Tier')"></el-table-column>
-                <el-table-column prop="mateid" :label="$t('Mateid')"></el-table-column>
                 <el-table-column prop="width" :label="$t('Width')"></el-table-column>
                 <el-table-column prop="height" :label="$t('Height')"></el-table-column>
                 <el-table-column prop="thickness" :label="$t('Thickness')"></el-table-column>
                 <el-table-column prop="films" :label="$t('Films')"></el-table-column>
+                <el-table-column prop="mateid" :label="$t('Mateid')"></el-table-column>
                 <el-table-column :label="$t('Operate')">
                     <template slot-scope='scope'>
                         <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
@@ -762,7 +864,7 @@
     Disabled, SelectPermissionByUserName, currentUsername, CompleteQueue,
     isAllowReorderings,
 
-    UpdateStroageCageByCell, FinishTask, SelectGlassInfo, StorageCageAddGlass, ClaimTasks, ModeChange, UpdateQueue, importData, ManualTake, AnewMeasure, StartChange, deleteTasks,SaveMeasure
+    UpdateStroageCageByCell, FinishTask,TerminateTask, SelectGlassInfo, StorageCageAddGlass, ClaimTasks, ModeChange, UpdateQueue, importData, ManualTake, AnewMeasure, StartChange, deleteTasks,SaveMeasure
 } from "../../api/home";
 
 
@@ -800,6 +902,7 @@
 
             dataList: [],
             tableData1: [],
+            tableData2: [],
             Measuermode: false,
             confirm1: false,
             confirm2: false,
@@ -815,6 +918,7 @@
             Measure: false,
             StorageCage: false,
             Taskqueue: false,
+            Outqueue: false,
             StorageCageAdd: false,
             StorageCageInfo: [],
             StorageCageForm: {
@@ -921,6 +1025,8 @@
                 this.StorageCage = true;
             } else if (i == 4) {
                 this.Taskqueue = true;
+            }else if (i == 5) {
+                this.Outqueue = true;
             }
         },
         init() {
@@ -992,6 +1098,7 @@
                     }
 
                     this.tableData1 = obj.OrderTask[0];
+                    this.tableData2 = obj.OrderTask[0];
                     this.LastQueue = obj.LastQueue[0];
 
                     //鏄惁鍏佽鍑虹墖
@@ -1174,6 +1281,15 @@
                 }
             });
         },
+        //缁撴潫杩�/鍑虹墖浠诲姟
+        TerminateTask(id) {
+            TerminateTask(id).then(res => {
+                if (res.data.message == 200) {
+                    this.$message.success(this.$t('Operation successful'));
+                }
+            });
+        },
+
         //淇敼鐞嗙墖绗肩幓鐠冧俊鎭�
         UpdateStroageCageByCell(cell, nownum, num) {
             if (nownum == null && num == 1) {
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/PLCAutoMes.java b/springboot-vue3/src/main/java/com/example/springboot/component/PLCAutoMes.java
index 302156c..667d179 100644
--- a/springboot-vue3/src/main/java/com/example/springboot/component/PLCAutoMes.java
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/PLCAutoMes.java
@@ -46,7 +46,7 @@
     public void run() {
         while (this != null) {
             try {
-                Thread.sleep(100);
+                Thread.sleep(50);
 
             } catch (InterruptedException e) {
                 e.printStackTrace();
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/PlcHoldNew.java b/springboot-vue3/src/main/java/com/example/springboot/component/PlcHoldNew.java
index 8756fe9..dbf369f 100644
--- a/springboot-vue3/src/main/java/com/example/springboot/component/PlcHoldNew.java
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/PlcHoldNew.java
@@ -17,7 +17,7 @@
   private StorageCageService storageCageService;
   int aaa;
   String huibao = "";
-
+  String qidong = "";
   @Override
   public void run() {
 
@@ -32,7 +32,8 @@
       storageCageService = WebSocketServer.applicationContext.getBean(StorageCageService.class);
       spianService = WebSocketServer.applicationContext.getBean(SpianServiceNew.class);
       albaniaMapper = WebSocketServer.applicationContext.getBean(AlbaniaMapper.class);
-      spianService.selectout(1);
+      // spianService.selectout(1);
+      // spianService.mateOut();
       // 璇诲彇DB14鍖烘枃浠�
       PlcParameterObject plcmes = PLCAutoMes.PlcMesObject;
       if (plcmes.getPlcParameter("PLCToMES").getValue() != null) {
@@ -42,11 +43,16 @@
         String IDStatus1 = plcmes.getPlcParameter("IDStatus1").getValue();// 1鍙蜂换鍔″畬鎴�
         String MESToPLCStatus1 = plcmes.getPlcParameter("MESToPLCStatus1").getValue();// 1鍙风‘璁ゅ瓧
         String MESToPLC = plcmes.getPlcParameter("MESToPLC").getValue();// 鍙戦�佷换鍔″瓧
+        
         int taskcont = albaniaMapper.SelectTaskcount(); // 姝e湪杩涜鐨勪换鍔℃暟閲�
         int outtask = albaniaMapper.SelectOutTaskCount(); // 绛夊緟琛ュ彂鐨勫嚭鐗囦换鍔℃暟閲�
-        if(outtask>0){
-          spianService.mateOut();
+        if (ExportTOMES1 != null && MESToPLC != null && taskcont == 0) {
+          //褰撳彲浠ュ彂浠诲姟骞朵笖鍑虹墖闃熷垪鏈変换鍔℃椂
+          if (ExportTOMES1.equals("1") == true && MESToPLC.equals("0") == true && PLCToMES.equals("1") == true&&outtask>0 && MESToPLCStatus1.equals("0")) {
+             spianService.mateOut();
+          }
         }
+
         // String scan=plcmes.getPlcParameter("scan").getValue();//鍙戦�佹壂鐮佷俊鎭�
         // if(scan.equals("1")==true){
         // spianService.scan(scan);
@@ -57,12 +63,22 @@
           System.out.println("姹囨姤璁板綍:" + IDStatus1 + "鏃堕棿" + currentTime);
         }
         huibao = IDStatus1;
+        if (!qidong.equals(MESToPLC)) {
+          System.out.println("鍚姩璁板綍:" + MESToPLC + "鏃堕棿" + currentTime);
+        }
+        qidong = MESToPLC;
+
+        PLCToMES = plcmes.getPlcParameter("PLCToMES").getValue();// 杩愰�佽溅璇锋眰
+        IDStatus1 = plcmes.getPlcParameter("IDStatus1").getValue();// 1鍙蜂换鍔″畬鎴�
+        MESToPLCStatus1 = plcmes.getPlcParameter("MESToPLCStatus1").getValue();// 1鍙风‘璁ゅ瓧
+        MESToPLC = plcmes.getPlcParameter("MESToPLC").getValue();// 鍙戦�佷换鍔″瓧
+
         // 涓�鍙风嚎璇锋眰
         if (ExportTOMES1 != null && MESToPLC != null && taskcont == 0) {
           if (ExportTOMES1.equals("1") == true && MESToPLC.equals("0") == true && PLCToMES.equals("1") == true
-              && MESToPLCStatus1.equals("0") == true) {
-            System.out
-                .println("鍑虹墖鐘舵��:MESToPLC:" + MESToPLC + "PLCToMES:" + PLCToMES + "MESToPLCStatus1:" + MESToPLCStatus1);
+              && MESToPLCStatus1.equals("0") == true&&outtask == 0) {
+            // System.out
+            //     .println("鍑虹墖鐘舵��:MESToPLC:" + MESToPLC + "PLCToMES:" + PLCToMES + "MESToPLCStatus1:" + MESToPLCStatus1);
             spianService.selectout(1);
             try {
               Thread.sleep(200); // 姣�100姣妫�鏌ヤ竴娆�
@@ -79,14 +95,14 @@
         // 杩愰�佽溅璇锋眰鍜屾祴閲忓畬鎴愯姹�
         GlassInfo glass = albaniaMapper.SelectGlass();
         if (PLCToMES != null && glass != null && MESToPLC != null && taskcont == 0) {
-          if (PLCToMES.equals("1") == true && MESToPLC.equals("0") == true && MESToPLCStatus1.equals("0") == true) {
+          if (PLCToMES.equals("1") == true && MESToPLC.equals("0") == true && MESToPLCStatus1.equals("0") == true&&outtask == 0) {
             try {
               Thread.sleep(100); // 姣�100姣妫�鏌ヤ竴娆�
             } catch (InterruptedException e) {
               Thread.currentThread().interrupt(); // 澶勭悊绾跨▼涓柇
             }
-            System.out
-                .println("杩涚墖鐘舵��:MESToPLC:" + MESToPLC + "PLCToMES:" + PLCToMES + "MESToPLCStatus1:" + MESToPLCStatus1);
+            // System.out
+            //     .println("杩涚墖鐘舵��:MESToPLC:" + MESToPLC + "PLCToMES:" + PLCToMES + "MESToPLCStatus1:" + MESToPLCStatus1);
             spianService.selectAll(glass);
           }
         }
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java b/springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java
index 20a2049..0c83048 100644
--- a/springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java
@@ -158,8 +158,9 @@
                             S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(),
                                     (short) 1);
 
-                        } else if (istest) {
-                            // 閲嶆柊娴嬮噺
+                        } 
+                        else if (istest) {
+                            // 鍖归厤澶辫触
                             S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(),
                                     (short) 4);
 
@@ -173,7 +174,7 @@
                 List<GlassInfo> glassInfoFlowCard = glassInfoMapper.selectOrderState(1);
                 jsonObject.append("glassInfoFlowCard", glassInfoFlowCard);
 
-                Queue LastQueue = QueueMapper.selectLastQueue();
+                Queue LastQueue = QueueMapper.selectLastQueue2();
                 if (LastQueue == null) {
                     Queue nullQueue = new Queue();
                     nullQueue.setglassId("");
@@ -185,8 +186,8 @@
                     jsonObject.append("LastQueue", nullQueue);
                 } else {
                     if (LastQueue.getstate() < 1) {
-                        LastQueue.setglasswidth(0);
-                        LastQueue.setglassheight(0);
+                        LastQueue.setglasswidth(LastQueue.getglasswidthmm());
+                        LastQueue.setglassheight(LastQueue.getglassheightmm());
                     }
                     jsonObject.append("LastQueue", LastQueue);
                 }
diff --git a/springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java b/springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java
index 9f6a8d9..8d9154f 100644
--- a/springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java
+++ b/springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java
@@ -502,6 +502,11 @@
   public Result FinishTask(Integer id) {
     return storageCageService.FinishTask();
   }
+    // 鎵嬪姩缁撴潫浠诲姟
+    @PostMapping("/TerminateTask")
+    public Result TerminateTask(Integer id) {
+      return storageCageService.TerminateTask(id);
+    }
 
   // 鏌ヨ鐜荤拑淇℃伅
   @PostMapping("/SelectGlassInfo")
diff --git a/springboot-vue3/src/main/java/com/example/springboot/mapper/AlbaniaMapper.java b/springboot-vue3/src/main/java/com/example/springboot/mapper/AlbaniaMapper.java
index a0f59c0..68a6fb8 100644
--- a/springboot-vue3/src/main/java/com/example/springboot/mapper/AlbaniaMapper.java
+++ b/springboot-vue3/src/main/java/com/example/springboot/mapper/AlbaniaMapper.java
@@ -45,7 +45,7 @@
     @Select("select * from v_cagerelease2 where mateid not in(select mateid from v_cagerelease2 where surplus=0 group by mateid)LIMIT 1;")
     GlassInfo SelectOutGlass2();
     //寰呭嚭鐗囦换鍔℃煡璇�
-    @Select("select * from out_task where task_state=0")
+    @Select("select * from out_task where task_state=0 order by id asc;")
     List<StorageTask> SelectOutTask();
     //娴佺▼鍗′换鍔℃煡璇�
     @Select("select  G.flowcard,G.glasstype,G.number,G.mateid,G.tier,G.starttime,G.finishnumber,IF((G.number-G.finishnumber-ku.KuCount)<0,G.number,IFNULL(ku.KuCount,0)) as 'surplus',G.totaltier as id,G.width,G.glassid from (select Gfd.flowcard,Ggf.glasstype,Ggf.number,Ggf.mateid,Ggf.tier,Ggf.finishnumber,Gfd.starttime,Gfd.totaltier,Ggf.width,Ggf.glassid  from flowcard as Gfd LEFT JOIN glassinfo as Ggf on Gfd.flowcard=Ggf.flowcard where Gfd.state=1 and Gfd.line=1) as G left join (select glasstype,sum(number) AS KuCount from storage_cage where glasstype is not null and disabled=0 group by glasstype) as ku on G.glasstype=ku.glasstype where G.mateid not in(select mateid from v_cagerelease1 where surplus=0 group by mateid) HAVING surplus>0  order by `g`.`starttime`,`g`.`mateid`,`g`.`finishnumber`,`g`.`tier`LIMIT 1;")
@@ -74,7 +74,7 @@
     @Select("select method,flowcard from flowcard where state=1 and line=#{line} ORDER BY starttime LIMIT 1;")
     GlassInfo SelectMethod(int line);
     //鐩村嚭妯″紡浠诲姟鏌ヨ
-    @Select("select  b.flowcard,b.glassid,b.glasstype,b.mateid,b.width,b.tier,a.totaltier as id,IFNULL(c.number,0)as number,b.glassid from flowcard a  left join glassinfo b on a.flowcard=b.flowcard left join(select sum(number)as number,glasstype from storage_cage GROUP BY glasstype)c on b.glasstype=c.glasstype where a.line=1 and c.number>0 and b.finishnumber<b.number  ORDER BY b.finishnumber,b.tier asc limit 1")
+    @Select("select  b.flowcard,b.glassid,b.glasstype,b.mateid,b.width,b.tier,a.totaltier as id,IFNULL(c.number,0)as number,b.glassid from flowcard a  left join glassinfo b on a.flowcard=b.flowcard left join(select sum(number)as number,glasstype from storage_cage GROUP BY glasstype)c on b.glasstype=c.glasstype where a.line=1 and a.state=1 and c.number>0 and b.finishnumber<b.number  ORDER BY b.finishnumber,b.tier asc limit 1")
     GlassInfo SelectOutGlass2(int line);
     //鏌ヨ鐩撮�氭ā寮忎笅鏈�鍚庝竴鍧�
     @Select("select IFNULL(b.tier, 0) from flowcard a  left join glassinfo b on a.flowcard=b.flowcard left join(select sum(number)as number,glasstype from storage_cage GROUP BY glasstype)c on b.glasstype=c.glasstype where a.line=#{line} and c.number>0 ORDER BY b.tier desc LIMIT 1")
@@ -106,4 +106,10 @@
     //鏌ヨ姝ら厤鐗噄d鏄惁鏈夊彲鍑虹墖鏁伴噺
     @Select("SELECT  CASE WHEN number >finishnumber THEN '瓒冲' ELSE '涓嶈冻' END AS status FROM  glassinfo a WHERE a.flowcard =#{flowcard} AND a.mateid =#{mateid}")
     List<String> SelectOutGlass8(String flowcard,int mateid);
+    //鏌ヨ鐜荤拑淇℃伅
+    @Select("select * from glassinfo where glasstype=#{glasstype} limit 1")
+    GlassInfo SelectGlassInfo(int glasstype);
+    //瀹屾垚鍑虹墖闃熷垪鐨勪换鍔�
+    @Update("update out_task set task_state=1 where id=#{id};")
+    void UpdateOutTask(int id);
 }
diff --git a/springboot-vue3/src/main/java/com/example/springboot/mapper/GlassInfoMapper.java b/springboot-vue3/src/main/java/com/example/springboot/mapper/GlassInfoMapper.java
index c974a6a..7ace4e6 100644
--- a/springboot-vue3/src/main/java/com/example/springboot/mapper/GlassInfoMapper.java
+++ b/springboot-vue3/src/main/java/com/example/springboot/mapper/GlassInfoMapper.java
@@ -24,6 +24,8 @@
 
     @Update("UPDATE glassinfo SET measurenumber = measurenumber+1 WHERE id = #{id}")
     void updatemeasurenumber(@Param("id") int roleId);
+    @Update("UPDATE glassinfo SET measurenumber = measurenumber-1 WHERE glasstype = #{glasstype}")
+    void updateGlassNumber(@Param("glasstype") int glasstype);
 
     // @Insert("INSERT INTO role_permission (role_id, permission_id, state) VALUES (#{roleId}, #{permissionId}, #{state})")
     // void insert(@Param("roleId") int roleId, @Param("permissionId") int permissionId, @Param("state") int state);
diff --git a/springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java b/springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java
index 018e422..2164519 100644
--- a/springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java
+++ b/springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java
@@ -261,9 +261,12 @@
   // 鏍规嵁鏍煎瓙鏌ヨ鐜荤拑淇℃伅
   @Select("select * from storage_cage where cell=#{cell}")
   StorageCage SelectStorageByCell(String cell);
+  //鏍规嵁鐜荤拑绫诲瀷鏌ヨ鐜荤拑淇℃伅
+  @Select("select a.shelf_rack as cage,a.load_rack as cell,b.mateid,b.width as glasswidth,b.height as glassheight,b.thickness,b.films from storage_task a left join glassinfo b on a.glasstype=b.glasstype where a.id=#{id} limit 1")
+  StorageCage SelectStorageByCellGlass(Integer id);
 
   // 鎵嬪姩瀹屾垚浠诲姟
-  @Select("update storage_task set task_state=1 where id=#{id}")
+  @Select("update storage_task set task_state=#{state} where id=#{id}")
   void FinishTask(Integer id, int state);
   //浜哄伐鍖归厤娴嬮噺鏌ヨ
   @Select("select gi.* from glassinfo gi inner join flowcard fc on gi.flowcard=fc.flowcard where fc.state!=2 and fc.orderstate=1 and position(#{width} in gi.width) and position(#{height} in gi.height) and position(#{thickness} in gi.thickness) and position(#{films} in gi.films) group by gi.id")
@@ -280,7 +283,7 @@
 
   // @Select("select gi.*,sum(sc.number) as cageno from glassinfo gi left join storage_cage sc on gi.glasstype=sc.glasstype where gi.flowcard=#{flowcard} group by gi.id order by gi.mateid,gi.tier")
   // List<GlassInfo> SelectOrderView(String flowcard);
-  @Select("select gi.id, gi.glasstype, gi.mateid, gi.glassid, gi.tier, gi.films, gi.width, gi.height, gi.thickness, gi.number, gi.finishnumber, gi.sumtier, gi.measurenumber,sum(sc.number) as cageno,IFNULL(c.orderstate,0) as orderstate from  glassinfo gi left join storage_cage sc on gi.glasstype=sc.glasstype left join flowcard c on gi.flowcard=c.flowcard where gi.flowcard=#{flowcard} group by gi.id order by gi.mateid,gi.tier")
+  @Select("select gi.id, gi.glasstype, gi.mateid, gi.glassid, gi.tier, gi.films, gi.width, gi.height, gi.thickness, gi.number, gi.finishnumber, gi.sumtier, gi.measurenumber,sum(sc.number) as cageno,IFNULL(c.orderstate,0) as orderstate from  glassinfo gi left join storage_cage sc on gi.glasstype=sc.glasstype left join flowcard c on gi.flowcard=c.flowcard where gi.flowcard=#{flowcard} group by gi.id,orderstate order by gi.mateid,gi.tier")
   List<GlassInfo> SelectOrderView(String flowcard);
 
 
@@ -307,19 +310,24 @@
 
   @Update("Update  glassinfo set flowcard=CONCAT('宸插垹闄�', #{flowcard}) where flowcard=#{flowcard}")
   int deleteGlassinfo(String flowcard);
-
+  //浜哄伐鍖归厤淇敼涓�鏉�
   @Update("update queue set glassid=concat(#{flowcard},'-',#{tier}),flowcard=#{flowcard},glasswidth=#{width},glassheight=#{height},glasstype=#{glasstype},thickness=#{thickness},mateid=#{mateid},state=1 where state<=0")
   void UpdateQueue(String flowcard, double width, double height, Integer glasstype, Double thickness, Integer tier,int mateid);
   //浜哄伐鍖归厤鏂板涓�鏉�
   @Insert("INSERT INTO queue (flowcard,glassid,glasswidth,glassheight,glasstype,thickness,mateid,state) VALUES (#{flowcard},concat(#{flowcard},'-',#{tier}),#{width},#{height},#{glasstype},#{thickness},#{mateid},1)")
   int AddQueue(String flowcard, double width, double height, Integer glasstype, Double thickness, Integer tier,int mateid); 
+  //鍒ゆ柇娴嬮噺琛ㄦ槸鍚︽湁鍙洿鏀圭殑鏁版嵁
+  @Select("select count(*) from queue where state<1")
+  int SelectQueue();
   @Update("update glassinfo set finishnumber=ifnull(finishnumber,0)+1 where flowcard=#{flowcard} and mateid=#{mateid} and tier=#{geTier}")
   void AddGlassNo(String flowcard, Integer mateid, Integer geTier);
+  @Update("update glassinfo set finishnumber=ifnull(finishnumber,0)-1 where glasstype=#{glasstype}")
+  void OutGlassNo(Integer glasstype);
 
   // 娣诲姞鍑虹墖闃熷垪
   @Insert("INSERT INTO glassinfo (`flowcard`, `glasstype`, `mateid`, `glassid`, `tier`, `films`, `width`, `height`, `thickness`, `number`, `finishnumber`, `sumtier`, `measurenumber`)"
       +
-      " VALUES (#{flowcard}, #{glasstype}, #{mateid}, #{glassid}, #{tier}, #{films}, #{width}, #{height}, #{thickness}, #{number}, 0, #{sumtier}, 0)")
+      " VALUES (#{flowcard}, #{glasstype}, #{mateid}, #{glassid}, #{tier}, #{films}, CASE WHEN #{width} > #{height} THEN #{width} ELSE #{height} END, CASE WHEN #{height} > #{width} THEN #{width} ELSE #{height} END, #{thickness}, #{number}, 0, #{sumtier}, 0)")
   void AddGlassinfo(String flowcard, Integer glasstype, Integer mateid, String glassid, Integer tier, String films,
       Double width, Double height, Double thickness, Integer number, Integer sumtier);
 
@@ -327,7 +335,7 @@
   @Select("select max(glasstype)+1 from glassinfo")
   Integer SelectMaxType();
     // 鏈�澶х幓鐠冪被鍨�
-    @Select("select glasstype from glassinfo where CONCAT(width,'_',height,'_',thickness,'_',films,'_',flowcard)=#{key} limit 1")
+    @Select("select glasstype from glassinfo where CONCAT(width,'_',height,'_',thickness,'_',films,'_',flowcard,'_',mateid)=#{key} limit 1")
     Integer SelectMaxTypes(String key);
 
     //鏌ヨ鎵�鏈夌幓鐠冭啘绯诲拰鍘氬害
@@ -356,7 +364,7 @@
                     +" select #{flowcard}, 0, #{number}, 0, 0, 0, now() where 0=( select count(*) from flowcard where flowcard=#{flowcard});")
   void InsertFlowcard(String flowcard, Integer number);
 
-    @Delete("DELETE FROM queue WHERE id = (SELECT id FROM ( SELECT id FROM queue WHERE glassid = #{glassId} ORDER BY time ASC LIMIT 1) AS temp);")
+    @Delete("DELETE FROM queue WHERE id = (SELECT id FROM ( SELECT id FROM queue WHERE glasstype = #{glassId} ORDER BY time ASC LIMIT 1) AS temp);")
     void DeletequeueByGlassid(String glassId);
 
     @Select("select count(*) from flowcard where line=#{line} and state=1 and flowcard!=#{flowcard}")
diff --git a/springboot-vue3/src/main/java/com/example/springboot/mapper/QueueMapper.java b/springboot-vue3/src/main/java/com/example/springboot/mapper/QueueMapper.java
index e2a4826..02da05f 100644
--- a/springboot-vue3/src/main/java/com/example/springboot/mapper/QueueMapper.java
+++ b/springboot-vue3/src/main/java/com/example/springboot/mapper/QueueMapper.java
@@ -20,6 +20,9 @@
     @Select("SELECT * FROM queue order by time desc limit 1")
     Queue selectLastQueue();
 
+    @Select("SELECT * FROM queue where state<2 order by time desc limit 1")
+    Queue selectLastQueue2();
+
     @Select("SELECT * FROM queue where state<=0")
     List<Queue> selectErrorQueues();
 
diff --git a/springboot-vue3/src/main/java/com/example/springboot/service/SpianServiceNew.java b/springboot-vue3/src/main/java/com/example/springboot/service/SpianServiceNew.java
index f2a2366..0641df8 100644
--- a/springboot-vue3/src/main/java/com/example/springboot/service/SpianServiceNew.java
+++ b/springboot-vue3/src/main/java/com/example/springboot/service/SpianServiceNew.java
@@ -9,6 +9,7 @@
 import com.example.springboot.component.S7control;
 import com.example.springboot.entity.GlassInfo;
 import com.example.springboot.entity.StorageCage;
+import com.example.springboot.entity.StorageTask;
 import com.example.springboot.entity.device.PlcParameterObject;
 import com.example.springboot.mapper.AlbaniaMapper;
 import com.google.common.primitives.Bytes;
@@ -48,7 +49,7 @@
 
         } else {
             // 鍒ゆ柇鐜荤拑鏄惁杩涘叆澶х墖绗�
-            if (glassInfo.getThickness() >= 15) {
+            if (glassInfo.getThickness() > 4 &&glassInfo.getWidth()>= 1500) {
                 cage = albaniaMapper.SelectNewCell(3, 5);
             } else {
                 cage = albaniaMapper.SelectNewCell(0, 4);
@@ -58,7 +59,7 @@
             // 褰撹繑鍥炵殑鏍煎瓙鍙蜂负绌烘椂,杩斿洖400绗煎瓙宸叉弧
             if (cage != null) {
                 albaniaMapper.AddCage(cage.getId(), glassid, width, height, 1, glasstype, 0, thickness,
-                        glassfilms.getFilms(),glassfilms.getFlowcard(),glassfilms.getMateid());
+                        glassfilms.getFilms(), glassfilms.getFlowcard(), glassfilms.getMateid());
                 Mestast(glassid, 1001, cage.getId(), 1, "MESID1", 1);
                 System.out.println("浠诲姟鍙戦�佺幓鐠僫d:" + glassid + "璧峰浣嶇疆:" + 1001 + "鏍煎瓙鍙�:" + cage.getId() + "鍚姩:" + 1);
                 albaniaMapper.UpdateStorage(width, height, cage.getId());
@@ -72,12 +73,43 @@
         return (200);
 
     }
-    //琛ュ厖鍑虹墖
+
+    // 琛ュ厖鍑虹墖
     public Short mateOut() {
         double carwidth = -300;
-        list<StorageTask> glassmate = albaniaMapper.SelectMateOut();
+        
+        List<StorageTask> glassmate = albaniaMapper.SelectOutTask();
+        String type=glassmate.get(0).getTaskType();
+        if (glassmate.size() == 0) {
+            return (400);
+        } else {
+            for (int i = 0; i < glassmate.size(); i++) {
+                GlassInfo glass = albaniaMapper.SelectGlassInfo(glassmate.get(i).getGlasstype());
+                carwidth = carwidth + glass.getWidth() + 300;
+                if (carwidth >= 4300&&type!=glassmate.get(i).getTaskType()) {
+                    S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) 1);// 鍑虹墖浠诲姟鍚姩
+                    return (200);
+                } else {
+                    //澧炲姞涓�鏉′换鍔¤褰�
+                    albaniaMapper.Inserttask(1, 0, Integer.parseInt(glassmate.get(i).getShelfRack()), 2001,
+                            glassmate.get(i).getGlassId(), glassmate.get(i).getGlasstype(),
+                            glassmate.get(i).getFlowcard(), glassmate.get(i).getMateid(), glassmate.get(i).geTier());
+                    //瀹屾垚鍑虹墖闃熷垪鐨勪换鍔�
+                    albaniaMapper.UpdateOutTask(glassmate.get(i).getId());
+                    //鍙戦�乸lc浠诲姟
+                    Mestast(glassmate.get(i).getGlassId(),
+                            Integer.parseInt(glassmate.get(i).getShelfRack()), 2001, 0, "MESID" + (i + 1),i + 1);           
+                    System.out.println("鍙戦�佸嚭鐗囬槦鍒楅厤鐗囦换鍔�:"+glassmate.get(i).getShelfRack());
+                }
+            }
+            // 鏈閰嶇墖瀹屾垚鍙戦�佸惎鍔ㄥ懡浠�
+            // S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) 1);// 鍑虹墖浠诲姟鍚姩
+            MestoPlc();
+
+        }
         return (200);
     }
+
     // 鍑虹墖
     public Short selectout(int line) {
         GlassInfo glassmate = new GlassInfo();
@@ -85,58 +117,69 @@
         StorageCage glass = new StorageCage();
         int glassend = 0;
         double carwidth = -300;
-        method = albaniaMapper.SelectMethod(line);
-        if (method == null) {
-            return (400);
-        }
         double width = 0;
         for (int i = 1; i <= 7; i++) {
+            method = albaniaMapper.SelectMethod(line);
+            if (method == null) {
+                return (400);
+            }
             // 濡傛灉涓嶆槸鐩撮�氭ā寮忓彧鍑烘湁瀹屾暣閰嶇墖鐨勬祦绋嬪崱
             if (method.getMethod() == 0) {
                 // glassmate= albaniaMapper.SelectOutGlass(1);
-                //鍒ゆ柇鏈夋暟閲忕殑閰嶇墖id
+                // 鍒ゆ柇鏈夋暟閲忕殑閰嶇墖id
                 List<GlassInfo> peipianid = albaniaMapper.SelectOutGlass3(method.getFlowcard());
                 if (peipianid.size() == 0) {
-                    System.out.println("peipianid:"+peipianid);
+                    System.out.println("peipianid:" + peipianid);
                     return (400);
                 } else {
                     for (int j = 0; j < peipianid.size(); j++) {
                         // 鍒ゆ柇閰嶇墖瀹藉害鏄惁澶熶笂澶ц溅
-                        // GlassInfo glasswidth = albaniaMapper.SelectOutGlass6(peipianid.get(j).getFlowcard(),peipianid.get(j).getMateid());
+                        // GlassInfo glasswidth =
+                        // albaniaMapper.SelectOutGlass6(peipianid.get(j).getFlowcard(),peipianid.get(j).getMateid());
                         // if (glasswidth.getWidth() <= 4300) {
-                            //鏄惁鏈夎冻澶熺殑搴撳瓨鏁伴噺
-                            List<String> peipiancage = albaniaMapper.SelectOutGlass4(peipianid.get(j).getFlowcard(),peipianid.get(j).getMateid());                              
-                            //鏄惁鏈夎冻澶熺殑鍙嚭鐗囨暟閲�
-                            List<String> peipiancage2 = albaniaMapper.SelectOutGlass8(peipianid.get(j).getFlowcard(),peipianid.get(j).getMateid()); 
-                            // System.out.println("peipiancage:"+peipiancage+peipianid.get(j).getMateid()); 
-                            // System.out.println("peipiancage2:"+peipiancage2);                                     
-                            if (!peipiancage.contains("涓嶈冻")&&!peipiancage2.contains("涓嶈冻")) {
-                                List<GlassInfo> chupian = albaniaMapper.SelectOutGlass7(peipianid.get(j).getFlowcard(),peipianid.get(j).getMateid());
-                                for (int k = 0; k < chupian.size(); k++) {
-                                      glass = albaniaMapper.SelectCageGlass(chupian.get(k).getGlasstype());
-                                      carwidth= carwidth+glass.getGlassWidth()+300;
-                                      if (carwidth<=4300) {
-                                          // 鍙戦�侀厤鐗囨暟鎹�
-                                    //   Mestast(chupian.get(k).getGlassid(), glass.getId(), 2001, 0, "MESID" + (k+1), k+1);                                    
-                                      albaniaMapper.AddFinishNumber(chupian.get(k).getFlowcard(), chupian.get(k).getMateid(), chupian.get(k).getTier());
-                                      storageCageService.UpdateStroageCageByCell(glass.getId(), -1);// 鐜荤拑鏁伴噺-1
-                                      albaniaMapper.Inserttask(1, 0, glass.getId(), 2001, chupian.get(k).getGlassid(),
-                                      chupian.get(k).getGlasstype(), chupian.get(k).getFlowcard(), chupian.get(k).getMateid(), chupian.get(k).getTier());
-                                      }else {
-                                        albaniaMapper.AddFinishNumber(chupian.get(k).getFlowcard(), chupian.get(k).getMateid(), chupian.get(k).getTier());
-                                        storageCageService.UpdateStroageCageByCell(glass.getId(), -1);// 鐜荤拑鏁伴噺-1
-                                        albaniaMapper.InsertOutTask(1, 0, glass.getId(), 2001, chupian.get(k).getGlassid(),
-                                        chupian.get(k).getGlasstype(), chupian.get(k).getFlowcard(), chupian.get(k).getMateid(), chupian.get(k).getTier());
-                                      }
-                                    
+                        // 鏄惁鏈夎冻澶熺殑搴撳瓨鏁伴噺
+                        List<String> peipiancage = albaniaMapper.SelectOutGlass4(peipianid.get(j).getFlowcard(),
+                                peipianid.get(j).getMateid());
+                        // 鏄惁鏈夎冻澶熺殑鍙嚭鐗囨暟閲�
+                        List<String> peipiancage2 = albaniaMapper.SelectOutGlass8(peipianid.get(j).getFlowcard(),
+                                peipianid.get(j).getMateid());
+                        // System.out.println("peipiancage:"+peipiancage+peipianid.get(j).getMateid());
+                        // System.out.println("peipiancage2:"+peipiancage2);
+                        if (!peipiancage.contains("涓嶈冻") && !peipiancage2.contains("涓嶈冻")) {
+                            List<GlassInfo> chupian = albaniaMapper.SelectOutGlass7(peipianid.get(j).getFlowcard(),
+                                    peipianid.get(j).getMateid());
+                            for (int k = 0; k < chupian.size(); k++) {
+                                glass = albaniaMapper.SelectCageGlass(chupian.get(k).getGlasstype());
+                                carwidth = carwidth + glass.getGlassWidth() + 300;
+                                if (carwidth <= 4300) {
+                                    // 鍙戦�侀厤鐗囨暟鎹�
+                                    Mestast(chupian.get(k).getGlassid(), glass.getId(), 2001, 0, "MESID" + (k + 1),
+                                            k + 1);
+                                    albaniaMapper.AddFinishNumber(chupian.get(k).getFlowcard(),
+                                            chupian.get(k).getMateid(), chupian.get(k).getTier());
+                                    storageCageService.UpdateStroageCageByCell(glass.getId(), -1);// 鐜荤拑鏁伴噺-1
+                                    albaniaMapper.Inserttask(1, 0, glass.getId(), 2001, chupian.get(k).getGlassid(),
+                                            chupian.get(k).getGlasstype(), chupian.get(k).getFlowcard(),
+                                            chupian.get(k).getMateid(), chupian.get(k).getTier());
+                                } else {
+                                    albaniaMapper.AddFinishNumber(chupian.get(k).getFlowcard(),
+                                            chupian.get(k).getMateid(), chupian.get(k).getTier());
+                                    storageCageService.UpdateStroageCageByCell(glass.getId(), -1);// 鐜荤拑鏁伴噺-1
+                                    //澧炲姞鍑虹墖闃熷垪鐨勪换鍔�
+                                    albaniaMapper.InsertOutTask(1, 0, glass.getId(), 2001, chupian.get(k).getGlassid(),
+                                            chupian.get(k).getGlasstype(), chupian.get(k).getFlowcard(),
+                                            chupian.get(k).getMateid(), chupian.get(k).getTier());
                                 }
-                                // 鏈閰嶇墖瀹屾垚鍙戦�佸惎鍔ㄥ懡浠�
-                                S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) 1);// 鍑虹墖浠诲姟鍚姩
-                                return (200);// 缁撴潫
+
                             }
+                            // 鏈閰嶇墖瀹屾垚鍙戦�佸惎鍔ㄥ懡浠�
+                            // S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(),(short) 1);// 鍑虹墖浠诲姟鍚姩
+                            MestoPlc();
+                            return (200);// 缁撴潫
+                        }
                         // }
-                        //  else {
-                        //     continue;
+                        // else {
+                        // continue;
                         // }
                     }
                     System.out.println("鏈湁瀹屾暣閰嶇墖");
@@ -145,33 +188,39 @@
 
             } else {
                 // 鐩撮�氭ā寮忔椂鎸夐『搴忕洿鍑�
-                glassmate= albaniaMapper.SelectOutGlass(1);
-                // glassmate = albaniaMapper.SelectOutGlass2(1);
+                // glassmate = albaniaMapper.SelectOutGlass(1);
+                glassmate = albaniaMapper.SelectOutGlass2(1);
+                System.out.println("glassmate:"+glassmate);
                 // // 鑾峰彇鐩撮�氭ā寮忔渶鍚庝竴鍧�
                 // glassend = albaniaMapper.SelectOutGlassend(1);
-           
+
             }
             System.err.println("鍑虹墖:" + glassmate);
             if (glassmate == null && i > 1) {
                 // 鏈閰嶇墖瀹屾垚鍙戦�佸惎鍔ㄥ懡浠�
-                S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) 1);// 鍑虹墖浠诲姟鍚姩
+                // 鍑虹墖浠诲姟鍚姩
+                MestoPlc();
                 System.out.println("鍑哄畬浠诲姟:1,浠诲姟鐘舵��:0,璧峰:" + glass.getId() + ",鐩爣" + "2001");
                 return (200);// 缁撴潫
             }
             if (glassmate == null) {
                 // 鏈鍙栦换鍔�
                 System.out.println("鏈鍙栦换鍔�:" + i);
-                return (400);
+                glassmate = albaniaMapper.SelectOutGlass2(1);
+                if(glassmate==null){
+                    System.out.println("glassmate绌�");
+                    return (400);
+                }
             } else {
                 glass = albaniaMapper.SelectCageGlass(glassmate.getGlasstype());
-                System.out.println("glassmate:" + glassmate  + "glass:" + glass);
+                System.out.println("glassmate:" + glassmate + "glass:" + glass);
                 if (glass != null) {
                     // 鍙戦�佷换鍔′箣鍓嶅垽鏂溅涓婄殑鍓╀綑瀹藉害鏄惁澶т簬姝ょ幓鐠�
                     width = width + glassmate.getWidth() + 300;
                     // 澶т簬杞︿笂绌轰綑瀹藉害鏃舵彁鍓嶅彂閫佸嚭鐗囧惎鍔�
                     if (width > 4300) {
                         // 鏈閰嶇墖瀹屾垚鍙戦�佸惎鍔ㄥ懡浠�
-                        S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) 1);// 鍑虹墖浠诲姟鍚姩
+                        MestoPlc();
                         return (200);// 缁撴潫
                     }
                     // 鍙戦�侀厤鐗囨暟鎹�
@@ -179,12 +228,14 @@
                     albaniaMapper.AddFinishNumber(glassmate.getFlowcard(), glassmate.getMateid(), glassmate.getTier());
                     storageCageService.UpdateStroageCageByCell(glass.getId(), -1);// 鐜荤拑鏁伴噺-1
                     albaniaMapper.Inserttask(1, 0, glass.getId(), 2001, glassmate.getGlassid(),
-                    glassmate.getGlasstype(), glass.getFlowcard(), glassmate.getMateid(), glassmate.getTier());
-                    // if (glassmate.getTier() == glassmate.getId() || glassmate.getTier() == glassend|| method.getMethod() == 1) {// 褰撻厤鐗囨暟閲忕瓑浜庢垚鍝佸皬鐗囨�荤墖鏁版椂
-                    //     // 鏈閰嶇墖瀹屾垚鍙戦�佸惎鍔ㄥ懡浠�
-                    //     S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) 1);// 鍑虹墖浠诲姟鍚姩
-                    //     System.out.println("浠诲姟绫诲瀷:1,浠诲姟鐘舵��:0,璧峰:" + glass.getId() + ",鐩爣" + "2001");
-                    //     return (200);// 缁撴潫
+                            glassmate.getGlasstype(), glass.getFlowcard(), glassmate.getMateid(), glassmate.getTier());
+                    // if (glassmate.getTier() == glassmate.getId() || glassmate.getTier() ==
+                    // glassend|| method.getMethod() == 1) {// 褰撻厤鐗囨暟閲忕瓑浜庢垚鍝佸皬鐗囨�荤墖鏁版椂
+                    // // 鏈閰嶇墖瀹屾垚鍙戦�佸惎鍔ㄥ懡浠�
+                    // S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(),
+                    // (short) 1);// 鍑虹墖浠诲姟鍚姩
+                    // System.out.println("浠诲姟绫诲瀷:1,浠诲姟鐘舵��:0,璧峰:" + glass.getId() + ",鐩爣" + "2001");
+                    // return (200);// 缁撴潫
                     // }
 
                 } else {
@@ -248,20 +299,14 @@
 
     // 涓嬪彂鐞嗙墖浠诲姟
     public void Mestast(String glassid, int MESToPLCStart1, int MESToPLCTarget1, int MESToPLC, String address, int i) {
-        // System.out.println("涓嬪彂鐞嗙墖浠诲姟鏁版嵁锛�");
-        // System.out.println("鐜荤拑 ID: " + glassid);
-        // System.out.println("璧峰浣嶇疆: " + MESToPLCStart1);
-        // System.out.println("鐩爣浣嶇疆: " + MESToPLCTarget1);
-        // System.out.println("浠诲姟绫诲瀷: " + MESToPLC);
-        // System.out.println("鍦板潃: " + address);
-        // System.out.println("绱㈠紩: " + i);
         S7control.getinstance().writeString(plcmes.getPlcParameter(address).getAddress(), glassid);// 鐜荤拑id
         S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLCStart" + i).getAddress(),
                 (short) MESToPLCStart1);// 璧峰浣嶇疆
         S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLCTarget" + i).getAddress(),
                 (short) MESToPLCTarget1);// 鐩爣浣嶇疆
         if (MESToPLC != 0) {
-            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) MESToPLC);// mes鐞嗙墖浠诲姟绫诲瀷
+            // S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) MESToPLC);// mes鐞嗙墖浠诲姟绫诲瀷
+            MestoPlc();
         }
     }
 
@@ -272,4 +317,23 @@
         return listbool;
     }
 
+    public void MestoPlc() {
+        while (true) {
+            String currentValue = plcmes.getPlcParameter("MESToPLC").getValue();
+            // 妫�鏌� MESToPLC 鐨勫�兼槸鍚︿负 0
+            if (currentValue.equals("1")) {
+              System.out.println("鍙戦�佸惎鍔ㄥ瓧鐜板湪涓�1,鍋滄寰幆鍐欏叆");
+              break; // 閫�鍑哄惊鐜�
+            }
+            // 濡傛灉涓嶄负 1锛岀户缁啓鍏�
+            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(),(short) 1);// 浠诲姟鍙戦�佸瓧   
+            System.out.println("缁х画鍐欏叆 MESToPLC,褰撳墠鍊�:" + currentValue);
+            try {
+                Thread.sleep(100); // 渚嬪姣忕妫�鏌ヤ竴娆�
+              } catch (InterruptedException e) {
+                e.printStackTrace();
+              }
+          }
+    }
+
 }
diff --git a/springboot-vue3/src/main/java/com/example/springboot/service/StorageCageService.java b/springboot-vue3/src/main/java/com/example/springboot/service/StorageCageService.java
index 401e8cf..f9d3b9c 100644
--- a/springboot-vue3/src/main/java/com/example/springboot/service/StorageCageService.java
+++ b/springboot-vue3/src/main/java/com/example/springboot/service/StorageCageService.java
@@ -22,6 +22,7 @@
 import com.example.springboot.entity.StorageTask;
 import com.example.springboot.entity.device.PlcParameterObject;
 import com.example.springboot.mapper.AlbaniaMapper;
+import com.example.springboot.mapper.GlassInfoMapper;
 import com.example.springboot.mapper.HomeMapper;
 import com.example.springboot.mapper.QueueMapper;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -41,6 +42,8 @@
     private SpianService spianService;
     @Autowired
     private AlbaniaMapper albaniaMapper;
+    @Autowired
+    private GlassInfoMapper glassInfoMapper;
 
     public void EndTask(int types) {
         String A01glassid1 = spianService.queGlassid("DB103.128", 14).toString();
@@ -250,7 +253,9 @@
             } else {
                 loadrack = storageTask.getShelfRack();
             }
-            storageTask.setstorageCage(homeMapper.SelectStorageByCell(loadrack));
+            // storageTask.setstorageCage(homeMapper.SelectStorageByCell(loadrack));
+            storageTask.setstorageCage(homeMapper.SelectStorageByCellGlass(storageTask.getId()));
+            
         }
         return storageTasks;
     }
@@ -259,38 +264,64 @@
     public List<GlassInfo> SelectMeasure() {
         return homeMapper.SelectMeasure();
     }
-     // 鏌ヨ褰撳墠鑶滅郴鍘氬害
-     public MeasureSetting SelectSetting() {
+
+    // 鏌ヨ褰撳墠鑶滅郴鍘氬害
+    public MeasureSetting SelectSetting() {
         return homeMapper.SelectMeasureSetting();
     }
-     // 鏌ヨ娴嬮噺瀹介珮鍘氳啘绯�
-     public Map StorageCageForm() {
+
+    // 鏌ヨ娴嬮噺瀹介珮鍘氳啘绯�
+    public Map StorageCageForm() {
         return homeMapper.SelectMeasureWidthHeight();
     }
-
-
-    // 鎵嬪姩瀹屾垚浠诲姟
-    public Result FinishTask() {
+    //鎵嬪姩缁撴潫浠诲姟
+    public Result TerminateTask(int id) {
         for (int i = 1; i < 7; i++) {
             int taskcont = albaniaMapper.SelectTaskcount(); // 姝e湪杩涜鐨勪换鍔℃暟閲�
-            System.out.println("浠诲姟鏁伴噺:"+taskcont);
+            System.out.println("浠诲姟鏁伴噺:" + taskcont);
             if (taskcont == 0) {
                 break;
             }
             StorageTask storageTask = homeMapper.SelectStorageTaskById();// 鑾峰彇浠诲姟淇℃伅
             if (storageTask.getTaskType().equals("0")) {
-                System.out.println("瀹屾垚杩涚墖浠诲姟:"+storageTask.getId());
+                System.out.println("缁撴潫杩涚墖浠诲姟:" + storageTask.getId());
+                homeMapper.FinishTask(storageTask.getId(), 2);// 瀹屾垚浠诲姟
+                homeMapper.DeletequeueByGlassid(storageTask.getGlasstype().toString());
+                glassInfoMapper.updateGlassNumber(storageTask.getGlasstype());//鍑忓皯鎵弿娆℃暟
+            } else {
+                System.out.println("缁撴潫鍑虹墖浠诲姟:" + storageTask.getId());
+                homeMapper.FinishTask(storageTask.getId(), 2);// 瀹屾垚浠诲姟
+                UpdateStroageCageByCell(Integer.parseInt(storageTask.getShelfRack()), 1);// 鐜荤拑鏁伴噺+1
+                homeMapper.OutGlassNo(storageTask.getGlasstype());// 杩樺師鍑虹墖瀹屾垚鏁伴噺
+            }
+        }
+        Map<String, Object> map = new HashMap<>();
+        return Result.success(map);
+    }
+
+    // 鎵嬪姩瀹屾垚浠诲姟
+    public Result FinishTask() {
+        for (int i = 1; i < 7; i++) {
+            int taskcont = albaniaMapper.SelectTaskcount(); // 姝e湪杩涜鐨勪换鍔℃暟閲�
+            System.out.println("浠诲姟鏁伴噺:" + taskcont);
+            if (taskcont == 0) {
+                break;
+            }
+            StorageTask storageTask = homeMapper.SelectStorageTaskById();// 鑾峰彇浠诲姟淇℃伅
+            if (storageTask.getTaskType().equals("0")) {
+                System.out.println("瀹屾垚杩涚墖浠诲姟:" + storageTask.getId());
                 homeMapper.FinishTask(storageTask.getId(), 1);// 瀹屾垚浠诲姟
                 UpdateStroageCageByCell(Integer.parseInt(storageTask.getLoadrack()), 1);// 鐜荤拑鏁伴噺+1
-                homeMapper.DeletequeueByGlassid(storageTask.getGlassId());
+                homeMapper.DeletequeueByGlassid(storageTask.getGlasstype().toString());
             } else {
-                System.out.println("瀹屾垚鍑虹墖浠诲姟:"+storageTask.getId());
+                System.out.println("瀹屾垚鍑虹墖浠诲姟:" + storageTask.getId());
                 homeMapper.FinishTask(storageTask.getId(), 1);// 瀹屾垚浠诲姟
                 StorageCage storageCage = homeMapper.SelectStorageByCell(storageTask.getShelfRack());
-                if (storageCage.getNumber()==null||storageCage.getNumber() ==0) {
+                if (storageCage.getNumber() == null || storageCage.getNumber() == 0) {
                     UpdateStroageCageByCell(Integer.parseInt(storageTask.getShelfRack()), 0);// 娓呴櫎鏍煎唴淇℃伅
                 }
-                // homeMapper.AddGlassNo(storageTask.getFlowcard(), storageTask.getMateid(), storageTask.geTier());// 娣诲姞鍑虹墖瀹屾垚鏁伴噺
+                // homeMapper.AddGlassNo(storageTask.getFlowcard(), storageTask.getMateid(),
+                // storageTask.geTier());// 娣诲姞鍑虹墖瀹屾垚鏁伴噺
 
             }
         }
@@ -303,18 +334,18 @@
     public Result LoseTask() {
         for (int i = 1; i < 7; i++) {
             int taskcont = albaniaMapper.SelectTaskcount(); // 姝e湪杩涜鐨勪换鍔℃暟閲�
-            System.out.println("浠诲姟鏁伴噺:"+taskcont);
+            System.out.println("浠诲姟鏁伴噺:" + taskcont);
             if (taskcont == 0) {
                 break;
             }
             StorageTask storageTask = homeMapper.SelectStorageTaskById();// 鑾峰彇浠诲姟淇℃伅
             if (storageTask.getTaskType().equals("0")) {
-                System.out.println("瀹屾垚杩涚墖浠诲姟:"+storageTask.getId());
+                System.out.println("瀹屾垚杩涚墖浠诲姟:" + storageTask.getId());
                 homeMapper.FinishTask(storageTask.getId(), 1);// 瀹屾垚浠诲姟
                 UpdateStroageCageByCell(Integer.parseInt(storageTask.getLoadrack()), 1);// 鐜荤拑鏁伴噺+1
-                homeMapper.DeletequeueByGlassid(storageTask.getGlassId());
+                homeMapper.DeletequeueByGlassid(storageTask.getGlasstype().toString());
             } else {
-                System.out.println("瀹屾垚鍑虹墖浠诲姟:"+storageTask.getId());
+                System.out.println("瀹屾垚鍑虹墖浠诲姟:" + storageTask.getId());
                 homeMapper.FinishTask(storageTask.getId(), 1);// 瀹屾垚浠诲姟
                 StorageCage storageCage = homeMapper.SelectStorageByCell(storageTask.getShelfRack());
                 if (storageCage.getNumber() > 1) {
@@ -387,16 +418,21 @@
         return Result.success(map);
     }
 
-    // 淇敼娴嬮噺淇℃伅
+    // 浜哄伐鍖归厤淇敼娴嬮噺淇℃伅
     public Result UpdateQueue(GlassInfo glassInfo) {
         // 鍒犻櫎鏁版嵁
-        QueueMapper.DeleteQueue();
-        homeMapper.AddQueue(glassInfo.getFlowcard(), glassInfo.getWidth(), glassInfo.getHeight(),
-                glassInfo.getGlasstype(), glassInfo.getThickness(), glassInfo.getTier(),glassInfo.getMateid());
         Map<String, Object> map = new HashMap<>();
-        PlcParameterObject plcmes = PLCAutoMes.PlcMesObject;
-        S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(), (short) 1);
-        map.put("message", "200");
+        // QueueMapper.DeleteQueue();
+        int count = homeMapper.SelectQueue();
+        if (count > 0) {
+            homeMapper.UpdateQueue(glassInfo.getFlowcard(), glassInfo.getWidth(), glassInfo.getHeight(),
+                    glassInfo.getGlasstype(), glassInfo.getThickness(), glassInfo.getTier(), glassInfo.getMateid());
+            PlcParameterObject plcmes = PLCAutoMes.PlcMesObject;
+            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(), (short) 1);
+            map.put("message", "200");
+        }else {
+            map.put("message", "300");
+        } 
         return Result.success(map);
     }
 
@@ -420,7 +456,7 @@
     }
 
     // 寮�濮嬩笂鐗�
-    public Result StartChange(String flowcard,int orderstate) {
+    public Result StartChange(String flowcard, int orderstate) {
         homeMapper.StartChange(flowcard, orderstate);
         Map<String, Object> map = new HashMap<>();
         int state = homeMapper.selectStartChange(flowcard);
@@ -510,7 +546,8 @@
         int count = 1;
         for (Map map : RemoveErrorData) {
             String key = map.get("base").toString() + "_" + map.get("height").toString() + "_"
-                    + map.get("thickness").toString() + "_" + map.get("films").toString()+ "_" + map.get("order").toString();
+                    + map.get("thickness").toString() + "_" + map.get("films").toString() + "_"
+                    + map.get("order").toString() + "_" + map.get("matching").toString();
 
             String tierkey = map.get("order").toString() + "_" + map.get("matching").toString();
 
@@ -530,6 +567,7 @@
                 glasstype = Integer.valueOf(value);
             }
             //
+            
             homeMapper.AddGlassinfo(map.get("order").toString(), glasstype,
                     Integer.parseInt(map.get("matching").toString()) // 闇�瑕佽绠� 閰嶇墖ID
                     , map.get("order").toString() + "-" + count + "" // 闇�瑕佽绠� 鐜荤拑ID

--
Gitblit v1.8.0