From c7093edbf1fb3c91107c457ea13935305e1a9458 Mon Sep 17 00:00:00 2001
From: 严智鑫 <test>
Date: 星期五, 05 七月 2024 14:58:50 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes

---
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassTaskController.java                     |   17 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageFeedTaskServiceImpl.java |    8 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java                    |    5 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml                                                           |    2 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java                           |   16 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-prod.yml                                                         |    5 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/mapper/DamageMapper.java                                                        |    0 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/request/ReportingDamageMapper.java                                           |   16 
 UI-Project/src/views/LoginView.vue                                                                                                                |   41 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleController.java                                              |    2 
 hangzhoumesParent/JsonFile/PlcCacheVerticalGlass.json                                                                                             |  430 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/DatabaseDesignDocUtil.java                                                       |    8 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/entity/Damage.java                                                              |  128 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java                                              |    5 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCage.java                              |    4 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageDTO.java                               |   11 
 UI-Project/auto-imports.d.ts                                                                                                                      |    9 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java                                                |   29 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java                       |   37 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrderMapper.java                                                          |   16 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-prod.yml                                                      |   10 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCage.java                                  |    2 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/dto/DownGlassInfoDTO.java                          |   32 
 UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue                                                                                         |   51 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java             |  153 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/impl/WorkAssignmentServiceImpl.java                            |   35 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java                                                                     |    6 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application-prod.yml                                                          |    8 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/AwaitingRepair.java                                                  |  161 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeProject.java                                                         |   22 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/AppRunnerConfig.java                                                      |    7 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java                  |   62 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java                                                |   51 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java                                    |    7 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java                                          |   39 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingLayoutDTO.java                      |   30 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstionAndDownGlassinfo.java                 |   12 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/request/AwaitingRepairMapper.java                                            |   16 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-prod.yml                                                  |    5 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/Orders.java                                                               |   63 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java              |    6 
 UI-Project/src/views/Identify/identify.vue                                                                                                        |   21 
 UI-Project/src/views/Caching/cachingbefore.vue                                                                                                    |   39 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageFeedTask.java                  |    4 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageFeedTaskService.java          |   11 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/Order.java                                                                |  232 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkServiceImpl.java                                          |   54 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageFeedTaskMapper.java            |   12 
 UI-Project/src/views/UnLoadGlass/loadmachinerack.vue                                                                                              |   60 
 hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml                                                       |   16 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/entity/WorkAssignment.java                                             |   44 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-cz.yml                                                        |    3 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java                           |   24 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/GlassInfo.java                                                        |   18 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/ReportingWork.java                                                           |  176 
 UI-Project/src/views/User/permissions.vue                                                                                                         |  353 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/xml/OrderMapper.xml                                                       |    5 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/entity/OptimizeEngineering.java                                 |   14 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java                  |   60 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/OrdersService.java                                                       |   23 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java                                        |   10 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/SlotSequenceDTO.java                         |   38 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/JsonFile/PlcCacheVerticalGlass.json                                   |  430 +
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownStorageCageDetailsMapper.xml                                      |   41 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-cz.yml                                                           |    2 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java                                                    |   69 
 UI-Project/src/lang/zh.js                                                                                                                         |  371 +
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java      |  205 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/BigStorageCageBaseInfo.java                                                |   32 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrderdetailMapper.java                                                    |   15 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml                                                       |   10 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml                                                       |   24 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java                                         |    4 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-prod.yml                                                           |    5 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassTaskServiceImpl.java                  |   29 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java                               |    5 
 UI-Project/src/views/Slicecage/slicecage.vue                                                                                                      | 1304 +++-
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java                      |    4 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCage.java                                   |    2 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/pom.xml                                                                                  |    5 
 UI-Project/src/views/GlassStorage/MaterialRackManagement.vue                                                                                      |  668 ++
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserController.java                                          |    9 
 UI-Project/src/main.js                                                                                                                            |   10 
 hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/ApplicationTest.java                                                        |    1 
 hangzhoumesParent/common/springsecurity/pom.xml                                                                                                   |    1 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/mapper/WorkAssignmentMapper.java                                       |   16 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java                                       |   13 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/UpWorkstation.java                                       |    6 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java                    |   22 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleServiceImpl.java                                           |   13 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java                                                               |   60 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml                                                            |   15 
 UI-Project/src/views/PurchaseReturn/purchaseReturn.vue                                                                                            |   85 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/entity/OptimizeUpPattenUsage.java                             |    6 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java                                       |   70 
 UI-Project/src/views/User/rolelist.vue                                                                                                            |  241 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageOutTaskServiceImpl.java  |   16 
 UI-Project/src/views/Returns/returns.vue                                                                                                          |  146 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java                                         |   20 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageOutTaskMapper.java             |    8 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageOutTaskService.java           |    4 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/Reportingdamage.java                                                 |   38 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java               |   29 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java                                   |   17 
 hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/LoadGlassModuleApplicationTest.java                                         |   62 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/Orderdetail.java                                                          |   65 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml                                               |   75 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java     |   15 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/ReportingWorkMapper.java                                                     |   16 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/ReportingWorkController.java                                             |   40 
 UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue                                                                                         |   10 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/controller/WorkAssignmentController.java                               |   36 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java                                        |  600 +-
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageDetailsMapper.java                      |    8 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrdersMapper.java                                                         |   15 
 UI-Project/package.json                                                                                                                           |    8 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstationTask.java                           |    6 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeLayout.java                                                          |    8 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCageDetails.java                            |   14 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/uppattenusage/entity/UpPattenUsage.java                                                |    6 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml                                                              |    9 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java                             |    8 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java                                                 |    7 
 UI-Project/src/views/RegisterView.vue                                                                                                             |   66 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/controller/SysMenuController.java                                              |   16 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java         |   38 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java                                                      |   24 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java        |   16 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java                                                  |    5 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java                                   |   28 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownCacheGlassTask.java                                               |  293 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java                                             |  102 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-cz.yml                                                             |    5 
 UI-Project/src/views/PurchaseReturn/purchaseStorage.vue                                                                                           |    2 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/ReportingWorkService.java                                                   |   33 
 UI-Project/src/router/index.js                                                                                                                    |   15 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageOutTaskMapper.xml                                |   14 
 hangzhoumesParent/moduleService/UnLoadGlassModule/pom.xml                                                                                         |    6 
 UI-Project/src/lang/index.js                                                                                                                      |   18 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java                          |    1 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java                 |   23 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcScreenTask.java                                                 |   88 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageFeedTaskMapper.xml                               |   15 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java           |  155 
 UI-Project/src/layout/MainErpView.vue                                                                                                             |  182 
 hangzhoumesParent/moduleService/CacheGlassModule/pom.xml                                                                                          |    6 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java                                           |  520 ++
 UI-Project/src/views/Caching/cachingun.vue                                                                                                        |  205 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageController.java                |    3 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/impl/OrdersServiceImpl.java                                              |   44 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java                   |   23 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/S7object.java                                                      |    2 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java          |    4 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-cz.yml                                                    |    4 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/entity/Engineering.java                                         |   12 
 UI-Project/src/views/User/userlist.vue                                                                                                            |  187 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/WorkAssignmentService.java                                     |   17 
 hangzhoumesParent/common/servicebase/pom.xml                                                                                                      |    4 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/controller/OrderController.java                                                  |   39 
 UI-Project/src/views/StockBasicData/stockBasicData.vue                                                                                            |   53 
 UI-Project/src/views/UnLoadGlass/Landingindication.vue                                                                                            |   12 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml                                |   74 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java                       |   37 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-dev.yml                                                   |    4 
 UI-Project/src/lang/en.js                                                                                                                         |  302 +
 /dev/null                                                                                                                                         |   18 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java                                               |   11 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/test/java/com/mes/TemperingApplicationTest.java                                          |  120 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcdownGlass.json                                                   |  502 -
 JsonFile/PlcdownGlass.json                                                                                                                        |  502 -
 hangzhoumesParent/JsonFile/PlcdownGlass.json                                                                                                      |  502 -
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/mapper/xml/WorkAssignmentMapper.xml                                    |    5 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java              |   11 
 UI-Project/package-lock.json                                                                                                                      | 1349 +++--
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeDetail.java                                                          |   12 
 JsonFile/PlcCacheVerticalGlass.json                                                                                                               |  430 +
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java                           |   12 
 UI-Project/vite.config.js                                                                                                                         |   16 
 178 files changed, 10,057 insertions(+), 3,993 deletions(-)

diff --git a/JsonFile/PlcCacheVerticalGlass.json b/JsonFile/PlcCacheVerticalGlass.json
index 5838dac..10e8e33 100644
--- a/JsonFile/PlcCacheVerticalGlass.json
+++ b/JsonFile/PlcCacheVerticalGlass.json
@@ -1,57 +1,377 @@
 {
-  "plcAddressBegin":"DB.0",
-  "plcAddressLenght":"72",
-  "dataType":"word",
-  "parameteInfor":[
-    {
-      "codeId": "D01Request",
-      "addressIndex":"0",
-      "addressLenght":"2",
-      "ratio":"1",
-      "unit":"m/min"
-    },
-    {
-      "codeId": "D01ID1",
-      "addressIndex":"2",
-      "addressLenght":"6",
-      "ratio":"1",
-      "unit":""
-    },
-    {
-      "codeId": "D04Request",
-      "addressIndex":"8",
-      "addressLenght":"2",
-      "ratio":"1",
-      "unit":""
-    },
-    {
-      "codeId": "D04ID1",
-      "addressIndex":"10",
-      "addressLenght":"6",
-      "ratio":"1",
-      "unit":""
-    },
-    {
-      "codeId": "D02Go",
-      "addressIndex":"20",
-      "addressLenght":"2",
-      "ratio":"1",
-      "unit":""
-    },
-    {
-      "codeId": "D05Go",
-      "addressIndex":"22",
-      "addressLenght":"2",
-      "ratio":"1",
-      "unit":""
-    }
-  ,
-    {
-      "codeId": "DeviceStatus",
-      "addressIndex":"70",
-      "addressLenght":"2",
-      "ratio":"1",
-      "unit":""
-    }
-  ]
+	"plcAddressBegin": "DB14.0",
+	"plcAddressLenght": "938",
+	"dataType": "word",
+	"parameteInfor": [{
+			"codeId": "D01ID",
+			"addressIndex": "0",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D02ID",
+			"addressIndex": "32",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ID1",
+			"addressIndex": "64",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ID2",
+			"addressIndex": "96",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ID3",
+			"addressIndex": "128",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ID4",
+			"addressIndex": "160",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ID5",
+			"addressIndex": "192",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ID6",
+			"addressIndex": "224",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D04ID",
+			"addressIndex": "256",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ID1",
+			"addressIndex": "288",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ID2",
+			"addressIndex": "328",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ID3",
+			"addressIndex": "352",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ID4",
+			"addressIndex": "384",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ID5",
+			"addressIndex": "416",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ID6",
+			"addressIndex": "448",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01ID1",
+			"addressIndex": "480",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01ID2",
+			"addressIndex": "512",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01ID3",
+			"addressIndex": "544",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01ID4",
+			"addressIndex": "576",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01ID5",
+			"addressIndex": "608",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01ID6",
+			"addressIndex": "640",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02ID1",
+			"addressIndex": "672",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02ID2",
+			"addressIndex": "704",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02ID3",
+			"addressIndex": "736",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02ID4",
+			"addressIndex": "768",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02ID5",
+			"addressIndex": "800",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02ID6",
+			"addressIndex": "832",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ToMES",
+			"addressIndex": "874",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ToMES",
+			"addressIndex": "876",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D01ToMES",
+			"addressIndex": "878",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D04ToMES",
+			"addressIndex": "880",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "MESToD03",
+			"addressIndex": "888",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "MESToD05",
+			"addressIndex": "890",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "MESToPLC",
+			"addressIndex": "892",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "StartAddToImport1",
+			"addressIndex": "914",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "StartAddToImport2",
+			"addressIndex": "916",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "StartAddToImport3",
+			"addressIndex": "918",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "StartAddToImport4",
+			"addressIndex": "920",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "StartAddToImport5",
+			"addressIndex": "922",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "StartAddToImport6",
+			"addressIndex": "924",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "TargetAddToImport1",
+			"addressIndex": "926",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "TargetAddToImport2",
+			"addressIndex": "928",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "TargetAddToImport3",
+			"addressIndex": "930",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "TargetAddToImport4",
+			"addressIndex": "932",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "TargetAddToImport5",
+			"addressIndex": "934",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "TargetAddToImport6",
+			"addressIndex": "936",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "deviceState",
+			"addressIndex": "864",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01State",
+			"addressIndex": "866",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02State",
+			"addressIndex": "868",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03State",
+			"addressIndex": "870",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05State",
+			"addressIndex": "872",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "MESToD01",
+			"addressIndex": "894",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "MESToD04",
+			"addressIndex": "896",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		}
+	]
 }
\ No newline at end of file
diff --git a/JsonFile/PlcdownGlass.json b/JsonFile/PlcdownGlass.json
index c813b1d..98366a9 100644
--- a/JsonFile/PlcdownGlass.json
+++ b/JsonFile/PlcdownGlass.json
@@ -1,362 +1,144 @@
 {
-  "plcAddressBegin": "DB100.0",
-  "plcAddressLenght": "142",
-  "dataType": "word",
-  "parameteInfor": [
-    {
-      "codeId": "RequestWord",
-      "addressIndex": "0",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G04ID",
-      "addressIndex": "2",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G06RobotTaskRequestWord",
-      "addressIndex": "4",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G06ID",
-      "addressIndex": "6",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G11RobotTaskRequestWord",
-      "addressIndex": "8",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G011ID",
-      "addressIndex": "10",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "12",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "14",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "16",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "18",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "MESSendingWord",
-      "addressIndex": "20",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InputGrid",
-      "addressIndex": "22",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "OutputGrid",
-      "addressIndex": "24",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "OutputID",
-      "addressIndex": "26",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "FrontOrRearLowerSlice",
-      "addressIndex": "28",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "30",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G06RobotTaskReply",
-      "addressIndex": "32",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G06Rack",
-      "addressIndex": "34",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G11RobotTaskReply",
-      "addressIndex": "36",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G11Rack",
-      "addressIndex": "38",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "40",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "42",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "44",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "46",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "48",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "50",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "52",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "54",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "MESTaskState",
-      "addressIndex": "56",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "58",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "AlarmState",
-      "addressIndex": "60",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "Alarm1",
-      "addressIndex": "62",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "Alarm2",
-      "addressIndex": "64",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "Alarm3",
-      "addressIndex": "66",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "Alarm4",
-      "addressIndex": "68",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "neirong",
-      "addressIndex": "70",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "device",
-      "addressIndex": "72",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "74",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "76",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut1",
-      "addressIndex": "78",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut2",
-      "addressIndex": "80",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut3",
-      "addressIndex": "82",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut4",
-      "addressIndex": "84",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut5",
-      "addressIndex": "86",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut6",
-      "addressIndex": "88",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut7",
-      "addressIndex": "90",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "92",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "94",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "96",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "98",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "100",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G04ActionState",
-      "addressIndex": "102",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G05ActionState",
-      "addressIndex": "104",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G06ActionState",
-      "addressIndex": "106",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G07ActionState",
-      "addressIndex": "108",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G08ActionState",
-      "addressIndex": "110",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G09ActionState",
-      "addressIndex": "112",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G10ActionState",
-      "addressIndex": "114",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G11ActionState",
-      "addressIndex": "116",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G12ActionState",
-      "addressIndex": "118",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G13ActionState",
-      "addressIndex": "120",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G04IDS",
-      "addressIndex": "122",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G05IDS",
-      "addressIndex": "124",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G06IDS",
-      "addressIndex": "126",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G07IDS",
-      "addressIndex": "128",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G08IDS",
-      "addressIndex": "130",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G09IDS",
-      "addressIndex": "132",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G10IDS",
-      "addressIndex": "134",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G11IDS",
-      "addressIndex": "136",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G12IDS",
-      "addressIndex": "138",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G13ID",
-      "addressIndex": "140",
-      "addressLenght": "2"
-    }
-  ]
+	"plcAddressBegin": "DB11.0",
+	"plcAddressLenght": "92",
+	"dataType": "word",
+	"parameteInfor": [
+
+		{
+			"codeId": "requestWord",
+			"addressIndex": "0",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "requestID",
+			"addressIndex": "2",
+			"addressLenght": "30"
+		},
+		{
+			"codeId": "currentCell",
+			"addressIndex": "32",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "glassStatus08",
+			"addressIndex": "36",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "glassStatus06",
+			"addressIndex": "40",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "glassStatus11",
+			"addressIndex": "42",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "glassStatus13",
+			"addressIndex": "44",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G04_error_status",
+			"addressIndex": "48",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G05_error_status",
+			"addressIndex": "50",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G06_error_status",
+			"addressIndex": "52",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "robot_error_status",
+			"addressIndex": "54",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G08_error_status",
+			"addressIndex": "56",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G09_error_status",
+			"addressIndex": "58",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G10_error_status",
+			"addressIndex": "60",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G11_error_status",
+			"addressIndex": "62",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "robot_error_status",
+			"addressIndex": "64",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G13_error_status",
+			"addressIndex": "66",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "confirmationWord",
+			"addressIndex": "72",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G06_prohibit_film_production",
+			"addressIndex": "74",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G11_prohibit_film_production",
+			"addressIndex": "76",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G13_prohibit_film_production",
+			"addressIndex": "78",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "Glass_width",
+			"addressIndex": "80",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "Glass_height",
+			"addressIndex": "82",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "Glass_thickness",
+			"addressIndex": "84",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "Start_cell",
+			"addressIndex": "86",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "End_cell",
+			"addressIndex": "88",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "task_type",
+			"addressIndex": "90",
+			"addressLenght": "2"
+		}
+
+	]
 }
\ No newline at end of file
diff --git a/UI-Project/auto-imports.d.ts b/UI-Project/auto-imports.d.ts
new file mode 100644
index 0000000..66c4de4
--- /dev/null
+++ b/UI-Project/auto-imports.d.ts
@@ -0,0 +1,9 @@
+/* eslint-disable */
+/* prettier-ignore */
+// @ts-nocheck
+// noinspection JSUnusedGlobalSymbols
+// Generated by unplugin-auto-import
+export {}
+declare global {
+  const useI18n: typeof import('vue-i18n')['useI18n']
+}
diff --git a/UI-Project/package-lock.json b/UI-Project/package-lock.json
index ba2dc0c..df7b41a 100644
--- a/UI-Project/package-lock.json
+++ b/UI-Project/package-lock.json
@@ -11,6 +11,8 @@
         "@element-plus/icons-vue": "^2.1.0",
         "@vue-macros/reactivity-transform": "^0.3.23",
         "axios": "^1.6.8",
+        "chart.js": "^4.4.3",
+        "echarts": "^5.5.0",
         "element-plus": "^2.4.0",
         "moment": "^2.30.1",
         "pinia": "^2.1.6",
@@ -18,7 +20,8 @@
         "sortablejs": "^1.15.1",
         "sweetalert2": "^11.10.7",
         "vue": "^3.3.4",
-        "vue-i18n": "^9.13.1",
+        "vue-draggable-plus": "^0.5.0",
+        "vue-i18n": "^9.10.1",
         "vue-router": "^4.2.4",
         "vxe-table": "^4.5.15",
         "xe-utils": "^3.5.14",
@@ -26,9 +29,19 @@
       },
       "devDependencies": {
         "@types/sortablejs": "^1.15.7",
-        "@vitejs/plugin-vue": "^4.3.4",
+        "@vitejs/plugin-vue": "^4.6.2",
         "http-proxy-middleware": "^3.0.0",
+        "unplugin-auto-import": "^0.17.6",
         "vite": "^4.4.9"
+      }
+    },
+    "node_modules/@antfu/utils": {
+      "version": "0.7.8",
+      "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.8.tgz",
+      "integrity": "sha512-rWQkqXRESdjXtc+7NRfK9lASQjpXJu1ayp7qi1d23zZorY+wBHVLHHoVcMsEnkqEBWTFqbztO7/QdJFzyEcLTg==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
       }
     },
     "node_modules/@babel/helper-string-parser": {
@@ -87,348 +100,12 @@
         "vue": "^3.2.0"
       }
     },
-    "node_modules/@esbuild/android-arm": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
-      "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/android-arm64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
-      "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/android-x64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
-      "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/darwin-arm64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
-      "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/darwin-x64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
-      "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
-      "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/freebsd-x64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
-      "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-arm": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
-      "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-arm64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
-      "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-ia32": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
-      "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-loong64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
-      "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
-      "cpu": [
-        "loong64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-mips64el": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
-      "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
-      "cpu": [
-        "mips64el"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-ppc64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
-      "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-riscv64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
-      "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-s390x": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
-      "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
-      "cpu": [
-        "s390x"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-x64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
-      "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/netbsd-x64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
-      "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "netbsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/openbsd-x64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
-      "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/sunos-x64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
-      "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "sunos"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/win32-arm64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
-      "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
     "node_modules/@esbuild/win32-ia32": {
       "version": "0.18.20",
       "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
       "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
       "cpu": [
         "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/win32-x64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
-      "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
-      "cpu": [
-        "x64"
       ],
       "dev": true,
       "optional": true,
@@ -498,6 +175,46 @@
       "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
       "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
     },
+    "node_modules/@kurkle/color": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmmirror.com/@kurkle/color/-/color-0.3.2.tgz",
+      "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw=="
+    },
+    "node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "dev": true,
+      "dependencies": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "dev": true,
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "dev": true,
+      "dependencies": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
     "node_modules/@popperjs/core": {
       "name": "@sxzz/popperjs-es",
       "version": "2.11.7",
@@ -509,9 +226,9 @@
       }
     },
     "node_modules/@rollup/pluginutils": {
-      "version": "5.0.5",
-      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.5.tgz",
-      "integrity": "sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==",
+      "version": "5.1.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz",
+      "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==",
       "dependencies": {
         "@types/estree": "^1.0.0",
         "estree-walker": "^2.0.2",
@@ -566,10 +283,9 @@
       }
     },
     "node_modules/@types/sortablejs": {
-      "version": "1.15.7",
-      "resolved": "https://registry.npmmirror.com/@types/sortablejs/-/sortablejs-1.15.7.tgz",
-      "integrity": "sha512-PvgWCx1Lbgm88FdQ6S7OGvLIjWS66mudKPlfdrWil0TjsO5zmoZmzoKiiwRShs1dwPgrlkr0N4ewuy0/+QUXYQ==",
-      "dev": true
+      "version": "1.15.8",
+      "resolved": "https://registry.npmmirror.com/@types/sortablejs/-/sortablejs-1.15.8.tgz",
+      "integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg=="
     },
     "node_modules/@types/web-bluetooth": {
       "version": "0.0.16",
@@ -577,15 +293,15 @@
       "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="
     },
     "node_modules/@vitejs/plugin-vue": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.4.0.tgz",
-      "integrity": "sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==",
+      "version": "4.6.2",
+      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz",
+      "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==",
       "dev": true,
       "engines": {
         "node": "^14.18.0 || >=16.0.0"
       },
       "peerDependencies": {
-        "vite": "^4.0.0",
+        "vite": "^4.0.0 || ^5.0.0",
         "vue": "^3.2.25"
       }
     },
@@ -823,9 +539,9 @@
       }
     },
     "node_modules/acorn": {
-      "version": "8.10.0",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
-      "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
+      "version": "8.12.0",
+      "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.12.0.tgz",
+      "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==",
       "bin": {
         "acorn": "bin/acorn"
       },
@@ -843,7 +559,7 @@
     },
     "node_modules/anymatch": {
       "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+      "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
       "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
       "dependencies": {
         "normalize-path": "^3.0.0",
@@ -886,12 +602,30 @@
         "proxy-from-env": "^1.1.0"
       }
     },
+    "node_modules/balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+      "dev": true
+    },
     "node_modules/binary-extensions": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
-      "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz",
+      "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
       "engines": {
         "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0"
       }
     },
     "node_modules/braces": {
@@ -917,16 +651,21 @@
         "node": ">=0.8"
       }
     },
+    "node_modules/chart.js": {
+      "version": "4.4.3",
+      "resolved": "https://registry.npmmirror.com/chart.js/-/chart.js-4.4.3.tgz",
+      "integrity": "sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw==",
+      "dependencies": {
+        "@kurkle/color": "^0.3.0"
+      },
+      "engines": {
+        "pnpm": ">=8"
+      }
+    },
     "node_modules/chokidar": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
-      "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
-      "funding": [
-        {
-          "type": "individual",
-          "url": "https://paulmillr.com/funding/"
-        }
-      ],
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz",
+      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
       "dependencies": {
         "anymatch": "~3.1.2",
         "braces": "~3.0.2",
@@ -938,6 +677,9 @@
       },
       "engines": {
         "node": ">= 8.10.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
       },
       "optionalDependencies": {
         "fsevents": "~2.3.2"
@@ -961,6 +703,12 @@
       "engines": {
         "node": ">= 0.8"
       }
+    },
+    "node_modules/confbox": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.1.7.tgz",
+      "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==",
+      "dev": true
     },
     "node_modules/crc-32": {
       "version": "1.2.2",
@@ -1012,6 +760,15 @@
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/dom-zindex/-/dom-zindex-1.0.1.tgz",
       "integrity": "sha512-M/MERVDZ8hguvjl6MAlLWSLYLS7PzEyXaTb5gEeJ+SF+e9iUC0sdvlzqe91MMDHBoy+nqw7wKcUOrDSyvMCrRg=="
+    },
+    "node_modules/echarts": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.5.0.tgz",
+      "integrity": "sha512-rNYnNCzqDAPCr4m/fqyUFv7fD9qIsd50S6GDFgO1DxZhncCsNsG7IfUlAlvZe5oSEQxtsjnHiUuppzccry93Xw==",
+      "dependencies": {
+        "tslib": "2.3.0",
+        "zrender": "5.5.0"
+      }
     },
     "node_modules/element-plus": {
       "version": "2.4.0",
@@ -1080,6 +837,18 @@
       "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
       "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
     },
+    "node_modules/escape-string-regexp": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+      "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/estree-walker": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
@@ -1090,6 +859,31 @@
       "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz",
       "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
       "dev": true
+    },
+    "node_modules/fast-glob": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz",
+      "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+      "dev": true,
+      "dependencies": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.4"
+      },
+      "engines": {
+        "node": ">=8.6.0"
+      }
+    },
+    "node_modules/fastq": {
+      "version": "1.17.1",
+      "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz",
+      "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+      "dev": true,
+      "dependencies": {
+        "reusify": "^1.0.4"
+      }
     },
     "node_modules/fill-range": {
       "version": "7.0.1",
@@ -1136,19 +930,6 @@
         "node": ">=0.8"
       }
     },
-    "node_modules/fsevents": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
-      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
-      "hasInstallScript": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
-      }
-    },
     "node_modules/glob-parent": {
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
@@ -1193,7 +974,7 @@
     },
     "node_modules/is-binary-path": {
       "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+      "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
       "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
       "dependencies": {
         "binary-extensions": "^2.0.0"
@@ -1238,6 +1019,12 @@
         "node": ">=10"
       }
     },
+    "node_modules/js-tokens": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-9.0.0.tgz",
+      "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==",
+      "dev": true
+    },
     "node_modules/local-pkg": {
       "version": "0.4.3",
       "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz",
@@ -1270,14 +1057,11 @@
       }
     },
     "node_modules/magic-string": {
-      "version": "0.30.5",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz",
-      "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==",
+      "version": "0.30.10",
+      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.10.tgz",
+      "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
       "dependencies": {
         "@jridgewell/sourcemap-codec": "^1.4.15"
-      },
-      "engines": {
-        "node": ">=12"
       }
     },
     "node_modules/magic-string-ast": {
@@ -1295,6 +1079,15 @@
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
       "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
+    },
+    "node_modules/merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 8"
+      }
     },
     "node_modules/micromatch": {
       "version": "4.0.5",
@@ -1326,6 +1119,33 @@
       },
       "engines": {
         "node": ">= 0.6"
+      }
+    },
+    "node_modules/minimatch": {
+      "version": "9.0.4",
+      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.4.tgz",
+      "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/mlly": {
+      "version": "1.7.1",
+      "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.7.1.tgz",
+      "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==",
+      "dev": true,
+      "dependencies": {
+        "acorn": "^8.11.3",
+        "pathe": "^1.1.2",
+        "pkg-types": "^1.1.1",
+        "ufo": "^1.5.3"
       }
     },
     "node_modules/moment": {
@@ -1361,7 +1181,7 @@
     },
     "node_modules/normalize-path": {
       "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+      "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
       "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
       "engines": {
         "node": ">=0.10.0"
@@ -1373,9 +1193,9 @@
       "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
     },
     "node_modules/pathe": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz",
-      "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q=="
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz",
+      "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="
     },
     "node_modules/picocolors": {
       "version": "1.0.0",
@@ -1451,6 +1271,17 @@
         }
       }
     },
+    "node_modules/pkg-types": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.1.1.tgz",
+      "integrity": "sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==",
+      "dev": true,
+      "dependencies": {
+        "confbox": "^0.1.7",
+        "mlly": "^1.7.0",
+        "pathe": "^1.1.2"
+      }
+    },
     "node_modules/postcss": {
       "version": "8.4.31",
       "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
@@ -1483,9 +1314,29 @@
       "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
       "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
     },
+    "node_modules/queue-microtask": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
     "node_modules/readdirp": {
       "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+      "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
       "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
       "dependencies": {
         "picomatch": "^2.2.1"
@@ -1499,6 +1350,16 @@
       "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz",
       "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
       "dev": true
+    },
+    "node_modules/reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "dev": true,
+      "engines": {
+        "iojs": ">=1.0.0",
+        "node": ">=0.10.0"
+      }
     },
     "node_modules/rollup": {
       "version": "3.29.4",
@@ -1515,6 +1376,35 @@
       "optionalDependencies": {
         "fsevents": "~2.3.2"
       }
+    },
+    "node_modules/run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "dependencies": {
+        "queue-microtask": "^1.2.2"
+      }
+    },
+    "node_modules/scule": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz",
+      "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==",
+      "dev": true
     },
     "node_modules/sortablejs": {
       "version": "1.15.1",
@@ -1538,6 +1428,18 @@
       },
       "engines": {
         "node": ">=0.8"
+      }
+    },
+    "node_modules/strip-literal": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-2.1.0.tgz",
+      "integrity": "sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==",
+      "dev": true,
+      "dependencies": {
+        "js-tokens": "^9.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
       }
     },
     "node_modules/sweetalert2": {
@@ -1564,21 +1466,131 @@
         "node": ">=8.0"
       }
     },
+    "node_modules/tslib": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
+      "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+    },
+    "node_modules/ufo": {
+      "version": "1.5.3",
+      "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.5.3.tgz",
+      "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==",
+      "dev": true
+    },
     "node_modules/undici-types": {
       "version": "5.26.5",
       "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz",
       "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
       "dev": true
     },
-    "node_modules/unplugin": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.5.0.tgz",
-      "integrity": "sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A==",
+    "node_modules/unimport": {
+      "version": "3.7.2",
+      "resolved": "https://registry.npmmirror.com/unimport/-/unimport-3.7.2.tgz",
+      "integrity": "sha512-91mxcZTadgXyj3lFWmrGT8GyoRHWuE5fqPOjg5RVtF6vj+OfM5G6WCzXjuYtSgELE5ggB34RY4oiCSEP8I3AHw==",
+      "dev": true,
       "dependencies": {
-        "acorn": "^8.10.0",
-        "chokidar": "^3.5.3",
+        "@rollup/pluginutils": "^5.1.0",
+        "acorn": "^8.11.3",
+        "escape-string-regexp": "^5.0.0",
+        "estree-walker": "^3.0.3",
+        "fast-glob": "^3.3.2",
+        "local-pkg": "^0.5.0",
+        "magic-string": "^0.30.10",
+        "mlly": "^1.7.0",
+        "pathe": "^1.1.2",
+        "pkg-types": "^1.1.1",
+        "scule": "^1.3.0",
+        "strip-literal": "^2.1.0",
+        "unplugin": "^1.10.1"
+      }
+    },
+    "node_modules/unimport/node_modules/estree-walker": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz",
+      "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+      "dev": true,
+      "dependencies": {
+        "@types/estree": "^1.0.0"
+      }
+    },
+    "node_modules/unimport/node_modules/local-pkg": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.0.tgz",
+      "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==",
+      "dev": true,
+      "dependencies": {
+        "mlly": "^1.4.2",
+        "pkg-types": "^1.0.3"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/unplugin": {
+      "version": "1.10.1",
+      "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.10.1.tgz",
+      "integrity": "sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==",
+      "dependencies": {
+        "acorn": "^8.11.3",
+        "chokidar": "^3.6.0",
         "webpack-sources": "^3.2.3",
-        "webpack-virtual-modules": "^0.5.0"
+        "webpack-virtual-modules": "^0.6.1"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/unplugin-auto-import": {
+      "version": "0.17.6",
+      "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.17.6.tgz",
+      "integrity": "sha512-dmX0Pex5DzMzVuALkexboOZvh51fL/BD6aoPO7qHoTYGlQp0GRKsREv2KMF1lzYI9SXKQiRxAjwzbQnrFFNydQ==",
+      "dev": true,
+      "dependencies": {
+        "@antfu/utils": "^0.7.8",
+        "@rollup/pluginutils": "^5.1.0",
+        "fast-glob": "^3.3.2",
+        "local-pkg": "^0.5.0",
+        "magic-string": "^0.30.10",
+        "minimatch": "^9.0.4",
+        "unimport": "^3.7.1",
+        "unplugin": "^1.10.1"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      },
+      "peerDependencies": {
+        "@nuxt/kit": "^3.2.2",
+        "@vueuse/core": "*"
+      },
+      "peerDependenciesMeta": {
+        "@nuxt/kit": {
+          "optional": true
+        },
+        "@vueuse/core": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/unplugin-auto-import/node_modules/local-pkg": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.0.tgz",
+      "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==",
+      "dev": true,
+      "dependencies": {
+        "mlly": "^1.4.2",
+        "pkg-types": "^1.0.3"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
       }
     },
     "node_modules/vite": {
@@ -1648,6 +1660,22 @@
         "@vue/shared": "3.3.4"
       }
     },
+    "node_modules/vue-draggable-plus": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmmirror.com/vue-draggable-plus/-/vue-draggable-plus-0.5.0.tgz",
+      "integrity": "sha512-A5TT5+M5JceROSjPO9aDZTsrSN1TetEs419czPlboomarSiGIBIxTp2WD7XH53EHMrbO7Qo+leRiHWV/rMlyjA==",
+      "dependencies": {
+        "@types/sortablejs": "^1.15.8"
+      },
+      "peerDependencies": {
+        "@types/sortablejs": "^1.15.0"
+      },
+      "peerDependenciesMeta": {
+        "@vue/composition-api": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/vue-i18n": {
       "version": "9.13.1",
       "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.13.1.tgz",
@@ -1659,6 +1687,9 @@
       },
       "engines": {
         "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/kazupon"
       },
       "peerDependencies": {
         "vue": "^3.0.0"
@@ -1700,9 +1731,9 @@
       }
     },
     "node_modules/webpack-virtual-modules": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz",
-      "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw=="
+      "version": "0.6.2",
+      "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
+      "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="
     },
     "node_modules/wmf": {
       "version": "1.0.2",
@@ -1744,9 +1775,23 @@
       "engines": {
         "node": ">=0.8"
       }
+    },
+    "node_modules/zrender": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.5.0.tgz",
+      "integrity": "sha512-O3MilSi/9mwoovx77m6ROZM7sXShR/O/JIanvzTwjN3FORfLSr81PsUGd7jlaYOeds9d8tw82oP44+3YucVo+w==",
+      "dependencies": {
+        "tslib": "2.3.0"
+      }
     }
   },
   "dependencies": {
+    "@antfu/utils": {
+      "version": "0.7.8",
+      "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.8.tgz",
+      "integrity": "sha512-rWQkqXRESdjXtc+7NRfK9lASQjpXJu1ayp7qi1d23zZorY+wBHVLHHoVcMsEnkqEBWTFqbztO7/QdJFzyEcLTg==",
+      "dev": true
+    },
     "@babel/helper-string-parser": {
       "version": "7.22.5",
       "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
@@ -1783,157 +1828,10 @@
       "integrity": "sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==",
       "requires": {}
     },
-    "@esbuild/android-arm": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
-      "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/android-arm64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
-      "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/android-x64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
-      "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/darwin-arm64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
-      "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/darwin-x64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
-      "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/freebsd-arm64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
-      "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/freebsd-x64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
-      "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/linux-arm": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
-      "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/linux-arm64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
-      "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/linux-ia32": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
-      "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/linux-loong64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
-      "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/linux-mips64el": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
-      "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/linux-ppc64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
-      "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/linux-riscv64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
-      "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/linux-s390x": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
-      "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/linux-x64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
-      "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/netbsd-x64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
-      "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/openbsd-x64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
-      "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/sunos-x64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
-      "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/win32-arm64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
-      "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
-      "dev": true,
-      "optional": true
-    },
     "@esbuild/win32-ia32": {
       "version": "0.18.20",
       "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
       "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/win32-x64": {
-      "version": "0.18.20",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
-      "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
       "dev": true,
       "optional": true
     },
@@ -1987,15 +1885,46 @@
       "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
       "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
     },
+    "@kurkle/color": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmmirror.com/@kurkle/color/-/color-0.3.2.tgz",
+      "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw=="
+    },
+    "@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      }
+    },
+    "@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "dev": true
+    },
+    "@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      }
+    },
     "@popperjs/core": {
       "version": "npm:@sxzz/popperjs-es@2.11.7",
       "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
       "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
     },
     "@rollup/pluginutils": {
-      "version": "5.0.5",
-      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.5.tgz",
-      "integrity": "sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==",
+      "version": "5.1.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz",
+      "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==",
       "requires": {
         "@types/estree": "^1.0.0",
         "estree-walker": "^2.0.2",
@@ -2039,10 +1968,9 @@
       }
     },
     "@types/sortablejs": {
-      "version": "1.15.7",
-      "resolved": "https://registry.npmmirror.com/@types/sortablejs/-/sortablejs-1.15.7.tgz",
-      "integrity": "sha512-PvgWCx1Lbgm88FdQ6S7OGvLIjWS66mudKPlfdrWil0TjsO5zmoZmzoKiiwRShs1dwPgrlkr0N4ewuy0/+QUXYQ==",
-      "dev": true
+      "version": "1.15.8",
+      "resolved": "https://registry.npmmirror.com/@types/sortablejs/-/sortablejs-1.15.8.tgz",
+      "integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg=="
     },
     "@types/web-bluetooth": {
       "version": "0.0.16",
@@ -2050,9 +1978,9 @@
       "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="
     },
     "@vitejs/plugin-vue": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.4.0.tgz",
-      "integrity": "sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==",
+      "version": "4.6.2",
+      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz",
+      "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==",
       "dev": true,
       "requires": {}
     },
@@ -2227,9 +2155,9 @@
       }
     },
     "acorn": {
-      "version": "8.10.0",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
-      "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw=="
+      "version": "8.12.0",
+      "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.12.0.tgz",
+      "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw=="
     },
     "adler-32": {
       "version": "1.3.1",
@@ -2238,7 +2166,7 @@
     },
     "anymatch": {
       "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+      "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
       "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
       "requires": {
         "normalize-path": "^3.0.0",
@@ -2275,10 +2203,25 @@
         "proxy-from-env": "^1.1.0"
       }
     },
+    "balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+      "dev": true
+    },
     "binary-extensions": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
-      "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz",
+      "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="
+    },
+    "brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dev": true,
+      "requires": {
+        "balanced-match": "^1.0.0"
+      }
     },
     "braces": {
       "version": "3.0.2",
@@ -2297,10 +2240,18 @@
         "crc-32": "~1.2.0"
       }
     },
+    "chart.js": {
+      "version": "4.4.3",
+      "resolved": "https://registry.npmmirror.com/chart.js/-/chart.js-4.4.3.tgz",
+      "integrity": "sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw==",
+      "requires": {
+        "@kurkle/color": "^0.3.0"
+      }
+    },
     "chokidar": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
-      "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz",
+      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
       "requires": {
         "anymatch": "~3.1.2",
         "braces": "~3.0.2",
@@ -2324,6 +2275,12 @@
       "requires": {
         "delayed-stream": "~1.0.0"
       }
+    },
+    "confbox": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.1.7.tgz",
+      "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==",
+      "dev": true
     },
     "crc-32": {
       "version": "1.2.2",
@@ -2358,6 +2315,15 @@
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/dom-zindex/-/dom-zindex-1.0.1.tgz",
       "integrity": "sha512-M/MERVDZ8hguvjl6MAlLWSLYLS7PzEyXaTb5gEeJ+SF+e9iUC0sdvlzqe91MMDHBoy+nqw7wKcUOrDSyvMCrRg=="
+    },
+    "echarts": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.5.0.tgz",
+      "integrity": "sha512-rNYnNCzqDAPCr4m/fqyUFv7fD9qIsd50S6GDFgO1DxZhncCsNsG7IfUlAlvZe5oSEQxtsjnHiUuppzccry93Xw==",
+      "requires": {
+        "tslib": "2.3.0",
+        "zrender": "5.5.0"
+      }
     },
     "element-plus": {
       "version": "2.4.0",
@@ -2416,6 +2382,12 @@
       "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
       "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
     },
+    "escape-string-regexp": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+      "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+      "dev": true
+    },
     "estree-walker": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
@@ -2426,6 +2398,28 @@
       "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz",
       "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
       "dev": true
+    },
+    "fast-glob": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz",
+      "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.4"
+      }
+    },
+    "fastq": {
+      "version": "1.17.1",
+      "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz",
+      "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+      "dev": true,
+      "requires": {
+        "reusify": "^1.0.4"
+      }
     },
     "fill-range": {
       "version": "7.0.1",
@@ -2454,12 +2448,6 @@
       "version": "1.1.2",
       "resolved": "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz",
       "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
-    },
-    "fsevents": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
-      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
-      "optional": true
     },
     "glob-parent": {
       "version": "5.1.2",
@@ -2496,7 +2484,7 @@
     },
     "is-binary-path": {
       "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+      "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
       "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
       "requires": {
         "binary-extensions": "^2.0.0"
@@ -2526,6 +2514,12 @@
       "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
       "dev": true
     },
+    "js-tokens": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-9.0.0.tgz",
+      "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==",
+      "dev": true
+    },
     "local-pkg": {
       "version": "0.4.3",
       "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz",
@@ -2548,9 +2542,9 @@
       "requires": {}
     },
     "magic-string": {
-      "version": "0.30.5",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz",
-      "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==",
+      "version": "0.30.10",
+      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.10.tgz",
+      "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
       "requires": {
         "@jridgewell/sourcemap-codec": "^1.4.15"
       }
@@ -2567,6 +2561,12 @@
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
       "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
+    },
+    "merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "dev": true
     },
     "micromatch": {
       "version": "4.0.5",
@@ -2591,6 +2591,27 @@
         "mime-db": "1.52.0"
       }
     },
+    "minimatch": {
+      "version": "9.0.4",
+      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.4.tgz",
+      "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
+      "dev": true,
+      "requires": {
+        "brace-expansion": "^2.0.1"
+      }
+    },
+    "mlly": {
+      "version": "1.7.1",
+      "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.7.1.tgz",
+      "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==",
+      "dev": true,
+      "requires": {
+        "acorn": "^8.11.3",
+        "pathe": "^1.1.2",
+        "pkg-types": "^1.1.1",
+        "ufo": "^1.5.3"
+      }
+    },
     "moment": {
       "version": "2.30.1",
       "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
@@ -2609,7 +2630,7 @@
     },
     "normalize-path": {
       "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+      "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
       "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
     },
     "normalize-wheel-es": {
@@ -2618,9 +2639,9 @@
       "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
     },
     "pathe": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz",
-      "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q=="
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz",
+      "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="
     },
     "picocolors": {
       "version": "1.0.0",
@@ -2655,6 +2676,17 @@
       "integrity": "sha512-tZbNGf2vjAQcIm7alK40sE51Qu/m9oWr+rEgNm/2AWr1huFxj72CjvpQcIQzMknDBJEkQznCLAGtJTIcLKrKdw==",
       "requires": {}
     },
+    "pkg-types": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.1.1.tgz",
+      "integrity": "sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==",
+      "dev": true,
+      "requires": {
+        "confbox": "^0.1.7",
+        "mlly": "^1.7.0",
+        "pathe": "^1.1.2"
+      }
+    },
     "postcss": {
       "version": "8.4.31",
       "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
@@ -2670,9 +2702,15 @@
       "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
       "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
     },
+    "queue-microtask": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+      "dev": true
+    },
     "readdirp": {
       "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+      "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
       "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
       "requires": {
         "picomatch": "^2.2.1"
@@ -2684,6 +2722,12 @@
       "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
       "dev": true
     },
+    "reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "dev": true
+    },
     "rollup": {
       "version": "3.29.4",
       "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz",
@@ -2692,6 +2736,21 @@
       "requires": {
         "fsevents": "~2.3.2"
       }
+    },
+    "run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "dev": true,
+      "requires": {
+        "queue-microtask": "^1.2.2"
+      }
+    },
+    "scule": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz",
+      "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==",
+      "dev": true
     },
     "sortablejs": {
       "version": "1.15.1",
@@ -2709,6 +2768,15 @@
       "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
       "requires": {
         "frac": "~1.1.2"
+      }
+    },
+    "strip-literal": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-2.1.0.tgz",
+      "integrity": "sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==",
+      "dev": true,
+      "requires": {
+        "js-tokens": "^9.0.0"
       }
     },
     "sweetalert2": {
@@ -2729,21 +2797,102 @@
         "is-number": "^7.0.0"
       }
     },
+    "tslib": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
+      "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+    },
+    "ufo": {
+      "version": "1.5.3",
+      "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.5.3.tgz",
+      "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==",
+      "dev": true
+    },
     "undici-types": {
       "version": "5.26.5",
       "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz",
       "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
       "dev": true
     },
-    "unplugin": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.5.0.tgz",
-      "integrity": "sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A==",
+    "unimport": {
+      "version": "3.7.2",
+      "resolved": "https://registry.npmmirror.com/unimport/-/unimport-3.7.2.tgz",
+      "integrity": "sha512-91mxcZTadgXyj3lFWmrGT8GyoRHWuE5fqPOjg5RVtF6vj+OfM5G6WCzXjuYtSgELE5ggB34RY4oiCSEP8I3AHw==",
+      "dev": true,
       "requires": {
-        "acorn": "^8.10.0",
-        "chokidar": "^3.5.3",
+        "@rollup/pluginutils": "^5.1.0",
+        "acorn": "^8.11.3",
+        "escape-string-regexp": "^5.0.0",
+        "estree-walker": "^3.0.3",
+        "fast-glob": "^3.3.2",
+        "local-pkg": "^0.5.0",
+        "magic-string": "^0.30.10",
+        "mlly": "^1.7.0",
+        "pathe": "^1.1.2",
+        "pkg-types": "^1.1.1",
+        "scule": "^1.3.0",
+        "strip-literal": "^2.1.0",
+        "unplugin": "^1.10.1"
+      },
+      "dependencies": {
+        "estree-walker": {
+          "version": "3.0.3",
+          "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz",
+          "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+          "dev": true,
+          "requires": {
+            "@types/estree": "^1.0.0"
+          }
+        },
+        "local-pkg": {
+          "version": "0.5.0",
+          "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.0.tgz",
+          "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==",
+          "dev": true,
+          "requires": {
+            "mlly": "^1.4.2",
+            "pkg-types": "^1.0.3"
+          }
+        }
+      }
+    },
+    "unplugin": {
+      "version": "1.10.1",
+      "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.10.1.tgz",
+      "integrity": "sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==",
+      "requires": {
+        "acorn": "^8.11.3",
+        "chokidar": "^3.6.0",
         "webpack-sources": "^3.2.3",
-        "webpack-virtual-modules": "^0.5.0"
+        "webpack-virtual-modules": "^0.6.1"
+      }
+    },
+    "unplugin-auto-import": {
+      "version": "0.17.6",
+      "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.17.6.tgz",
+      "integrity": "sha512-dmX0Pex5DzMzVuALkexboOZvh51fL/BD6aoPO7qHoTYGlQp0GRKsREv2KMF1lzYI9SXKQiRxAjwzbQnrFFNydQ==",
+      "dev": true,
+      "requires": {
+        "@antfu/utils": "^0.7.8",
+        "@rollup/pluginutils": "^5.1.0",
+        "fast-glob": "^3.3.2",
+        "local-pkg": "^0.5.0",
+        "magic-string": "^0.30.10",
+        "minimatch": "^9.0.4",
+        "unimport": "^3.7.1",
+        "unplugin": "^1.10.1"
+      },
+      "dependencies": {
+        "local-pkg": {
+          "version": "0.5.0",
+          "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.0.tgz",
+          "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==",
+          "dev": true,
+          "requires": {
+            "mlly": "^1.4.2",
+            "pkg-types": "^1.0.3"
+          }
+        }
       }
     },
     "vite": {
@@ -2768,6 +2917,14 @@
         "@vue/runtime-dom": "3.3.4",
         "@vue/server-renderer": "3.3.4",
         "@vue/shared": "3.3.4"
+      }
+    },
+    "vue-draggable-plus": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmmirror.com/vue-draggable-plus/-/vue-draggable-plus-0.5.0.tgz",
+      "integrity": "sha512-A5TT5+M5JceROSjPO9aDZTsrSN1TetEs419czPlboomarSiGIBIxTp2WD7XH53EHMrbO7Qo+leRiHWV/rMlyjA==",
+      "requires": {
+        "@types/sortablejs": "^1.15.8"
       }
     },
     "vue-i18n": {
@@ -2803,9 +2960,9 @@
       "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w=="
     },
     "webpack-virtual-modules": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz",
-      "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw=="
+      "version": "0.6.2",
+      "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
+      "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="
     },
     "wmf": {
       "version": "1.0.2",
@@ -2835,6 +2992,14 @@
         "wmf": "~1.0.1",
         "word": "~0.3.0"
       }
+    },
+    "zrender": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.5.0.tgz",
+      "integrity": "sha512-O3MilSi/9mwoovx77m6ROZM7sXShR/O/JIanvzTwjN3FORfLSr81PsUGd7jlaYOeds9d8tw82oP44+3YucVo+w==",
+      "requires": {
+        "tslib": "2.3.0"
+      }
     }
   }
 }
diff --git a/UI-Project/package.json b/UI-Project/package.json
index 6cade56..7a586a0 100644
--- a/UI-Project/package.json
+++ b/UI-Project/package.json
@@ -11,6 +11,8 @@
     "@element-plus/icons-vue": "^2.1.0",
     "@vue-macros/reactivity-transform": "^0.3.23",
     "axios": "^1.6.8",
+    "chart.js": "^4.4.3",
+    "echarts": "^5.5.0",
     "element-plus": "^2.4.0",
     "moment": "^2.30.1",
     "pinia": "^2.1.6",
@@ -18,7 +20,8 @@
     "sortablejs": "^1.15.1",
     "sweetalert2": "^11.10.7",
     "vue": "^3.3.4",
-    "vue-i18n": "^9.13.1",
+    "vue-draggable-plus": "^0.5.0",
+    "vue-i18n": "^9.10.1",
     "vue-router": "^4.2.4",
     "vxe-table": "^4.5.15",
     "xe-utils": "^3.5.14",
@@ -26,8 +29,9 @@
   },
   "devDependencies": {
     "@types/sortablejs": "^1.15.7",
-    "@vitejs/plugin-vue": "^4.3.4",
+    "@vitejs/plugin-vue": "^4.6.2",
     "http-proxy-middleware": "^3.0.0",
+    "unplugin-auto-import": "^0.17.6",
     "vite": "^4.4.9"
   }
 }
diff --git a/UI-Project/src/lang/LanguageMixin.js b/UI-Project/src/lang/LanguageMixin.js
deleted file mode 100644
index 5a90328..0000000
--- a/UI-Project/src/lang/LanguageMixin.js
+++ /dev/null
@@ -1,14 +0,0 @@
-export default {
-  created() {
-    const localStorageLang = localStorage.getItem('preferredLanguage');
-    if (localStorageLang) {
-      this.$i18n.locale = localStorageLang;
-    }
-  },
-  methods: {
-    switchLanguage(lang) {
-      this.$i18n.locale = lang;
-      localStorage.setItem('preferredLanguage', lang);
-    }
-  }
-}
\ No newline at end of file
diff --git a/UI-Project/src/lang/en.js b/UI-Project/src/lang/en.js
new file mode 100644
index 0000000..d80a9be
--- /dev/null
+++ b/UI-Project/src/lang/en.js
@@ -0,0 +1,302 @@
+export  default {
+    "northglassMESsystem": '小懈褋褌械屑邪 "NorthGlass MES"' ,
+      login:{
+          userErr:'袙胁械写懈褌械 薪芯屑械褉 褋褔械褌邪.',
+          pwErr:'袙胁械写懈褌械 锌邪褉芯谢褜.',
+          user:'袗泻泻邪褍薪褌',
+          password:'袣芯写',
+          login:'袟邪谢芯谐懈薪',
+          loginSuccessful:'袙褏芯写 胁 褋懈褋褌械屑褍 胁褘锌芯谢薪械薪 褍褋锌械褕薪芯锛�',
+          register:'袟邪褉械谐懈褋褌褉懈褉芯胁邪',
+          namea:'袠屑褟 薪械 屑芯卸械褌 斜褘褌褜 锌褍褋褌褘屑',
+          len:'袛谢懈薪邪 薪械 写芯谢卸薪邪 锌褉械胁褘褕邪褌褜 16',
+          passnull:'袩邪褉芯谢褜 薪械 屑芯卸械褌 斜褘褌褜 锌褍褋褌褘屑',
+          leng:'袛谢懈薪邪 锌邪褉芯谢褟 薪械 写芯谢卸薪邪 斜褘褌褜 屑械薪褜褕械 6 懈谢懈 斜芯谢褜褕械 16.',
+          spwn:'袩邪褉芯谢褜 锌芯写褌胁械褉卸写械薪懈褟 薪械 屑芯卸械褌 斜褘褌褜 锌褍褋褌褘屑',
+          depass:'袛胁邪 褉邪蟹薪褘褏 锌邪褉芯谢褟.',
+      },
+      register:{
+          registerSuccessful:'袪械谐懈褋褌褉邪褑懈褟 褍褋锌械褕薪芯',
+          newuserregister:'袧芯胁褘泄 褉械械褋褌褉 锌芯谢褜蟹芯胁邪褌械谢械泄',
+          name:'袠屑褟锛�',
+          inputname:'袙胁械写懈褌械 懈屑褟',
+          password:'袣芯写:',
+          pwErr:'袙胁械写懈褌械 锌邪褉芯谢褜.',
+          passwordation:'袩芯写褌胁械褉写懈褌械 锌邪褉芯谢褜:',
+          pwErration:'袩芯卸邪谢褍泄褋褌邪, 锌芯写褌胁械褉褌懈褌械 锌邪褉芯谢褜',
+          registration:'袩芯写褌胁械褉卸写械薪懈械 芯 褉械谐懈褋褌褉邪褑懈懈',
+          false:'袨褌屑械薪邪',
+      },
+      main:{
+          connectErr:'袧械芯斜褘褔薪芯械 锌芯写泻谢褞褔械薪懈械 泻 褋械褉胁械褉褍, 锌芯锌褉芯斜褍泄褌械 锌芯蟹卸械',
+          titleFirst:"袛芯斜褉芯 锌芯卸邪谢芯胁邪褌褜 ",
+          titleLast:' 胁 褋懈褋褌械屑褍 NorthGlass MES锛�',
+          quit:"袙褘褏芯写",
+      },
+      basicData:{
+          deletemessage:'校写邪谢懈褌褜 褝褌褍 懈薪褎芯褉屑邪褑懈褞 懈谢懈 薪械褌?',
+          laserprinting:'袦邪褕懈薪邪 谢邪蟹械褉薪芯泄 屑邪褉泻懈褉芯胁泻懈 谐芯褌芯胁邪锛�',
+          cuttingmachine:'袦邪褕懈薪邪 写谢褟 褉械蟹泻懈 谐芯褌芯胁邪锛�',
+          machine:'小芯褋褌芯褟薪懈械 褋褌邪薪芯泻 蟹邪谐褉褍蟹泻懈 胁 褉械卸懈屑械 芯薪谢邪泄薪锛�',
+          machineaa:'袪褍褔薪芯械 褋芯褋褌芯褟薪懈械 褋褌邪薪芯泻 蟹邪谐褉褍蟹泻懈:',
+          selectproject:"袙褘斜械褉懈褌械 锌褉芯械泻褌",
+          startloading:'袧邪褔邪谢芯 蟹邪谐褉褍蟹泻懈',
+          stop:'袩邪褍蟹邪',
+          yes:'锌芯写褌胁械褉写',
+          change:'锌械褉械泻谢褞褔邪',
+          projectnumber:'袧芯屑械褉 锌褉芯械泻褌邪',
+          glasswidth:'楔懈褉懈薪邪 褋褌械泻谢邪',
+          glassheight:'袙褘褋芯褌邪 褋褌械泻谢邪',
+          coatingtypes:'孝懈锌褘 锌芯泻褉褘褌懈泄',
+          coatingtypesa:'孝懈锌褘 锌芯泻褉褘褌懈泄锛�',
+          quantity:'袣芯谢懈褔械褋褌胁芯',
+          quantitya:'袣芯谢懈褔械褋褌胁芯锛�',
+          thickness:'孝芯谢褖懈薪邪',
+          thicknessa:'孝芯谢褖懈薪邪锛�',
+          startstatus:'小褌邪褌褍褋 薪邪褔邪谢邪 芯锌械褉邪褑懈懈',
+          pass:'效械褉械蟹',
+          waiting:'袞写械屑.',
+          up:'袟邪谐褉褍蟹泻邪',
+          finish:'袟邪胁械褉褕械薪芯',
+          project:'懈薪卸械薪械褉懈褟',
+          plselectproject:'袩芯卸邪谢褍泄褋褌邪, 胁褘斜械褉懈褌械 锌褉芯械泻褌.',
+          confirm:'锌芯写褌胁械褉写',
+          cancel:'袨褌屑械薪邪',
+          startfilm:'袧邪褔懈薪邪褌褜 懈谢懈 薪械褌锛�',
+          whetherpause:'袩邪褍蟹邪 懈谢懈 薪械褌锛�',
+          station:'袪邪斜芯褔械械 屑械褋褌芯',
+          width:'楔懈褉懈薪邪',
+          widtha:'楔懈褉懈薪邪锛�',
+          height:'袙褘褋芯褌邪',
+          heighta:'袙褘褋芯褌邪锛�',
+          operate:'袨锌械褉邪褑懈褟',
+          add:'袛芯斜邪胁谢褟',
+          delete:'校写邪谢',
+          addglass:'袛芯斜邪胁懈褌褜 褋褌械泻谢芯',
+          selectwidth:'袙褘斜懈褉懈褌械 褕懈褉懈薪褍',
+          selectheight:'袙褘斜懈褉懈褌械 胁褘褋芯褌褍',
+          selectcoatingtypes:'袙褘斜械褉懈褌械 褌懈锌褘 锌芯泻褉褘褌懈泄',
+          selectthickness:'袙褘斜械褉懈褌械 褌芯谢褖懈薪褍',
+          selectquantity:'袙胁械写懈褌械 泻芯谢褜褔械褋褌胁芯.',
+          pause:'袙褌芯褉邪褟 懈 褔械褌胁械褉褌邪褟 褋褌褉芯泻懈 写芯谢卸薪褘 斜褘褌褜 胁褘褕械 2700 写谢褟 褋芯褏褉邪薪械薪懈褟!',
+          pausea:'袩芯卸邪谢褍泄褋褌邪, 褍斜械写懈褌械褋褜, 褔褌芯 屑邪褉泻懈褉芯胁芯褔薪邪褟 懈 褉械卸褍褖邪褟 屑邪褕懈薪褘 谐芯褌芯胁褘!',
+          infonull:'袧芯屑械褉 锌褉芯械泻褌邪 薪械 屑芯卸械褌 斜褘褌褜 锌褍褋褌褘屑!',
+          updatanull:'袩褉芯械泻褌 薪械 褋芯褏褉邪薪懈谢懈褋褜 薪邪 谢懈褋褌械 蟹邪谐褉褍蟹泻懈!',
+          glassnull:'袨褕懈斜泻邪 锌褉懈 芯斜薪芯胁谢械薪懈懈 褋褌械泻谢邪',
+      },
+      sorter:{
+          gridnumber:'携褔械械泻 褋械褌泻谢邪',
+          glassnumber:'袧芯屑械褉 褋褌邪泻谢邪',
+          width:'楔懈褉懈薪邪',
+          height:'袙褘褋芯褌邪',
+          startstatus:'小褌邪褌褍褋 薪邪褔邪谢邪 芯锌械褉邪褑懈懈',
+          disable:'袨褌泻谢褞褔',
+          start:'袧邪褔邪谢芯',
+          deficiencieste:'袧械写芯褋褌邪褌泻懈 胁 芯褌褔械褌薪芯褋褌懈',
+          operate:'袨锌械褉邪褑懈褟',
+          prompt:'袩芯写褋泻邪蟹泻',
+          information:'小谢械写褍械褌 谢懈 褋芯芯斜褖邪褌褜 薪械写芯褋褌邪褞褖褍褞 懈薪褎芯褉屑邪褑懈褞锛�',
+          yes:'袛邪',
+          cancel:'袨褌屑械薪邪',
+      },
+      order:{
+          dilapidation:'袩芯胁褉械卸写械薪懈械',
+          Takeaway:'袙蟹褟褌褜 胁褉褍褔薪褍褞',
+      },
+
+      searchOrder:{
+        cageinformation:'袠薪褎芯褉屑邪褑懈褟 斜褍褎械褉邪',
+        productionqueue:'袩褉芯懈蟹胁芯写褋褌胁械薪薪邪褟 芯褔械褉械写褜',
+        outputglassID:'袙褘褏芯写薪芯械 褋褌械泻谢芯 ID',
+        startposition:'袟邪薪褟褌褜 锌芯蟹懈褑懈懈',
+        targetlocation:'袩芯蟹懈褑懈褟 褑械谢懈',
+        trips:'鈩� 锌芯械蟹写邪',
+        number:'小械褉懈泄薪 薪芯屑械褉',
+        taskstatus:'小芯褋褌芯褟薪懈械 蟹邪写邪褔懈',
+        filmenter:'袨卸懈写邪薪懈械 褋褌械泻谢褟薪薪芯泄 胁褏芯写',
+        infilm:'袙 薪邪褋褌芯褟褖械械 胁褉械屑褟',
+        endtask:'袟邪写邪褔邪 薪邪 泻芯薪械褑',
+        completetask:'袙褘锌芯谢薪械薪懈械 蟹邪写邪薪懈褟',
+        intoglassid:'袙褏芯写薪芯泄 褋褌械泻谢褟薪薪褘泄 ID',
+        line:'袥懈薪懈褟',
+        Usage:'小泻芯褉芯褋褌褜 懈褋锌芯谢褜蟹芯胁邪薪懈褟',
+        free:'袘械褋锌谢邪褌薪芯 (褟褔械械泻)',
+        addcage:'袛芯斜邪胁懈褌褜 懈薪褎芯褉屑邪褑懈褞 芯 斜褍褎械褉械',
+        glassIDa:'小褌械泻谢褟薪薪褘泄 ID锛�',
+        glassID:'小褌械泻谢褟薪薪褘泄 ID',
+        inglassID:'袙胁械写懈褌械 褋褌械泻谢芯 ID',
+        pieceingrid:'袩芯褉褟写芯泻 褉邪褋锌芯谢芯卸械薪懈褟 屑邪谢械薪褜泻懈褏 褋褌械泻谢褟薪薪褘褏 锌谢邪褋褌懈薪 胁 泻谢械褌泻械',
+        pieceingrida:'袩芯褉褟写芯泻 褉邪褋锌芯谢芯卸械薪懈褟 屑邪谢械薪褜泻懈褏 褋褌械泻谢褟薪薪褘褏 锌谢邪褋褌懈薪 胁 泻谢械褌泻械锛�',
+        inpieceingrid:'袙胁械写懈褌械 锌芯褉褟写芯泻 褉邪褋锌芯谢芯卸械薪懈褟 褋褌械泻谢褟薪薪褘褏 谢懈褋褌芯胁 胁 褟褔械械泻械',
+        cardnumber:'袧芯屑械褉 泻邪褉褌芯褔泻懈 锌褉芯褑械褋褋邪',
+        cardnumbera:'袧芯屑械褉 泻邪褉褌芯褔泻懈 锌褉芯褑械褋褋邪锛�',
+        incardnumber:'袙胁械写懈褌械 薪芯屑械褉 锌褉芯褑械褋褋邪 .',
+        typeglass:'孝懈锌 褋褌械泻谢邪',
+        typeglassa:'孝懈锌 褋褌械泻谢邪锛�',
+        intypeglass:'袙胁械写懈褌械 褌懈锌 褋褌械泻谢邪',
+        coatingtypes:'孝懈锌褘 锌芯泻褉褘褌懈泄',
+        width:'楔懈褉懈薪邪',
+        widtha:'楔懈褉懈薪邪锛�',
+        inwidth:'袙胁械写懈褌械 褕懈褉懈薪褍',
+        height:'袙褘褋芯褌邪',
+        heighta:'袙褘褋芯褌邪锛�',
+        inheight:'袙胁械写懈褌械 胁褘褋芯褌褍',
+        thickness:'孝芯谢褖懈薪邪',
+        thicknessa:'孝芯谢褖懈薪邪锛�',
+        inthickness:'袙胁械写懈褌械 褌芯谢褖懈薪褍.',
+        layoutID:'效械褉褌械卸 ID 蟹邪谐褉褍蟹泻懈 锌械褔懈 写谢褟 蟹邪泻邪谢泻懈',
+        layoutIDa:'效械褉褌械卸 ID 蟹邪谐褉褍蟹泻懈 锌械褔懈 写谢褟 蟹邪泻邪谢泻懈锛�',
+        inlayoutID:'袙胁械写懈褌械 褔械褉褌械卸 蟹邪泻邪谢泻懈 ID',
+        picturesequence:'效械褉褌械卸 褋械褉懈泄薪 薪芯屑械褉 蟹邪谐褉褍蟹泻懈 锌械褔懈 写谢褟 蟹邪泻邪谢泻懈',
+        picturesequencea:'效械褉褌械卸 褋械褉懈泄薪 薪芯屑械褉 蟹邪谐褉褍蟹泻懈 锌械褔懈 写谢褟 蟹邪泻邪谢泻懈锛�',
+        inpicturesequence:'袙胁械写懈褌械 锌芯褉褟写芯泻 褔械褉褌械卸懈 蟹邪泻邪谢泻懈 褋褌械泻谢邪.',
+        startstatus:'小褌邪褌褍褋 薪邪褔邪谢邪 芯锌械褉邪褑懈懈',
+        startstatusa:'小褌邪褌褍褋 薪邪褔邪谢邪 芯锌械褉邪褑懈懈锛�',
+        instartstatus:'袙胁械写懈褌械 褋芯褋褌芯褟薪懈械 邪泻褌懈胁邪褑懈懈',
+        glassgaps:'小褌械泻谢褟薪薪褘泄 蟹邪蟹芯褉',
+        glassgapsa:'小褌械泻谢褟薪薪褘泄 蟹邪蟹芯褉锛�',
+        inglassgaps:'袙胁械写懈褌械 褋褌械泻谢芯 蟹邪蟹芯褉',
+        sure:'锌芯写褌胁械褉写',
+        cancel:'袨褌屑械薪邪',
+        glassID:'小褌械泻谢褟薪薪褘泄 ID',
+        operate:'袨锌械褉邪褑懈褟',
+        breakage:'袩芯胁褉械卸写械薪懈械',
+        delete:'校写邪谢',
+        outfilm:'袙褘锌褍褋泻 褋褌械泻谢邪',
+        cagetableID:'ID 斜褍褎械褉薪芯泄 褌邪斜谢懈褑褘',
+        cagenumber:'袘褍褎械褉 薪芯屑械褉邪',
+        gridnumber:'携褔械械泻 褋械褌泻谢邪',
+        enable:'袧邪褔邪谢芯',
+        disable:'袨褌泻谢褞褔',
+        remainingwidth:'袨褋褌邪褌芯褔薪邪褟 褕懈褉懈薪邪',
+        add:'袛芯斜邪胁谢褟',
+        sheetID:'袟邪泻邪谢泻邪 屑邪谢械薪褜泻懈泄 褋褌械泻谢褟薪薪褘泄 ID 褌邪斜谢懈褑褘 懈薪褎芯褉屑邪褑懈懈',
+        processcards:'袣邪褉褌芯褔泻邪 锌褉芯褑械褋褋邪',
+        processcardtype:'孝懈锌 褋褌械泻谢邪 泻邪褉褌芯褔泻懈 锌褉芯褑械褋褋邪',
+        acceptshorizontal:'校屑械褉械薪薪芯械 锌褉懈薪褟褌懈械 谐芯褉懈蟹芯薪褌邪谢懈',
+        xcoordinates:'X-泻芯芯褉写懈薪邪褌褘',
+        ycoordinates:'Y-泻芯芯褉写懈薪邪褌褘',
+        rotationangle:'校谐芯谢 胁褉邪褖械薪懈褟 (锌褉芯褌懈胁 褔邪褋芯胁芯泄 褋褌褉械谢泻懈)',
+        state:'小芯褋褌芯褟薪懈械',
+        takeout:'袙蟹褟褌褜',
+        deletemessage:'校写邪谢懈褌褜 褝褌褍 懈薪褎芯褉屑邪褑懈褞 懈谢懈 薪械褌?',
+        prompt:'袩芯写褋泻邪蟹泻',
+        yes:'袛邪',
+        accept:'袩褉懈薪褟褌褜',
+        noaccept:'袧械 锌褉懈薪懈屑邪褌褜',
+        filmcomplete:'小褌械泻谢芯 谐芯褌芯胁芯',
+        waiting:'袞写械屑.',
+    },
+    workOrder:{
+        glassID:'小褌械泻谢褟薪薪褘泄 ID',
+        height:'袙褘褋芯褌邪',
+        width:'楔懈褉懈薪邪',
+        thickness:'孝芯谢褖懈薪邪',
+        coatingtypes:'孝懈锌褘 锌芯泻褉褘褌懈泄',
+        productionsequence:'袩芯褋谢械写芯胁邪褌械谢褜薪芯褋褌褜 锌褉芯懈蟹胁芯写褋褌胁邪',
+        cardnumber:'袧芯屑械褉 泻邪褉褌芯褔泻懈 锌褉芯褑械褋褋邪',
+        operate:'袨锌械褉邪褑懈褟',
+        messagedamaged:'袩芯胁褉械卸写械薪芯 谢懈 褋芯芯斜褖械薪懈械锛�',
+        prompt:'袩芯写褋泻邪蟹泻',
+        yes:'袛邪',
+        cancel:'袨褌屑械薪邪',
+        takemessage:'小谢械写褍械褌 谢懈 褍写邪谢褟褌褜 褋芯芯斜褖械薪懈械锛�',
+        breakage:'袩芯胁褉械卸写械薪懈械',
+        takeout:'袙蟹褟褌褜',
+    },
+    processCard:{
+        intofurnace:'袙 锌械褔褜',
+        beforefurnace:'袛芯 锌械褔泻懈.',
+        outfurnace:'袨泻芯薪褔械薪芯 褋褌械泻谢芯 懈蟹 锌械褔懈 写谢褟 蟹邪泻邪谢泻懈',
+    },
+    reportWork:{
+        lowerbit:'小褌邪薪褑懈褟 褉邪蟹谐褉褍蟹泻懈',
+        shelfnumber:'袧芯屑械褉 褋褌芯泄泻懈 褉械谐懈褋褌褉邪褑懈懈',
+        cardnumber:'袧芯屑械褉 泻邪褉褌芯褔泻懈 锌褉芯褑械褋褋邪',
+        totalquantity:'袨斜褖械械 泻芯谢懈褔械褋褌胁芯',
+        beendropped:'袣芯谢懈褔械褋褌胁芯 褋褌械泻谢邪 褉邪蟹谐褉褍蟹泻懈',
+        state:'小芯褋褌芯褟薪懈械',
+        devicenumber:'袧芯屑械褉 芯斜芯褉褍写芯胁邪薪懈褟.',
+        startstatus:'小褌邪褌褍褋 薪邪褔邪谢邪 芯锌械褉邪褑懈懈',
+        enable:'袧邪褔邪谢芯',
+        unenable:'袧械 薪邪褔邪褌',
+        operate:'袨锌械褉邪褑懈褟',
+        bindingshelves:'袧邪蟹薪邪褔械薪薪邪褟 褋褌械谢谢邪卸泻邪',
+        clear:'效懈褋褌芯.',
+        workstation:'小褌邪薪褑懈褟 薪芯屑械褉',
+        shelfnumber:'袧芯屑械褉 褋褌芯泄泻懈 褉械谐懈褋褌褉邪褑懈懈锛�',
+        cardnumbera:'袧芯屑械褉 泻邪褉褌芯褔泻懈 锌褉芯褑械褋褋邪锛�',
+        incardnumber:'袩芯卸邪谢褍泄褋褌邪, 胁褘斜械褉懈褌械 薪芯屑械褉 锌褉芯谐褉邪屑屑褘',
+        clearglass:'袨褔懈褋褌懈褌褜 褋褌械泻谢芯 褋 锌芯谢泻懈',
+        sure:'锌芯写褌胁械褉写',
+        cancel:'袨褌屑械薪邪',
+        glassinformation:'袠薪褎芯褉屑邪褑懈褟 褋褌械泻谢邪',
+        glassID:'小褌械泻谢褟薪薪褘泄 ID',
+        coatingtypes:'孝懈锌褘 锌芯泻褉褘褌懈泄',
+        thickness:'孝芯谢褖懈薪邪',
+        width:'楔懈褉懈薪邪',
+        height:'袙褘褋芯褌邪',
+    },
+    productStock:{
+        addusers:'袛芯斜邪胁褜褌械 锌芯谢褜蟹芯胁邪褌械谢械泄.',
+        username:'袠屑褟 锌芯谢褜蟹芯胁邪褌械谢褟.',
+        usernamea:'袠屑褟 锌芯谢褜蟹芯胁邪褌械谢褟.锛�',
+        inusername:'袙胁械写懈褌械 懈屑褟 锌芯谢褜蟹芯胁邪褌械谢褟',
+        role:'袪芯谢褜',
+        rolea:'袪芯谢褜锛�',
+        inrole:'袙褘斜械褉懈褌械 褉芯谢褜',
+        test:'孝械褋褌',
+        admin:'袗写屑懈薪懈褋褌褉邪褌芯褉.',
+        operate:'袨锌械褉邪褑懈褟',
+        resetpassword:'小斜褉芯褋懈褌褜 锌邪褉芯谢褜',
+        exit:'袪械写邪泻褌芯褉',
+        delete:'校写邪谢',
+        prompt:'袩芯写褋泻邪蟹泻',
+        repassword:'袩械褉械蟹邪谐褉褍蟹泻邪 锌芯谢褜蟹芯胁邪褌械谢褜褋泻芯谐芯 锌邪褉芯谢褟 懈谢懈 薪械褌锛�',
+        yes:'袛邪',
+        cancel:'袨褌屑械薪邪',
+        reusername:'袠蟹屑械薪械薪懈械 锌芯谢褜蟹芯胁邪褌械谢褟',
+        addusername:'袛芯斜邪胁褜褌械 锌芯谢褜蟹芯胁邪褌械谢械泄.',
+        password:'袣芯写锛�',
+        sure:'锌芯写褌胁械褉写',
+        inpassword:'袙胁械写懈褌械 锌邪褉芯谢褜.',
+        deusername:'校写邪谢械薪懈械 锌芯谢褜蟹芯胁邪褌械谢褟 懈谢懈 薪械褌锛�',
+    },
+    customer:{
+        addmenu:'袛芯斜邪胁褜褌械 屑械薪褞.',
+        firstmenu:'孝邪斜谢懈褑邪 屑械薪褞 锌械褉胁芯泄 褋褌械锌械薪懈',
+        link:'小褋褘谢泻',
+        linka:'小褋褘谢泻锛�',
+        inlink:'袙胁械写懈褌械 褋褋褘谢泻褍',
+        sort:'小芯褉褌懈褉芯胁泻',
+        sorta:'小芯褉褌懈褉芯胁泻锛�',
+        insort:'袙胁械写懈褌械 褋芯褉褌懈褉芯胁泻褍',
+        operate:'袨锌械褉邪褑懈褟',
+        exit:'袪械写邪泻褌芯褉',
+        inmenu:'袙胁械写懈褌械 屑械薪褞',
+        delete:'校写邪谢',
+        semenu:'孝邪斜谢懈褑邪 屑械薪褞 胁褌芯褉芯泄 褋褌械锌械薪懈',
+        menu:'袦械薪褞.锛�',
+        sure:'锌芯写褌胁械褉写',
+        cancel:'袨褌屑械薪邪',
+        exmene:'袠蟹屑械薪械薪懈械 屑械薪褞.',
+        yes:'袛邪',
+        demenu:'校写邪谢懈褌褜 屑械薪褞 懈谢懈 薪械褌锛�',
+        prompt:'袩芯写褋泻邪蟹泻',
+    },
+    delivery:{
+        addrole:'袛芯斜邪胁褜褌械 褉芯谢懈.',
+        editrole:'袠蟹屑械薪械薪懈械 褉芯谢懈.',
+        role :'袪芯谢褜',
+        rolea :'袪芯谢褜锛�',
+        inrole :'袙胁械写懈褌械 褉芯谢懈.',
+        operate :'袨锌械褉邪褑懈褟',
+        edit :'袪械写邪泻褌芯褉',
+        delete :'校写邪谢',
+        sure :'锌芯写褌胁械褉写',
+        cancel :'袨褌屑械薪邪',
+        yes:'袛邪',
+        derole :'校写邪谢懈褌褜 锌械褉褋芯薪邪卸 懈谢懈 薪械褌锛�',
+        prompt:'袩芯写褋泻邪蟹泻',
+    },
+  }
\ No newline at end of file
diff --git a/UI-Project/src/lang/i18n.js b/UI-Project/src/lang/i18n.js
deleted file mode 100644
index 080bd7c..0000000
--- a/UI-Project/src/lang/i18n.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// i18n.js
- 
-import { createI18n } from 'vue-i18n'
-import zhCn from './lang/locales/zh-CN.json'
-import enUs from './lang/locales/en-US.json'
- 
-const i18n = createI18n({
-  locale: 'zh-CN', // 璁剧疆榛樿璇█
-  messages: {
-    'zh-CN': zhCn,
-    'en-US': enUs
-  }
-})
- 
-export default i18n
\ No newline at end of file
diff --git a/UI-Project/src/lang/index.js b/UI-Project/src/lang/index.js
new file mode 100644
index 0000000..2a371f6
--- /dev/null
+++ b/UI-Project/src/lang/index.js
@@ -0,0 +1,18 @@
+
+import { createI18n}  from 'vue-i18n'
+import zh from "./zh"
+import en from "./en"
+
+let messages = {
+    zh:zh,
+    en: en
+}
+
+const i18n = createI18n({
+    locale: localStorage.getItem('lang') || 'zh', // 璁剧疆褰撳墠璇█绫诲瀷
+    legacy: false, // 濡傛灉瑕佹敮鎸乧ompositionAPI锛屾椤瑰繀椤昏缃负false;
+    globalInjection: true, // 鍏ㄥ眬娉ㄥ唽$t鏂规硶
+    messages
+})
+
+export default i18n
\ No newline at end of file
diff --git a/UI-Project/src/lang/locales/en-US.json b/UI-Project/src/lang/locales/en-US.json
deleted file mode 100644
index dfae361..0000000
--- a/UI-Project/src/lang/locales/en-US.json
+++ /dev/null
@@ -1,575 +0,0 @@
-{
-  "Clear":"Clear",
-  "ip":"192.168.10.21",
-  "systemTitle": "Login System",
-  "usernamePlaceholder": "Please enter username",
-  "passwordPlaceholder": "Please enter password",
-  "loginButton": "Login",
-  "registerButton": "Register",
-  "resetButton": "Reset",
-  "usernameRequired": "Please enter username",
-  "usernameLength": "Username must be between 5 and 15 characters",
-  "passwordRequired": "Please enter password",
-  "passwordLength": "Password must be between 5 and 15 characters",
-  "loginSuccess": "Login successful",
-  "langBtnCN": "Chinese",
-  "langBtnEN": "English",
-  "langHome": "Home",
-  "langUserManagement": "User Management",
-  "langUserList": "User List",
-  "langUsernamePlaceholder": "Please enter username",
-  "langEmailPlaceholder": "Please enter email",
-  "langSearch": "Search",
-  "langAddUser": "Add User",
-  "langUsername": "Username",
-  "langEmail": "Email",
-  "langCreateTime": "Create Time",
-  "langDisabled": "Disabled",
-  "langAction": "Action",
-  "langEdit": "Edit",
-  "langDelete": "Delete",
-  "langAddUserTitle": "Add User",
-  "langPassword": "Password",
-  "langState": "State",
-  "langSelect": "Please select",
-  "langCancel": "Cancel",
-  "langConfirm": "Confirm",
-  "langEditUserTitle": "Edit User",
-  "northglassMESsystem": "NorthGlassMesSystem",
-  "exit": "exit",
-  "changePassword": "changePassword",
-  "resetPassword": "resetPassword",
-  "Old password":"Old password",
-  "New password":"New password",
-  "Confirm password":"Confirm password",
-  "home": "Home",
-  "role": "role",
-  "langRoleManagement": "Role Management",
-  "langRoleList": "Role List",
-  "langEnterRoleName": "Please enter role name",
-  "langAddRole": "Add Role",
-  "langName": "Name",
-  "langIsValid": "Is Valid",
-  "langOperation": "Operation",
-  "langPleaseSelect": "Please select",
-  "langValid": "Valid",
-  "langInvalid": "Invalid",
-  "langAddRoleSuccess": "Add role successfully",
-  "langEnterName": "Please enter name",
-  "langLengthBetween": "Length should be between",
-  "langAnd": "and",
-  "langCharacters": "characters",
-  "langEnterState": "Please enter state",
-  "langUpdateState": "Update state successfully",
-  "langEditRole": "Edit Role",
-  "langEditRoleSuccess": "Edit role successfully",
-  "langDeleteRoleConfirm": "Are you sure you want to delete this role?",
-  "langPrompt": "Prompt",
-  "langDeleteRoleSuccess": "Delete role successfully",
-  "langCancelDelete": "Cancelled deleting",
-  "langRoleName": "langRoleName",
-  "updateSuccessMessage": "updateSuccessMessage",
-  "paginationTotal": "Total {total}",
-  "paginationSizes": "Items per page",
-  "paginationPrev": "Previous",
-  "paginationPager": "{currentPage}/{pageCount}",
-  "paginationNext": "Next",
-  "paginationJumper": "Jump to",
-  "breadcrumb": {
-    "home": "Home",
-    "permissionManagement": "Permission Management",
-    "permissionList": "Permission List"
-  },
-  "search": {
-    "placeholder": "Enter keywords"
-  },
-  "button": {
-    "addPermission": "Add Permission",
-    "cancel": "Cancel",
-    "confirm": "Confirm"
-  },
-  "table": {
-    "role": "Role",
-    "permissionDescription": "Permission Description",
-    "permissionValue": "Permission Value",
-    "createTime": "Create Time",
-    "isActive": "Is Active",
-    "operation": "Operation"
-  },
-  "tooltip": {
-    "edit": "Edit",
-    "delete": "Delete"
-  },
-  "dialog": {
-    "addPermission": "Add Permission",
-    "editPermission": "Edit Permission"
-  },
-  "form": {
-    "role": "Role",
-    "select": "Please Select",
-    "permission": "Permission",
-    "isActive": "Is Active"
-  },
-  "鎿嶄綔": "Operation",
-  "鏈夋晥": "Valid",
-  "鏃犳晥": "Invalid",
-  "璇疯緭鍏ュ悕绉�": "Please enter a name",
-  "璇疯緭鍏ヨ鑹�": "Please enter a role",
-  "璇疯緭鍏ユ潈闄愭弿杩�":"Please enter a permission description",
-  "闀垮害鍦� 2 鍒� 15 涓瓧绗�": "Length between 2 and 15 characters",
-  "璇疯緭鍏ョ姸鎬�": "Please enter the status",
-  "娣诲姞瑙掕壊": "Add Role",
-  "淇敼瑙掕壊": "Edit Role",
-  "鍒犻櫎瑙掕壊": "Delete Role",
-  "姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ヨ鑹�, 鏄惁缁х画?": "This operation will permanently delete the role. Continue?",
-  "鎻愮ず": "Reminder",
-  "纭畾": "Confirm",
-  "鍙栨秷": "Cancel",
-  "娣诲姞瑙掕壊鎴愬姛": "Successfully added role",
-  "鏇存柊鐘舵�佹垚鍔�": "Successfully updated status",
-  "淇敼瑙掕壊鎴愬姛": "Successfully modified role",
-  "鍒犻櫎瑙掕壊鎴愬姛": "Successfully deleted role",
-  "translation": {
-    "D01 VFD error": "D01 VFD error",
-    "D02 VFD error": "D02 VFD error",
-    "D03 VFD error": "D03 VFD erro",
-    "D04 VFD error": "D04 VFD error",
-    "D05 VFD error": "D05 VFD error",
-    "D06 VFD error": "D06 VFD error",
-    "B01 VFD error": "B01 VFD error",
-    "B02 VFD error": "B02 VFD error",
-    "A01 VFD error": "A01 VFD error",
-    "A02 VFD error": "A02 VFD error",
-    "A01 servo turn error": "A01 servo turn error",
-    "A02 servo turn error": "A02 servo turn error",
-    "A01 servo travel error": "A01 servo travel error",
-    "A02 servo travel error": "A02 servo travel error",
-    "B01 servo travel error": "B01 servo travel error",
-    "B02 servo travel error": "B02 servo travel error",
-    "D01 DEC error": "D01 DEC error",
-    "D01 pos error": "D01 pos error",
-    "D02 DEC error": "D02 DEC error",
-    "D02 pos error": "D02 pos error",
-    "D03 DEC error": "D03 DEC error",
-    "D03 pos error": "D03 pos error",
-    "D04 DEC error": "D04 DEC error",
-    "D04 pos error": "D04 pos error",
-    "D05 DEC error": "D05 DEC error",
-    "D05 pos error": "D05 pos error",
-    "D06 DEC error": "D06 DEC error",
-    "D06 pos error": "D06 pos error",
-    "A01 DEC error": "A01 DEC error",
-    "A01 pos error": "A01 pos error",
-    "A02 DEC error": "A02 DEC error",
-    "A02 pos error": "A02 pos error",
-    "B01 IN DEC error": "B01 IN DEC error",
-    "B01 IN pos error": "B01 IN pos error",
-    "B01 OUT DEC error": "B01 OUT DEC error",
-    "B01 OUT pos error": "B01 OUT pos error",
-    "B02 IN DEC error": "B02 IN DEC error",
-    "B02 IN pos error": "B02 IN pos error",
-    "B02 OUT DEC error": "B02 OUT DEC error",
-    "B02 OUT pos error": "B02 OUT pos error"
-  },
-  "Electrical": "Electrical",
-  "Parameter": "Parameter",
-  "Action": "Action",
-  "Sign": "Sign",
-  "State": "State",
-  "Alarm": "Alarm",
-  "Distribute": "Distribute",
-  "Search": "Search",
-  "dvstate": {
-    "鑷姩": "automatic",
-    "鎵嬪姩": "manual"
-  },
-  "langUsernameLabel": "Username",
-  "langPasswordLabel": "Password",
-  "langPasswordPlaceholder": "Please enter your password",
-  "langConfirmPasswordLabel": "Confirm Password",
-  "langConfirmPasswordPlaceholder": "Please confirm your password",
-  "langEmailLabel": "Email",
-  "langQQLabel": "QQ",
-  "langQQPlaceholder": "Please enter your QQ number",
-  "langPhoneNumberLabel": "Phone Number",
-  "langPhoneNumberPlaceholder": "Please enter your phone number",
-  "langUsernameRequiredMessage": "Please enter your username",
-  "langUsernameLengthMessage": "Username length should be between 5 and 15 characters",
-  "langPasswordRequiredMessage": "Please enter your password",
-  "langPasswordLengthMessage": "Password length should be between 5 and 15 characters",
-  "langEmailRequiredMessage": "Please enter your email",
-  "langEmailFormatMessage": "Invalid email format",
-  "langRegisterButton": "Register",
-  "langResetButton": "Reset",
-  "langCancelButton": "Cancel",
-  "langRegisterSuccessMessage": "Registration successful",
-  "today": "today",
-  "yesterday": "yesterday",
-  "week": "week",
-  "shijian": "date",
-  "Pick a day": "Pick a day",
-  "alarmid": "id",
-  "alacontent": "content",
-  "time-on": "time-on",
-  "End-Time": "End-Time",
-  "langRegisterSuccessMessage": "Registration successful",
-
-  "娣诲姞鐢ㄦ埛鎴愬姛":"Successfully add user ",
-  "confirmResetPassword": "Are you sure you want to reset the password to the default value?",
-  "confirm": "Confirm",
-  "cancel": "Cancel",
-  "passwordResetSuccess": "Password has been reset to the default value",
-  "confirmDeleteCategory": "This operation will permanently delete the category. Do you want to continue?",
-  "prompt": "Prompt",
-  "userDeleteSuccess": "User deleted successfully",
-  "deleteCanceled": "Deletion canceled",
-  "addUserSuccess": "User added successfully",
-  "editUserSuccess": "User edited successfully",
-  "addSuccessMessage": "Added successfully",
-"deleteConfirmMessage": "Are you sure you want to delete this permission?",
-
-"confirmButtonText": "Confirm",
-"cancelButtonText": "Cancel",
-"deleteSuccessMessage": "Deleted successfully",
-"deleteCancelledMessage": "Deletion cancelled",
-
-
-  "Enter the glass barcode":"Enter the glass barcode",
-  "Manually Infeed Glass":"Manually Infeed Glass",
-  "Enter the order number":"Enter the order number",
-  "Exit the glass by order number":"Exit the glass by order number",
-  "Please confirm the glass information":"Please confirm the glass information",
-  "Please confirm the Ordering Information":"Please confirm the Ordering Information",
-  "Alarm Information":"Alarm Information",
-  "Cage Details":"Cage Details",
-  "order":"order",
-  "Length":"Length",
-  "Width":"Width",
-  "Operate":"Operate",
-  "Terminate Task":"Terminate Task",
-  "cancel":"cancel",
-  "confirm":"confirm",
-  "Number":"Number",
-  "Outfeed glass barcode":"Outfeed glass barcode",
-  "Infeed glass barcode":"Infeed glass barcode",
-  "Cage No":"Cage No",
-  "Slot No":"Slot No",
-  "Dim":"Dim",
-  "id":"id",
-  "content":"content",
-  "timeon":"timeon",
-  "endTime":"endTime",
-
-  "The Side":"The Side",
-  "Barcode":"Barcode",
-  "Order No":"Order No",
-  "List No":"List No",
-  "Box No":"Box No",
-  "Delete":"Delete",
-  "Out":"Out",
-
-  "Operation successful":"Operation successful",
-  "Operation canceled":"Operation canceled",
-  "There is no glass for this order":"There is no glass for this order",
-  "There are currently tasks":"There are currently tasks",
-  "There is no such glass":"There is no such glass",
-  "There is no such grid":"There is no such grid",
-  "No delete allowed":"No delete allowed",
-  "No out allowed":"No out allowed",
-  "Are you sure to perform this operation ?":"Are you sure to perform this operation ?",
-  "Yes":"Yes",
-  
-
-  "No":"No",
-  "Please enter the password":"Please enter the password",
-  "Password error":"Password error",
-  "DataBase Connection failed":"DataBase Connection failed",
-  "Distribute parameters":"Distribute parameters",
-  "The glass size is not within the range":"The glass size is not within the range",
-  "Add":"Add",
-  "Enable":"Enable",
-  "Disable":"Disable",
-  "Usage":"Usage",
-  "Space (Pieces)":"Space (Pieces)",
-  "This glass is already in the cage":"This glass is already in the cage",
-  "Enter the Order No":"Enter the Order No",
-  "OrderInfo":"OrderInfo",
-  "Query":"Query",
-  "permission update":"permission update",
-  "query was successful":"query was successful",
-  "Scan Code Point":"Scan Code Point",
-  "Upper film position":"Upper film position",
-  "Glass Information":"Glass Information",
-  "current Information":"current information",
-  "Modify Information":"Modify information",
-  "Clear Current":"Clear Current",
-  "Confirm":"Confirm",
-  "The glass ID already exists in the loading queue":"The glass ID already exists in the loading queue",
-  "This glass ID already exists in the sorting cage":"This glass ID already exists in the sorting cage",
-  "Outing Queue":"Outing Queue",
-  "Enter the Frame No":"Enter the Frame No",
-  "Frame No":"Frame No",
-  "Glass information corresponding to aluminum frame":"Glass information corresponding to aluminum frame",
-  "In the cage":"In the cage",
-  "Flipped":"Flipped",
-  "In the queue":"In the queue",
-  "Normal":"Normal",
-  "Entering":"Entering",
-  "Outing":"Outing",
-  "Suspend":"Suspend",
-  "Stop":"Stop",
-  "Start":"Start",
-  "Sequence":"Sequence",
-  "Position":"Position",
-  "Top":"Top",
-  "Up":"Up",
-  "Down":"Down",
-  "Unable to find the placement method of the aluminum frame":"Unable to find the placement method of the aluminum frame",
-  "Unable to find whether the aluminum frame is flipped or not":"Unable to find whether the aluminum frame is flipped or not",
-  "You do not have this permission":"You do not have this permission",
-  "This glass is already in the Queue":"This glass is already in the Queue",
-  "Complete":"Complete",
-  "Allow":"Allow",
-  "Not Allow":"Not Allow",
-  "Completed":"Completed",
-  "Waiting":"Waiting",
-  "Deleted":"Deleted",
-  "Glass State":"Glass State",
-  "Absent":"Absent",
-  "Approximately resettable time":"Approximately resettable time",
-  "EXTERIQR OUT AND BYPASS TO THE LEFT":"EXTERIQR OUT AND BYPASS TO THE LEFT",
-  "EXTERIQR OUT AND BYPASS TO THE RIGHT":"EXTERIQR OUT AND BYPASS TO THE RIGHT",
-  "Complete Task":"Complete Task",
-  "Outed":"Outed",
-  "Queue State":"Queue State",
-  "Sorting State":"Sorting State",
-  "Confirm State":"Confirm State",
-  "Next":"Next",
-  "Current Frame":"Current Frame",
-  "Outside":"Outside",
-  "Inside":"Inside",
-  "Cancel":"Cancel",
-  "Are you sure to clear this barcode ?":"Are you sure to clear this barcode ?",
-  "Terminate Feeding":"Terminate Feeding",
-  "Terminate Outing":"Terminate Outing",
-  "SoftEmergencyStop":"SoftEmergencyStop",
-  "Unable to clear glass ID in automatic mode":"Unable to clear glass ID in automatic mode",
-  "Are you sure you want an emergency stop ?":"Are you sure you want an emergency stop ?",
-  "Current State":"Current State",
-  "Automatic":"Automatic",
-  "Hand Movement":"Hand Movement",
-  "Please enter the correct glassID":"Please enter the correct glassID",
-  "Switch":"Switch",
-  "This frame has glass that is currently outing":"This frame has glass that is currently outing",
-    "ServoManualone": {
-      "A01 鎵�鍦ㄦ牸瀛�": "A01 Current Grid",
-      "鏁伴噺": "Quantity",
-      "杩涚墖ID": "IncomingId",
-      "闀垮害": "Length",
-      "楂樺害": "Height",
-      "鍙栫墖鏍煎瓙": "Pickupgrid address",
-      "瀛樼墖鏍煎瓙": "Storagegrid address",
-      "A01缈昏浆瀹炴椂浣嶇疆": "A01FlipPosition",
-      "A02缈昏浆瀹炴椂浣嶇疆": "A02FlipPosition",
-      "鏁呴殰": "Fault",
-      "澶嶄綅": "Reset",
-      "鏈洖闆�": "NotZero",
-      "鍥為浂": "Home",
-      "鐩爣鏍煎瓙": "Target Grid",
-      "A02 鎵�鍦ㄦ牸瀛�": "A02 Current Grid",
-      "鍙栫墖ID": "PickupId",
-      "A01鍗婅嚜鍔�": "A01 Semi-Auto",
-      "A01鍗婅嚜鍔ㄥ惎鍔�": "A01 Semi-Auto Start",
-      "A02鍗婅嚜鍔�": "A02 Semi-Auto",
-      "A02鍗婅嚜鍔ㄥ惎鍔�": "A02 Semi-Auto Start",
-      "B01 鎵�鍦ㄦ牸瀛�": "B01 Current Grid",
-      "B02 鎵�鍦ㄦ牸瀛�": "B02 Current Grid"
-    
-    },
-    "langParameter1": {
-
-    
-      },
-    
-        "langParameter2": {
-          "D01鎵嬪姩鐘舵��": "D01 Manual Status",
-          "娓呴櫎ID": "Clear ID",
-          "ID": "ID",
-          "A02ID": "A02ID",
-          "B01ID": "B01ID",
-          "B02ID": "B02ID",
-          "D02鎵嬪姩鐘舵��": "D02 Manual Status",
-          "D03鎵嬪姩鐘舵��": "D03 Manual Status",
-          "D04鎵嬪姩鐘舵��": "D04 Manual Status",
-          "D05鎵嬪姩鐘舵��": "D05 Manual Status",
-          "D06鎵嬪姩鐘舵��": "D06 Manual Status",
-          "A01鎵嬪姩鐘舵��": "A01 Manual Status",
-          "ID1": "ID1",
-          "ID2": "ID2",
-          "A02鎵嬪姩鐘舵��": "A02 Manual Status",
-          "B01鎵嬪姩鐘舵��": "B01 Manual Status",
-          "B02鎵嬪姩鐘舵��": "B02 Manual Status",
-          "鎵弿鏋壂鐮佺殑ID": "Scanned ID",
-          "A01褰撳墠鏍煎瓙": "A01 Current Grid",
-          "A02鎵�鍦ㄦ牸瀛�": "A02 Current Grid",
-          "B01鎵�鍦ㄦ牸瀛�": "B01 Current Grid",
-          "B02鎵�鍦ㄦ牸瀛�": "B02 Current Grid",
-          "鎬ュ仠鍚庝腑姝�/缁х画閫夋嫨": "Abort/ResumeTasks",
-          "A01缁堟/缁х画": "A01Abort/ResumeTasks",
-          "A02缁堟/缁х画": "A02Abort/ResumeTasks",
-          "瀛樼墖绛夊緟寤舵椂": "Storage wait delay",
-          "杞�ュ仠": "emgHMI"
-          
-          },
-          "langPositioning1": {
-            "鏍煎瓙闂磋窛": "GridSpacing",
-            "瀛樼墖鎺ョ墖鍦板潃": "StorageReceivingAddress",
-            "鍑虹墖鎺ョ墖鍦板潃": "OutgoingReceivingAddress",
-            "瀛樼墖鏍间綅缃瀹�": "StorageGridPositionSetting",
-            "1#鏍煎湴鍧�": "grid address1# ",
-            "22#鏍煎湴鍧�": "grid address22#",
-            "43#鏍煎湴鍧�": "grid address43#",
-            "64#鏍煎湴鍧�": "grid address64#",
-            "85#鏍煎湴鍧�": "grid address85#",
-            "106#鏍煎湴鍧�": "grid address106#",
-            "127#鏍煎湴鍧�": "grid address127#",
-            "148#鏍煎湴鍧�": "grid address148#",
-            "169#鏍煎湴鍧�": "grid address169#",
-            "190#鏍煎湴鍧�": "grid address190#",
-            "鍑虹墖鏍间綅缃瀹�": "OutgoingGridPositionSetting",
-            "A01鎵�鍦ㄦ牸瀛�": "A01 grid address",
-            "鏁伴噺": "Quantity",
-            "杩涚墖ID": "IncomingId",
-            "闀垮害": "Length",
-            "楂樺害": "Height",
-            "鍙栫墖鏍煎瓙": "Pickupgrid address",
-            "缈昏浆瀹炴椂浣嶇疆": "FlipPosition",
-            "鏁呴殰": "Fault",
-            "澶嶄綅": "Reset",
-            "鏈洖闆�": "NotZero",
-            "鍥為浂": "Zero",
-            "鐩爣鏍煎瓙": "Target Grid",
-            "鏍煎瓙闂磋窛": "GridSpacing",
-            "瀛樼墖鎺ョ墖鍦板潃": "StorageReceivingAddress",
-            "鍑虹墖鎺ョ墖鍦板潃": "OutgoingReceivingAddress",
-            "瀛樼墖鏍间綅缃瀹�": "StorageGridPositionSetting",
-            "1#鏍煎湴鍧�": "grid address1# ",
-            "22#鏍煎湴鍧�": "grid address22#",
-            "43#鏍煎湴鍧�": "grid address43#",
-            "64#鏍煎湴鍧�": "grid address64#",
-            "85#鏍煎湴鍧�": "grid address85#",
-            "106#鏍煎湴鍧�": "grid address106#",
-            "127#鏍煎湴鍧�": "grid address127#",
-            "148#鏍煎湴鍧�": "grid address148#",
-            "169#鏍煎湴鍧�": "grid address169#",
-            "190#鏍煎湴鍧�": "grid address190#",
-            "鍑虹墖鏍间綅缃瀹�": "OutgoingGridPositionSetting",
-            "B01鏍间綅缃瀹�":"B01PositionSetting",
-            "B02浣嶇疆璁惧畾":"B02PositionSetting"
-            },
-            "langPositioning2": {
-             
-              },  "ManualonePositionlang": {
-                "A01鎵嬪姩鏍煎瓙": "A01 Target grid(Manual)",
-                "A01瀹氫綅閫熷害": "A01 TRAVEL POS Velocity manual",
-                "A01褰撳墠鏍煎瓙": "A01 Current Grid",
-                "A01鍚姩": "A01 Start",
-                "鏁呴殰": "Fault",
-                "澶嶄綅": "Reset",
-                "A02鎵嬪姩鏍煎瓙": "A02 Target grid(Manual)",
-                "A02瀹氫綅閫熷害": "A02 TRAVEL POS Velocity manual",
-                "A02褰撳墠鏍煎瓙": "A02 Current Grid",
-                "A02鍚姩": "A02 Start",
-                "澶嶄綅": "Reset",
-                "B01鎵嬪姩鏍煎瓙": "B01 Target grid(Manual)",
-                "B01瀹氫綅閫熷害": "B01 TRAVEL POS Velocity manual",
-                "B01褰撳墠鏍煎瓙": "B01 Current Grid",
-                "B01鍚姩": "B01 Start",
-                "澶嶄綅": "Reset",
-                "鍥為浂": "Home",
-                "鏈洖闆�": "NotZero",
-                "B02鎵嬪姩鏍煎瓙": "B02 Target grid(Manual)",
-                "B02瀹氫綅閫熷害": "B02 TRAVEL POS Velocity manual",
-                "B02褰撳墠鏍煎瓙": "B02 Current Grid",
-                "B02鍚姩": "B02 Start",
-                "澶嶄綅": "Reset",
-                "A01瀹炴椂浣嶇疆": "A01 tavel Actual Position",
-                "A02瀹炴椂浣嶇疆": "A02 tavel Actual Position",
-                "B01瀹炴椂浣嶇疆": "B02 tavel Actual Position",
-                "B02瀹炴椂浣嶇疆": "B02 tavel Actual Position"
-              },
-              "Manualoneposition2lang": {
-                "A01鎵嬪姩浣嶇疆": "A01 turn Target Angle(Manual)",
-                "A01瀹氫綅閫熷害": "A01 TURN POS Velocity manual",
-                "A01缈昏浆瀹炴椂浣嶇疆": "A01 turn Actual angle",
-                "A01缈昏浆鍚姩": "A01 SERVE TURN",
-                "鏁呴殰": "Fault",
-                "澶嶄綅": "Reset",
-                "鏈洖闆�": "NotZero",
-                "鍥為浂": "Home",
-                "A02鎵嬪姩浣嶇疆": "A02 turn Target Angle(Manual)",
-                "A02瀹氫綅閫熷害": "A02 TURN POS Velocity manual",
-                "A02缈昏浆瀹炴椂浣嶇疆": "A02 turn Actual angle",
-                "A02缈昏浆鍚姩": "A02 SERVE TURN",
-                "A02澶嶄綅": "Reset"
-            
-               
-              },
-              "AutomaticParameterSettinglang": {
-                "A01琛岃蛋楂橀�熻搴�": "A01 turn Angle1",
-                "A01琛岃蛋浣庨�熻搴�": "A01 turn Angle2",
-                "A01杈撻�佹帴鐗囪搴�": "A01 turn Angle3",
-                "A01绗煎瓙瑙掑害": "A01 turn Angle4",
-                "A02琛岃蛋楂橀�熻搴�": "A02 turn Angle1",
-                "A02琛岃蛋浣庨�熻搴�": "A02 turn Angle2",
-                "A02杈撻�佹帴鐗囪搴�": "A02 turn Angle3",
-                "A02绗煎瓙瑙掑害": "A02 turn Angle4",
-                "澶ц溅鑷姩閫熷害": "A01 A02 TRAVEL POS Velocity AUTO",
-                "灏忚溅鑷姩閫熷害": "B01 B02 TRAVEL POS Velocity AUTO",
-                "鑷姩缈昏浆閫熷害": "A01 A02 TURN POS Velocity AUTO",
-                "A01~A02杈撻��": "A01~A02 Conveying",
-                "B01~B02杈撻��": "B01~B02 Conveying",
-                "D01~D06杈撻��": "D01~D06 Conveying",
-                "缈昏浆鐐瑰姩閫熷害": "Flip Jog Speed",
-                "灏忚溅鐐瑰姩閫熷害": "Cart Jog Speed",
-                "鏈�楂橀�熷害": "Max Speed",
-                "楂橀�熺嚎閫熷害": "High-Speed Line Speed",
-                "浣庨�熺嚎閫熷害": "Low-Speed Line Speed",
-                "鎵嬪姩閫熷害": "Manual Speed"
-              },
-              "ManualJoglang": {
-                "D01杈撻��": "D01 VFD conveyor",
-                "D02杈撻��": "D02 VFD conveyor",
-                "D03杈撻��": "D03 VFD conveyor",
-                "D04杈撻��": "D04 VFD conveyor",
-                "D05杈撻��": "D05 VFD conveyor",
-                "D06杈撻��": "D06 VFD conveyor",
-                "A01杈撻�佹鍚�": "A01 VFD conveyor",
-                "A02杈撻�佹鍚�": "A02 VFD conveyor",
-                "B01杈撻��": "B01 VFD conveyor",
-                "B02杈撻��": "B02 VFD conveyor",
-                "A01缈昏浆": "A01 SERVE TURN",
-                "A02缈昏浆": "A02 SERVE TURN",
-                "A01琛岃蛋鐐瑰姩": "A01 SERVE TRAVEL",
-                "A02琛岃蛋鐐瑰姩": "A02 SERVE TRAVEL",
-                "B01琛岃蛋鐐瑰姩": "B01 SERVE TRAVEL",
-                "B02琛岃蛋鐐瑰姩": "B02 SERVE TRAVEL",
-                "B02缈昏浆姘旂几": "B02 Solenoid TURN",
-                "B02鍗囬檷姘旂几": "B02 Solenoid UP DOWN",
-                "B02鍚规皵": "B02 Solenoid Gassing",
-                "B01缈昏浆姘旂几": "B01 Solenoid TURN",
-                "B01鍗囬檷姘旂几": "B01 Solenoid UP DOWN",
-                "B01鍚规皵": "B01 Solenoid Gassing",
-                "A01杈撻�佸弽鍚�": "A01 VFD conveyor reverse",
-                "A02杈撻�佸弽鍚�": "A02 VFD conveyor reverse",
-                "A01娉ㄧ數娉�": "A01 oil pump",
-                "A02娉ㄧ數娉�": "A02 oil pump",
-                "A01琛岃蛋浼烘湇鍥為浂":"A01 SERVE TRAVEL Home",
-                "A02琛岃蛋浼烘湇鍥為浂":"A02 SERVE TRAVEL Home"
-              },
-              "A01琛岃蛋浼烘湇鍥為浂":"A01 SERVE TRAVEL Home",
-                "A02琛岃蛋浼烘湇鍥為浂":"A02 SERVE TRAVEL Home",
-                "Set":"Set"
-
-  
-}
\ No newline at end of file
diff --git a/UI-Project/src/lang/locales/zh-CN.json b/UI-Project/src/lang/locales/zh-CN.json
deleted file mode 100644
index b06a25b..0000000
--- a/UI-Project/src/lang/locales/zh-CN.json
+++ /dev/null
@@ -1,72 +0,0 @@
-{
-  "northglassMESsystem": "鍖楃幓MES绯荤粺",
-  "username": "璐﹀彿",
-  "password": "瀵嗙爜",
-  "usernamePlaceholder": "璇疯緭鍏ヨ处鍙�",
-  "passwordPlaceholder": "璇疯緭鍏ュ瘑鐮�",
-  "loginButton": "鐧诲綍",
-  "registerButton": "娉ㄥ唽",
-  "registerButton": "娉ㄥ唽鏂扮敤鎴�",
-  "username": "濮撳悕",
-  "usernameRequired": "璇疯緭鍏ュ鍚�",
-  "passwordRequired": "璇疯緭鍏ュ瘑鐮�",
-  "passwordRequired": "纭瀵嗙爜",
-  "passwordRequired": "璇风‘璁ゅ瘑鐮�",
-  "passwordRequired": "纭娉ㄥ唽",
-  "langCancel": "鍙栨秷",
-  "loginSuccess": "鐧诲綍鎴愬姛",
-  "langBtnCN": "涓枃",
-  "langBtnEN": "English",
-  "langHome": "娆㈣繋",
-  "langUserManagement": "浣跨敤鍖楃幓MES绯荤粺",
-  "langUserList": "閫�鍑�",
-  "langUsernamePlaceholder": "鎵撴爣鏈哄氨缁姸鎬�",
-  "langEmailPlaceholder": "鍒囧壊鏈哄氨缁姸鎬�",
-  "langSearch": "鎵嬪姩纭",
-  "langAddUser": "閫夋嫨宸ョ▼",
-  "langUsername": "寮�濮嬩笂鐗�",
-  "langEmail": "鏆傚仠",
-  "langCreateTime": "鍋滄浠诲姟",
-  "langDisabled": "宸ョ▼鍙�",
-  "langAction": "鍘熺墖瀹�",
-  "langEdit": "鍘熺墖闀�",
-  "langDelete": "鑶滅郴",
-  "langAddUserTitle": "鏁伴噺",
-  "langPassword": "鍘氬害",
-  "langState": "鐘舵��",
-  "langSelect": "瀹�",
-  "langEditUserTitle": "闀�",
-  "exit": "鎿嶄綔",
-  "changePassword": "宸ョ▼",
-  "Old password":"璇烽�夋嫨宸ョ▼",
-  "New password":"娣诲姞鍘熺墖",
-  "langConfirm": "纭",
-  "langUsernameLabel": "娣诲姞",
-  "langPasswordLabel": "鍒犻櫎",
-  "langPasswordLabel": "鏄惁鍒犻櫎璇ユ潯淇℃伅锛�",
-  "langPasswordLabel": "鏄惁寮�濮嬩笂鐗囷紵",
-  "langPasswordLabel": "鏄惁鏆傚仠锛�",
-  "langPasswordLabel": "鏄惁鍋滄浠诲姟锛�",
-  "langPasswordLabel": "鏍呮牸鍙�",
-  "langPasswordLabel": "鐜荤拑缂栧彿",
-  "langPasswordLabel": "楂�",
-  "langPasswordLabel": "鍚敤鐘舵��",
-  "langPasswordLabel": "鍚敤",
-  "langPasswordLabel": "鏈惎鐢�",
-  "langPasswordLabel": "鎶ョ己",
-  "langPasswordLabel": "杩涚倝涓�",
-  "langPasswordLabel": "杩涚倝鍓�",
-  "langPasswordLabel": "宸插嚭鐐夌幓鐠�",
-  "langPasswordLabel": "鐗堝浘缂栧彿",
-  "langPasswordLabel": "涓嬬墖浣�",
-  "langPasswordLabel": "鏋跺彿",
-  "langPasswordLabel": "娴佺▼鍗″彿",
-  "langPasswordLabel": "鎬绘暟閲�",
-  "langPasswordLabel": "宸茶惤鏋舵暟閲�",
-  "langPasswordLabel": "鐘舵��",
-  "langPasswordLabel": "璁惧鍙�",
-  "langPasswordLabel": "鍚敤鐘舵��",
-  "langPasswordLabel": "缁戝畾鏋跺瓙",
-  "langPasswordLabel": "娓呯┖",
-
-}
\ No newline at end of file
diff --git a/UI-Project/src/lang/zh.js b/UI-Project/src/lang/zh.js
new file mode 100644
index 0000000..1c0b3b0
--- /dev/null
+++ b/UI-Project/src/lang/zh.js
@@ -0,0 +1,371 @@
+export  default {
+  "northglassMESsystem": "鍖楃幓MES绯荤粺",
+    login:{
+        userErr:'璇疯緭鍏ヨ处鍙�',
+        pwErr:'璇疯緭鍏ュ瘑鐮�',
+        user:'璐﹀彿',
+        password:'瀵嗙爜',
+        login:'鐧诲綍',
+        loginSuccessful:'鐧诲綍鎴愬姛锛�',
+        register:'娉ㄥ唽',
+        namea:'濮撳悕涓嶈兘涓虹┖',
+        len:'闀垮害涓嶈兘瓒呰繃16',
+        passnull:'瀵嗙爜涓嶈兘涓虹┖',
+        leng:'瀵嗙爜闀垮害涓嶈兘浣庝簬6鎴栬秴杩�16',
+        spwn:'纭瀵嗙爜涓嶈兘涓虹┖',
+        depass:'涓ゆ瀵嗙爜涓嶇浉鍚�',
+    },
+    register:{
+        registerSuccessful:'娉ㄥ唽鎴愬姛',
+        newuserregister:'娉ㄥ唽鏂扮敤鎴�',
+        name:'濮撳悕锛�',
+        inputname:'璇疯緭鍏ュ鍚�',
+        password:'瀵嗙爜:',
+        pwErr:'璇疯緭鍏ュ瘑鐮�',
+        passwordation:'纭瀵嗙爜:',
+        pwErration:'璇风‘璁ゅ瘑鐮�',
+        registration:'纭娉ㄥ唽',
+        false:'鍙栨秷',
+    },
+    main:{
+        connectErr:'鏈嶅姟鍣ㄨ繛鎺ュ紓甯革紝璇风◢鍚庡啀璇�',
+        titleFirst:"娆㈣繋 ",
+        titleLast:' 浣跨敤鍖楃幓MES绯荤粺锛�',
+        quit:"閫�鍑�",
+    },
+    basicData:{
+        laserprinting:'鎵撴爣鏈哄氨缁姸鎬侊細',
+        cuttingmachine:'鍒囧壊鏈哄氨缁姸鎬侊細',
+        machine:'涓婄墖鏈鸿仈鏈虹姸鎬侊細',
+        machineaa:'涓婄墖鏈烘墜鍔ㄧ姸鎬侊細',
+        selectproject:"閫夋嫨宸ョ▼",
+        startloading:'寮�濮嬩笂鐗�',
+        stop:'鏆傚仠',
+        yes:'纭',
+        change:'鍒囨崲',
+        projectnumber:'宸ョ▼鍙�',
+        glasswidth:'鍘熺墖瀹�',
+        glassheight:'鍘熺墖楂�',
+        coatingtypes:'鑶滅郴',
+        coatingtypesa:'鑶滅郴锛�',
+        quantity:'鏁伴噺',
+        quantitya:'鏁伴噺锛�',
+        thickness:'鍘氬害',
+        thicknessa:'鍘氬害锛�',
+        startstatus:'鍚敤鐘舵��',
+        pass:'閫氳繃',
+        waiting:'绛夊緟涓�',
+        up:'涓婄墖涓�',
+        finish:'宸插畬鎴�',
+        project:'宸ョ▼',
+        plselectproject:'璇烽�夋嫨宸ョ▼',
+        confirm:'纭',
+        cancel:'鍙栨秷',
+        startfilm:'鏄惁寮�濮嬩笂鐗囷紵',
+        whetherpause:'鏄惁鏆傚仠锛�',
+        station:'宸ヤ綅',
+        width:'瀹�',
+        widtha:'瀹斤細',
+        height:'楂�',
+        heighta:'楂橈細',
+        operate:'鎿嶄綔',
+        add:'娣诲姞',
+        delete:'鍒犻櫎',
+        addglass:'娣诲姞鍘熺墖',
+        selectwidth:'璇烽�夋嫨瀹�',
+        selectheight:'璇烽�夋嫨楂�',
+        selectcoatingtypes:'璇烽�夋嫨鑶滅郴',
+        selectthickness:'璇烽�夋嫨鍘氬害',
+        selectquantity:'璇疯緭鍏ユ暟閲�',
+        pause:'绗簩琛屽拰绗洓琛岀殑楂樺繀椤诲ぇ浜�2700鎵嶈兘淇濆瓨锛�',
+        pausea:'璇风‘璁ゆ墦鏍囨満鍜屽垏鍓叉満鐨勫氨缁姸鎬侊紒',
+        infonull:'宸ョ▼鍙蜂笉鑳戒负绌猴紒',
+        updatanull:'璇ュ伐绋嬫湭淇濆瓨鍒颁笂鐗囪〃锛�',
+        glassnull:'鏇存柊鐜荤拑鐘舵�佹椂鍙戠敓閿欒',
+        deletemessage:'鏄惁鍒犻櫎璇ユ潯淇℃伅?',
+    },
+    sorter:{
+        gridnumber:'鏍呮牸鍙�',
+        glassnumber:'鐜荤拑缂栧彿',
+        width:'瀹�',
+        height:'楂�',
+        startstatus:'鍚敤鐘舵��',
+        disable:'绂佺敤',
+        start:'鍚敤',
+        deficiencieste:'鎶ョ己',
+        updown:'浜哄伐涓嬬墖',
+        operate:'鎿嶄綔',
+        prompt:'鎻愮ず',
+        information:'鏄惁鎶ョ己璇ユ潯淇℃伅锛�',
+        infor:'鏄惁浜哄伐涓嬬墖璇ユ潯淇℃伅锛�',
+        yes:'鏄�',
+        cancel:'鍙栨秷',
+    },
+    order:{
+        dilapidation:'鐮存崯',
+        Takeaway:'浜哄伐鎷胯蛋',
+    },
+    searchOrder:{
+        cageinformation:'鐞嗙墖绗间俊鎭�',
+        productionqueue:'鍑虹墖闃熷垪',
+        outputglassID:'鍑虹墖鐜荤拑ID',
+        startposition:'璧峰浣嶇疆',
+        targetlocation:'鐩爣浣嶇疆',
+        trips:'杞︽',
+        number:'搴忓彿',
+        taskstatus:'浠诲姟鐘舵��',
+        filmenter:'绛夊緟杩涚墖',
+        infilm:'杩涜涓�',
+        endtask:'缁撴潫浠诲姟',
+        completetask:'瀹屾垚浠诲姟',
+        intoglassid:'杩涚墖鐜荤拑ID',
+        line:'绾胯矾',
+        Usage:'浣跨敤鐜�',
+        free:'绌洪棽锛堟牸瀛愭暟锛�',
+        addcage:'娣诲姞鐞嗙墖绗间俊鎭�',
+        glassIDa:'鐜荤拑ID锛�',
+        glassID:'鐜荤拑ID',
+        inglassID:'璇疯緭鍏ョ幓鐠僆D',
+        pieceingrid:'灏忕墖鍦ㄦ牸鍐呯殑椤哄簭',
+        pieceingrida:'灏忕墖鍦ㄦ牸鍐呯殑椤哄簭锛�',
+        inpieceingrid:'璇疯緭鍏ュ皬鐗囧湪鏍煎唴鐨勯『搴�',
+        cardnumber:'娴佺▼鍗″彿',
+        cardnumbera:'娴佺▼鍗″彿锛�',
+        incardnumber:'璇疯緭鍏ユ祦绋嬪崱鍙�',
+        typeglass:'鐜荤拑绫诲瀷',
+        typeglassa:'鐜荤拑绫诲瀷锛�',
+        intypeglass:'璇疯緭鍏ョ幓鐠冪被鍨�',
+        width:'瀹�',
+        widtha:'瀹斤細',
+        inwidth:'璇疯緭鍏ュ',
+        height:'楂�',
+        heighta:'楂橈細',
+        inheight:'璇疯緭鍏ラ珮',
+        coatingtypes:'鑶滅郴',
+        thickness:'鍘氬害',
+        thicknessa:'鍘氬害锛�',
+        inthickness:'璇疯緭鍏ュ帤搴�',
+        layoutID:'閽㈠寲鐗堝浘ID',
+        layoutIDa:'閽㈠寲鐗堝浘ID锛�',
+        inlayoutID:'璇疯緭鍏ラ挗鍖栫増鍥綢D',
+        picturesequence:'閽㈠寲鐗堝浘鐗囧簭',
+        picturesequencea:'閽㈠寲鐗堝浘鐗囧簭锛�',
+        inpicturesequence:'璇疯緭鍏ラ挗鍖栫増鍥剧墖搴�',
+        startstatus:'鍚敤鐘舵��',
+        startstatusa:'鍚敤鐘舵�侊細',
+        instartstatus:'璇疯緭鍏ュ惎鐢ㄧ姸鎬�',
+        glassgaps:'鐜荤拑闂撮殭',
+        glassgapsa:'鐜荤拑闂撮殭锛�',
+        inglassgaps:'璇疯緭鍏ョ幓鐠冮棿闅�',
+        sure:'纭',
+        cancel:'鍙栨秷',
+        glassID:'鐜荤拑ID',
+        operate:'鎿嶄綔',
+        breakage:'鐮存崯',
+        delete:'鍒犻櫎',
+        outfilm:'鍑虹墖',
+        cagetableID:'澶х悊鐗囩琛↖D',
+        cagenumber:'鐞嗙墖绗煎彿',
+        gridnumber:'鏍呮牸鍙�',
+        gridnumbera:'鏍呮牸鍙凤細',
+        grid:'璇疯緭鍏ユ爡鏍煎彿',
+        enable:'鍚敤',
+        disable:'绂佺敤',
+        remainingwidth:'鍓╀綑瀹藉害',
+        add:'娣诲姞',
+        sheetID:'閽㈠寲灏忕墖淇℃伅琛↖D',
+        processcards:'娴佺▼鍗�',
+        processcardtype:'娴佺▼鍗$幓鐠冪被鍨�',
+        acceptshorizontal:'閽㈠寲鏄惁鎺ュ彈妯斁',
+        xcoordinates:'x鍧愭爣',
+        ycoordinates:'y鍧愭爣',
+        rotationangle:'鏃嬭浆瑙掑害锛堥�嗘椂閽堬級',
+        state:'鐘舵��',
+        takeout:'鎷胯蛋',
+        deletemessage:'鏄惁鍒犻櫎璇ユ潯淇℃伅?',
+        prompt:'鎻愮ず',
+        yes:'鏄�',
+        accept:'鎺ュ彈',
+        noaccept:'涓嶆帴鍙�',
+        filmcomplete:'鍑虹墖瀹屾垚',
+        waiting:'绛夊緟涓�',
+        broke:'鏄惁鐮存崯璇ユ潯淇℃伅锛�',
+        brokeb:'鏄惁鎷胯蛋璇ユ潯淇℃伅锛�',
+        outfil:'鏄惁鍑虹墖璇ユ潯淇℃伅锛�',
+        inputid:'璇疯緭鍏ョ幓鐠僆D',
+        search:'鎼滅储',
+        tabid:'澶х悊鐗囩璇︽儏琛╥d',
+        tid:'璁惧id',
+        tida:'璁惧id锛�',
+        fin:'鏄惁瀹屾垚浠诲姟锛�',
+        sureadd:'纭娣诲姞',
+        sureadda:'鏄惁纭娣诲姞锛�',
+        zailong:'鍦ㄧ涓�',
+        rengongxp:'浜哄伐涓嬬墖',
+        up:'涓婁竴椤�',
+        down:'涓嬩竴椤�',
+        now:'褰撳墠椤垫樉绀�',
+        tit:'鏉℃暟鎹�',
+    },
+    workOrder:{
+        glassID:'鐜荤拑ID',
+        height:'楂�',
+        width:'瀹�',
+        thickness:'鍘氬害',
+        coatingtypes:'鑶滅郴',
+        productionsequence:'鍑虹墖椤哄簭',
+        cardnumber:'娴佺▼鍗″彿',
+        operate:'鎿嶄綔',
+        messagedamaged:'鏄惁鐮存崯璇ユ潯淇℃伅?',
+        prompt:'鎻愮ず',
+        yes:'鏄�',
+        cancel:'鍙栨秷',
+        takemessage:'鏄惁鎷胯蛋璇ユ潯淇℃伅锛�',
+        breakage:'鐮存崯',
+        takeout:'鎷胯蛋',
+    },
+    processCard:{
+        intofurnace:'杩涚倝涓�',
+        beforefurnace:'杩涚倝鍓�',
+        outfurnace:'宸插嚭鐐夌幓鐠�',
+    },
+    reportWork:{
+        lowerbit:'涓嬬墖浣�',
+        shelfnumber:'鏋跺彿',
+        cardnumber:'娴佺▼鍗″彿',
+        totalquantity:'鎬绘暟閲�',
+        beendropped:'宸茶惤鏋舵暟閲�',
+        state:'鐘舵��',
+        devicenumber:'璁惧鍙�',
+        startstatus:'鍚敤鐘舵��',
+        enable:'鍚敤',
+        unenable:'鏈惎鐢�',
+        operate:'鎿嶄綔',
+        bindingshelves:'缁戝畾鏋跺瓙',
+        clear:'娓呯┖',
+        workstation:'鍙峰伐浣�',
+        shelfnumbera:'鏋跺彿锛�',
+        cardnumbera:'娴佺▼鍗″彿锛�',
+        incardnumber:'璇烽�夋嫨娴佺▼鍗″彿',
+        clearglass:'娓呴櫎鏋跺瓙鐜荤拑',
+        sure:'纭',
+        cancel:'鍙栨秷',
+        glassinformation:'鐜荤拑淇℃伅',
+        glassID:'鐜荤拑ID',
+        coatingtypes:'鑶滅郴',
+        thickness:'鍘氬害',
+        width:'瀹藉害',
+        height:'楂樺害',
+    },
+
+    productStock:{
+        addusers:'娣诲姞鐢ㄦ埛',
+        username:'鐢ㄦ埛鍚�',
+        usernamea:'鐢ㄦ埛鍚嶏細',
+        inusername:'璇疯緭鍏ョ敤鎴峰悕',
+        role:'瑙掕壊',
+        rolea:'瑙掕壊锛�',
+        inrole:'璇烽�夋嫨瑙掕壊',
+        test:'娴嬭瘯',
+        admin:'绠$悊鍛�',
+        operate:'鎿嶄綔',
+        resetpassword:'閲嶇疆瀵嗙爜',
+        exit:'缂栬緫',
+        delete:'鍒犻櫎',
+        prompt:'鎻愮ず',
+        repassword:'鏄惁閲嶇疆鐢ㄦ埛瀵嗙爜锛�',
+        yes:'鏄�',
+        cancel:'鍙栨秷',
+        reusername:'淇敼鐢ㄦ埛',
+        addusername:'娣诲姞鐢ㄦ埛',
+        password:'瀵嗙爜锛�',
+        sure:'纭',
+        inpassword:'璇疯緭鍏ュ瘑鐮�',
+        deusername:'鏄惁鍒犻櫎璇ョ敤鎴凤紵',
+    },
+    customer:{
+        addmenua:'娣诲姞浜岀骇鑿滃崟',
+        addmenu:'娣诲姞涓�绾ц彍鍗�',
+        firstmenu:'涓�绾ц彍鍗曟爮',
+        firstmenuname:'涓�绾ц彍鍗曞悕绉�:',
+        link:'閾炬帴',
+        inlink:'璇疯緭鍏ラ摼鎺�',
+        linka:'閾炬帴锛�',
+        sort:'鎺掑簭',
+        insort:'璇疯緭鍏ユ帓搴�',
+        sorta:'鎺掑簭锛�',
+        operate:'鎿嶄綔',
+        exit:'缂栬緫',
+        delete:'鍒犻櫎',
+        semenu:'浜岀骇鑿滃崟鏍�',
+        semenuname:'浜岀骇鑿滃崟鍚嶇О:',
+        menu:'鑿滃崟鏍忥細',
+        inmenu:'璇疯緭鍏ヨ彍鍗曞悕绉�',
+        sure:'纭',
+        cancel:'鍙栨秷',
+        exmene:'淇敼涓�绾ц彍鍗�',
+        exmenea:'淇敼浜岀骇鑿滃崟',
+        yes:'鏄�',
+        demenu:'鏄惁鍒犻櫎璇ヨ彍鍗曪紵', 
+        prompt:'鎻愮ず',
+    },
+    delivery:{
+        addrole:'娣诲姞瑙掕壊',
+        editrole:'淇敼瑙掕壊',
+        role :'瑙掕壊',
+        rolea :'瑙掕壊锛�',
+        inrole :'璇疯緭鍏ヨ鑹�',
+        operate :'鎿嶄綔',
+        edit :'缂栬緫',
+        delete :'鍒犻櫎',
+        yes:'鏄�',
+        sure :'纭',
+        cancel :'鍙栨秷',
+        derole :'鏄惁鍒犻櫎璇ヨ鑹�',
+        prompt:'鎻愮ず',
+        choice:'鑿滃崟鏉冮檺锛�',
+        inchoice:'璇烽�夋嫨鑿滃崟鏉冮檺',
+    },
+    replenish:{
+        patchManagement:'琛ョ墖绠$悊',
+
+    },
+    rework:{
+        reworkManagement:'杩斿伐绠$悊',
+        addRework:"杩斿伐鏂板 ",
+    },
+
+
+    role:{
+        id:'ID',
+        characterHomepage:'瑙掕壊棣栭〉',
+    },
+    user:{
+        userId:'鐢ㄦ埛ID',
+        userHomepage:'鐢ㄦ埛棣栭〉',
+    },
+    orderBasicData:{
+        order:'璁㈠崟',
+        orderType:'璁㈠崟绫诲瀷',
+    },
+    machine:{
+        basicId:'璁惧缂栧彿',
+        basicName:'璁惧鍚嶇О',
+        basicCategory:'鎵�鍦ㄥ伐搴�',
+        tempering:'閽㈠寲',
+    },
+    report:{
+        productionReport:'鐢熶骇鎶ヨ〃',
+        workInProgressReport:'鍦ㄥ埗鍝佹姤琛�',
+    },
+    productionBasicData:{
+        basicDataQuery :'鍩虹鏁版嵁鏌ヨ',
+    },
+    mainIngredient:{
+        materialInformation :'鐗╂枡璧勬枡',
+    },
+    mainIngredientStock:{
+        materialName :'鐗╂枡鍚嶇О',
+        createTime :'杩斿簱鏃ユ湡',
+    },
+}
\ No newline at end of file
diff --git a/UI-Project/src/layout/MainErpView.vue b/UI-Project/src/layout/MainErpView.vue
index 3bd4a05..85cd1aa 100644
--- a/UI-Project/src/layout/MainErpView.vue
+++ b/UI-Project/src/layout/MainErpView.vue
@@ -1,14 +1,17 @@
 <script setup>
-import {useRouter} from 'vue-router'
 import useUserInfoStore from '@/stores/userInfo'
 import userInfo from '@/stores/userInfo'
 import request from '@/utils/request'
 import {ElMessage} from 'element-plus'
-import {ref, watch} from 'vue'
+import {ref, watch, onMounted } from 'vue'
 import deepClone from '@/utils/deepClone'
-
+import { useRouter } from 'vue-router';  
+import { useI18n } from 'vue-i18n'
+  const { t } = useI18n()
+  let language = ref(localStorage.getItem('lang') || 'zh')
 const store = userInfo()
 
+// const { $i18n } = useI18n(); // 鑾峰彇 i18n 瀹炰緥  
 const router = useRouter()
 const userStore = useUserInfoStore()
 const user = userStore.user.userName
@@ -19,27 +22,32 @@
 // let userInfo = userInfoStr.user.token;  
 let token = userInfo; // 鎻愬彇 token  
 // 閫�鍑虹櫥褰曟柟娉�  
-const quit = async () => {
-  try  {
-    const response = await request.get('/loadGlass/sys/user/logout', {
-        token: token,
-        user: null,
-    })
-    if (response.code === 200) {  
-        // 鐧诲嚭鎴愬姛锛屾竻闄ゆ湰鍦板瓨鍌ㄧ殑 userInfo  
-        localStorage.removeItem('userInfo');  
-        // 鍙互鍦ㄨ繖閲岄噸缃簲鐢ㄧ姸鎬侊紝濡傚鑸埌鐧诲綍椤电瓑  
-        console.log('鐧诲嚭鎴愬姛');  
-      } else {  
-        // 澶勭悊閿欒鎯呭喌  
-        console.error('鐧诲嚭澶辫触', response);  
-      } 
+function quit() {  
+  // removeToken()  
+  router.push('/login')  
 }
-catch (error) {
-    // 澶勭悊閿欒
-    console.error(error);
-  }
-}
+// const quit = async () => {
+//   try  {
+    
+//     const response = await request.get('/loadGlass/sys/user/logout', {
+//         token: token,
+//         user: null,
+//     })
+//     if (response.code === 200) {  
+//         // 鐧诲嚭鎴愬姛锛屾竻闄ゆ湰鍦板瓨鍌ㄧ殑 userInfo  
+//         localStorage.removeItem('userInfo');  
+//         // 鍙互鍦ㄨ繖閲岄噸缃簲鐢ㄧ姸鎬侊紝濡傚鑸埌鐧诲綍椤电瓑  
+//         console.log('鐧诲嚭鎴愬姛');  
+//       } else {  
+//         // 澶勭悊閿欒鎯呭喌  
+//         console.error('鐧诲嚭澶辫触', response);  
+//       } 
+// }
+// catch (error) {
+//     // 澶勭悊閿欒
+//     console.error(error);
+//   }
+// }
 // store.createWebSocket();
 // function quit() {
 //   userStore.$patch({
@@ -57,26 +65,79 @@
 //    });
 // }
 
+
+  function replaceChineseWithEnglish(menuData) {  
+      // 瀹氫箟涓嫳鏂囧鐓у叧绯诲璞�
+       const translation  = {  
+          '涓婄墖鏈�': '小褌芯谢 蟹邪谐褉褍蟹泻懈',  
+          '鎺扮墖/璇嗗埆': '袪邪蟹谢芯屑/懈写械薪褌懈褎懈泻邪褑懈褟',  
+          '鍗у紡缂撳瓨': ' 袚芯褉懈蟹芯薪褌邪谢褜薪褘泄 斜褍褎械褉',  
+          '纾ㄨ竟鍓嶅崸寮忕紦瀛�': '袚芯褉懈蟹芯薪褌邪谢褜薪褘泄 斜褍褎械褉 锌械褉械写 褕谢懈褎芯胁泻芯泄',  
+          '涓嬬墖鍗у紡缂撳瓨': '袚芯褉懈蟹芯薪褌邪谢褜薪褘泄 斜褍褎械褉 褋褌械泻谢邪 褉邪蟹谐褉褍蟹泻懈',  
+          '纾ㄨ竟锛堝喎鍔犲伐锛�': '楔谢懈褎芯胁邪褌褜 泻褉邪褟 (褏芯谢芯写薪邪褟 芯斜褉邪斜芯褌泻邪)',  
+          '1绾跨(杈�(鍐峰姞宸�)': '楔谢懈褎芯胁邪褌褜 泻褉邪褟 1 谢懈薪懈懈 (褏芯谢芯写薪邪褟 芯斜褉邪斜芯褌泻邪)',  
+          '2绾跨(杈�(鍐峰姞宸�)': '楔谢懈褎芯胁邪褌褜 泻褉邪褟 2 谢懈薪懈懈 (褏芯谢芯写薪邪褟 芯斜褉邪斜芯褌泻邪)',  
+          '澶х悊鐗囩': '袘褍褎械褉薪邪褟 褋懈褋褌械屑邪',  
+          '閽㈠寲': '袟邪泻邪谢泻邪',  
+          '閽㈠寲鍓�': '袩械褉械写 蟹邪泻邪谢泻懈',  
+          '閽㈠寲鍚�': '袩芯褋谢械 蟹邪泻邪谢泻懈',  
+          '涓嬬墖鍙�': '小褌芯谢 褉邪蟹谐褉褍蟹泻懈',  
+          '绯荤粺绠$悊': '校锌褉邪胁谢械薪懈械 褋懈褋褌械屑芯泄',  
+          '鐢ㄦ埛绠$悊': '校锌褉邪胁谢械薪懈械 锌芯谢褜蟹芯胁邪褌械谢械屑',  
+          '鏉冮檺绠$悊': '校锌褉邪胁谢械薪懈械 锌芯谢薪芯屑芯褔懈褟屑懈',  
+          '瑙掕壊绠$悊': '校锌褉邪胁谢械薪懈械 褉芯谢褜褞',  
+     };  
+  menuData.forEach(menu => {  
+    menu.menuName = translation[menu.menuName] || menu.menuName;  
+    // if (menu.children) {  
+      menu.children && menu.children.forEach(submenu => {  
+        submenu.menuName = translation[submenu.menuName] || submenu.menuName;  
+      });  
+    // }  
+  });  
+} 
 //鎻愬彇鑿滃崟妯″潡鍒楄〃
 let menuList = $ref([])
-// request.get('/loadGlass/menu/sysMenu/list').then((res) => {
+
+// onMounted(async () => {  
+//   try {  
+//     const res = await request.get('/loadGlass/sys/menu/getMenuTree'); // 鍋囪 request.get 杩斿洖 Promise  
+//     if (res.code == 200) { 
+//       // 浣跨敤 value 灞炴�ф潵淇敼 ref 寮曠敤鐨勫��  
+//       menuList.value = deepClone(res.data);  
+//       const language = $i18n.locale;  
+//       if (language === 'en') {  
+//         replaceChineseWithEnglish(menuList.value); // 浼犲叆 ref 鐨� value  
+//       }  
+//       console.log(res.data.token); // 濡傛灉 res.data 涓湁 token 鐨勮瘽  
+//     } else {  
+//       ElMessage.warning(res.msg);  
+//       router.push('/login');  
+//     }  
+//   } catch (error) {  
+//     // 澶勭悊璇锋眰閿欒  
+//     console.error('鑾峰彇鑿滃崟鍒楄〃鏃跺嚭閿�:', error);  
+//   }  
+// });  
 request.get('/loadGlass/sys/menu/getMenuTree').then((res) => {
   if (res.code == 200) {
-    menuList = deepClone(res.data)
-    console.log(response.data.token);
+    menuList = res.data
+    console.log(language.value)
+      if (language.value === 'en') {
+        
+        replaceChineseWithEnglish(menuList);
+      }
   } else {
     ElMessage.warning(res.msg)
     router.push('/login')
   }
 })
-
 const menu = ref(null)
 let indexKey = ref(null)
 
 function handleOpen(key) {
   indexKey.value = key
 }
-
 watch(
     indexKey,
     (newVal, oldVal) => {
@@ -110,13 +171,20 @@
           <img src="../assets/northGlass.ico"
                alt=""
                style="max-width: 100%;max-height: 100%">
-          <h3 style="margin: 1rem  ;font-weight: bold;width: 20vw;"> 娆㈣繋{{ user }}浣跨敤鍖楃幓MES绯荤粺锛�</h3>
+          <h3 style="margin: 1rem  ;font-weight: bold;width: 33vw;"> {{ $t('main.titleFirst') }}{{ user }}{{ $t('main.titleLast') }}</h3>
           <span style="height: 70%;width: 78vw;margin-top: 1rem;">
+            <!-- <el-button class="sys-quit"
+                       @click="quit"
+                       round>
+              <el-icon size="large">
+                <SwitchButton size=""/>{{ $t('main.quit') }}
+              </el-icon>
+            </el-button> -->
             <el-button class="sys-quit"
                        @click="quit"
                        round>
               <el-icon size="large">
-                <SwitchButton size=""/>閫�鍑�
+                <SwitchButton size=""/>{{ $t('main.quit') }}
               </el-icon>
             </el-button>
           </span>
@@ -124,33 +192,45 @@
       </el-header>
       <div id="line"></div>
       <el-container>
-        <el-aside width="160px"
+        <!-- <el-aside width="160px"
                   style="height: 99%; background-color: #fff;">
           <div class="menu">
             <div v-for="items in menuList">
               <div class='menu_title'
                    @click="openMenu(items.id)">
-                <!-- <span class='indicator' >鈱�</span> -->
-                <!-- <span class='indicator' >鈮�</span> -->
-                <!-- <img src="../assets/9.png" alt="" style="max-width: 50%;max-height: 50%;"> -->
                 <span>鈽�</span>
                 {{ items.menuName }}
               </div>
               <ul class='enter-x-left'
                   v-show="openFlag==items.id">
-
                 <li v-for="menuItem in items.children"
                     style="margin-bottom:2px">
                   <router-link :to="{path:menuItem.url}">
                     {{ menuItem.menuName }}
                   </router-link>
-
-                </li>
-              </ul>
-            </div>
-          </div>
-        </el-aside>
-
+        </el-aside> -->
+        <el-row :span="20">
+            <el-menu :default-active="activePath" class="el-menu-vertical-demo" background-color="#fff">
+              <div class="menu">
+            <div v-for="items in menuList">
+              <div class='menu_title'
+                   @click="openMenu(items.id)">
+                <span>鈽�</span>
+                {{ items.menuName }}
+              </div>
+              <ul class='enter-x-left'
+                  v-show="openFlag==items.id">
+                <li v-for="menuItem in items.children"
+                    style="margin-bottom:2px">
+                  <router-link :to="{path:menuItem.url}">
+                    {{ menuItem.menuName }}
+                  </router-link>
+                  </li>
+                  </ul>
+                  </div>
+                  </div>
+            </el-menu>
+          </el-row>
         <el-main>
           <div id="main">
             <router-view></router-view>
@@ -163,6 +243,17 @@
 </template>
  
 <style scoped>
+
+.el-menu-vertical-demo:not(.el-menu--collapse) {
+  width: 200px;
+  min-height: 400px;
+  text-align: left;
+
+}
+
+
+
+
 #all {
   background-color: #eee;
   height: 100%;
@@ -256,6 +347,7 @@
 
 ul li {
   height: 28px;
+  width: 200px;
   line-height: 30px;
   /* background: rgb(128, 128, 128); */
   color: #000000;
@@ -304,7 +396,11 @@
 }
 
 .menu_title {
-  width: 140px;
+  width: 180px;
+  /* white-space: nowrap;  
+  overflow: hidden;  
+  text-overflow: ellipsis;   */
+
   height: 45px;
   line-height: 55px;
   /* background: #fafafa; */
diff --git a/UI-Project/src/main.js b/UI-Project/src/main.js
index fe656ab..b8b328b 100644
--- a/UI-Project/src/main.js
+++ b/UI-Project/src/main.js
@@ -6,22 +6,22 @@
 import App from './App.vue'
 import router from './router'
 import ElementPlus from 'element-plus'
-import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
 import 'element-plus/dist/index.css'
+import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
 import VXETable from 'vxe-table'
 import 'vxe-table/lib/style.css'
-//  import i18n from './lang/i18n' 
- 
- 
+import i18n from '@/lang'
+
 const app = createApp(App)
 const pinia = createPinia()
 pinia.use(piniaPluginPersistedstate )
-// app.use(i18n)
 app.use(VXETable)
 app.use(pinia)
 app.use(router)
+app.use(ElementPlus)
 app.use(ElementPlus,{
     locale: zhCn,
 })
+app.use(i18n)
  
 app.mount('#app')
\ No newline at end of file
diff --git a/UI-Project/src/router/index.js b/UI-Project/src/router/index.js
index 33ec397..2beb066 100644
--- a/UI-Project/src/router/index.js
+++ b/UI-Project/src/router/index.js
@@ -1,5 +1,5 @@
 import {createRouter, createWebHashHistory} from 'vue-router'
-
+// import i18n from '@/utils/lang'
 // import User from '../views/sys/User.vue'
 // import Role from '../views/sys/Role.vue'
 // import Menu from '../views/sys/Menu.vue'
@@ -187,6 +187,19 @@
           ]
         },
 
+        {
+          path: 'GlassStorage',
+          name: 'GlassStorage',
+          component: () => import('../views/GlassStorage/MaterialRackManagement.vue'),
+          children:[
+            {
+              path: '/GlassStorage/MaterialRackManagement',
+              name: 'MaterialRackManagement',
+              component: () => import('../views/GlassStorage/MaterialRackManagement.vue')
+            }
+          ]
+         },
+
          /*----------- 鍙鍖栫郴缁� ----------------*/
          {
           path: 'Visualization',
diff --git a/UI-Project/src/views/Caching/cachingbefore.vue b/UI-Project/src/views/Caching/cachingbefore.vue
index 0fa7fac..9f4ed48 100644
--- a/UI-Project/src/views/Caching/cachingbefore.vue
+++ b/UI-Project/src/views/Caching/cachingbefore.vue
@@ -13,6 +13,9 @@
 import { ElMessage, ElMessageBox } from 'element-plus'
 //  import LanguageMixin from './lang/LanguageMixin'
 
+import { useI18n } from 'vue-i18n'
+  const { t } = useI18n()
+  let language = ref(localStorage.getItem('lang') || 'zh')
 const tableData = ref([])
 const slot = ref('')
 const adjustedRects = ref([]);
@@ -37,7 +40,7 @@
   }  
 }); 
 const toggleEnableState = async (row) => {  
-  const newState = row.enable_state === 1 ? 0 : 1;  
+  const newState = row.enable_state === 1 ? 0 : 1;
   // 鍙戦�佽姹傚埌鍚庣鏇存柊鐘舵�侊紙杩欓噷鐪佺暐浜嗗疄闄呯殑璇锋眰閫昏緫锛�  
   const response = await request.post('/cacheGlass/edgStorageCage/updateEdgStorageCage', { id: row.id, enablestate: newState });  
   if (response.code === 200) {
@@ -47,19 +50,18 @@
       }  
   row.enable_state = newState;  
 }; 
-const open = async(row) => {  
-  try {  
+const open = async(row) => {
+  try {
     const confirmResult = await ElMessageBox.confirm(  
-      '鏄惁鎶ョ己璇ユ潯淇℃伅?',  
-      '鎻愮ず',  
+      t('sorter.information'), 
+      t('sorter.prompt'),  
       {  
-        confirmButtonText: '鏄�',  
-        cancelButtonText: '鍙栨秷',  
+        confirmButtonText: t('sorter.yes'), 
+        cancelButtonText: t('sorter.cancel'),
         type: 'warning',  
-      }  
+      } 
     );  
     if (confirmResult === 'confirm') {  
-      // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛  
       var url="/cacheGlass/edgStorageCage/edgStorageCageGlass?edgStorageCageId="+row.id;
       console.log(url);
       const response = await request.post(url, {
@@ -68,13 +70,10 @@
     if (response.code === 200) {
       ElMessage.success(response.message);
       } else {  
-        // 鍒犻櫎澶辫触锛屾偍鍙互澶勭悊閿欒鎴栨樉绀洪敊璇俊鎭粰鐢ㄦ埛  
       ElMessage.error(response.msg);
-        // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); 
       }  
     }  
   } catch (error) {  
-    // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑  
     console.error('鍙戠敓閿欒:', error);  
   }  
 };   
@@ -111,13 +110,13 @@
         <el-table height="240" ref="table" 
         @selection-change="handleSelectionChange"
         :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="slot" align="center" label="鏍呮牸鍙�" min-width="80" />
-          <el-table-column prop="glass_id" align="center" label="鐜荤拑缂栧彿" min-width="80" />
-          <el-table-column prop="width" align="center" label="瀹�" min-width="120" />
-          <el-table-column prop="height" align="center" label="楂�" min-width="120" />
+          <el-table-column prop="slot" align="center" :label="$t('sorter.gridnumber')" min-width="80" />
+          <el-table-column prop="glass_id" align="center" :label="$t('sorter.glassnumber')" min-width="80" />
+          <el-table-column prop="width" align="center" :label="$t('sorter.width')" min-width="120" />
+          <el-table-column prop="height" align="center" :label="$t('sorter.height')" min-width="120" />
           <el-table-column
             align="center"
-            label="鍚敤鐘舵��"
+            :label="$t('sorter.startstatus')"
             min-width="80"
             prop="enable_state"
           >
@@ -126,17 +125,17 @@
             :type="scope.row.enable_state === 1 ? 'success' : 'danger'"  
             @click="toggleEnableState(scope.row)"  
           >  
-            {{ scope.row.enable_state === 1 ? '鍚敤' : '绂佺敤' }}  
+            {{ scope.row.enable_state === 1 ?  $t('sorter.start') : $t('sorter.disable') }}
           </el-tag>  
         </template> 
           <!-- <template #default="scope">
             <el-tag type="success" >{{ scope.row.enable_state==1?"鍚敤":"鏈惎鐢�"  }}</el-tag>
           </template> -->
           </el-table-column>
-          <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200">
+          <el-table-column fixed="right" :label="$t('sorter.operate')" align="center" width="200">
             <template #default="scope">
               <!-- <el-button size="mini" type="text" plain @click="handleBindRacka(scope.row)">鎶ョ己</el-button> -->
-              <el-button size="mini" type="text" plain  @click="open(scope.row)">鎶ョ己</el-button>
+              <el-button size="mini" type="text" plain  @click="open(scope.row)">{{ $t('sorter.deficiencieste') }}</el-button>
             </template>
         </el-table-column>
         </el-table>
diff --git a/UI-Project/src/views/Caching/cachingun.vue b/UI-Project/src/views/Caching/cachingun.vue
index d454956..cf17b1f 100644
--- a/UI-Project/src/views/Caching/cachingun.vue
+++ b/UI-Project/src/views/Caching/cachingun.vue
@@ -1,5 +1,59 @@
+<template>
+  <div>
+    <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
+      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
+        <el-table height="240" ref="table" 
+        @selection-change="handleSelectionChange"
+        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
+          <el-table-column prop="slot" align="center" :label="$t('sorter.gridnumber')" min-width="80" />
+          <el-table-column prop="glass_id" align="center" :label="$t('sorter.glassnumber')" min-width="80" />
+          <el-table-column prop="width" align="center" :label="$t('sorter.width')" min-width="120" />
+          <el-table-column prop="height" align="center" :label="$t('sorter.height')" min-width="120" />
+          <el-table-column
+          align="center"
+            :label="$t('sorter.startstatus')"
+            min-width="80"
+            prop="enable_state"
+          >
+          <template #default="scope">  
+          <el-tag  
+            :type="scope.row.enable_state === 1 ? 'success' : 'danger'"  
+            @click="toggleEnableState(scope.row)"  
+          >  
+            {{ scope.row.enable_state === 1 ?  $t('sorter.start') : $t('sorter.disable') }}
+          </el-tag>  
+        </template> 
+          <!-- <template #default="scope">
+            <el-tag type="success" >{{ scope.row.enable_state==1?"鍚敤":"鏈惎鐢�"  }}</el-tag>
+          </template> -->
+          </el-table-column>
+          <el-table-column fixed="right" :label="$t('sorter.operate')" align="center" width="200">
+            <template #default="scope">
+              <el-button size="mini" type="text" plain  @click="open(scope.row)">{{ $t('sorter.deficiencieste') }}</el-button>
+              <el-button size="mini" type="text" plain  @click="opena(scope.row)">{{ $t('sorter.updown') }}</el-button>
+            </template>
+        </el-table-column>
+        </el-table>
+      </div>
+    </el-card>
+  </div>
+  <div id="awatch">
+    <img src="../../assets/woshihuancun.png" alt="" style="width: 60%;height: 90%;margin-left: 260px;margin-top: 20px;position: relative;"> 
+    <div style="position: absolute; width: 500px;height: 95px;margin-top: -165px;margin-left: 450px;">
+    <div  
+      v-for="(rect, index) in adjustedRects"  
+      :key="rect"  
+      :style="{ position: 'absolute', 
+       top: `${rect.id}px`, left: `10px`, width: `${rect.width}px`, height: `5px`,
+      backgroundColor: '#409EFF'
+       }"  
+    >
+    </div>
+  </div>
+</div>
+</template>
 <script setup>
-import {Search} from "@element-plus/icons-vue";
+import {Search,Lock,Avatar} from "@element-plus/icons-vue";
 import {reactive} from "vue";
 import {useRouter} from "vue-router"
 const router = useRouter()
@@ -12,6 +66,9 @@
 import { ElMessage, ElMessageBox } from 'element-plus'
 //  import LanguageMixin from './lang/LanguageMixin'
  
+import { useI18n } from 'vue-i18n'
+  const { t } = useI18n()
+// import i18n from '@/i18n';
 const tableData = ref([])
 const slot = ref('')
 const adjustedRects = ref([]);
@@ -36,21 +93,20 @@
     // console.error('Error fetching rects :', error);  
   }  
 }); 
- 
-const open = async(row) => {  
-  try {  
+const open = async(row) => {
+  try {
     const confirmResult = await ElMessageBox.confirm(  
-      '鏄惁鎶ョ己璇ユ潯淇℃伅?',  
-      '鎻愮ず',  
+      t('sorter.information'), 
+      t('sorter.prompt'),  
       {  
-        confirmButtonText: '鏄�',  
-        cancelButtonText: '鍙栨秷',  
+        confirmButtonText: t('sorter.yes'), 
+        cancelButtonText: t('sorter.cancel'),
         type: 'warning',  
-      }  
+      } 
     );  
     if (confirmResult === 'confirm') {  
       // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛  
-      var url="/cacheGlass/edgStorageCage/edgStorageCageGlass?edgStorageCageId="+row.id;
+      var url="/unLoadGlass/downStorage/deleteDownStorageCage?downStorageCageId="+row.id;
       console.log(url);
       const response = await request.post(url, {
         esdId: row.esdId
@@ -59,15 +115,82 @@
       ElMessage.success(response.message);
       } else {  
         // 鍒犻櫎澶辫触锛屾偍鍙互澶勭悊閿欒鎴栨樉绀洪敊璇俊鎭粰鐢ㄦ埛  
-      ElMessage.error(response.msg);
+      ElMessage.error(response.message);
         // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); 
       }  
     }  
-  } catch (error) {  
+  } 
+  catch (error) {  
     // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑  
     console.error('鍙戠敓閿欒:', error);  
   }  
-};   
+};  
+// 浜哄伐涓嬬墖
+const opena = async(row) => {
+  try {
+    const confirmResult = await ElMessageBox.confirm(  
+      t('sorter.infor'), 
+      t('sorter.prompt'),  
+      {  
+        confirmButtonText: t('sorter.yes'), 
+        cancelButtonText: t('sorter.cancel'),
+        type: 'warning',  
+      } 
+    );  
+    if (confirmResult === 'confirm') {
+      const response = await request.post("/unLoadGlass/downGlassTask/generateOutGlassTask", {
+        glassId: row.glass_id
+      })
+    if (response.code === 200) {
+      ElMessage.success(response.message);
+      } else {  
+        // 鍒犻櫎澶辫触锛屾偍鍙互澶勭悊閿欒鎴栨樉绀洪敊璇俊鎭粰鐢ㄦ埛  
+      ElMessage.error(response.message);
+        // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); 
+      }  
+    }  
+  } 
+  catch (error) {  
+    // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑  
+    console.error('鍙戠敓閿欒:', error);  
+  }  
+};  
+// const open = async(row) => {
+// const { t } = useI18n();
+//   try {
+//     const confirmMessage = t('sorter.prompt'); // 浣跨敤 $t 缈昏瘧鏂囨湰
+//     const confirmResult = await ElMessageBox.confirm(  
+//       confirmMessage,  
+//       t('sorter.information'), 
+//       {  
+//         confirmButtonText: t('sorter.yes'), 
+//         cancelButtonText: t('sorter.cancel'),
+//         type: 'warning',  
+//       } 
+//     );  
+//     if (confirmResult === 'confirm') {  
+//       // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛  
+//       var url="/cacheGlass/edgStorageCage/edgStorageCageGlass?edgStorageCageId="+row.id;
+//       console.log(url);
+//       const response = await request.post(url, {
+//         esdId: row.esdId
+//     })
+//     if (response.code === 200) {
+//       ElMessage.success(response.message);
+//       } else {  
+//         // 鍒犻櫎澶辫触锛屾偍鍙互澶勭悊閿欒鎴栨樉绀洪敊璇俊鎭粰鐢ㄦ埛  
+//       ElMessage.error(response.msg);
+//         // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); 
+//       }  
+//     }  
+//   } 
+  
+  
+//   catch (error) {  
+//     // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑  
+//     console.error('鍙戠敓閿欒:', error);  
+//   }  
+// };   
 const toggleEnableState = async (row) => {  
   const newState = row.enable_state === 1 ? 0 : 1;  
   // 鍙戦�佽姹傚埌鍚庣鏇存柊鐘舵�侊紙杩欓噷鐪佺暐浜嗗疄闄呯殑璇锋眰閫昏緫锛�  
@@ -105,62 +228,6 @@
   closeWebSocket();
 });
 </script>
- 
-<template>
-  <div>
-    <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
-      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
-        <el-table height="240" ref="table" 
-        @selection-change="handleSelectionChange"
-        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="slot" align="center" label="鏍呮牸鍙�" min-width="80" />
-          <el-table-column prop="glass_id" align="center" label="鐜荤拑缂栧彿" min-width="80" />
-          <el-table-column prop="width" align="center" label="瀹�" min-width="120" />
-          <el-table-column prop="height" align="center" label="楂�" min-width="120" />
-          <el-table-column
-          align="center"
-            label="鍚敤鐘舵��"
-            min-width="80"
-            prop="enable_state"
-          >
-          <template #default="scope">  
-          <el-tag  
-            :type="scope.row.enable_state === 1 ? 'success' : 'danger'"  
-            @click="toggleEnableState(scope.row)"  
-          >  
-            {{ scope.row.enable_state === 1 ? '鍚敤' : '绂佺敤' }}  
-          </el-tag>  
-        </template> 
-          <!-- <template #default="scope">
-            <el-tag type="success" >{{ scope.row.enable_state==1?"鍚敤":"鏈惎鐢�"  }}</el-tag>
-          </template> -->
-          </el-table-column>
-          <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200">
-            <template #default="scope">
-              <!-- <el-button size="mini" type="text" plain @click="handleBindRacka(scope.row)">鎶ョ己</el-button> -->
-              <el-button size="mini" type="text" plain  @click="open(scope.row)">鎶ョ己</el-button>
-            </template>
-        </el-table-column>
-        </el-table>
-      </div>
-    </el-card>
-  </div>
-  <div id="awatch">
-    <img src="../../assets/woshihuancun.png" alt="" style="width: 60%;height: 90%;margin-left: 260px;margin-top: 20px;position: relative;"> 
-    <div style="position: absolute; width: 500px;height: 95px;margin-top: -165px;margin-left: 450px;">
-    <div  
-      v-for="(rect, index) in adjustedRects"  
-      :key="rect"  
-      :style="{ position: 'absolute', 
-       top: `${rect.id}px`, left: `10px`, width: `${rect.width}px`, height: `5px`,
-      backgroundColor: '#409EFF'
-       }"  
-    >
-    </div>
-  </div>
-</div>
-</template>
- 
 <style scoped>
  
 #dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
diff --git a/UI-Project/src/views/GlassStorage/MaterialRackManagement.vue b/UI-Project/src/views/GlassStorage/MaterialRackManagement.vue
new file mode 100644
index 0000000..b36c181
--- /dev/null
+++ b/UI-Project/src/views/GlassStorage/MaterialRackManagement.vue
@@ -0,0 +1,668 @@
+<template>
+  <div  class="app-container">
+    <el-card style="flex: 1; margin-left: 10px; " :loading="loading">
+      <div slot="header" class="clearfix" style="display: flex; align-items: center;">
+
+<!-- 宸︿晶鎸夐挳缁� -->
+<div >
+  <el-button type="success" size="mini" @click="handleInbound()">鍏ュ簱</el-button>
+  <el-button type="success" size="mini" >鍚婅浣嶅叆搴�</el-button>
+ 
+</div>
+
+<!-- 鍙充晶閫夋嫨妗� -->
+<el-form-item style="margin-top: 15px; width: 150px;">
+  <el-select v-model="formData2.dzw" placeholder="璇烽�夋嫨鍚婅浣�">
+    <el-option label="鍚婅浣�1" value="鍚婅浣�1"></el-option>
+    <el-option label="鍚婅浣�2" value="鍚婅浣�2"></el-option>
+    <!-- 鏍规嵁瀹為檯鎯呭喌娣诲姞鏇村閫夐」 -->
+  </el-select>
+</el-form-item>
+
+</div>
+
+      <el-table
+        :data="tableData"
+       
+        style="width: 98%; height: 200px"
+        @selection-change="handleSelectionChange"
+        :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }"
+        ref="table"
+       
+        empty-text="No Data"
+      >
+       
+        <el-table-column prop="location" label="搴撲綅鍙�"></el-table-column>
+        <el-table-column prop="type" label="绫诲瀷"></el-table-column>
+        <el-table-column prop="length" label="闀垮害(mm)"></el-table-column>
+        <el-table-column prop="height" label="楂樺害(mm)"></el-table-column>
+        <el-table-column prop="thickness" label="鍘氬害(mm)"></el-table-column>
+        <el-table-column prop="quantity" label="鏁伴噺"></el-table-column>
+        <el-table-column prop="entry_time" label="鍏ュ簱鏃堕棿"></el-table-column>
+        <el-table-column prop="batchnumber" label="鎵规鍙�"></el-table-column>
+       
+        <el-table-column
+  align="center"
+  label="鏂欐灦鐘舵��"
+  min-width="80"
+  prop="shelf_status"
+>
+<template #default="scope">
+        <el-tag :type="getTagType(scope.row.shelf_status)" @click="toggleStatus(scope.row)">
+          {{ scope.row.shelf_status === 1 ? '鍚敤' : '鏈惎鐢�' }}
+        </el-tag>
+      </template>
+</el-table-column>
+
+        <!-- 鎿嶄綔鍒� -->
+        <el-table-column label="鎿嶄綔" width="350">
+          <template #default="{ row }">
+            <el-button type="primary" size="mini" @click="edithandleRowClick(row)">淇敼</el-button>
+            <el-button type="danger" size="mini" @click="handleDelete(row)">鍒犻櫎</el-button>
+            <el-button type="warning" size="mini" @click="handleCheckout(row)">鍑哄簱</el-button>
+            <el-button type="success" size="mini" @click="addglass()">娣诲姞鍘熺墖</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <el-table
+    :data="tasktableData"
+    style="width: 98%; height: 150px"
+    @selection-change="handleSelectionChange"
+    :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }"
+    ref="table"
+    empty-text="No Data"
+  >
+
+
+  <template #header>
+        <div style="display: flex; align-items: center;">
+          <span style="font-size: 16px; font-weight: bold; margin-right: 20px;">浠诲姟鍒楄〃</span>
+        
+        </div>
+      </template>
+    <el-table-column prop="Glassid" label="Glassid"></el-table-column>
+    <el-table-column prop="taskDescription" label="浠诲姟鎻忚堪" width="250"></el-table-column>
+    <el-table-column prop="glassThickness" label="鐜荤拑鍘氬害"></el-table-column>
+    <el-table-column prop="glassFilm" label="鐜荤拑鑶滅郴"></el-table-column>
+    <el-table-column prop="creationTime" label="鍒涘缓鏃堕棿"></el-table-column>
+
+    <el-table-column
+      align="center"
+      label="浠诲姟鐘舵��"
+      min-width="80"
+      prop="taskStatus"
+    >
+      <template #default="scope">
+        <el-tag :type="getTagType2(scope.row.taskStatus)">
+          {{ scope.row.taskStatus == 'completed' ? '瀹屾垚' : '杩涜涓�' }}
+        </el-tag>
+      </template>
+    </el-table-column>
+
+    <!-- 鎿嶄綔鍒� -->
+    <el-table-column label="鎿嶄綔" width="350">
+      <template #default="{ row }">
+        <el-button type="primary" size="mini" @click="handleRestart(row)">閲嶆柊寮�濮�</el-button>
+        <el-button type="danger" size="mini" @click="handleDeletetask(row)">鍒犻櫎浠诲姟</el-button>
+        <el-button type="success" size="mini" @click="handleComplete(row)">浠诲姟瀹屾垚</el-button>
+      </template>
+    </el-table-column>
+  </el-table>
+
+    </el-card>
+
+    <div ref="chart" id="chart" style="width: 100%; height: 250px;"></div>
+ 
+   
+    <!-- 鍏ュ簱瀵硅瘽妗� -->
+    <el-dialog
+      title="鍏ュ簱"
+      v-model="dialogVisible"
+      width="30%"
+      :before-close="handleCloseDialog"
+    >
+      <el-form :model="formData" ref="form" label-width="80px">
+        <el-form-item label="杩涘簱鏂欐灦">
+          <el-select v-model="formData.shelf" placeholder="璇烽�夋嫨杩涘簱鏂欐灦">
+            <el-option label="A1" value="A1"></el-option>
+            <el-option label="B2" value="B2"></el-option>
+            <!-- 鏍规嵁瀹為檯鎯呭喌娣诲姞鏇村閫夐」 -->
+          </el-select>
+        </el-form-item>
+        <el-form-item label="棰滆壊鑶滅郴">
+          <el-select v-model="formData.color" placeholder="璇烽�夋嫨棰滆壊鑶滅郴">
+            <el-option label="Red" value="Red"></el-option>
+            <el-option label="Blue" value="Blue"></el-option>
+            <!-- 鏍规嵁瀹為檯鎯呭喌娣诲姞鏇村閫夐」 -->
+          </el-select>
+        </el-form-item>
+        <el-form-item label="瀹藉害">
+          <el-input v-model.number="formData.width" placeholder="璇疯緭鍏ュ搴�"></el-input>
+        </el-form-item>
+        <el-form-item label="楂樺害">
+          <el-input v-model.number="formData.height" placeholder="璇疯緭鍏ラ珮搴�"></el-input>
+        </el-form-item>
+        <el-form-item label="鍘氬害">
+          <el-input v-model.number="formData.thickness" placeholder="璇疯緭鍏ュ帤搴�"></el-input>
+        </el-form-item>
+        <el-form-item label="鏁伴噺">
+          <el-input v-model.number="formData.quantity" placeholder="璇疯緭鍏ユ暟閲�"></el-input>
+        </el-form-item>
+      </el-form>
+
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="handleConfirmInbound">纭� 瀹�</el-button>
+      </div>
+    </el-dialog>
+
+
+    <el-dialog title="娣诲姞鍘熺墖"  v-model="dialogVisible3" width="50%">
+    <el-form :model="formData3" ref="form" label-width="80px">
+      <el-form-item label="棰滆壊鑶滅郴">
+        <el-input v-model="formData.selectedColor" readonly style="width: 250px; height: 35px; font-size: 20px"></el-input>
+        <el-dropdown @command="handleCommand">
+          <span class="el-dropdown-link">
+            閫夋嫨<i class="el-icon-arrow-down el-icon--right"></i>
+          </span>
+          <el-dropdown-menu slot="dropdown">
+            <el-dropdown-item v-for="color in colors" :key="color['0_glass_id']" :command="color['0_glass_id']">
+              {{ color['0_glass_id'] }}
+            </el-dropdown-item>
+          </el-dropdown-menu>
+        </el-dropdown>
+      </el-form-item>
+
+      <el-form-item label="闀垮害">
+        <el-input v-model="formData.wid" required style="width: 250px; font-size: 20px" @focus="clearInput('wid')"></el-input>
+      </el-form-item>
+
+      <el-form-item label="楂樺害">
+        <el-input v-model="formData.heig" required style="width: 250px; font-size: 20px" @focus="clearInput('heig')"></el-input>
+      </el-form-item>
+
+      <el-form-item label="鍘氬害">
+        <el-input v-model="formData.thinkness" required style="width: 250px; font-size: 20px" @focus="clearInput('thinkness')"></el-input>
+      </el-form-item>
+
+      <el-form-item label="鏁伴噺">
+        <el-input-number v-model="formData.num" required :min="0" :max="9000" style="width: 250px; font-size: 20px" @focus="clearInput('num')"></el-input-number>
+      </el-form-item>
+    </el-form>
+
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="dialogVisible3 = false">鍏抽棴</el-button>
+      <el-button type="primary" @click="submitForm">鎻愪氦</el-button>
+    </span>
+  </el-dialog>
+
+  <el-dialog title="缂栬緫" v-model="editdialogVisible" width="30%" @close="edithandleDialogClose">
+      <el-form :model="editForm" ref="editFormRef" label-width="80px">
+        <el-form-item label="鏁伴噺">
+          <el-input v-model="editForm.quantity"></el-input>
+        </el-form-item>
+        <el-form-item label="鎵规鍙�">
+          <el-input v-model="editForm.batchnumber"></el-input>
+        </el-form-item>
+      </el-form>
+
+      <div  class="dialog-footer">
+        <el-button @click="editdialogVisible = false">鍙栨秷</el-button>
+        <el-button type="primary" @click="editsaveEdit">淇濆瓨</el-button>
+      </div>
+    </el-dialog>
+
+
+    <!-- <div ref="chart" id="chart" style="width: 100%; height: 400px;"></div> -->
+  </div>
+</template>
+
+   
+
+
+<script setup>
+import { ref, onMounted, onBeforeUnmount } from 'vue'; // 瀵煎叆 Vue 3 鐨勬ā鍧�
+import * as echarts from 'echarts';
+import { ElMessage, ElMessageBox } from 'element-plus'
+
+
+    const loading = ref(false);
+    const tableData = ref([
+    {
+        location: '1',
+        type: 'Type A',
+        length: '100',
+        height: '50',
+        thickness: '10',
+        quantity: '5',
+        entry_time: '2024-06-19 10:00:00',
+        batchnumber:"444",
+        shelf_status: 1
+      },
+      {
+        location: '2',
+        type: 'Type B',
+        length: '120',
+        height: '60',
+        thickness: '12',
+        quantity: '10',
+        entry_time: '2024-06-19 10:00:00',
+        batchnumber:"444",
+        shelf_status: 0
+      },
+      {
+        location: '3',
+        type: 'Type B',
+        length: '120',
+        height: '60',
+        thickness: '12',
+        quantity: '10',
+        entry_time: '2024-06-19 10:00:00',
+        batchnumber:"444",
+        shelf_status: 1
+      },
+      {
+        location: '4',
+        type: 'Type B',
+        length: '120',
+        height: '60',
+        thickness: '12',
+        quantity: '10',
+        entry_time: '2024-06-19 10:00:00',
+        batchnumber:"444",
+        shelf_status: 1
+      },
+      {
+        location: '5',
+        type: 'Type B',
+        length: '120',
+        height: '60',
+        thickness: '12',
+        quantity: '10',
+        entry_time: '2024-06-19 10:00:00',
+        batchnumber:"444",
+        shelf_status: 1
+      }
+      // Add more data as needed
+    ]);
+
+   const getTagType2 =(status) => {
+      switch (status) {
+        case 'completed':
+          return 'success';
+        case 'in-progress':
+          return 'info';
+        case 'warning':
+          return 'warning';
+        case 'danger':
+          return 'danger';
+        default:
+          return '';
+      }
+    }
+
+    const getTagType =(status) => {
+      return status === 1 ? 'success' : 'danger';
+      // 鏍规嵁鐘舵�佸�煎喅瀹氭爣绛剧被鍨嬶紝杩欓噷鍋囪鐘舵�佷负1鏃朵负鎴愬姛锛堢豢鑹诧級锛屽惁鍒欎负澶辫触锛堢孩鑹诧級
+    }
+
+    const toggleStatus = (row) => {
+      // 鍒囨崲鏂欐灦鐘舵�佺殑閫昏緫
+      row.shelf_status = 1 - row.shelf_status; // Toggle between 0 and 1
+      // 姝ゅ鍙互娣诲姞淇濆瓨鐘舵�佺殑閫昏緫锛屾瘮濡傝皟鐢� API 鏇存柊鏁版嵁
+    };
+
+   const tasktableData=ref([
+
+    {
+          Glassid: 'G001',
+          taskDescription: '浠庡悐瑁呬綅銆�99銆戝埌浠撲綅銆�56銆�',
+          taskStatus: 'in-progress',
+          glassThickness: '5mm',
+          glassFilm: '鑶滅郴A',
+          creationTime: '2024-06-19 10:00:00'
+        },
+        {
+          Glassid: 'G002',
+          taskDescription: '浠庡悐瑁呬綅銆�99銆戝埌浠撲綅銆�56銆�',
+          taskStatus: 'completed',
+          glassThickness: '10mm',
+          glassFilm: '鑶滅郴B',
+          creationTime: '2024-06-19 11:00:00'
+        }
+        ]);
+
+    const dialogVisible = ref(false);
+    const formData = ref({
+      shelf: '',
+      color: '',
+      width: '',
+      height: '',
+      thickness: '',
+      quantity: ''
+    });
+
+    const formData2 = ref({
+      dzw: '',
+     
+    });
+
+   
+    const handleDelete = (row) => {
+  // 浣跨敤 Element UI 鐨� MessageBox.confirm 鏂规硶杩涜浜屾纭
+  ElMessageBox.confirm('纭畾瑕佹墽琛屽垹闄ゆ搷浣滃悧锛�', '纭鍒犻櫎', {
+    confirmButtonText: '纭',
+    cancelButtonText: '鍙栨秷',
+    type: 'warning',
+  }).then(() => {
+    // 鐐瑰嚮纭鎸夐挳鐨勫洖璋冿紝鎵ц鍑哄簱鎿嶄綔
+    console.log('鎵ц鍒犻櫎鎿嶄綔', row);
+  }).catch(() => {
+    // 鐐瑰嚮鍙栨秷鎸夐挳鐨勫洖璋冿紝涓嶆墽琛屼换浣曟搷浣�
+    console.log('鍙栨秷鍒犻櫎鎿嶄綔');
+  });
+};
+
+    
+    const handleCheckout = (row) => {
+  // 浣跨敤 Element UI 鐨� MessageBox.confirm 鏂规硶杩涜浜屾纭
+  ElMessageBox.confirm('纭畾瑕佹墽琛屽嚭搴撴搷浣滃悧锛�', '纭鍑哄簱', {
+    confirmButtonText: '纭',
+    cancelButtonText: '鍙栨秷',
+    type: 'warning',
+  }).then(() => {
+    // 鐐瑰嚮纭鎸夐挳鐨勫洖璋冿紝鎵ц鍑哄簱鎿嶄綔
+    console.log('鎵ц鍑哄簱鎿嶄綔', row);
+  }).catch(() => {
+    // 鐐瑰嚮鍙栨秷鎸夐挳鐨勫洖璋冿紝涓嶆墽琛屼换浣曟搷浣�
+    console.log('鍙栨秷鍑哄簱鎿嶄綔');
+  });
+};
+
+
+    const handleInbound = () => {
+      // 鎵撳紑鍏ュ簱瀵硅瘽妗�
+      dialogVisible.value = true;
+    };
+
+    const handleCloseDialog = () => {
+      // 鍏抽棴瀵硅瘽妗嗘椂閲嶇疆琛ㄥ崟鏁版嵁
+      formData.value = {
+        shelf: '',
+        color: '',
+        width: '',
+        height: '',
+        thickness: '',
+        quantity: ''
+      };
+      dialogVisible.value = false;
+    };
+
+    const handleConfirmInbound = () => {
+      // 澶勭悊纭鍏ュ簱閫昏緫锛屽彲浠ュ湪杩欓噷鎻愪氦琛ㄥ崟鎴栬�呮墽琛屽叾浠栨搷浣�
+      console.log('Confirm Inbound:', formData.value);
+      // 鍏抽棴瀵硅瘽妗�
+      dialogVisible.value = false;
+    };
+
+
+
+
+
+    const dialogVisible3 = ref(false);
+    const colors = ref([
+      { '0_glass_id': 'Red' },
+      { '0_glass_id': 'Green' },
+      { '0_glass_id': 'Blue' }
+      // Add more colors as needed
+    ]);
+
+    const formData3 = ref({
+      selectedColor: '',
+      wid: '',
+      heig: '',
+      thinkness: '',
+      num: ''
+    });
+
+
+    const addglass = () => {
+      // 鎵撳紑鍏ュ簱瀵硅瘽妗�
+      dialogVisible3.value = true;
+    };
+    const handleCommand = (command) => {
+      formData.value.selectedColor = command;
+    };
+
+    const clearInput = (field) => {
+      formData.value[field] = '';
+    };
+
+    const submitForm = () => {
+      console.log('鎻愪氦鏁版嵁:', formData.value);
+      dialogVisible3.value = false;
+      // Add your submit logic here
+    };
+    
+
+
+
+    const editdialogVisible = ref(false);
+    const editForm = ref({
+      quantity: '',
+      batchnumber: ''
+    });
+    const editFormRef = ref(null);
+    let currentRow = ref(null);
+
+    // 澶勭悊琛岀偣鍑讳簨浠�
+    const edithandleRowClick = (row) => {
+      currentRow.value = row;
+      editForm.value.quantity = row.quantity.toString();
+      editForm.value.batchnumber = row.batchnumber;
+      editdialogVisible.value = true;
+      console.log(editForm.value)
+    };
+
+    // 娣诲姞淇濆瓨缂栬緫鍐呭
+    const editsaveEdit = () => {
+      if (!currentRow.value) return;
+
+      // 鏇存柊褰撳墠琛屾暟鎹�
+      currentRow.value.quantity = parseInt(editForm.value.quantity);
+      currentRow.value.batchnumber = editForm.value.batchnumber;
+
+      // 鍏抽棴瀵硅瘽妗�
+      editdialogVisible.value = false;
+    };
+
+    // 瀵硅瘽妗嗗叧闂椂閲嶇疆缂栬緫琛ㄥ崟鍜屽綋鍓嶈鏁版嵁
+    const edithandleDialogClose = () => {
+      editForm.value.quantity = '';
+      editForm.value.batchnumber = '';
+      currentRow.value = null;
+    };
+
+
+
+
+
+    
+
+
+    const handleRestart = (row) => {
+  // 浣跨敤 Element UI 鐨� MessageBox.confirm 鏂规硶杩涜浜屾纭
+  ElMessageBox.confirm('纭畾瑕佹墽琛岄噸鏂板紑濮嬫搷浣滃悧锛�', '纭閲嶆柊寮�濮�', {
+    confirmButtonText: '纭',
+    cancelButtonText: '鍙栨秷',
+    type: 'warning',
+  }).then(() => {
+    // 鐐瑰嚮纭鎸夐挳鐨勫洖璋�
+    console.log('鎵ц閲嶆柊寮�濮嬫搷浣�', row);
+  }).catch(() => {
+    // 鐐瑰嚮鍙栨秷鎸夐挳鐨勫洖璋冿紝涓嶆墽琛屼换浣曟搷浣�
+    console.log('鍙栨秷閲嶆柊寮�濮嬫搷浣�');
+  });
+};
+
+
+const handleDeletetask = (row) => {
+  // 浣跨敤 Element UI 鐨� MessageBox.confirm 鏂规硶杩涜浜屾纭
+  ElMessageBox.confirm('纭畾瑕佹墽琛屽垹闄や换鍔℃搷浣滃悧锛�', '纭鍒犻櫎浠诲姟', {
+    confirmButtonText: '纭',
+    cancelButtonText: '鍙栨秷',
+    type: 'warning',
+  }).then(() => {
+    // 鐐瑰嚮纭鎸夐挳鐨勫洖璋�
+    console.log('鎵ц鍒犻櫎浠诲姟鎿嶄綔', row);
+  }).catch(() => {
+    // 鐐瑰嚮鍙栨秷鎸夐挳鐨勫洖璋冿紝涓嶆墽琛屼换浣曟搷浣�
+    console.log('鍙栨秷鍒犻櫎浠诲姟鎿嶄綔');
+  });
+};
+
+
+
+const handleComplete = (row) => {
+  // 浣跨敤 Element UI 鐨� MessageBox.confirm 鏂规硶杩涜浜屾纭
+  ElMessageBox.confirm('纭畾瑕佹墽琛屼换鍔″畬鎴愭搷浣滃悧锛�', '纭浠诲姟瀹屾垚', {
+    confirmButtonText: '纭',
+    cancelButtonText: '鍙栨秷',
+    type: 'warning',
+  }).then(() => {
+    // 鐐瑰嚮纭鎸夐挳鐨勫洖璋�
+    console.log('鎵ц浠诲姟瀹屾垚鎿嶄綔', row);
+  }).catch(() => {
+    // 鐐瑰嚮鍙栨秷鎸夐挳鐨勫洖璋冿紝涓嶆墽琛屼换浣曟搷浣�
+    console.log('鍙栨秷浠诲姟瀹屾垚鎿嶄綔');
+  });
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    let chartInstance = null;
+
+onMounted(() => {
+  // Initialize the chart
+  chartInstance = echarts.init(document.getElementById('chart'));
+
+  // Simulated data for demonstration
+  const chartData = {
+    labels: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'],
+    datasets: [
+      { name: '浣跨敤鎯呭喌缁熻', data: [{ remaining: 4, total: 5 }, { remaining: 9, total: 10 }, { remaining: 0, total: 30 }, { remaining: 0, total: 10 },{ remaining: 4, total: 5 }] }
+    ]
+  };
+
+  const options = {
+    tooltip: {
+      trigger: 'axis',
+      axisPointer: {
+        type: 'shadow'
+      }
+    },
+    legend: {
+      data: ['浣跨敤鎯呭喌缁熻']
+    },
+    xAxis: {
+      type: 'category',
+      data: chartData.labels
+    },
+    yAxis: {
+      type: 'value'
+    },
+    series: chartData.datasets.map(item => ({
+      name: item.name,
+      type: 'bar',
+      stack: '鎬婚噺',
+      label: {
+        show: true,
+        position: 'inside',
+        formatter: '{c}%'
+      },
+      data: item.data.map(dataItem => ({
+        value: (dataItem.remaining / dataItem.total * 100).toFixed(2), // 璁$畻鍓╀綑閲忓崰姣旓紝淇濈暀涓や綅灏忔暟
+        remaining: dataItem.remaining,
+        total: dataItem.total,
+        itemStyle: {
+          color: getColorByRemaining(dataItem.remaining, dataItem.total)
+        }
+      }))
+    }))
+  };
+
+  function getColorByRemaining(remaining, total) {
+    // 鏍规嵁鍓╀綑閲忎笌鎬婚噺鐨勬瘮渚嬶紝璁剧疆涓嶅悓鐨勯鑹查�昏緫
+    const percentage = remaining / total;
+    if (percentage >= 0.8) {
+      return '#FF6666'; // Red
+    } else if (percentage >= 0.5) {
+      return '#FFCC66'; // Yellow
+    } else {
+      return '#66CC66'; // Green
+    }
+  }
+
+  // Set options and render chart
+  if (chartInstance) {
+    chartInstance.setOption(options);
+  }
+});
+
+onBeforeUnmount(() => {
+  if (chartInstance) {
+    chartInstance.dispose();
+    chartInstance = null;
+  }
+});
+
+const handleSelectionChange = (selection) => {
+  console.log('Selection changed:', selection);
+};
+
+</script>
+
+<style scoped>
+html, body {
+  height: 100%;
+  margin: 0;
+  padding: 0;
+  overflow: hidden; /* 绂佹鍑虹幇婊氬姩鏉� */
+}
+
+.app-container {
+
+  flex-direction: column;
+  height: 100vh; /* 浣跨敤瑙嗗彛楂樺害 */
+}
+
+
+
+
+
+.custom-dialog {
+  max-height: 90vh; /* 鏈�澶ч珮搴︿负瑙嗗彛楂樺害鐨�90% */
+  overflow-y: auto; /* 瀵硅瘽妗嗗唴閮ㄥ嚭鐜板瀭鐩存粴鍔ㄦ潯 */
+}
+</style>
diff --git a/UI-Project/src/views/Identify/identify.vue b/UI-Project/src/views/Identify/identify.vue
index 9316fc9..a972dbe 100644
--- a/UI-Project/src/views/Identify/identify.vue
+++ b/UI-Project/src/views/Identify/identify.vue
@@ -1,6 +1,6 @@
 <template>  
     <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading">
-      <el-scrollbar height="700px">
+      <el-scrollbar height="600px">
   <div id="app" style="margin-top: 20px;">  
     <div  
       :style="{ width: `${olWidth}px`, height: `${olHeight}px`,position: 'relative' }"  
@@ -26,12 +26,12 @@
   </div> 
   <!-- 鐐瑰嚮寮瑰嚭 -->
   <el-dialog v-model="blind" top="30vh" width="15%" style="text-align: center;">
-        <el-button type="warning" plain :icon="Delete" @click="handleDamage(currentGlassId)"  style="width: 120px;margin-left: 10px;">
-          鐮存崯
+        <el-button type="warning" plain :icon="Delete" @click="handleDamage(currentGlassId)"  style="width: 140px;margin-left: 10px;">
+          {{ $t('order.dilapidation') }}
         </el-button>
-        <el-button  type="danger" plain @click="handleManualTake(currentGlassId)" style="width: 120px;margin-top: 10px;">
+        <el-button  type="danger" plain @click="handleManualTake(currentGlassId)" style="width: 140px;margin-top: 10px;">
           <el-icon class="el-icon--right"><Upload /></el-icon>
-          浜哄伐鎷胯蛋</el-button>
+          {{ $t('order.Takeaway') }}</el-button>
   </el-dialog> 
    </div>
   </div>  
@@ -45,6 +45,9 @@
 import request from "@/utils/request"
 import { WebSocketHost ,host} from '@/utils/constants'
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
+  import { useI18n } from 'vue-i18n'
+  const { t } = useI18n()
+  let language = ref(localStorage.getItem('lang') || 'zh')
 const blind = ref(false)
 const olWidth = ref(); 
 const olHeight = ref();
@@ -76,8 +79,8 @@
 
       adjustedRects.value = rawRects.map(rect => ({  
         ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
-        x_axis: (rect.x_axis*100) * 0.004, // 灏唜鍊奸櫎浠�3  
-        y_axis: (rect.y_axis*100) * 0.004,
+        x_axis: (rect.x_axis*100) * 0.003, // 灏唜鍊奸櫎浠�3  
+        y_axis: (rect.y_axis*100) * 0.003,
         width: (rect.width*100) * 0.002 ,
         widtha: rect.width ,
         heighta: rect.height ,
@@ -183,8 +186,8 @@
   // adjustedRects.value = data.currentCutTerritory[0]
   adjustedRects.value = data.currentCutTerritory[0].map(rect => ({  
         ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
-        x_axis: (rect.x_axis*100) * 0.004, // 灏唜鍊奸櫎浠�3  
-        y_axis: (rect.y_axis*100) * 0.004,
+        x_axis: (rect.x_axis*100) * 0.003, // 灏唜鍊奸櫎浠�3  
+        y_axis: (rect.y_axis*100) * 0.003,
         width: (rect.width*100) * 0.002 ,
         widtha: rect.width ,
         heighta: rect.height ,
diff --git a/UI-Project/src/views/LoginView.vue b/UI-Project/src/views/LoginView.vue
index 40d2d9b..d84f329 100644
--- a/UI-Project/src/views/LoginView.vue
+++ b/UI-Project/src/views/LoginView.vue
@@ -5,12 +5,17 @@
 import {ElMessage} from 'element-plus'
 import request from '@/utils/request'
 import userInfo from '@/stores/userInfo'
- 
+import { useI18n } from 'vue-i18n'
 const store = userInfo()
 let ruleFormRef = ref<FormInstance>()
 const router = useRouter()
 const route = useRoute()
- 
+const { t } = useI18n()
+let language = ref(localStorage.getItem('lang') || 'zh')
+const changeLanguage = () =>{
+  localStorage.setItem('lang',language.value)
+  location.reload()
+}
 const userForm = reactive({
   userName: '',
   password: '',
@@ -22,7 +27,7 @@
  
 const validateUser = (rule: any, value: any, callback: any) => {
   if (value === '') {
-    callback(new Error('璇疯緭鍏ヤ綘鐨勮处鍙�'))
+    callback(new Error(t('login.userErr')))
   } else {
     callback()
   }
@@ -30,7 +35,7 @@
  
 const validatePass = (rule: any, value: any, callback: any) => {
   if (value === '') {
-    callback(new Error('璇疯緭鍏ヤ綘鐨勫瘑鐮�'))
+    callback(new Error(t('login.pwErr')))
   } else {
     callback()
   }
@@ -56,7 +61,7 @@
               console.log(res.data)
  
               router.push('/main')
-              ElMessage.success(`鐧诲綍鎴愬姛`)
+              ElMessage.success(t('login.loginSuccessful'))
             } else {
               ElMessage.error(res['msg'])
               store.$patch({
@@ -67,7 +72,7 @@
             }
           })
           .catch((error) => {
-            ElMessage.error('鏈嶅姟鍣ㄨ繛鎺ュけ璐�')
+            ElMessage.error(t('main.connectErr'))
             store.$patch({
               user: null,
               })
@@ -113,26 +118,35 @@
           <img src="../../src/assets/3.png">
         </div>
         <div style="position: absolute; left: 15vw; top: 22vw; font-size: 55px;color: rgba(29, 33, 41, 1);">
-          鍖楃幓MES绯荤粺
+          {{ $t('northglassMESsystem') }}
         </div>
       </div>
       <div id="div-login">
+        <!--璇█鍒囨崲鎸夐挳-->
+        <el-select
+            @change="changeLanguage"
+            v-model="language"
+            placeholder=" "
+            style="float: right;width: 9rem">
+          <el-option value="zh"  label="涓枃" />
+          <el-option value="en"  label="袪褍褋褋泻懈泄 褟蟹褘泻" />
+        </el-select>
         <el-form @submit.native.prevent
                  ref="ruleFormRef"
                  :model="userForm"
                  status-icon
                  :rules="rules">
           <div id="center">
-            <div style="color: rgba(78, 89, 105, 1);margin-bottom: 10px;">璐﹀彿</div>
+            <div style="color: rgba(78, 89, 105, 1);margin-bottom: 10px;">{{ $t('login.user') }}</div>
             <el-form-item prop="userId">
               <el-input style="width: 340px;"
                         v-model="userForm.userName"
                         type="text"
                         autocomplete="off"
                         :prefix-icon="Avatar"
-                        placeholder="璇疯緭鍏ヨ处鍙�"/>
+                        :placeholder="$t('login.userErr')"/>
             </el-form-item>
-            <div style="color: rgba(78, 89, 105, 1);margin-bottom: 10px;">瀵嗙爜</div>
+            <div style="color: rgba(78, 89, 105, 1);margin-bottom: 10px;">{{ $t('login.password') }}</div>
             <el-form-item prop="pass">
               <el-input style="width: 340px;"
                         v-model="userForm.password"
@@ -140,7 +154,8 @@
                         autocomplete="off"
                         :prefix-icon="Lock"
                         show-password
-                        placeholder="璇疯緭鍏ュ瘑鐮�"/>
+                        :placeholder="$t('login.pwErr')"
+                       />
             </el-form-item>
             <el-form-item id="submitForm">
               <el-button :loading="loginLoadings"
@@ -148,12 +163,12 @@
                          native-type="submit"
                          @click="submitForm(ruleFormRef)"
                          @keyup.enter.native="keyDown(e)"
-                         plain>鐧诲綍
+                         plain>{{ $t('login.login') }}
               </el-button>
               <el-button :loading="registerLoadings"
                          type="primary"
                          @click="register"
-                         plain>娉ㄥ唽
+                         plain>{{ $t('login.register') }}
               </el-button>
  
             </el-form-item>
diff --git a/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue b/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
index da044de..77bd047 100644
--- a/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
+++ b/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
@@ -3,49 +3,58 @@
 import {reactive} from "vue";
 import {useRouter} from "vue-router"
 import request from "@/utils/request"
-// import { ref } from 'vue'
 import { ref, onMounted, onBeforeUnmount } from 'vue';  
 import { WebSocketHost ,host} from '@/utils/constants'
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
+  import { useI18n } from 'vue-i18n'
+  const { t } = useI18n()
+  let language = ref(localStorage.getItem('lang') || 'zh')
 const dialogFormVisible = ref(true)
 const dialogFormVisiblea = ref(false)
 const dialogFormVisibleb = ref(false)
-const width = ref(); // 鐢ㄤ簬瀛樺偍process_id鐨勫搷搴斿紡寮曠敤 
-const height = ref(); // 鐢ㄤ簬瀛樺偍process_id鐨勫搷搴斿紡寮曠敤 
+const width = ref();
+const height = ref();
 const adjustedRects = ref([]);
+const adjustedRects2 = ref([]);
 const adjustedRectsa = ref([]);
 const adjustedRectsb = ref([]);
-// 杩涚倝涓�
-
 const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/temperingGlass`;
-// 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
-
 const handleMessage = (data) => {
-  // 鏇存柊 tableData 鐨勬暟鎹�
+// 杩涚倝涓�
   adjustedRects.value =  data.intoGlass[0].map(rect => ({  
-        ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
-        xcoordinate: rect.xCoordinate * 0.5, // 灏唜鍊奸櫎浠�3  
-        ycoordinate: rect.ycoordinate * 0.5,
-        width: rect.width * 0.4,
-        height: rect.height * 0.4,
+        ...rect, 
+        xcoordinate: rect.xCoordinate * 0.3,
+        ycoordinate: rect.ycoordinate * 0.3,
+        width: rect.width * 0.2,
+        height: rect.height * 0.2,
+        widtha: rect.width,
+        heighta: rect.height,
+      })); 
+  adjustedRects2.value =  data.intoGlass2[0].map(rect => ({  
+        ...rect, 
+        xcoordinate: rect.xCoordinate * 0.3,
+        ycoordinate: rect.ycoordinate * 0.3,
+        width: rect.width * 0.2,
+        height: rect.height * 0.2,
         widtha: rect.width,
         heighta: rect.height,
       })); 
       console.log(data.intoGlass[0]);
+  // 杩涚倝鍓�
       adjustedRectsa.value = data.waitingGlass[0].map(rect => ({  
         ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
-        xcoordinate: rect.xCoordinate * 0.5, // 灏唜鍊奸櫎浠�3  
+        xcoordinate: rect.xCoordinate * 0.5,
         ycoordinate: rect.ycoordinate * 0.5,
         width: rect.width * 0.4,
         height: rect.height * 0.4,
         widtha: rect.width,
         heighta: rect.height,
         state: rect.state
-      }));  
-      
+      }));
+    // 宸插嚭鐐�
       adjustedRectsb.value = data.outGlass[0].map(rect => ({  
         ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
-        xcoordinate: rect.xCoordinate * 0.5, // 灏唜鍊奸櫎浠�3  
+        xcoordinate: rect.xCoordinate * 0.5,
         ycoordinate: rect.ycoordinate * 0.5,
         width: rect.width * 0.4,
         height: rect.height * 0.4,
@@ -55,66 +64,60 @@
       }));  
 };
 onMounted(() => {
-  // fetchFlowCardId();
-  // fetchTableData(); // 鑾峰彇鏁版嵁
   initializeWebSocket(socketUrl, handleMessage);
 });
-
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
 });
 </script>
-
-<template> 
+<template>
   <div style="margin-top: 10px;">
-     <el-button style="margin-left: 15px;"   id="searchButton" type="primary" @click="dialogFormVisible = true;dialogFormVisiblea = false;dialogFormVisibleb = false;">杩涚倝涓�</el-button>
-     <el-button style="margin-left: 15px;"   id="searchButton" type="primary" @click="dialogFormVisiblea = true;dialogFormVisible = false;dialogFormVisibleb = false;" >杩涚倝鍓�</el-button>
-    <el-button  id="searchButton" type="success" @click="dialogFormVisibleb = true;dialogFormVisible = false;dialogFormVisiblea = false">宸插嚭鐐夌幓鐠�</el-button>
+     <el-button style="margin-left: 15px;"   id="searchButton" type="primary" @click="dialogFormVisible = true;dialogFormVisiblea = false;dialogFormVisibleb = false;">{{ $t('processCard.intofurnace') }}</el-button>
+     <el-button style="margin-left: 15px;"   id="searchButton" type="primary" @click="dialogFormVisiblea = true;dialogFormVisible = false;dialogFormVisibleb = false;" >{{ $t('processCard.beforefurnace') }}</el-button>
+    <el-button  id="searchButton" type="success" @click="dialogFormVisibleb = true;dialogFormVisible = false;dialogFormVisiblea = false">{{ $t('processCard.outfurnace') }}</el-button>
 <div v-if="dialogFormVisible" >
-    <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 700px;" v-loading="loading">
-<div style="width: 49%;float: left;background-color: #f4f4f5;height: 650px;">
+    <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 600px;" v-loading="loading">
+<div style="width: 49%;float: left;background-color: #f4f4f5;height: 550px;">
   <el-scrollbar height="630px">
-    <div v-for="(group, groupId) in groupedRects" :key="groupId" style="position: relative;">  
     <div  style="position: relative;width: 1400px;">  
       <div  
-      v-for="(rect, index) in adjustedRects"  
+      v-for="(rect, index) in adjustedRects"
       :key="index"  
-      class="rect"  
+      class="rect"
       :style="{ position: 'absolute',  top: `${rect.ycoordinate}px`, left: `${rect.xcoordinate}px`, width: `${rect.width}px`, height: `${rect.height}px`  }"  
     >
      <div  class="centered-text">
     <div >{{ rect.flowcardId }}</div>  
     <div style="margin-top: 50px;margin-left: -50px;">{{ rect.widtha }}*{{ rect.heighta }}</div>  
   </div>
-  </div> 
-   </div>
+  </div>
    </div>
    </el-scrollbar>
   </div>
-<div style="width: 49%;float: right;background-color: #f4f4f5;height: 650px;">
-  <el-scrollbar height="630px">
+<div style="width: 49%;float: right;background-color: #f4f4f5;height: 550px;">
+  <el-scrollbar height="550px">
     <div  style="position: relative;width: 1400px;">  
       <div  
-      v-for="(rect, index) in adjustedRects"  
+      v-for="(rect, index) in adjustedRects2"
       :key="index"  
-      class="rect"  
+      class="rect"
       :style="{ position: 'absolute',  top: `${rect.ycoordinate}px`, left: `${rect.xcoordinate}px`, width: `${rect.width}px`, height: `${rect.height}px`  }"  
     >
      <div  class="centered-text">
     <div >{{ rect.flowcardId }}</div>  
     <div style="margin-top: 50px;margin-left: -50px;">{{ rect.widtha }}*{{ rect.heighta }}</div>  
   </div>
-  </div> 
+  </div>
    </div>
    </el-scrollbar>
 </div>
-    
    </el-card>
     </div>
 <div v-if="dialogFormVisiblea">
+  <!-- 杩涚倝鍓� -->
   <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading">
-      <el-scrollbar height="630px">
+      <el-scrollbar height="550px">
     <div  style="position: relative;width: 1400px;">  
       <div  
       v-for="(rect, index) in adjustedRectsa"  
@@ -133,8 +136,9 @@
    </el-card>
 </div>
 <div v-if="dialogFormVisibleb">
+  <!-- 宸插嚭鐐� -->
   <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading">
-      <el-scrollbar height="630px">
+      <el-scrollbar height="550px">
     <div  style="position: relative;width: 1400px;">  
       <div  
       v-for="(rect, index) in adjustedRectsb"  
@@ -154,7 +158,6 @@
 </div>
   </div>
 </template>
-
 <style scoped>
 #boxa{
   border: 1px solid rgb(119, 116, 116);
diff --git a/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue b/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue
index 2a98019..10bf427 100644
--- a/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue
+++ b/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue
@@ -56,7 +56,7 @@
   <div style="margin-top: 10px;">
 <div>
     <el-card style="margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading">
-    <el-scrollbar height="630px">
+    <el-scrollbar height="600px">
     <div  style="position: relative;width: 1400px;">  
       <div  
       v-for="(rect, index) in adjustedRects"
diff --git a/UI-Project/src/views/RegisterView.vue b/UI-Project/src/views/RegisterView.vue
index 44b8078..9879f09 100644
--- a/UI-Project/src/views/RegisterView.vue
+++ b/UI-Project/src/views/RegisterView.vue
@@ -7,6 +7,10 @@
 import { Lock,Avatar } from '@element-plus/icons-vue'
   // import {Avatar, UserFilled} from "@element-plus/icons-vue";
 
+  import { useI18n } from 'vue-i18n'
+  const { t } = useI18n()
+  let language = ref(localStorage.getItem('lang') || 'zh')
+
   const router = useRouter()
   const route = useRoute()
   let loginLoadings= ref(false)
@@ -23,9 +27,9 @@
   /*鏂规硶*/
   const checkName = (rule: any, value: any, callback: any) => {
     if (value.trim() === '') {
-      callback(new Error('濮撳悕涓嶈兘涓虹┖'))
+      callback(new Error(t('login.namea')))
     }else if(value.length>16){
-      callback(new Error('闀垮害涓嶈兘瓒呰繃16'))
+      callback(new Error(t('login.len')))
     }else{
       callback()
     }
@@ -33,9 +37,9 @@
 
   const checkPassword = (rule: any, value: any, callback: any) => {
     if (value.trim() === '') {
-      callback(new Error('瀵嗙爜涓嶈兘涓虹┖'))
+      callback(new Error(t('login.passnull')))
     }else if(value.length>16 || value.length<6){
-      callback(new Error('瀵嗙爜闀垮害涓嶈兘浣庝簬6鎴栬秴杩�16'))
+      callback(new Error(t('login.leng')))
     }else{
       callback()
     }
@@ -43,11 +47,11 @@
 
   const checkConfirmPassword = (rule: any, value: any, callback: any) => {
     if (value.trim() === '') {
-      callback(new Error('纭瀵嗙爜涓嶈兘涓虹┖'))
+      callback(new Error(t('login.spwn')))
     }else if(value !== register.passWord){
-      callback(new Error('涓ゆ瀵嗙爜涓嶇浉鍚�'))
+      callback(new Error(t('login.depass')))
     }else if(value.length>16 || value.length<6){
-      callback(new Error('瀵嗙爜闀垮害涓嶈兘浣庝簬6鎴栬秴杩�16'))
+      callback(new Error(t('login.leng')))
     }else{
       callback()
     }
@@ -88,14 +92,14 @@
               })
             })
 
-            ElMessage.success(`娉ㄥ唽鎴愬姛`)
+            ElMessage.success(t('register.registerSuccessful'))
             loginLoadings.value=false
           } else {
             ElMessage.error(res['msg'])
             return false
           }
         }).catch(error => {
-          ElMessage.error("鏈嶅姟鍣ㄨ繛鎺ュけ璐�")
+          ElMessage.error(t('main.connectErr'))
           loginLoadings.value=false
           return false
         })
@@ -107,11 +111,6 @@
                 path:'/login',
               })
   }
-
-
-
-
-  // console.log(route.params)
 </script>
 
 <template>
@@ -123,7 +122,7 @@
         <img src="../../src/assets/3.png">
       </div> 
        <div style="position: absolute; left: 15vw; top: 22vw; font-size: 55px;color: rgba(29, 33, 41, 1);">
-        鍖楃幓MES绯荤粺
+        {{ $t('northglassMESsystem') }}
       </div>
     </div>
     <div id="div-login">
@@ -135,33 +134,33 @@
             :rules="rules"
             label-width="75px"
         >
-          <div id="title">娉ㄥ唽鏂扮敤鎴�</div>
+          <div id="title">{{ $t('register.newuserregister') }}</div>
         <div id="center">
             <!-- <div style="color: rgba(78, 89, 105, 1);margin-bottom: 10px;">濮撳悕</div> -->
-          <el-form-item prop="userName" label="濮撳悕:">
+          <el-form-item prop="userName" :label="$t('register.name')">
             <el-input
             style="width: 200px;"
                 v-model="register.userName"
                 type="text"
                 autocomplete="off"
                 :prefix-icon="Avatar"
-                placeholder="璇疯緭鍏ュ鍚�"
+                :placeholder="$t('register.inputname')"
             />
           </el-form-item>
             <!-- <div style="color: rgba(78, 89, 105, 1);margin-bottom: 10px;">瀵嗙爜</div> -->
-          <el-form-item prop="passWord" label="瀵嗙爜:">
+          <el-form-item prop="passWord" :label="$t('register.password')">
             <el-input
             style="width: 200px;"
                 v-model="register.passWord"
                 type="password"
                 autocomplete="off"
                 :prefix-icon="Lock"
-                placeholder="璇疯緭鍏ュ瘑鐮�"
+                :placeholder="$t('register.pwErr')"
                 show-password
             />
           </el-form-item>
             <!-- <div style="color: rgba(78, 89, 105, 1);margin-bottom: 10px;">纭瀵嗙爜</div> -->
-          <el-form-item prop="confirmPassword" label="纭瀵嗙爜:">
+          <el-form-item prop="confirmPassword" :label="$t('register.passwordation')">
             <el-input
             style="width: 200px;"
                 v-model="register.confirmPassword" 
@@ -169,7 +168,7 @@
                 :prefix-icon="Lock"
                 autocomplete="off"
                 show-password
-                placeholder="璇风‘璁ゅ瘑鐮�"
+                :placeholder="$t('register.pwErration')"
             />
           </el-form-item>
           <el-form-item id="submitForm">
@@ -178,13 +177,13 @@
                 type="primary"
                 @click="submitForm(ruleFormRef)"
                 plain
-            >纭娉ㄥ唽
+            >{{ $t('register.registration') }}
             </el-button>
             <el-button
                 type="primary"
                 @click="toLogin"
                 plain
-            >鍙栨秷
+            >{{ $t('register.false') }}
             </el-button>
 
           </el-form-item>
@@ -196,25 +195,6 @@
 </template>
 
 <style scoped>
-/* #main-div{
-  position: absolute;
-  left:75%;
-  top:45%;
-  transform: translate(-50%, -50%);
-} */
-/* #register{
-  background-color: #fff;
-  width: 32vw;
-  height: 35vh;
-  box-shadow: 0 8px 16px 0 rgba(0,0,0,0), 0 6px 5px 0 rgba(0,0,0,0.19);
-  display:flex;
-  align-items:center;
-  justify-content:center;
-  min-height: 280px;
-} */
-/* .el-form{
-  max-width: 300px;
-} */
 #div-login{
   margin-top: 5%;
   /* margin-top: 20%; */
diff --git a/UI-Project/src/views/Returns/returns.vue b/UI-Project/src/views/Returns/returns.vue
index 84df863..42dd369 100644
--- a/UI-Project/src/views/Returns/returns.vue
+++ b/UI-Project/src/views/Returns/returns.vue
@@ -5,6 +5,8 @@
 const router = useRouter()
 import type { TableColumnCtx } from 'element-plus'
 import { ElMessage, ElMessageBox } from 'element-plus'
+import { useI18n } from 'vue-i18n'
+const { t } = useI18n()
 const dialogFormVisible = ref(false)
 const blind = ref(false)
 const blinda = ref(false)
@@ -25,7 +27,8 @@
 const selectedValuea = ref('');  
 const selectedValueb = ref('');
 const selectedValuec = ref(''); 
-const upstatus = ref('涓婄墖鏈烘墜鍔ㄧ姸鎬侊細'); // 鍋囪杩欎釜鐢ㄤ簬鏄剧ず鑷姩/鎵嬪姩鐘舵��  
+// const upstatus = ref('涓婄墖鏈烘墜鍔ㄧ姸鎬侊細'); // 鍋囪杩欎釜鐢ㄤ簬鏄剧ず鑷姩/鎵嬪姩鐘舵��  
+const upstatus = ref(t('basicData.machineaa'));
 const cuttingMachine = ref(''); // 鍋囪杩欎釜鐢ㄤ簬瀛樺偍鍚庣杩斿洖鐨勭姸鎬佸�硷紙0鎴�1锛�  
 const cuttingMachineStatusColor = ref('#911005'); // 鐢ㄤ簬鍔ㄦ�佽缃甶鏍囩鐨勮儗鏅壊 
 const inKageWord = ref(0); // 鐢ㄤ簬瀛樺偍瑕佷紶閫掔粰鎺ュ彛鐨刬nKageWord鍊� 
@@ -260,7 +263,7 @@
   else  {
       ElMessage({
         type: 'info',
-        message: '绗簩琛屽拰绗洓琛岀殑楂樺繀椤诲ぇ浜�2700鎵嶈兘淇濆瓨锛�',
+        message: t('basicData.pause'),
       })
     }
    
@@ -320,8 +323,8 @@
       const uniqueThicknesses = new Set(response.data.map(item => item.thickness));  
   
       selectOptions.value = Array.from(uniqueWidths).map(width => ({ 
-      value: width, // 鍋囪杩欐槸浣犳兂瑕佷綔涓簐alue鐨勫睘鎬�  
-      label: width, // 鍋囪杩欐槸浣犳兂瑕佹樉绀虹殑label  
+      value: width, 
+      label: width, 
     }));  
       selectOptionsa.value = Array.from(uniqueHeights).map(height => ({ 
       value: height, 
@@ -375,7 +378,7 @@
   }
     } else if (markingMachineStatus.value === '#911005' || cuttingMachineStatus.value === '#911005') {  
       // 鎻愮ず鐢ㄦ埛鎵撴爣鏈烘湭灏辩华  
-      ElMessage.warning('璇风‘璁ゆ墦鏍囨満鍜屽垏鍓叉満鐨勫氨缁姸鎬侊紒');  
+      ElMessage.warning(t('basicData.pausea'));  
     } 
 }
 // 鏆傚仠
@@ -400,7 +403,7 @@
     else  {
       ElMessage({
         type: 'info',
-        message: '宸ョ▼鍙蜂笉鑳戒负绌猴紒',
+        message: t('basicData.infonull'),
       })
     }
 }
@@ -433,7 +436,7 @@
     else  {
       ElMessage({
         type: 'info',
-        message: '宸ョ▼鍙蜂笉鑳戒负绌猴紒',
+        message: t('basicData.infonull'),
       })
     }
 }
@@ -446,13 +449,13 @@
 function getStatusText(state: number) {
   switch (state) {
     case 0:  
-      return '绛夊緟涓�';  
+      return t('basicData.waiting');
     case 1:  
-      return '涓婄墖涓�';  
+      return t('basicData.up');
     case 2:  
-      return '涓婄墖涓�';  
+    return t('basicData.up');
     case 100:  
-      return '宸插畬鎴�';  
+    return t('basicData.finish');
   }  
 }  
 function getStatusType(state: number) {  
@@ -498,27 +501,24 @@
 const toggleEnableState = async (row: any) => {  
   // 妫�鏌� id 鏄惁涓虹┖  
   if (!row.id) {  
-    ElMessage.error('璇ュ伐绋嬫湭淇濆瓨鍒颁笂鐗囪〃锛�');  
+    ElMessage.error(t('basicData.updatanull'));  
     return; // 濡傛灉 id 涓虹┖锛屽垯涓嶆墽琛屽悗缁搷浣�  
   }  
-  
   const newState = row.state === 100 ? 0 : 100;  
-  
   try {  
     // 鍙戦�佽姹傚埌鍚庣鏇存柊鐘舵��  
     const response = await request.post('/loadGlass/up-patten-usage/updateGlassState', { id: row.id, state: newState });  
     if (response.code === 200) {  
       ElMessage.success(response.message);  
+      row.state = newState;  
     } else {  
       ElMessage.error(response.message);  
     }  
   } catch (error) {  
     // 澶勭悊璇锋眰閿欒  
-    console.error('鏇存柊鐜荤拑鐘舵�佽姹傚け璐�:', error);  
-    ElMessage.error('鏇存柊鐜荤拑鐘舵�佹椂鍙戠敓閿欒');  
+    ElMessage.error(t('basicData.glassnull'));   
   }  
 };  
-
 const wsUrl = `ws://${WebSocketHost}:${host}/api/loadGlass/api/talk/loadGlass`;
 const ws = new WebSocket(wsUrl);  
 ws.onopen = () => {  
@@ -547,7 +547,7 @@
     if (data && Array.isArray(data.InkageStatus) && data.InkageStatus.length > 0) {  
       const status = data.InkageStatus[0]; 
       cuttingMachine.value = status; 
-      upstatus.value = status === '1' ? '涓婄墖鏈鸿仈鏈虹姸鎬侊細' : '涓婄墖鏈烘墜鍔ㄧ姸鎬侊細';
+            upstatus.value = status === '1' ? t('basicData.machine') : t('basicData.machineaa');
       cuttingMachineStatusColor.value = status === '1' ? 'green' : '#911005';  
       inKageWord.value = status === '1' ? 0 : 1;  
     } else {  
@@ -565,7 +565,7 @@
   );  
     if (response.code == 200) {  
       const status = response.data.status; 
-      upstatus.value = status === '1' ? '涓婄墖鏈鸿仈鏈虹姸鎬侊細' : '涓婄墖鏈烘墜鍔ㄧ姸鎬侊細';  
+      upstatus.value = status === '1' ? t('basicData.machine') : t('basicData.machineaa');
       cuttingMachineStatusColor.value = status === '1' ? 'green' : '#911005';  
       // 鏄剧ず鎴愬姛娑堟伅  
       ElMessage.success(response.message);  
@@ -583,20 +583,20 @@
 <template>
   <div>
     <div id="dotClass">
-      <div>鎵撴爣鏈哄氨缁姸鎬侊細</div>  
+      <div>{{ $t('basicData.laserprinting') }}</div>  
     <i :style="{ marginTop: '2px', backgroundColor: markingMachineStatus, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>  
-    <el-button @click="confirmMarkingMachine" style="margin-left: 30px;margin-top: -3px;">纭</el-button>
-    <div style="margin-left: 70px;">鍒囧壊鏈哄氨缁姸鎬侊細</div>
+    <el-button @click="confirmMarkingMachine" style="margin-left: 30px;margin-top: -3px;">{{ $t('basicData.yes') }}</el-button>
+    <div style="margin-left: 70px;">{{ $t('basicData.cuttingmachine') }}</div>
     <i :style="{ marginTop: '2px', backgroundColor: cuttingMachineStatus, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>  
-    <el-button @click="confirmCuttingMachine" style="margin-left: 30px;margin-top: -3px;" >纭</el-button>
+    <el-button @click="confirmCuttingMachine" style="margin-left: 30px;margin-top: -3px;" >{{ $t('basicData.yes') }}</el-button>
     <div style="margin-left: 70px;">{{ upstatus  }} </div>
     <i :style="{ marginTop: '2px', backgroundColor: cuttingMachineStatusColor, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>  
-    <el-button @click="confirmCutting" style="margin-left: 30px;margin-top: -3px;" >鍒囨崲</el-button>
+    <el-button @click="confirmCutting" style="margin-left: 30px;margin-top: -3px;" >{{ $t('basicData.change') }}</el-button>
    
   </div>
-    <el-button style="margin-top: 5px;margin-left: 15px;"   id="searchButton" type="primary" @click="dialogFormVisible = true">閫夋嫨宸ョ▼</el-button>
-    <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="primary" @click="handleBind">寮�濮嬩笂鐗�</el-button>
-    <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="warning" @click="handleBinda">鏆傚仠</el-button>
+    <el-button style="margin-top: 5px;margin-left: 15px;"   id="searchButton" type="primary" @click="dialogFormVisible = true">{{ $t('basicData.selectproject') }}</el-button>
+    <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="primary" @click="handleBind">{{ $t('basicData.startloading') }}</el-button>
+    <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="warning" @click="handleBinda">{{ $t('basicData.stop') }}</el-button>
     <!-- <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="danger" @click="handleBindb">鍋滄浠诲姟</el-button> -->
     
     <el-card style="flex: 1;margin-left: 10px;margin-top: 15px;" v-loading="loading">
@@ -607,12 +607,12 @@
      :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"
       :data="tableData"
     >
-    <el-table-column prop="engineeringId" label="宸ョ▼鍙�" width="200" align="center"/>
-      <el-table-column prop="width" label="鍘熺墖瀹�" align="center"/>
-      <el-table-column prop="height" label="鍘熺墖楂�" align="center"/>
-      <el-table-column prop="filmsId" label="鑶滅郴" align="center"/>
-      <el-table-column prop="layoutSequence" label="鏁伴噺" align="center"/>
-      <el-table-column prop="thickness" label="鍘氬害" align="center"/>
+    <el-table-column prop="engineeringId" :label="$t('basicData.projectnumber')" width="200" align="center"/>
+      <el-table-column prop="width" :label="$t('basicData.glasswidth')" align="center"/>
+      <el-table-column prop="height" :label="$t('basicData.glassheight')" align="center"/>
+      <el-table-column prop="filmsId" :label="$t('basicData.coatingtypes')" align="center"/>
+      <el-table-column prop="layoutSequence" :label="$t('basicData.quantity')" align="center"/>
+      <el-table-column prop="thickness" :label="$t('basicData.thickness')" align="center"/>
       <!-- <el-table-column
             align="center"
             label="鐘舵��"
@@ -626,7 +626,7 @@
       </template>  -->
       <el-table-column
           align="center"
-            label="鍚敤鐘舵��"
+            :label="$t('basicData.startstatus')"
             min-width="80"
             prop="state"
           >
@@ -635,34 +635,34 @@
             :type="scope.row.state === 100 ? 'success' : 'warning'"  
             @click="toggleEnableState(scope.row)"  
           >  
-            {{ scope.row.state === 100 ? '閫氳繃' : '绛夊緟涓�' }}  
+            {{ scope.row.state === 100 ? $t('basicData.pass') : $t('basicData.waiting') }}
           </el-tag>  
         </template> 
           </el-table-column>
     </el-table>
       </div>
     </el-card>
-  <el-dialog v-model="blind" top="30vh" width="25%" title="鏄惁寮�濮嬩笂鐗�?" >
+  <el-dialog v-model="blind" top="30vh" width="25%" :title="$t('basicData.startfilm')">
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="handle">
-          纭
+          {{ $t('basicData.confirm') }}
         </el-button>
-        <el-button @click="blind = false">鍙栨秷</el-button>
+        <el-button @click="blind = false">{{ $t('basicData.cancel') }}</el-button>
       </div>
     </template>
   </el-dialog>
-  <el-dialog v-model="blinda" top="30vh" width="25%" title="鏄惁鏆傚仠?" >
+  <el-dialog v-model="blinda" top="30vh" width="25%" :title="$t('basicData.whetherpause')">
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="handlea">
-          纭
+          {{ $t('basicData.confirm') }}
         </el-button>
-        <el-button @click="blinda = false">鍙栨秷</el-button>
+        <el-button @click="blinda = false">{{ $t('basicData.cancel') }}</el-button>
       </div>
     </template>
   </el-dialog>
-  <el-dialog v-model="blindb" top="30vh" width="25%" title="鏄惁鍋滄浠诲姟?" >
+  <!-- <el-dialog v-model="blindb" top="30vh" width="25%" title="鏄惁鍋滄浠诲姟?" >
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="handleb">
@@ -671,31 +671,31 @@
         <el-button @click="blindb = false">鍙栨秷</el-button>
       </div>
     </template>
-  </el-dialog>
+  </el-dialog> -->
       <div id="parent">
         <img src="../../assets/shangpianji.png" alt="" style="max-width: 20%;max-height: 20%;margin-top: 20px;margin-left: 500px;">
         <div id="overlay" v-show="flake"></div>
         <div id="overlaya" v-show="flakea"></div>
       </div>
       <div style="margin-top: -350px;margin-left: 650px;">
-        <el-table :data="tableDataa" border style="width: 70%"
+        <el-table :data="tableDataa" border style="width: 85%"
      :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"
         >
-          <el-table-column prop="workstationId" align="center" label="宸ヤ綅" min-width="50" />
-          <el-table-column prop="patternWidth" align="center" label="瀹�" min-width="80" />
-          <el-table-column prop="patternHeight" align="center" label="楂�" min-width="80" />
-          <el-table-column prop="filmsId" align="center" label="鑶滅郴" min-width="80" />
-          <el-table-column prop="number" align="center" label="鏁伴噺" min-width="80" />
-          <el-table-column fixed="right" label="鎿嶄綔" align="center" width="150">
+          <el-table-column prop="workstationId" align="center" :label="$t('basicData.station')" min-width="60" />
+          <el-table-column prop="patternWidth" align="center" :label="$t('basicData.width')" min-width="80" />
+          <el-table-column prop="patternHeight" align="center" :label="$t('basicData.height')" min-width="80" />
+          <el-table-column prop="filmsId" align="center" :label="$t('basicData.coatingtypes')" min-width="80" />
+          <el-table-column prop="number" align="center" :label="$t('basicData.quantity')" min-width="80" />
+          <el-table-column fixed="right" :label="$t('basicData.operate')" align="center" width="150">
             <template #default="scope">
-              <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">娣诲姞</el-button>
-              <el-button size="mini" type="text" plain @click="handleBindRacka(scope.row)">鍒犻櫎</el-button>
+              <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">{{ $t('basicData.add') }}</el-button>
+              <el-button size="mini" type="text" plain @click="handleBindRacka(scope.row)">{{ $t('basicData.delete') }}</el-button>
             </template>
         </el-table-column>
         </el-table>
     </div>
     
-  <el-dialog v-model="add" top="23vh" width="45%" title="娣诲姞鍘熺墖" >
+  <el-dialog v-model="add" top="23vh" width="45%" :title="$t('basicData.addglass')" >
     <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
             <el-form  size="mini" label-width="150px">
       <el-form label-width="70px" label-position="right">
@@ -703,12 +703,12 @@
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
-              <el-form-item label="瀹斤細" :required="true" style="width: 14vw">
+              <el-form-item :label="$t('basicData.widtha')" :required="true" style="width: 14vw">
                <el-select  
                       v-model="selectedValue"  
                       filterable  
                       clearable  
-                      placeholder="璇烽�夋嫨瀹�"  
+                      :placeholder="$t('basicData.selectwidth')"
                       style="width: 220px"  
                       @input="handleInputChangea"  
                     >  
@@ -725,12 +725,12 @@
           <el-col :span="9">
             <div id="dta" style="font-size: 15px;">
         <div>
-          <el-form-item label="楂橈細" :required="true" style="width: 14vw">
+          <el-form-item :label="$t('basicData.heighta')" :required="true" style="width: 14vw">
             <el-select  
                       v-model="selectedValuea"  
                       filterable  
                       clearable  
-                      placeholder="璇烽�夋嫨楂�"  
+                      :placeholder="$t('basicData.selectheight')" 
                       style="width: 220px"  
                       @input="handleInputChangea"  
                     >  
@@ -749,12 +749,12 @@
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
-              <el-form-item label="鑶滅郴锛�" :required="true" style="width: 14vw;">
+              <el-form-item :label="$t('basicData.coatingtypesa')"  :required="true" style="width: 14vw;">
                 <el-select  
                       v-model="selectedValueb"  
                       filterable  
                       clearable  
-                      placeholder="璇烽�夋嫨鑶滅郴"  
+                      :placeholder="$t('basicData.selectcoatingtypes')"
                       style="width: 220px"  
                       @input="handleInputChangea"  
                     >  
@@ -770,12 +770,12 @@
           <el-col :span="9">
             <div id="dta" style="font-size: 15px;">
         <div>
-              <el-form-item label="鍘氬害锛�" :required="true" style="width: 14vw">
+              <el-form-item :label="$t('basicData.thicknessa')" :required="true" style="width: 14vw">
                 <el-select  
                       v-model="selectedValuec"  
                       filterable  
                       clearable  
-                      placeholder="璇烽�夋嫨鍘氬害"  
+                      :placeholder="$t('basicData.selectthickness')"
                       style="width: 220px"  
                       @input="handleInputChangea"  
                     >  
@@ -794,8 +794,8 @@
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
-              <el-form-item label="鏁伴噺锛�" :required="true" style="width: 14vw;">
-                <el-input  v-model="number" autocomplete="off" />
+              <el-form-item :label="$t('basicData.quantitya')" :required="true" style="width: 14vw;">
+                <el-input :placeholder="$t('basicData.selectquantity')" v-model="number" autocomplete="off" />
               </el-form-item></div></div>
           </el-col>
         </el-row>
@@ -805,31 +805,31 @@
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="handleConfirm">
-          纭
+          {{ $t('basicData.confirm') }}
         </el-button>
-        <el-button @click="add = false">鍙栨秷</el-button>
+        <el-button @click="add = false">{{ $t('basicData.cancel') }}</el-button>
       </div>
     </template>
   </el-dialog>
-  <el-dialog v-model="adda" top="30vh" width="25%" title="鏄惁鍒犻櫎璇ユ潯淇℃伅?" >
+  <el-dialog v-model="adda" top="30vh" width="25%" :title="$t('basicData.deletemessage')">
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="handleConfirma">
-          纭
+          {{ $t('basicData.confirm') }}
         </el-button>
-        <el-button @click="adda = false">鍙栨秷</el-button>
+        <el-button @click="adda = false">{{ $t('basicData.cancel') }}</el-button>
       </div>
     </template>
   </el-dialog>
         </div>
-  <el-dialog v-model="dialogFormVisible" top="24vh" width="30%" title="宸ョ▼" >
+  <el-dialog v-model="dialogFormVisible" top="24vh" width="30%" :title="$t('basicData.project')" >
     <div style="margin-left: 50px;margin-bottom: 10px;">
-      <el-form-item label="宸ョ▼鍙凤細" :required="true">
+      <el-form-item :label="$t('basicData.projectnumber')" :required="true">
         <el-select  
            v-model="selectedProjectNo"  
            filterable  
            clearable  
-           placeholder="璇烽�夋嫨宸ョ▼"  
+           :placeholder="$t('basicData.plselectproject')"
            style="width: 220px"  
            @input="handleInputChange"  
          >  
@@ -845,9 +845,9 @@
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="handleup">
-          纭
+          {{ $t('basicData.confirm') }}
         </el-button>
-        <el-button @click="dialogFormVisible = false">鍙栨秷</el-button>
+        <el-button @click="dialogFormVisible = false">{{ $t('basicData.cancel') }}</el-button>
       </div>
     </template>
   </el-dialog>
diff --git a/UI-Project/src/views/Slicecage/slicecage.vue b/UI-Project/src/views/Slicecage/slicecage.vue
index 068a4da..3035fa4 100644
--- a/UI-Project/src/views/Slicecage/slicecage.vue
+++ b/UI-Project/src/views/Slicecage/slicecage.vue
@@ -1,10 +1,13 @@
 <script lang="ts" setup>
+import { useI18n } from 'vue-i18n'
+  const { t } = useI18n()
+  let language = ref(localStorage.getItem('lang') || 'zh')
 import {Search} from "@element-plus/icons-vue";
-import {reactive} from "vue";
 import {useRouter} from "vue-router"
 const router = useRouter()
+import request from "@/utils/request"
 import { WebSocketHost ,host} from '@/utils/constants'
-import { ref, onMounted , onBeforeUnmount} from "vue";
+import { ref, onMounted , onBeforeUnmount, reactive, computed } from "vue";
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
 import { ElMessage, ElMessageBox } from 'element-plus'
 import { tr } from "element-plus/es/locale";
@@ -15,10 +18,30 @@
 const tableDatab = ref([])
 const tableDatac = ref([])
 const tableDatad = ref([])
+const tableDataf = ref([])
 const tableDatae = ref([])
 const adjustedRects = ref([]);
-const height = ref([]);
- 
+const project = ref([]);
+const adjustedRectsa = ref([]);
+const adjustedRectsb = ref([]);
+const adjustedRectsc = ref([]);
+const adjustedRectsd = ref([]);
+const adjustedRectse = ref([]);
+const adjustedRectsf = ref([]);
+const adjustedRectsg = ref([]);
+const currentRow = reactive({}); // 褰撳墠琛岀殑鏁版嵁 
+const add = ref(false)
+const flowCardId = ref('');
+const gap = ref('');
+const glassId = ref('');
+const glassType = ref('');
+const height = ref('');
+const sequence = ref('');
+const state = ref('');
+const temperingFeedSequence = ref('');
+const temperingLayoutId = ref('');
+const thickness = ref('');
+const width = ref('');
 const carposition1 = ref(60);
 const carposition2 = ref(220);
 const carposition3 = ref(60);
@@ -46,136 +69,99 @@
 const cell6=ref(true);
 const cell7=ref(true);
 const cell8=ref(true);
- 
-const currentPage4 = ref(4)
-const pageSize4 = ref(100)
+const selectedRow = ref(null); // 瀛樺偍閫変腑鐨勮鏁版嵁  
 
-const dialogForm = () => {
-  ElMessageBox.confirm(
-    '纭畾瑕佹�ュ仠鍚�?',
-    '鎻愮ず',
-    {
-      confirmButtonText: '鏄�',
-      cancelButtonText: '鍚�',
-      type: 'warning',
+
+    // 褰撳墠椤电爜鍜屾瘡椤垫樉绀虹殑鏉℃暟
+    const currentPage = ref(1);
+    const itemsPerPage = computed(() => {
+      if (currentPage.value === 1) {
+        return 21;
+      } else if (currentPage.value === 2) {
+        return 21;
+      } else if (currentPage.value === 3) {
+        return 21;
+      } else if (currentPage.value === 4) {
+        return 20;
+      } else if (currentPage.value === 5) {
+        return 21;
+      } else if (currentPage.value === 6) {
+        return 25;
+      } else if (currentPage.value === 7) {
+        return 51;
+      } else if (currentPage.value === 8) {
+        return 25;
+      } else {
+        return 25; // 榛樿鍊硷紝鍙互鏍规嵁瀹為檯闇�姹備慨鏀�
+      }
+    });
+
+    // 璁$畻鍒嗛〉鍚庣殑鏁版嵁
+    const paginatedUsers = computed(() => {
+      const startIndex = calculateStartIndex();
+      const endIndex = startIndex + itemsPerPage.value;
+      return tableData.value.slice(startIndex, endIndex);
+    });
+
+    // 璁$畻褰撳墠椤电殑璧峰绱㈠紩
+    function calculateStartIndex() {
+      let index = 0;
+      for (let i = 1; i < currentPage.value; i++) {
+        if (i === 1) {
+          index += 21;
+        } else if (i === 2) {
+          index += 21;
+        } else if (i === 3) {
+          index += 21;
+        }else if (i === 4) {
+          index += 20;
+        }else if (i === 5) {
+          index += 21;
+        }else if (i === 6) {
+          index += 25;
+        }else if (i === 7) {
+          index += 51;
+        }else if (i === 8) {
+          index += 25;
+        } else {
+          index += 25;
+        }
+      }
+      return index;
     }
-  )
-    .then(() => {
-      ElMessage({
-        type: 'success',
-        message: '鎬ュ仠鎴愬姛锛�',
-      })
-    })
-    .catch(() => {
-      ElMessage({
-        type: 'info',
-        message: '鎬ュ仠澶辫触',
-      })
-    })
-}
- 
-  var timer=setInterval(() => {
-    // console.log(million.value,million1.value);
-    million.value+=1;
-    if(million.value-million1.value!==12){
-      
-      if(million.value-million1.value>=2){
-        if(carposition1.value==220){
-          timers1.value=false;
-        }else if(carposition1.value==60){
-          timers1.value=true;
-        }
-        if(timers1.value==true){
-          carposition1.value=carposition1.value+16;
-        }else{
-          carposition1.value=carposition1.value-16;
-        }
- 
-        
-        if(carposition2.value==220){
-          timers2.value=false;
-        }else if(carposition2.value==60){
-          timers2.value=true;
-        }
-        if(timers2.value==true){
-          carposition2.value+=16;
-        }else{
-          carposition2.value-=16;
-        }
-      }else{
- 
+
+    // 涓婁竴椤靛拰涓嬩竴椤垫柟娉�
+    const prevPage = () => {
+      if (currentPage.value > 1) {
+        currentPage.value--;
       }
-    }else{
-      million1.value=million.value;
+    };
     
-      if(cellshow1.value==true){
-        cellshow1.value=false;
-      }else{
-        cellshow1.value=true;
+    const nextPage = () => {
+      if (currentPage.value < totalPages.value) {
+        currentPage.value++;
       }
-      if(cellshow2.value==true){
-        cellshow2.value=false;
-      }else{
-        cellshow2.value=true;
-      }
-    }
-    
-  }, 1000);
- 
-  var timer=setInterval(() => {
-    // console.log(million3.value,million4.value);
-    million3.value+=1;
-    if(million3.value-million4.value!==12){
-      
-      if(million3.value-million4.value>=2){
-        if(carposition3.value==260){
-          timers3.value=false;
-        }else if(carposition3.value==60){
-          timers3.value=true;
-        }
-        if(timers3.value==true){
-          carposition3.value=carposition3.value+20;
-        }else{
-          carposition3.value=carposition3.value-20;
-        }
- 
-        
-        if(carposition4.value==260){
-          timers4.value=false;
-        }else if(carposition4.value==60){
-          timers4.value=true;
-        }
-        if(timers4.value==true){
-          carposition4.value+=20;
-        }else{
-          carposition4.value-=20;
-        }
-      }else{
- 
-      }
-    }else{
-      million4.value=million3.value;
-      if(cellshow5.value==true){
-        cellshow5.value=false;
-        
-      }else{
-        cellshow5.value=true;
-        
-      }
-      if(cellshow3.value==true){
-        cellshow3.value=false;
-      }else{
-        cellshow3.value=true;
-      }
-      if(cellshow4.value==true){
-        cellshow4.value=false;
-      }else{
-        cellshow4.value=true;
-      }
-    }
-    
-  }, 1000);
- 
+    };
+
+    // 鎬婚〉鏁拌绠�
+    const totalPages = computed(() => {
+      // let total = 0;
+      // for (let i = 1; i <= users.value.length; i++) {
+      //   if (i === 1) {
+      //     total += 1;
+      //   } else if (i === 2) {
+      //     total += 2;
+      //   } else if (i === 3) {
+      //     total += 5;
+      //   } else {
+      //     total += 10;
+      //   }
+      // }
+      return 9;
+    });
+
+
+
 const getTableRow = (row,type) =>{
   switch (type) {
     case 'edit' :{
@@ -189,8 +175,293 @@
     }
   }
 }
- 
+const handleBindRack = (row) => {
+  selectedRow.value = row; // 鏇存柊閫変腑鐨勮鏁版嵁  
+  currentRow.deviceId  = row.deviceId; // 鐩存帴璁剧疆鍝嶅簲寮忓睘鎬�  
+  currentRow.slot = row.slot;  
+  window.localStorage.setItem('deviceId', row.deviceId)
+  window.localStorage.setItem('slot', row.slot)
+  add.value = true; // 鎵撳紑缁戝畾鏋跺瓙瀵硅瘽妗�
+};
+// 鎼滅储
+const searchout = async () => {
+  try {
+    const response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/selectBigStorageCageDetails',{
+      glassId:glassId.value
+    });
+    if (response.code == 200) {
+      // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
+      tableDataf.value = response.data;
+      ElMessage.success(response.message);
+      
+    } else {
+      // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
+      ElMessage.error(response.message);
+    }
+  } catch (error) {
+    // 澶勭悊閿欒
+    console.error(error);
+  }
+};
+// 鏄惁绂佺敤
+const toggleEnableState = async (row) => {
+  const newState = row.enableState === 1 ? 0 : 1;  
+  console.log(row.slot);
+  console.log(row.enableState);
+  var url="/cacheVerticalGlass/bigStorageCage/updateStorageCageDisabled?slot="+row.slot + "&enableState=" + newState;
+      console.log(url);
+      const response = await request.get(url) 
+  if (response.code === 200) {
+      ElMessage.success(response.message);
+      } else {  
+      ElMessage.error(response.message);
+      }  
+  row.enableState = newState;  
+}; 
+ // 鍒犻櫎 
+ const opena = async(row) => {  
+  try {
+    const confirmResult = await ElMessageBox.confirm(  
+      t('searchOrder.deletemessage'), 
+      t('searchOrder.prompt'),  
+      {  
+        confirmButtonText: t('searchOrder.yes'), 
+        cancelButtonText: t('searchOrder.cancel'),
+        type: 'warning',  
+      } 
+    ); 
+    if (confirmResult === 'confirm') {  
+      // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛  
+      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/deleteBigStorageCageDetails",row)
+    if (response.code === 200) {
+     tableData.value = response.data;
+     ElMessage.success(response.message);
+      } else {  
+        // 鍒犻櫎澶辫触锛屾偍鍙互澶勭悊閿欒鎴栨樉绀洪敊璇俊鎭粰鐢ㄦ埛  
+      ElMessage.error(response.message);
+        // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); 
+      }  
+    }  
+  } catch (error) {  
+    // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑  
+    console.error('鍙戠敓閿欒:', error);  
+  }  
+}; 
+ // 鐮存崯
+ const broke = async(row) => {  
+  try {
+    const confirmResult = await ElMessageBox.confirm(  
+      t('searchOrder.broke'), 
+      t('searchOrder.prompt'),  
+      {  
+        confirmButtonText: t('searchOrder.yes'), 
+        cancelButtonText: t('searchOrder.cancel'),
+        type: 'warning',  
+      } 
+    ); 
+    if (confirmResult === 'confirm') {  
+      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/damageBigStorageCageDetails?status="+0, row)
+    if (response.code === 200) {
+     tableData.value = response.data;
+     ElMessage.success(response.message);
+      } else {  
+      ElMessage.error(response.message);
+      }  
+    }  
+  } catch (error) {  
+    console.error('鍙戠敓閿欒:', error);  
+  }  
+}; 
+ // 鎷胯蛋
+ const brokec = async(row) => {  
+  try {
+    const confirmResult = await ElMessageBox.confirm(  
+      t('searchOrder.brokeb'), 
+      t('searchOrder.prompt'),  
+      {  
+        confirmButtonText: t('searchOrder.yes'), 
+        cancelButtonText: t('searchOrder.cancel'),
+        type: 'warning',  
+      } 
+    ); 
+    if (confirmResult === 'confirm') {  
+      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/damageBigStorageCageDetails?status="+1, row)
+    if (response.code === 200) {
+     tableData.value = response.data;
+     ElMessage.success(response.message);
+      } else {  
+      ElMessage.error(response.message);
+      }  
+    }  
+  } catch (error) {  
+    console.error('鍙戠敓閿欒:', error);  
+  }  
+}; 
+ // 鍑虹墖
+ const outfil = async(row) => {  
+  try {
+    const confirmResult = await ElMessageBox.confirm(  
+      t('searchOrder.outfil'), 
+      t('searchOrder.prompt'),  
+      {  
+        confirmButtonText: t('searchOrder.yes'), 
+        cancelButtonText: t('searchOrder.cancel'),
+        type: 'warning',  
+      } 
+    ); 
+    if (confirmResult === 'confirm') {  
+      // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛  
+      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/outBigStorageCageDetails", row)
+    if (response.code === 200) {
+      ElMessage.success(response.message);
+      } else {  
+      ElMessage.error(response.message);
+      }  
+    }  
+  } catch (error) {  
+    console.error('鍙戠敓閿欒:', error);  
+  }  
+}; 
+ // 鍑虹墖闃熷垪鐮存崯
+ const brokea = async(row) => {  
+  try {
+    const confirmResult = await ElMessageBox.confirm(  
+      t('searchOrder.broke'), 
+      t('searchOrder.prompt'),  
+      {  
+        confirmButtonText: t('searchOrder.yes'), 
+        cancelButtonText: t('searchOrder.cancel'),
+        type: 'warning',  
+      } 
+    ); 
+    if (confirmResult === 'confirm') {  
+      const response = await request.post("/cacheVerticalGlass/temperingGlassInfo/damageTemperingGlassInfo?status="+0, row)
+    if (response.code === 200) {
+      ElMessage.success(response.message);
+      } else {  
+      ElMessage.error(response.message);
+      }  
+    }  
+  } catch (error) {  
+    console.error('鍙戠敓閿欒:', error);  
+  }  
+}; 
+// 鍑虹墖闃熷垪鎷胯蛋
+const brokeb = async(row) => {  
+  try {
+    const confirmResult = await ElMessageBox.confirm(  
+      t('searchOrder.brokeb'), 
+      t('searchOrder.prompt'),  
+      {  
+        confirmButtonText: t('searchOrder.yes'), 
+        cancelButtonText: t('searchOrder.cancel'),
+        type: 'warning',  
+      } 
+    ); 
+    if (confirmResult === 'confirm') {  
+      const response = await request.post("/cacheVerticalGlass/temperingGlassInfo/damageTemperingGlassInfo?status="+1, row)
+    if (response.code === 200) {
+      ElMessage.success(response.message);
+      } else {  
+      ElMessage.error(response.message);
+      }  
+    }  
+  } catch (error) {  
+    console.error('鍙戠敓閿欒:', error);  
+  }  
+}; 
+// 鍑虹墖闃熷垪鍒犻櫎
+const deletea = async(row) => {  
+  try {
+    const confirmResult = await ElMessageBox.confirm(  
+      t('searchOrder.deletemessage'), 
+      t('searchOrder.prompt'),  
+      {  
+        confirmButtonText: t('searchOrder.yes'), 
+        cancelButtonText: t('searchOrder.cancel'),
+        type: 'warning',  
+      } 
+    ); 
+    if (confirmResult === 'confirm') {  
+      const dataToSend = {  
+        ...row,
+        status: 1
+      };  
+      const response = await request.post("/cacheVerticalGlass/temperingGlassInfo/deleteTemperingGlassInfo", dataToSend)
+    if (response.code === 200) {
+      ElMessage.success(response.message);
+      } else {  
+      ElMessage.error(response.message);
+      }  
+    }  
+  } catch (error) {  
+    console.error('鍙戠敓閿欒:', error);  
+  }  
+}; 
+// 瀹屾垚浠诲姟
+const finish = async(row) => {  
+  try {
+    const confirmResult = await ElMessageBox.confirm(  
+      t('searchOrder.fin'), 
+      t('searchOrder.prompt'),  
+      {  
+        confirmButtonText: t('searchOrder.yes'), 
+        cancelButtonText: t('searchOrder.cancel'),
+        type: 'warning',  
+      } 
+    ); 
+    if (confirmResult === 'confirm') {  
+      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/finishBigStorageCageDetails", row)
+    if (response.code === 200) {
+      ElMessage.success(response.message);
+      } else {  
+      ElMessage.error(response.message);
+      }  
+    }  
+  } catch (error) {
+    console.error('鍙戠敓閿欒:', error);  
+  }  
+}; 
+// 纭娣诲姞
+const finisha = async(row) => {  
+  try {
+    const confirmResult = await ElMessageBox.confirm(  
+      t('searchOrder.sureadda'), 
+      t('searchOrder.prompt'),  
+      {  
+        confirmButtonText: t('searchOrder.yes'), 
+        cancelButtonText: t('searchOrder.cancel'),
+        type: 'warning',  
+      } 
+    ); 
+    if (confirmResult === 'confirm') {  
+    let deviceId = window.localStorage.getItem('deviceId')
+    let slot = window.localStorage.getItem('slot')
+      const dataToSend = {  
+        ...row,
+        deviceId: deviceId,
+        slot: slot
+      };  
+      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/insertBigStorageCageDetails", dataToSend)
+    if (response.code === 200) {
+      tableData.value = response.data;
+      add.value = false;
+      ElMessage.success(response.message);
+      glassId.value = '';
+      tableDataf.value = '';
 
+      } else {  
+      ElMessage.error(response.message);
+      }  
+    }  
+  } catch (error) {
+    // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑  
+    console.error('鍙戠敓閿欒:', error);  
+  }  
+}; 
+function handleRowClick(row) {  
+  selectedRow.value = row; // 鏇存柊閫変腑鐨勮鏁版嵁  
+}  
 const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheVerticalGlass/api/talk/slicecage`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
@@ -200,40 +471,72 @@
   tableData.value = data.bigStorageCageInfo[0]
   tableDatab.value = data.temperingGlassInfoList[0]
   tableDatae.value = data.bigStorageCageUsage[0]
-  adjustedRects.value = data.bigStorageCageInfo1[0]
-  // adjustedRects.value = data.bigStorageCageInfo1[0].map(rect => ({  
-  //           ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
-  //           height: rect.length *0.5,
-            
-  //         })); 
+  // adjustedRects.value = data.bigStorageCageInfo1[0]
   window.localStorage.setItem('length', data.bigStorageCageInfo1[0].length)
   let length = window.localStorage.getItem('length')
-  console.log(length);
-  
+  adjustedRects.value = data.bigStorageCageInfo1[0].map(rect => ({  
+            ...rect, 
+            height: 20/length,
+            top: 29/length
+          })); 
+    let small = data.bigStorageCageInfo1[0]
+    console.log(small[0].bigStorageCageDetails);
+adjustedRectsa.value = data.bigStorageCageInfo2[0].map(rect => ({  
+            ...rect, 
+            height: 20/length,
+            top: 29/length
+          })); 
+adjustedRectsb.value = data.bigStorageCageInfo3[0].map(rect => ({  
+            ...rect, 
+            height: 20/length,
+            top: 29/length
+          })); 
+adjustedRectsc.value = data.bigStorageCageInfo4[0].map(rect => ({  
+            ...rect, 
+            height: 20/length,
+            top: 29/length
+          })); 
+adjustedRectsd.value = data.bigStorageCageInfo5[0].map(rect => ({  
+            ...rect, 
+            height: 20/length,
+            top: 29/length
+          })); 
+adjustedRectse.value = data.bigStorageCageInfo6[0].map(rect => ({  
+            ...rect, 
+            height: 20/length,
+            top: 29/length
+          })); 
+adjustedRectsf.value = data.bigStorageCageInfo7[0].map(rect => ({  
+            ...rect, 
+            height: 20/length,
+            top: 29/length
+          })); 
+adjustedRectsg.value = data.bigStorageCageInfo8[0].map(rect => ({  
+            ...rect, 
+            height: 20/length,
+            top: 29/length
+          })); 
 };
-// function getRectHeight(length: number) {  
-//   return length > 0 ? 29 / length : 29;
-// } 
 // 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
 onMounted(() => {
   // fetchFlowCardId();
-  // fetchTableData(); // 鑾峰彇鏁版嵁
   initializeWebSocket(socketUrl, handleMessage);
+
 });
 function getStatusType(enableState: number) {  
   switch (enableState) {  
-    case 0:
-      return 'warning';  
-    case 1: 
+    case 100:
       return 'success';  
+    case 102: 
+      return 'warning';  
   }  
 }  
 function getStatusText(enableState: number) {
   switch (enableState) {
-    case 0:  
-      return '绂佺敤';  
-    case 1:  
-      return '鍚敤'; 
+    case 100:  
+      return t('searchOrder.zailong');
+    case 102:  
+      return t('searchOrder.rengongxp'); 
   }  
 }
 function getStatusTypea(ishorizontal: number) {  
@@ -247,9 +550,9 @@
 function getStatusTexta(ishorizontal: number) {
   switch (ishorizontal) {
     case 0:  
-      return '涓嶆帴鍙�';  
+      return t('searchOrder.noaccept');
     case 1:  
-      return '鎺ュ彈'; 
+    return t('searchOrder.accept');
   }  
 }
 function getStatusTypeb(state: number) {  
@@ -263,11 +566,11 @@
 function getStatusTextb(state: number) {
   switch (state) {
     case 0:  
-      return '鍑虹墖瀹屾垚';  
+      return t('searchOrder.filmcomplete');
     case 1:  
-      return '绛夊緟涓�'; 
+      return t('searchOrder.waiting');
     case 2:  
-      return '绛夊緟涓�'; 
+    return t('searchOrder.waiting');
   }  
 }
 onBeforeUnmount(() => {
@@ -277,31 +580,39 @@
 </script>
  
 <template>
-  <div style="height: 700px;">
-    <!-- <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="primary" @click="dialogFormVisible = true">鎵嬪姩杩涚墖</el-button> -->
-    <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="primary" @click="dialogFormVisiblea = true">鐞嗙墖绗间俊鎭�</el-button>
-    <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="success" @click="dialogFormVisibleb = true">鍑虹墖闃熷垪</el-button>
-    <!-- <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="danger">缁堟杩涚墖</el-button> -->
-    <!-- <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="danger">缁堟鍑虹墖</el-button> -->
-    <!-- <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="danger"  @click="dialogForm">杞�ュ仠</el-button> -->
-    
+  <div style="height: 600px;">
+    <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="primary" @click="dialogFormVisiblea = true">{{ $t('searchOrder.cageinformation') }}</el-button>
+    <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="success" @click="dialogFormVisibleb = true">{{ $t('searchOrder.productionqueue') }}</el-button>
     <el-card style="flex: 1;margin-left: 10px;margin-top: 5px;" v-loading="loading">
       <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 100px;">
         <el-table height="100%" ref="table" 
         :data="tableDatac" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="bigStorageCageOutTask.glassId" align="center" label="鍑虹墖鐜荤拑ID" min-width="80" />
-          <el-table-column prop="bigStorageCageOutTask.startSlot" align="center" label="璧峰浣嶇疆" min-width="120" />
-          <el-table-column prop="bigStorageCageOutTask.endSlot" align="center" label="鐩爣浣嶇疆" min-width="120" />
-          <el-table-column prop="bigStorageCageOutTask.trainNumber" align="center" label="杞︽" min-width="120" />
-          <el-table-column prop="bigStorageCageOutTask.serialNumber" align="center" label="搴忓彿" min-width="120" />
-          <el-table-column prop="bigStorageCageOutTask.taskState" align="center" label="浠诲姟鐘舵��" min-width="157">
-          <template #default="scope">
-            <el-tag type="success" >{{ scope.row.bigStorageCageOutTask.taskState==0?"绛夊緟杩涚墖":"杩涜涓�"  }}</el-tag>
+          <el-table-column prop="bigStorageCageOutTask.glassId" align="center" :label="$t('searchOrder.outputglassID')" min-width="100" />
+          <el-table-column prop="bigStorageCageOutTask.startSlot" align="center" :label="$t('searchOrder.startposition')" min-width="120" />
+          <el-table-column prop="bigStorageCageOutTask.endSlot" align="center" :label="$t('searchOrder.targetlocation')" min-width="120" />
+          <el-table-column prop="bigStorageCageOutTask.trainNumber" align="center" :label="$t('searchOrder.trips')" min-width="120" />
+          <el-table-column prop="bigStorageCageOutTask.serialNumber" align="center" :label="$t('searchOrder.number')" min-width="120" />
+          <el-table-column prop="bigStorageCageOutTask.taskState" align="center" :label="$t('searchOrder.taskstatus')" min-width="157">
+          <template #default="scope">  
+            <el-tag type="success" >{{ scope.row.bigStorageCageOutTask.taskState==0? $t('searchOrder.filmenter') : $t('searchOrder.infilm') }}</el-tag>
           </template>
           </el-table-column>
-          <el-table-column fixed="right" label="缁撴潫浠诲姟" align="center" width="150">
+          <el-table-column prop="id" align="center" :label="$t('searchOrder.tabid')" min-width="150"/>
+          <el-table-column prop="deviceId" align="center" :label="$t('searchOrder.tid')" min-width="100"/>
+          <el-table-column prop="slot" align="center" :label="$t('searchOrder.gridnumber')" min-width="100"/>
+          <el-table-column prop="glassId" align="center" :label="$t('searchOrder.glassID')" min-width="100"/>
+          <el-table-column prop="sequence" align="center" :label="$t('searchOrder.pieceingrid')" min-width="150"/>
+          <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="100"/>
+          <el-table-column prop="glassType" align="center" :label="$t('searchOrder.typeglass')" min-width="100"/>
+          <el-table-column prop="width" align="center" :label="$t('searchOrder.width')" min-width="100"/>
+          <el-table-column prop="height" align="center" :label="$t('searchOrder.height')" min-width="100"/>
+          <el-table-column prop="thickness" align="center" :label="$t('searchOrder.thickness')" min-width="100"/>
+          <el-table-column prop="temperingLayoutId" align="center" :label="$t('searchOrder.layoutID')" min-width="100"/>
+          <el-table-column prop="temperingFeedSequence" align="center" :label="$t('searchOrder.picturesequence')" min-width="120"/>
+          <el-table-column prop="gap" align="center" :label="$t('searchOrder.glassgaps')" min-width="100"/>
+          <el-table-column fixed="right" :label="$t('searchOrder.endtask')" align="center" width="150">
             <template #default="scope">
-              <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">瀹屾垚浠诲姟</el-button>
+              <el-button size="mini" type="text" plain @click="finish(scope.row)">{{ $t('searchOrder.completetask') }}</el-button>
             </template>
         </el-table-column>
         </el-table>
@@ -312,18 +623,31 @@
         <el-table height="100%" ref="table" 
         @selection-change="handleSelectionChange"
         :data="tableDatad" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="bigStorageCageFeedTask.glassId" align="center" label="杩涚墖鐜荤拑ID" min-width="80" />
-          <el-table-column prop="bigStorageCageFeedTask.tragetSlot" align="center" label="鐩爣浣嶇疆" min-width="120" />
+          <el-table-column prop="bigStorageCageFeedTask.glassId" align="center" :label="$t('searchOrder.intoglassid')" min-width="100" />
+          <el-table-column prop="bigStorageCageFeedTask.targetSlot" align="center" :label="$t('searchOrder.targetlocation')" min-width="120" />
           <!-- <el-table-column prop="task_type" align="center" label="浠诲姟绫诲瀷" min-width="120" />娌℃湁杩斿洖瀛楁 -->
-          <el-table-column prop="bigStorageCageFeedTask.taskState" align="center" label="浠诲姟鐘舵��" min-width="120">
+          <el-table-column prop="bigStorageCageFeedTask.taskState" align="center" :label="$t('searchOrder.taskstatus')" min-width="120">
           <template #default="scope">
-            <el-tag type="success" >{{ scope.row.bigStorageCageFeedTask.taskState==0?"绛夊緟杩涚墖":"杩涜涓�"  }}</el-tag>
+            <el-tag type="success" >{{ scope.row.bigStorageCageFeedTask.taskState==0? $t('searchOrder.filmenter') : $t('searchOrder.infilm') }}</el-tag>
           </template>
           </el-table-column>
-          <el-table-column prop="bigStorageCageFeedTask.line" align="center" label="绾胯矾" min-width="120" />
-          <el-table-column fixed="right" label="缁撴潫浠诲姟" align="center" width="150">
+          <el-table-column prop="bigStorageCageFeedTask.line" align="center" :label="$t('searchOrder.line')" min-width="120" />
+          <el-table-column prop="id" align="center" :label="$t('searchOrder.tabid')" min-width="150"/>
+          <el-table-column prop="deviceId" align="center" :label="$t('searchOrder.tid')" min-width="100"/>
+          <el-table-column prop="slot" align="center" :label="$t('searchOrder.gridnumber')" min-width="100"/>
+          <el-table-column prop="glassId" align="center" :label="$t('searchOrder.glassID')" min-width="100"/>
+          <el-table-column prop="sequence" align="center" :label="$t('searchOrder.pieceingrid')" min-width="150"/>
+          <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="100"/>
+          <el-table-column prop="glassType" align="center" :label="$t('searchOrder.typeglass')" min-width="100"/>
+          <el-table-column prop="width" align="center" :label="$t('searchOrder.width')" min-width="100"/>
+          <el-table-column prop="height" align="center" :label="$t('searchOrder.height')" min-width="100"/>
+          <el-table-column prop="thickness" align="center" :label="$t('searchOrder.thickness')" min-width="100"/>
+          <el-table-column prop="temperingLayoutId" align="center" :label="$t('searchOrder.layoutID')" min-width="100"/>
+          <el-table-column prop="temperingFeedSequence" align="center" :label="$t('searchOrder.picturesequence')" min-width="120"/>
+          <el-table-column prop="gap" align="center" :label="$t('searchOrder.glassgaps')" min-width="100"/>
+          <el-table-column fixed="right" :label="$t('searchOrder.endtask')" align="center" width="150">
             <template #default="scope">
-              <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">瀹屾垚浠诲姟</el-button>
+              <el-button size="mini" type="text" plain @click="finish(scope.row)">{{ $t('searchOrder.completetask') }}</el-button>
             </template>
         </el-table-column>
         </el-table>
@@ -333,17 +657,14 @@
             <div v-for="(item, index) in tableDatae" :key="index" id="occupy">  
                <el-col style="text-align:left;font-weight: bold;">#{{ item.device_id }}</el-col>  
                <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;">  
-                 <span>浣跨敤鐜�</span><span>{{ item.percentage }}</span>  
+                 <span>{{ $t('searchOrder.Usage') }}</span><span>{{ item.percentage }}</span>  
                </el-col>  
                <hr style="width:80%;margin: 0 auto;" />  
                <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;">  
-                 <span>绌洪棽锛堟牸瀛愭暟锛�</span><span>{{ item.count }}</span>  
+                 <span>{{ $t('searchOrder.free') }}</span><span>{{ item.count }}</span>  
                </el-col>  
              </div>  
     </div>
-    <!-- <div id="awatch">
-  <img src="../../assets/cp.png" alt="" style="width: 70%;height: 70%;margin-left: 160px;">
-</div> -->
 <!-- // 鐖剁骇妗� -->
 <div class="img-dlpl" >
     <div class="img-car1" :style="'z-index:999;left:247px;top:' + carposition1 + 'px;position:absolute;'">
@@ -359,229 +680,441 @@
     <div class="img-car4" :style="'z-index:999;left:704px;top:' + carposition4 + 'px;position:absolute;'">
       <div v-show="cellshow4" style="margin-top:10px;width:200px;height:5px;background-color:#409EFF;"></div>
     </div>
-    <div v-show="cell1" style="width: 227px;height: 29px;position: absolute;top:55px;left: 465px;">
+    <div style="position: relative;">
+    <div v-show="cell1" style="width: 227px;height: 29px;position: relative;top:55px;left: 465px;">
       <div  
-      v-for="(item, index) in adjustedRects"  
-      :key="index"  
+      v-for="(rect, index) in adjustedRects"  
+      :key="rect.id"  
       :style="{
-       top: `1px`, width: `227px`,
-      backgroundColor: '#409EFF',
-      height: `height`+ `px`
+        
+        // display:'flex',
+       position: 'absolute',
+       width: '227px',
+      //  backgroundColor: 'red',
+       left: '0px',
+       top: index*rect.top+`px`,
+       height: `${rect.height}px`,
        }"  
     >
+    <div  
+      v-for="(rects, index) in rect.bigStorageCageDetails"  
+      :key="rects"  
+      :style="{
+        float:'left',
+       width: '18px',
+       height: `${rect.height}px`,
+       backgroundColor: '#911005',
+      // border:'1px solid black',
+       top: '0px',
+       marginRight: rects.gap/5000*227+'px'
+       }"  
+    >
+      </div>
     </div>
-      <!-- <div   
-        v-for="(item, index) in adjustedRects" 
-        height: `${rect.height}px`,  
-        :key="index"   
-        :style="{  
-        width: '227px',  
-        height: '1px',
-        backgroundColor: '#409EFF',  
-        top: '1px'
-      }"  
-      >  
-      </div> -->
     </div>
-   <!-- <div v-show="cell2" style="width: 227px;height: 29px;position: absolute;top:86px;left: 465px;background-color: #409EFF;">
+ <div v-show="cell2" style="width: 227px;height: 29px;position: relative;top:56px;left: 465px;">
+  <div  
+      v-for="(rect, index) in adjustedRectsa"  
+      :key="rect.id"  
+      :style="{
+        
+        // display:'flex',
+       position: 'absolute',
+       width: '227px',
+      //  backgroundColor: 'red',
+       left: '0px',
+       top: index*rect.top+`px`,
+       height: `${rect.height}px`,
+       }"  
+    >
+    <div  
+      v-for="(rects, index) in rect.bigStorageCageDetails"  
+      :key="rects"  
+      :style="{
+        float:'left',
+       width: '18px',
+       height: `${rect.height}px`,
+       backgroundColor: '#911005',
+      // border:'1px solid black',
+       top: '0px',
+       marginRight: rects.gap/5000*227+'px'
+       }"  
+    >
+      </div>
     </div>
-     <div v-show="cell3" style="width: 227px;height: 29px;position: absolute;top:117px;left: 465px;background-color: #409EFF;">
     </div>
-  <div v-show="cell4" style="width: 227px;height: 29px;position: absolute;top:148px;left: 465px;background-color: #409EFF;">
+  <div v-show="cell3" style="width: 227px;height: 29px;position: absolute;top:117px;left: 465px;">
+    <div  
+      v-for="(rect, index) in adjustedRectsb"  
+      :key="rect.id"  
+      :style="{
+        // display:'flex',
+       position: 'absolute',
+       width: '227px',
+      //  backgroundColor: 'red',
+       left: '0px',
+       top: index*rect.top+`px`,
+       height: `${rect.height}px`,
+       }"  
+    >
+    <div  
+      v-for="(rects, index) in rect.bigStorageCageDetails"  
+      :key="rects"  
+      :style="{
+        float:'left',
+       width: '18px',
+       height: `${rect.height}px`,
+       backgroundColor: '#911005',
+      // border:'1px solid black',
+       top: '0px',
+       marginRight: rects.gap/5000*227+'px'
+       }"  
+    >
+      </div>
     </div>
-  <div v-show="cell5" style="width: 227px;height: 29px;position: absolute;top:208px;left: 465px;background-color: #409EFF;">
     </div>
-  <div v-show="cell6" style="width: 227px;height: 29px;position: absolute;top:238px;left: 465px;background-color: #409EFF;">
+  <div v-show="cell4" style="width: 227px;height: 29px;position: absolute;top:148px;left: 465px;">
+    <div  
+      v-for="(rect, index) in adjustedRectsc"  
+      :key="rect.id"  
+      :style="{
+        
+        // display:'flex',
+       position: 'absolute',
+       width: '227px',
+      //  backgroundColor: 'red',
+       left: '0px',
+       top: index*rect.top+`px`,
+       height: `${rect.height}px`,
+       }"  
+    >
+    <div  
+      v-for="(rects, index) in rect.bigStorageCageDetails"  
+      :key="rects"  
+      :style="{
+        float:'left',
+       width: '18px',
+       height: `${rect.height}px`,
+       backgroundColor: '#911005',
+      // border:'1px solid black',
+       top: '0px',
+       marginRight: rects.gap/5000*227+'px'
+       }"  
+    >
+      </div>
     </div>
-  <div v-show="cell7" style="width: 227px;height: 29px;position: absolute;top:269px;left: 465px;background-color: #409EFF;">
     </div>
-  <div v-show="cell8" style="width: 227px;height: 29px;position: absolute;top:300px;left: 465px;background-color: #409EFF;">
-    </div> -->
+  <div v-show="cell5" style="width: 227px;height: 29px;position: absolute;top:208px;left: 465px;">
+    <div  
+      v-for="(rect, index) in adjustedRectsd"  
+      :key="rect.id"  
+      :style="{
+        
+        // display:'flex',
+       position: 'absolute',
+       width: '227px',
+      //  backgroundColor: 'red',
+       left: '0px',
+       top: index*rect.top+`px`,
+       height: `${rect.height}px`,
+       }"  
+    >
+    <div  
+      v-for="(rects, index) in rect.bigStorageCageDetails"  
+      :key="rects"  
+      :style="{
+        float:'left',
+       width: '18px',
+       height: `${rect.height}px`,
+       backgroundColor: '#911005',
+      // border:'1px solid black',
+       top: '0px',
+       marginRight: rects.gap/5000*227+'px'
+       }"  
+    >
+      </div>
+    </div>
+    </div>
+  <div v-show="cell6" style="width: 227px;height: 29px;position: absolute;top:238px;left: 465px;">
+    <div  
+      v-for="(rect, index) in adjustedRectse"  
+      :key="rect.id"  
+      :style="{
+        
+        // display:'flex',
+       position: 'absolute',
+       width: '227px',
+      //  backgroundColor: 'red',
+       left: '0px',
+       top: index*rect.top+`px`,
+       height: `${rect.height}px`,
+       }"  
+    >
+    <div  
+      v-for="(rects, index) in rect.bigStorageCageDetails"  
+      :key="rects"  
+      :style="{
+        float:'left',
+       width: '18px',
+       height: `${rect.height}px`,
+       backgroundColor: '#911005',
+      // border:'1px solid black',
+       top: '0px',
+       marginRight: rects.gap/5000*227+'px'
+       }"  
+    >
+      </div>
+    </div>
+    </div>
+  <div v-show="cell7" style="width: 227px;height: 29px;position: absolute;top:269px;left: 465px;">
+    <div  
+      v-for="(rect, index) in adjustedRectsf"  
+      :key="rect.id"  
+      :style="{
+        
+        // display:'flex',
+       position: 'absolute',
+       width: '227px',
+      //  backgroundColor: 'red',
+       left: '0px',
+       top: index*rect.top+`px`,
+       height: `${rect.height}px`,
+       }"  
+    >
+    <div  
+      v-for="(rects, index) in rect.bigStorageCageDetails"  
+      :key="rects"  
+      :style="{
+        float:'left',
+       width: '18px',
+       height: `${rect.height}px`,
+       backgroundColor: '#911005',
+      // border:'1px solid black',
+       top: '0px',
+       marginRight: rects.gap/5000*227+'px'
+       }"  
+    >
+      </div>
+    </div>
+    </div>
+  <div v-show="cell8" style="width: 227px;height: 29px;position: absolute;top:300px;left: 465px;">
+    <div  
+      v-for="(rect, index) in adjustedRectsg"  
+      :key="rect.id"  
+      :style="{
+        
+        // display:'flex',
+       position: 'absolute',
+       width: '227px',
+      //  backgroundColor: 'red',
+       left: '0px',
+       top: index*rect.top+`px`,
+       height: `${rect.height}px`,
+       }"  
+    >
+    <div  
+      v-for="(rects, index) in rect.bigStorageCageDetails"  
+      :key="rects"  
+      :style="{
+        float:'left',
+       width: '18px',
+       height: `${rect.height}px`,
+       backgroundColor: '#911005',
+      // border:'1px solid black',
+       top: '0px',
+       marginRight: rects.gap/5000*227+'px'
+       }"  
+    >
+      </div>
+    </div>
+    </div>
 </div>
-    
+</div>
   </div>
-<el-dialog v-model="dialogFormVisible" top="12vh" width="85%" title="璇风‘璁ょ幓鐠冧俊鎭�" >
-  <div style="margin-left: 50px;margin-bottom: 10px;">
-    <div style="display: flex;">
-    <p style="margin-top: 4px;">纭鐘舵��:</p>
-    <el-button style="margin-left: 10px;size: mini;" type="success">鍏佽</el-button>
-    <el-button style="margin-left: 10px;size: mini;" type="danger">涓嶅厑璁�</el-button>
-    <p style="margin-left: 60px;margin-top: 4px;">褰撳墠鐘舵��:</p>
-    <div style="margin-top: 4px; margin-left: 10px;">鎵嬪姩</div>
-    <el-button style="margin-left: 10px;size: mini;" type="primary">鍒囨崲</el-button>
-    <el-input  placeholder="璇疯緭鍏ョ幓鐠僫d" style="width: 180px;size: mini;margin-left: 60px;"></el-input>
-    <el-button style="margin-left: 10px;size: mini;" type="primary">娣诲姞</el-button>
-    <p style="margin-left: 60px;margin-top: 4px;">鐜荤拑id:</p>
-    <el-input  style="width: 180px;size: mini;margin-left: 30px;"></el-input>
-  </div>
-    <div style="display: flex;">
-      <p style="margin-left: 290px;margin-top: 20px;font-weight: bold;">涓婄墖浣�</p>
-      <p style="margin-left: 630px;margin-top: 20px;font-weight: bold;">鎵爜浣�</p>
+  <el-dialog v-model="add" top="10vh" width="70%" :title="$t('searchOrder.addcage')" >
+    <div style="margin-bottom: 20px">
+      <el-form>
+        <el-row style="margin-top: -15px;margin-bottom: -2px;">
+          <el-col :span="4">
+              <div id="dt" style="font-size: 15px;">
+              <el-form-item :label="$t('searchOrder.tida')"  style="width: 14vw">
+                {{ currentRow.deviceId }}
+            <!-- <el-input v-model="currentRow.id" autocomplete="off"></el-input> -->
+              </el-form-item>
+              </div>
+          </el-col>
+          <el-col :span="5">
+            <div id="dta" style="font-size: 15px;">
+          <el-form-item :label="$t('searchOrder.gridnumbera')" style="width: 14vw">
+                {{ currentRow.slot }}
+                <!-- <el-input v-model="currentRow.slot" autocomplete="off"></el-input> -->
+              </el-form-item>
+              </div>
+          </el-col>
+        </el-row>
+      </el-form>
     </div>
-    <div style="display: flex;">
-    <div style="margin-top: 20px;">
-      <p style="margin-top: 10px;margin-left: 100px;margin-bottom: 20px;">褰撳墠淇℃伅</p>
-      <el-form label-position="right" label-width="90px">
-      <el-form-item style="width: 20vw" label="鐜荤拑id锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ョ幓鐠僫d"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="璁㈠崟缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ヨ鍗曠紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="鍒楄〃缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ュ垪琛ㄧ紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="绠卞瓙缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ョ瀛愮紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="闀匡細">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ラ暱"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="瀹斤細">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ュ"></el-input>
-       </el-form-item>
-      </el-form>
-      </div>
-    <div style="margin-top: 20px;">
-      <p style="margin-top: 10px;margin-left: 100px;margin-bottom: 20px;">淇敼淇℃伅</p>
-      <el-form label-position="right" label-width="90px">
-      <el-form-item style="width: 20vw" label="鐜荤拑id锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ョ幓鐠僫d"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="璁㈠崟缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ヨ鍗曠紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="鍒楄〃缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ュ垪琛ㄧ紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="绠卞瓙缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ョ瀛愮紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="闀匡細">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ラ暱"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="瀹斤細">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ュ"></el-input>
-       </el-form-item>
-      </el-form>
-      </div>
-    <div style="margin-top: 20px;">
-      <p style="margin-top: 10px;margin-left: 100px;margin-bottom: 20px;">淇敼淇℃伅</p>
-      <el-form label-position="right" label-width="90px">
-      <el-form-item style="width: 20vw" label="鐜荤拑id锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ョ幓鐠僫d"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="璁㈠崟缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ヨ鍗曠紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="鍒楄〃缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ュ垪琛ㄧ紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="绠卞瓙缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ョ瀛愮紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="闀匡細">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ラ暱"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="瀹斤細">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ュ"></el-input>
-       </el-form-item>
-      </el-form>
-      </div>
-    <div style="margin-top: 20px;">
-      <p style="margin-top: 10px;margin-left: 100px;margin-bottom: 20px;">褰撳墠淇℃伅</p>
-      <el-form label-position="right" label-width="90px">
-      <el-form-item style="width: 20vw" label="鐜荤拑id锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ョ幓鐠僫d"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="璁㈠崟缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ヨ鍗曠紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="鍒楄〃缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ュ垪琛ㄧ紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="绠卞瓙缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ョ瀛愮紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="闀匡細">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ラ暱"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="瀹斤細">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ュ"></el-input>
-       </el-form-item>
-      </el-form>
-      </div>
+      <div style="margin-top: -20px;margin-bottom: 40px;margin-left: 30px">
+          <el-input v-model="glassId"   :placeholder="$t('searchOrder.inputid')" clearable style="width: 200px;">
+          </el-input>
+          <el-button type="primary" plain style="margin-left: 10px;" @click="searchout">{{ $t('searchOrder.search') }}</el-button>
     </div>
-        </div>
-  <template #footer>
-    <div id="dialog-footer">
-      <el-button type="primary" @click="dialogFormVisible = false">
-        纭
-      </el-button>
-      <el-button @click="dialogFormVisible = false">鍙栨秷</el-button>
-    </div>
-  </template>
-</el-dialog>
-<el-dialog v-model="dialogFormVisiblea" top="10vh" width="85%" title="鐞嗙墖绗间俊鎭�" >
-  <!-- <el-input  placeholder="璇疯緭鍏ュ伐绋嬪彿" style="width: 180px;size: mini;"></el-input> -->
-    <!-- <el-button style="margin-left: 10px;size: mini;" type="primary">鏌ヨ</el-button> -->
-    <el-table  ref="table" style="margin-top: 20px;height: 500px;"
-        @selection-change="handleSelectionChange"
-        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="id" align="center" label="澶х悊鐗囩琛↖D" min-width="80" />
-          <el-table-column prop="deviceId" align="center" label="鐞嗙墖绗煎彿" min-width="120" />
-          <el-table-column prop="slot" align="center" label="鏍呮牸鍙�" min-width="120" />
+
+    <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 500px;">
+        <el-table height="100%" ref="table"
+        :data="tableDataf" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
+          <el-table-column prop="glassId" align="center" :label="$t('searchOrder.glassID')" min-width="120" />
+          <el-table-column prop="sequence" align="center" :label="$t('searchOrder.pieceingrid')" min-width="180" />
+          <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="150" />
+          <el-table-column prop="glassType" align="center" :label="$t('searchOrder.typeglass')" min-width="150"/>
+          <el-table-column prop="width" align="center" :label="$t('searchOrder.width')" min-width="150"/>
+          <el-table-column prop="height" align="center" :label="$t('searchOrder.height')" min-width="150"/>
+          <el-table-column prop="thickness" align="center" :label="$t('searchOrder.thickness')" min-width="150"/>
+          <el-table-column prop="temperingLayoutId" align="center" :label="$t('searchOrder.layoutID')" min-width="150"/>
+          <el-table-column prop="temperingFeedSequence" align="center" :label="$t('searchOrder.picturesequence')" min-width="150"/>
+          <el-table-column
+          align="center"
+            :label="$t('searchOrder.startstatus')"
+            min-width="80"
+            prop="state"
+          >
+          <template #default="scope">  
+          <el-tag  
+            :type="scope.row.state === 1 ? 'success' : 'danger'"  
+          >  
+          {{ scope.row.state === 1 ? $t('searchOrder.enable') : $t('searchOrder.disable') }}
+          </el-tag>  
+        </template> 
+          </el-table-column>
+          <el-table-column prop="gap" align="center" :label="$t('searchOrder.glassgaps')" min-width="150"/>
+          <!-- <el-table-column prop="slot" align="center" :label="$t('searchOrder.gridnumber')" min-width="150"/> -->
+          <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" width="150">
+            <template #default="scope">
+              <el-button size="mini" type="text" plain @click="finisha(scope.row)">{{ $t('searchOrder.sureadd') }}</el-button>
+            </template>
+        </el-table-column>
+        </el-table>
+      </div>
+  </el-dialog>
+<el-dialog v-model="dialogFormVisiblea" top="5vh" width="97%" :title="$t('searchOrder.cageinformation')">
+    <el-table  
+          :data="paginatedUsers" 
+          @row-click="handleRowClick" 
+          height="500"
+          @expand-change="handleExpandChange"  
+          row-key="id" 
+          default-expand-all
+          :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}" 
+        >  
+          <el-table-column type="expand">  
+            <template #default="props">  
+              <div v-if="props.row.bigStorageCageDetails && props.row.bigStorageCageDetails.length">  
+                <el-table  
+                  :data="props.row.bigStorageCageDetails"  
+                  border
+                  style="width: 100%;margin-left: 20px;"  
+                  row-key="id"  
+                  :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}" 
+                >  
+          <!-- <el-table-column prop="menuName" label="浜岀骇鑿滃崟鏍�" align="center" min-width="140" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"/>   -->
+          <el-table-column prop="glassId" :label="$t('searchOrder.glassID')" align="center" min-width="90"/>  
+          <el-table-column prop="sequence" align="center" :label="$t('searchOrder.pieceingrid')" min-width="110" />
+          <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="120" />
+          <el-table-column prop="glassType" align="center" :label="$t('searchOrder.typeglass')" min-width="80" />
+          <el-table-column prop="width" align="center" :label="$t('searchOrder.width')" min-width="80" />
+          <el-table-column prop="height" align="center" :label="$t('searchOrder.height')" min-width="80" />
+          <el-table-column prop="thickness" align="center" :label="$t('searchOrder.thickness')" min-width="80" />
+          <el-table-column prop="temperingLayoutId" align="center" :label="$t('searchOrder.layoutID')" min-width="100" />
+          <el-table-column prop="temperingFeedSequence" align="center" :label="$t('searchOrder.picturesequence')" min-width="120" />
           <el-table-column
             align="center"
-            label="鍚敤鐘舵��"
+            :label="$t('searchOrder.startstatus')"
+            min-width="80"
+            prop="state"
+            
+          >
+          <template #default="scope">  
+        <el-tag :type="getStatusType(scope.row.state)">  
+          {{ getStatusText(scope.row.state) }}  
+        </el-tag>  
+      </template> 
+          </el-table-column>
+          <el-table-column prop="gap" align="center" :label="$t('searchOrder.glassgaps')" min-width="80" />
+           <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center"  min-width="220">
+            <template #default="scope">
+              <el-button size="mini" type="text" plain @click="broke(scope.row)">{{ $t('searchOrder.breakage') }}</el-button>
+              <el-button size="mini" type="text" plain @click="brokec(scope.row)">{{ $t('searchOrder.takeout') }}</el-button>
+              <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('searchOrder.delete') }}</el-button>
+              <el-button size="mini" type="text" 
+              :disabled="!((props.row.bigStorageCageDetails[0].state !== 102 && scope.$index == 0 ) || (props.row.bigStorageCageDetails[(scope.$index - 1)<0?0:scope.$index-1].state==102)&&(scope.row.state!=102))"
+               plain @click="outfil(scope.row)">
+               {{ $t('searchOrder.outfilm') }}
+              </el-button>
+            </template>
+        </el-table-column>
+                </el-table>
+              </div>  
+            </template>  
+          </el-table-column>  
+          <el-table-column prop="id" :label="$t('searchOrder.cagetableID')" align="center" min-width="100"/>  
+          <el-table-column prop="deviceId" align="center" :label="$t('searchOrder.cagenumber')" min-width="150" />
+          <el-table-column prop="slot" align="center" :label="$t('searchOrder.gridnumber')" min-width="150" />
+          <el-table-column
+          align="center"
+            :label="$t('searchOrder.startstatus')"
             min-width="80"
             prop="enableState"
           >
           <template #default="scope">  
-        <el-tag :type="getStatusType(scope.row.enableState)">  
-          {{ getStatusText(scope.row.enableState) }}  
-        </el-tag>  
-      </template> 
+          <el-tag  
+            :type="scope.row.enableState === 1 ? 'success' : 'danger'"  
+            @click="toggleEnableState(scope.row)"  
+          >  
+            {{ scope.row.enableState === 1 ? $t('searchOrder.enable') : $t('searchOrder.disable')}}  
+          </el-tag>  
+        </template> 
           </el-table-column>
-          <el-table-column prop="remainWidth" align="center" label="鍓╀綑瀹藉害" min-width="120" />
+          <el-table-column prop="remainWidth" align="center" :label="$t('searchOrder.remainingwidth')" min-width="120" />
+          
+       <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center">
+            <template #default="scope">
+              <el-button size="mini" type="text" plain  @click="handleBindRack(scope.row)">{{ $t('searchOrder.add') }}</el-button>
+            </template>
+        </el-table-column>
         </el-table>
-        <div id="demo-pagination-block">
-    <el-pagination
-    style="margin-left: 850px;"
-      v-model:current-page="currentPage4"
-      v-model:page-size="pageSize4"
-      :page-sizes="[100, 200, 300, 400]"
-      :small="small"
-      :disabled="disabled"
-      :background="background"
-      layout="total, sizes, prev, pager, next, jumper"
-      :total="400"
-      @size-change="handleSizeChange"
-      @current-change="handleCurrentChange"
-    />
+        <div>
+    <div style="margin-top: 20px; text-align: center;">
+      <!-- 涓婁竴椤垫寜閽� -->
+      <el-button @click="prevPage" :disabled="currentPage === 1">{{ $t('searchOrder.up') }}</el-button>
+      
+      <!-- 涓嬩竴椤垫寜閽� -->
+      <el-button @click="nextPage" :disabled="currentPage >= totalPages">{{ $t('searchOrder.down') }}</el-button>
+      
+      <!-- 褰撳墠椤垫樉绀虹殑鏉℃暟 -->
+      <span style="margin-left: 10px;">{{ $t('searchOrder.now') }} {{ itemsPerPage }} {{ $t('searchOrder.tit') }}</span>
+    </div>
   </div>
-</el-dialog>
-<el-dialog v-model="dialogFormVisibleb" top="10vh" width="85%" title="鍑虹墖闃熷垪" >
-  <div style="display: flex;">
+  </el-dialog>  
+<!-- </el-dialog> -->
+<el-dialog v-model="dialogFormVisibleb" top="5vh" width="85%" :title="$t('searchOrder.productionqueue')">
+  <!-- <div style="display: flex;">
   <p style="margin-top: 3px;">闃熷垪鐘舵�侊細</p>
   <p style="margin-top: 3px;">寮�濮�</p>
     <el-button style="margin-left: 10px;size: mini;" type="danger">鍋滄</el-button>
     <el-button style="margin-left: 10px;size: mini;" type="primary">娣诲姞</el-button>
-  </div>
+  </div> -->
     <el-table  ref="table" style="margin-top: 20px;height: 500px;"
         :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="id" fixed align="center" label="閽㈠寲灏忕墖淇℃伅琛╥d" min-width="150"/>
-          <!-- <el-table-column prop="glass_id" align="center" label="鐜荤拑id" min-width="120" /> -->
-          <el-table-column prop="flowcardId" fixed align="center" label="娴佺▼鍗�" min-width="120" />
-          <el-table-column prop="glassType" align="center" label="娴佺▼鍗$幓鐠冪被鍨�" min-width="150" />
-          <el-table-column prop="width" align="center" label="瀹�" min-width="80" />
-          <el-table-column prop="height" align="center" label="楂�" min-width="80" />
-          <el-table-column prop="thickness" align="center" label="鍘氬害" min-width="80" />
-          <el-table-column prop="filmsid" align="center" label="鑶滅郴" min-width="80" />
-          <!-- <el-table-column prop="ishorizontal" align="center" label="閽㈠寲鏄惁鎺ュ彈妯斁" min-width="150" /> -->
+          <el-table-column prop="id" fixed align="center" :label="$t('searchOrder.sheetID')" min-width="150"/>
+          <el-table-column prop="flowcardId" fixed align="center" :label="$t('searchOrder.processcards')" min-width="120" />
+          <el-table-column prop="glassType" align="center" :label="$t('searchOrder.processcardtype')" min-width="150" />
+          <el-table-column prop="width" align="center" :label="$t('searchOrder.width')"  min-width="80" />
+          <el-table-column prop="height" align="center" :label="$t('searchOrder.height')" min-width="80" />
+          <el-table-column prop="thickness" align="center" :label="$t('searchOrder.thickness')" min-width="80" />
+          <el-table-column prop="filmsid" align="center" :label="$t('searchOrder.coatingtypes')" min-width="80" />
           <el-table-column
             align="center"
-            label="閽㈠寲鏄惁鎺ュ彈妯斁"
+            :label="$t('searchOrder.acceptshorizontal')"
             min-width="150"
             prop="ishorizontal"
           >
@@ -591,15 +1124,14 @@
         </el-tag>  
       </template> 
           </el-table-column>
-          <el-table-column prop="temperingLayoutId" align="center" label="閽㈠寲鐗堝浘id" min-width="120" />
-          <el-table-column prop="temperingFeedSequence" align="center" label="閽㈠寲鐗堝浘鐗囧簭" min-width="120" />
-          <el-table-column prop="xCoordinate" align="center" label="x鍧愭爣" min-width="80" />
-          <el-table-column prop="yCoordinate" align="center" label="y鍧愭爣" min-width="80" />
-          <el-table-column prop="angle" align="center" label="鏃嬭浆瑙掑害锛堥�嗘椂閽堬級" min-width="150" />
-          <!-- <el-table-column prop="state" align="center" label="鐘舵��" min-width="80" /> -->
+          <el-table-column prop="temperingLayoutId" align="center" :label="$t('searchOrder.layoutID')" min-width="120" />
+          <el-table-column prop="temperingFeedSequence" align="center" :label="$t('searchOrder.picturesequence')" min-width="120" />
+          <el-table-column prop="xCoordinate" align="center" :label="$t('searchOrder.xcoordinates')" min-width="80" />
+          <el-table-column prop="yCoordinate" align="center" :label="$t('searchOrder.ycoordinates')" min-width="80" />
+          <el-table-column prop="angle" align="center" :label="$t('searchOrder.rotationangle')" min-width="150" />
           <el-table-column
             align="center"
-            label="鐘舵��"
+            :label="$t('searchOrder.state')"
             min-width="80"
             prop="state"
           >
@@ -609,10 +1141,11 @@
         </el-tag>  
       </template> 
           </el-table-column>
-          <el-table-column fixed="right" label="鎿嶄綔" align="center" width="150">
+          <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" width="150">
             <template #default="scope">
-              <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">娣诲姞</el-button>
-              <el-button size="mini" type="text" plain @click="handleBindRacka(scope.row)">鍒犻櫎</el-button>
+              <el-button size="mini" type="text" plain @click="brokea(scope.row)">{{ $t('searchOrder.breakage') }}</el-button>
+              <el-button size="mini" type="text" plain @click="brokeb(scope.row)">{{ $t('searchOrder.takeout') }}</el-button>
+              <el-button size="mini" type="text" plain @click="deletea(scope.row)">{{ $t('searchOrder.delete') }}</el-button>
             </template>
         </el-table-column>
         </el-table>
@@ -620,7 +1153,6 @@
  
 </template>
 <style scoped>
- 
 #dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
 #dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
 #dialog-footer{
@@ -719,7 +1251,7 @@
 }
  
 .img-dlpl{
-  margin-left: 200px;
+  margin-left: 80px;
   background-image:url('../../assets/dlpl.png');
   background-repeat: no-repeat;
     background-attachment: local;
diff --git a/UI-Project/src/views/StockBasicData/stockBasicData.vue b/UI-Project/src/views/StockBasicData/stockBasicData.vue
index 01b0ddb..d20f65a 100644
--- a/UI-Project/src/views/StockBasicData/stockBasicData.vue
+++ b/UI-Project/src/views/StockBasicData/stockBasicData.vue
@@ -11,6 +11,9 @@
 // import { ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
 //  import LanguageMixin from './lang/LanguageMixin'
+  import { useI18n } from 'vue-i18n'
+  const { t } = useI18n()
+  let language = ref(localStorage.getItem('lang') || 'zh')
 
 const tableData = ref([])
 const slot = ref('')
@@ -32,17 +35,17 @@
           }
           });
 // 鐮存崯
- const open = async(row) => {  
-  try {  
+ const open = async(row) => { 
+  try {
     const confirmResult = await ElMessageBox.confirm(  
-      '鏄惁鐮存崯璇ユ潯淇℃伅?',  
-      '鎻愮ず',  
+      t('workOrder.messagedamaged'), 
+      t('workOrder.prompt'),  
       {  
-        confirmButtonText: '鏄�',  
-        cancelButtonText: '鍙栨秷',  
+        confirmButtonText: t('workOrder.yes'), 
+        cancelButtonText: t('workOrder.cancel'),
         type: 'warning',  
-      }  
-    );  
+      } 
+    );
     if (confirmResult === 'confirm') {  
       // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛  
       const response = await request.post("/cacheGlass/edgStorageCage/edgReportStatus", {
@@ -64,16 +67,16 @@
 };  
 // 鎷胯蛋 
  const opena = async(row) => {  
-  try {  
+  try {
     const confirmResult = await ElMessageBox.confirm(  
-      '鏄惁鎷胯蛋璇ユ潯淇℃伅?',  
-      '鎻愮ず',  
+      t('workOrder.takemessage'), 
+      t('workOrder.prompt'),  
       {  
-        confirmButtonText: '鏄�',  
-        cancelButtonText: '鍙栨秷',  
+        confirmButtonText: t('workOrder.yes'), 
+        cancelButtonText: t('workOrder.cancel'),
         type: 'warning',  
-      }  
-    );  
+      } 
+    );
     if (confirmResult === 'confirm') {  
       // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛  
       const response = await request.post("/cacheGlass/edgStorageCage/edgReportStatus", {
@@ -120,17 +123,17 @@
         <el-table height="240" ref="table" 
         @selection-change="handleSelectionChange"
         :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="GlassId" align="center" label="鐜荤拑id" min-width="180" />
-          <el-table-column prop="Height" align="center" label="楂�" min-width="80" />
-          <el-table-column prop="Width" align="center" label="瀹�" min-width="120" />
-          <el-table-column prop="Thickness" align="center" label="鍘氬害" min-width="120" />
-          <el-table-column prop="FilmsId" align="center" label="鑶滅郴" min-width="120" />
-          <el-table-column prop="SerialNumber" align="center" label="鍑虹墖椤哄簭" min-width="120" />
-          <el-table-column prop="FlowCardId" align="center" label="娴佺▼鍗″彿" min-width="120" />
-          <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200">
+          <el-table-column prop="GlassId" align="center" :label="$t('workOrder.glassID')" min-width="180" />
+          <el-table-column prop="Height" align="center" :label="$t('workOrder.height')" min-width="80" />
+          <el-table-column prop="Width" align="center" :label="$t('workOrder.width')" min-width="120" />
+          <el-table-column prop="Thickness" align="center" :label="$t('workOrder.thickness')" min-width="120" />
+          <el-table-column prop="FilmsId" align="center" :label="$t('workOrder.coatingtypes')" min-width="120" />
+          <el-table-column prop="SerialNumber" align="center" :label="$t('workOrder.productionsequence')" min-width="120" />
+          <el-table-column prop="FlowCardId" align="center" :label="$t('workOrder.cardnumber')" min-width="120" />
+          <el-table-column fixed="right" :label="$t('workOrder.operate')" align="center" width="200">
             <template #default="scope">
-              <el-button size="mini" type="text" plain @click="open(scope.row)">鐮存崯</el-button>
-              <el-button size="mini" type="text" plain @click="opena(scope.row)">鎷胯蛋</el-button>
+              <el-button size="mini" type="text" plain @click="open(scope.row)">{{ $t('workOrder.breakage') }}</el-button>
+              <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('workOrder.takeout') }}</el-button>
             </template>
         </el-table-column>
         </el-table>
diff --git a/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue b/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue
index 6d4df18..583b2ba 100644
--- a/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue
+++ b/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue
@@ -11,6 +11,9 @@
 // import { ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
 //  import LanguageMixin from './lang/LanguageMixin'
+  import { useI18n } from 'vue-i18n'
+  const { t } = useI18n()
+  let language = ref(localStorage.getItem('lang') || 'zh')
 
 const tableData = ref([])
 const slot = ref('')
@@ -33,16 +36,16 @@
           });
 // 鐮存崯
  const open = async(row) => {  
-  try {  
+  try {
     const confirmResult = await ElMessageBox.confirm(  
-      '鏄惁鐮存崯璇ユ潯淇℃伅?',  
-      '鎻愮ず',  
+      t('workOrder.messagedamaged'), 
+      t('workOrder.prompt'),  
       {  
-        confirmButtonText: '鏄�',  
-        cancelButtonText: '鍙栨秷',  
+        confirmButtonText: t('workOrder.yes'), 
+        cancelButtonText: t('workOrder.cancel'),
         type: 'warning',  
-      }  
-    );  
+      } 
+    );
     if (confirmResult === 'confirm') {  
       // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛  
       const response = await request.post("/cacheGlass/edgStorageCage/edgReportStatus", {
@@ -64,16 +67,16 @@
 };  
 // 鎷胯蛋 
  const opena = async(row) => {  
-  try {  
+  try {
     const confirmResult = await ElMessageBox.confirm(  
-      '鏄惁鎷胯蛋璇ユ潯淇℃伅?',  
-      '鎻愮ず',  
+      t('workOrder.takemessage'), 
+      t('workOrder.prompt'),  
       {  
-        confirmButtonText: '鏄�',  
-        cancelButtonText: '鍙栨秷',  
+        confirmButtonText: t('workOrder.yes'), 
+        cancelButtonText: t('workOrder.cancel'),
         type: 'warning',  
-      }  
-    );  
+      } 
+    );
     if (confirmResult === 'confirm') {  
       // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛  
       const response = await request.post("/cacheGlass/edgStorageCage/edgReportStatus", {
@@ -121,17 +124,17 @@
         <el-table height="240" ref="table" 
         @selection-change="handleSelectionChange"
         :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="GlassId" align="center" label="鐜荤拑id" min-width="180" />
-          <el-table-column prop="Height" align="center" label="楂�" min-width="80" />
-          <el-table-column prop="Width" align="center" label="瀹�" min-width="120" />
-          <el-table-column prop="Thickness" align="center" label="鍘氬害" min-width="120" />
-          <el-table-column prop="FilmsId" align="center" label="鑶滅郴" min-width="120" />
-          <el-table-column prop="SerialNumber" align="center" label="鍑虹墖椤哄簭" min-width="120" />
-          <el-table-column prop="FlowCardId" align="center" label="娴佺▼鍗″彿" min-width="120" />
-          <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200">
+          <el-table-column prop="GlassId" align="center" :label="$t('workOrder.glassID')" min-width="180" />
+          <el-table-column prop="Height" align="center" :label="$t('workOrder.height')" min-width="80" />
+          <el-table-column prop="Width" align="center" :label="$t('workOrder.width')" min-width="120" />
+          <el-table-column prop="Thickness" align="center" :label="$t('workOrder.thickness')" min-width="120" />
+          <el-table-column prop="FilmsId" align="center" :label="$t('workOrder.coatingtypes')" min-width="120" />
+          <el-table-column prop="SerialNumber" align="center" :label="$t('workOrder.productionsequence')" min-width="120" />
+          <el-table-column prop="FlowCardId" align="center" :label="$t('workOrder.cardnumber')" min-width="120" />
+          <el-table-column fixed="right" :label="$t('workOrder.operate')" align="center" width="200">
             <template #default="scope">
-              <el-button size="mini" type="text" plain @click="open(scope.row)">鐮存崯</el-button>
-              <el-button size="mini" type="text" plain @click="opena(scope.row)">鎷胯蛋</el-button>
+              <el-button size="mini" type="text" plain @click="open(scope.row)">{{ $t('workOrder.breakage') }}</el-button>
+              <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('workOrder.takeout') }}</el-button>
             </template>
         </el-table-column>
         </el-table>
diff --git a/UI-Project/src/views/UnLoadGlass/Landingindication.vue b/UI-Project/src/views/UnLoadGlass/Landingindication.vue
index 2424c68..41a6a45 100644
--- a/UI-Project/src/views/UnLoadGlass/Landingindication.vue
+++ b/UI-Project/src/views/UnLoadGlass/Landingindication.vue
@@ -22,7 +22,7 @@
               :height="rack.item.height" 
               :fill="rack.item.fillColor"
             />
-            <text :x="rack.x + rack.width / 2" :y="rack.y - 10" text-anchor="middle">{{ index + 1 }}鍙峰伐浣�</text>
+            <text :x="rack.x + rack.width / 2" :y="rack.y - 10" text-anchor="middle">{{ index + 1 }}{{ $t('reportWork.workstation') }}</text>
             <text :x="rack.x + rack.width / 2" :y="rack.y + rack.height + 20" text-anchor="middle">{{ rack.item.content }}</text>
           </g>
         </g>
@@ -34,6 +34,9 @@
 <script  setup>
 import { ref, watchEffect ,onMounted} from 'vue';
 
+import { useI18n } from 'vue-i18n'
+  const { t } = useI18n()
+  let language = ref(localStorage.getItem('lang') || 'zh')
 import Swal from 'sweetalert2'
 import request from "@/utils/request";
 import { initializeWebSocket } from '@/utils/WebSocketService';
@@ -43,7 +46,7 @@
  
   { x: 280, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG12345678',downGlassInfoList:"" } },
  
-  { x: 140, y: 420, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: 'NG1234561454' ,downGlassInfoList:""} }
+  { x: 140, y: 320, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: 'NG1234561454' ,downGlassInfoList:""} }
   
 ]);
 
@@ -167,7 +170,8 @@
   tableContent += '</table>';
 
   Swal.fire({
-    title: '鐜荤拑淇℃伅',
+    // title: '鐜荤拑淇℃伅',
+    title: "$t('reportWork.glassinformation')",
     html: tableContent,
     customClass: {
       popup: 'format-pre'
@@ -196,7 +200,7 @@
 .glass-rack {
   margin-left: 20px;
   width: 500px;
-  margin-top: 10px;
+  margin-top: 5px;
 }
 .rack-rect:hover {
   cursor: pointer;
diff --git a/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue b/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
index 4e16fae..c7fa71e 100644
--- a/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
+++ b/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
@@ -22,7 +22,7 @@
               :height="rack.item.height" 
               :fill="rack.item.fillColor"
             />
-            <text :x="rack.x + rack.width / 2" :y="rack.y - 10" text-anchor="middle">{{ index + 4 }}鍙峰伐浣�</text>
+            <text :x="rack.x + rack.width / 2" :y="rack.y - 10" text-anchor="middle">{{ index + 4 }}{{ $t('reportWork.workstation') }}</text>
             <text :x="rack.x + rack.width / 2" :y="rack.y + rack.height + 20" text-anchor="middle">{{ rack.item.content }}</text>
           </g>
         </g>
@@ -34,6 +34,9 @@
 <script setup>
 import { ref, watchEffect ,onMounted} from 'vue';
 
+import { useI18n } from 'vue-i18n'
+  const { t } = useI18n()
+  let language = ref(localStorage.getItem('lang') || 'zh')
 import Swal from 'sweetalert2'
 import request from "@/utils/request";
 import { initializeWebSocket } from '@/utils/WebSocketService';
@@ -43,7 +46,7 @@
  
   { x: 280, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG12345678' } },
  
-  { x: 140, y: 420, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: 'NG1234561454' } }
+  { x: 140, y: 320, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: 'NG1234561454' } }
   
 ]);
 
@@ -164,7 +167,8 @@
   tableContent += '</table>';
 
   Swal.fire({
-    title: '鐜荤拑淇℃伅',
+    title: "$t('reportWork.glassinformation')",
+    // title: '鐜荤拑淇℃伅',
     html: tableContent,
     customClass: {
       popup: 'format-pre'
diff --git a/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue b/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
index 83f2eb6..b41ed1c 100644
--- a/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
+++ b/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
@@ -5,6 +5,9 @@
 import {useRouter} from "vue-router"
 const router = useRouter()
 
+import { useI18n } from 'vue-i18n'
+  const { t } = useI18n()
+  let language = ref(localStorage.getItem('lang') || 'zh')
 import { ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
 import Landingindication from "./Landingindication.vue";
@@ -24,7 +27,7 @@
 // 琛ㄥ崟鏁版嵁
 const workstationId = ref('');
 const flowCardId = ref('');
-const flowCardOptions = ref([]);
+const flowCardOptions = ref('[]');
 const tableData = reactive([]);
 // 鏂规硶
 const handleSelectionChange = () => {
@@ -44,9 +47,9 @@
     const response = await request.get('unLoadGlass/downWorkStation/getflowCardId');
     console.log(response)
     if (response.code === 200) {
-  flowCardOptions.value = response.data
-    .filter(item => item !== null)
-    .map(item => ({ flowcard_id: item.flow_card_Id }));
+   
+  flowCardOptions.value = response.data.filter(item => item !== null)
+.map(item => ({ flowcard_id: item.flow_card_id }));
   console.log(flowCardOptions.value);
 }
  else {
@@ -187,30 +190,27 @@
         <el-table height="100%" ref="table" 
         @selection-change="handleSelectionChange"
         :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="workstationId" align="center" label="涓嬬墖浣�" min-width="80" />
-          <el-table-column prop="workstationId" align="center" label="鏋跺彿" min-width="120" />
-          <el-table-column prop="flowCardId" align="center" label="娴佺▼鍗″彿" min-width="120" />
-          <el-table-column prop="totalquantity" align="center" label="鎬绘暟閲�" min-width="120" />
-          <el-table-column prop="racksnumber" align="center" label="宸茶惤鏋舵暟閲�" min-width="120" />
-          <el-table-column prop="work_state" align="center" label="鐘舵��" min-width="120" />
-          <el-table-column prop="deviceId" align="center" label="璁惧鍙�" min-width="120" />
-         
-
-
+          <el-table-column prop="workstationId" align="center" :label="$t('reportWork.lowerbit')" min-width="80" />
+          <el-table-column prop="workstationId" align="center" :label="$t('reportWork.shelfnumber')" min-width="120" />
+          <el-table-column prop="flowCardId" align="center" :label="$t('reportWork.cardnumber')" min-width="120" />
+          <el-table-column prop="totalquantity" align="center" :label="$t('reportWork.totalquantity')" min-width="120" />
+          <el-table-column prop="racksnumber" align="center" :label="$t('reportWork.beendropped')" min-width="120" />
+          <el-table-column prop="work_state" align="center" :label="$t('reportWork.state')" min-width="120" />
+          <el-table-column prop="deviceId" align="center" :label="$t('reportWork.devicenumber')" min-width="120" />
           <el-table-column
             align="center"
-            label="鍚敤鐘舵��"
+            :label="$t('reportWork.startstatus')"
             min-width="80"
             prop="enableState"
           >
           <template #default="scope">
-            <el-tag type="success" >{{ scope.row.enableState==1?"鍚敤":"鏈惎鐢�"  }}</el-tag>
+            <el-tag type="success" >{{ scope.row.enableState==1? $t('reportWork.enable') : $t('reportWork.unenable')}}</el-tag>
           </template>
           </el-table-column>
-          <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200">
+          <el-table-column fixed="right" :label="$t('reportWork.operate')" align="center" width="200">
             <template #default="scope">
-            <el-button size="mini" type="text" plain v-show="scope.row.enableState !== '宸插惎鐢�' " @click="handleBindRack(scope.row)">缁戝畾鏋跺瓙</el-button>
-            <el-button size="mini" type="text" plain  @click="handleBindRack2(scope.row)">娓呯┖</el-button>
+            <el-button size="mini" type="text" plain v-show="scope.row.enableState !== '宸插惎鐢�' " @click="handleBindRack(scope.row)">{{ $t('reportWork.bindingshelves') }}</el-button>
+            <el-button size="mini" type="text" plain  @click="handleBindRack2(scope.row)">{{ $t('reportWork.clear') }}</el-button>
           </template>
         </el-table-column>
         </el-table>
@@ -218,15 +218,15 @@
     </el-card>
 
 
-    <el-dialog v-model="dialogFormVisiblea" top="21vh" width="30%" title="缁戝畾鏋跺瓙" >
+    <el-dialog v-model="dialogFormVisiblea" top="21vh" width="40%" :title="$t('reportWork.bindingshelves')">
     <div style="margin-left: 50px;margin-top: 10px;margin-bottom: 10px;">
-      <el-form  size="mini" label-width="150px">
-        <el-form  label-width="100px" label-position="right">
-          <el-form-item label="鏋跺彿锛�" :required="true" style="width: 18vw">
+      <el-form  size="mini" label-width="100px">
+        <el-form  label-width="210px" label-position="right">
+          <el-form-item :label="$t('reportWork.shelfnumbera')" :required="true" style="width: 25vw">
             <el-input v-model="workstationId" autocomplete="off"/>
           </el-form-item>
-          <el-form-item label="娴佺▼鍗″彿锛�" :required="true" style="width: 18vw;">
-          <el-select v-model="flowCardId" placeholder="璇烽�夋嫨娴佺▼鍗″彿">
+          <el-form-item :label="$t('reportWork.cardnumbera')" :required="true" style="width: 25vw;">
+          <el-select v-model="flowCardId" :placeholder="$t('reportWork.incardnumber')">
             <el-option v-for="item in flowCardOptions" :key="item.flowcard_id" :label="item.flowcard_id" :value="item.flowcard_id" />
           </el-select>
         </el-form-item>
@@ -236,9 +236,9 @@
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="handleConfirm">
-          纭
+          {{ $t('reportWork.sure') }}
         </el-button>
-        <el-button @click="dialogFormVisiblea = false">鍙栨秷</el-button>
+        <el-button @click="dialogFormVisiblea = false">{{ $t('reportWork.cancel') }}</el-button>
       </div>
     </template>
   </el-dialog>
@@ -246,14 +246,14 @@
 
 
 
-  <el-dialog v-model="dialogFormVisiblea2" top="21vh" width="30%" title="娓呴櫎鏋跺瓙鐜荤拑" >
+  <el-dialog v-model="dialogFormVisiblea2" top="21vh" width="30%" :title="$t('reportWork.clearglass')">
 
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="handleclear">
-          纭
+          {{ $t('reportWork.sure') }}
         </el-button>
-        <el-button @click="dialogFormVisiblea2 = false">鍙栨秷</el-button>
+        <el-button @click="dialogFormVisiblea2 = false">{{ $t('reportWork.cancel') }}</el-button>
       </div>
     </template>
   </el-dialog>
diff --git a/UI-Project/src/views/User/permissions.vue b/UI-Project/src/views/User/permissions.vue
index 637eb78..740afff 100644
--- a/UI-Project/src/views/User/permissions.vue
+++ b/UI-Project/src/views/User/permissions.vue
@@ -5,8 +5,12 @@
 const router = useRouter()
 const add = ref(false)
 const adda = ref(false)
+const addc = ref(false)
+const addb = ref(false)
 
-const editingUser = ref({}); // 鐢ㄤ簬瀛樺偍褰撳墠缂栬緫鐨勭敤鎴锋暟鎹� 
+import { useI18n } from 'vue-i18n'
+  const { t } = useI18n()
+  let language = ref(localStorage.getItem('lang') || 'zh')
 import request from "@/utils/request"
 import { ref, onMounted } from "vue";
 // import { ref } from 'vue'
@@ -15,8 +19,9 @@
 const selectedProjectNoa = ref(''); // 褰撳墠閫変腑鐨勮鑹� 
 // const options = ref<any[]>([]); // 涓嬫媺閫夐」鍒楄〃  
   const menuName = ref('');
-  const parentId = ref('');
+  const listSort = ref('');
   const url = ref('');
+const currentRow = reactive({}); // 褰撳墠琛岀殑鏁版嵁 
 const tableData = ref([])
 const slot = ref('')
  request.get("/loadGlass/sys/menu/nav").then((res) => {
@@ -50,7 +55,7 @@
     const response = await request.post('/loadGlass/sys/role/queryRole',{
   key: ''
 });  
-    if (response.code == 200) {  
+    if (response.code === 200) {  
     titleSelectJsona.value.processTypea = response.data;
     console.log(response.data);
  
@@ -61,20 +66,64 @@
     console.error('Error fetching options:', error);  
   }  
 }; 
-// 娣诲姞 
+const handleBindRack = (row) => {
+  // selectedRow.value = row; // 鏇存柊閫変腑鐨勮鏁版嵁  
+  currentRow.menuName  = row.menuName; // 鐩存帴璁剧疆鍝嶅簲寮忓睘鎬�  
+  currentRow.id  = row.id; // 鐩存帴璁剧疆鍝嶅簲寮忓睘鎬�  
+  // currentRow.slot = row.slot;  
+  // window.localStorage.setItem('deviceId', row.deviceId)
+  // window.localStorage.setItem('slot', row.slot)
+  addb.value = true; // 鎵撳紑缁戝畾鏋跺瓙瀵硅瘽妗�
+};
+// 娣诲姞涓�绾ц彍鍗�
 const getTableRow = async () => {
   try {
     const response = await request.post('/loadGlass/sys/menu/save', {
       menuName: menuName.value,
-      parentId: parentId.value,
+      listSort: listSort.value,
       url: url.value,
     }); 
  
-    if (response.code == 200) {
+    if (response.code === 200) {
       // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
       ElMessage.success(response.message);
       add.value = false;
-    //  tableData.value = response.data;
+     tableData.value = response.data;
+       menuName.value = '';
+       listSort.value = '';
+       url.value = '';
+    } else {
+      // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
+      ElMessage.error(response.msg);
+    }
+  } catch (error) {
+    // 澶勭悊閿欒
+    console.error(error);
+  }
+};
+// 娣诲姞浜岀骇鑿滃崟
+const getTableRowb = async () => {
+  try {
+    const dataToSend = {  
+      parentId: currentRow.id,
+      // menuName: currentRow.menuName,
+      // children: [  
+      //   {  
+      menuName: menuName.value,
+      listSort: listSort.value,
+      url: url.value,
+      //   }  
+      // ]  
+    };
+    const response = await request.post('/loadGlass/sys/menu/save',dataToSend ); 
+    if (response.code === 200) {
+      // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
+      ElMessage.success(response.message);
+      addb.value = false;
+     tableData.value = response.data;
+       menuName.value = '';
+       listSort.value = '';
+       url.value = '';
     } else {
       // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
       ElMessage.error(response.msg);
@@ -86,24 +135,60 @@
 };
 // 澶勭悊缂栬緫鎸夐挳鐐瑰嚮  
 function handleEdit(row) {  
-  editingUser.value = { ...row }; // 浣跨敤灞曞紑杩愮畻绗﹀鍒跺綋鍓嶈鏁版嵁  
+  listSort.value = row.listSort; 
+  menuName.value = row.menuName; 
+  url.value = row.url; 
   adda.value = true; // 鏄剧ず瀵硅瘽妗�  
+}  
+// 淇敼浜岀骇鑿滃崟
+function handleEditc(row) {  
+  listSort.value = row.listSort; 
+  menuName.value = row.menuName; 
+  url.value = row.url; 
+  addc.value = true; // 鏄剧ず瀵硅瘽妗�  
 }  
 // 缂栬緫
 const getTableRowa = async () => {
   try {
     const response = await request.post('/loadGlass/sys/menu/updateMenu', {
+      parentId: currentRow.id,
       menuName: menuName.value,
-      parentId: parentId.value,
+      listSort: listSort.value,
       url: url.value,
     }); 
- 
-    if (response.code == 200) {
+    if (response.code === 200) {
       // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
       ElMessage.success(response.message);
-      editingUser.value = {}; 
       adda.value = false;
      tableData.value = response.data;
+       menuName.value = '';
+       listSort.value = '';
+       url.value = '';
+    } else {
+      // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
+      ElMessage.error(response.msg);
+    }
+  } catch (error) {
+    // 澶勭悊閿欒
+    console.error(error);
+  }
+}; 
+// 缂栬緫浜岀骇鑿滃崟
+const getTableRowac = async () => {
+  try {
+    const response = await request.post('/loadGlass/sys/menu/updateMenu', {
+      menuName: menuName.value,
+      listSort: listSort.value,
+      url: url.value,
+    }); 
+    if (response.code === 200) {
+      // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
+      ElMessage.success(response.message);
+      addc.value = false;
+     tableData.value = response.data;
+       menuName.value = '';
+       listSort.value = '';
+       url.value = '';
     } else {
       // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
       ElMessage.error(response.msg);
@@ -115,16 +200,16 @@
 };
 // 鍒犻櫎 
  const opena = async(row) => {  
-  try {  
+  try {
     const confirmResult = await ElMessageBox.confirm(  
-      '鏄惁鍒犻櫎璇ョ敤鎴�?',  
-      '鎻愮ず',  
+      t('customer.demenu'), 
+      t('customer.prompt'),  
       {  
-        confirmButtonText: '鏄�',  
-        cancelButtonText: '鍙栨秷',  
+        confirmButtonText: t('customer.yes'), 
+        cancelButtonText: t('customer.cancel'),
         type: 'warning',  
-      }  
-    );  
+      } 
+    );
     if (confirmResult === 'confirm') {  
       // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛  
       const response = await request.post("/loadGlass/sys/menu/deleteMenu", {
@@ -144,54 +229,16 @@
   }  
 };   
 
-// const gridOptions = reactive({
-//   border:  "full",//琛ㄦ牸鍔犺竟妗�
-//   keepSource: true,//淇濇寔婧愭暟鎹�
-//   align: 'center',//鏂囧瓧灞呬腑
-//   stripe:true,//鏂戦┈绾�
-//   rowConfig: {isCurrent: true, isHover: true,height: 50},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
-//   id: 'OrderList',
-//   showFooter: true,//鏄剧ず鑴�
-//   printConfig: {},
-//   importConfig: {},
-//   exportConfig: {},
-//   scrollY:{ enabled: true },//寮�鍚櫄鎷熸粴鍔�
-//   showOverflow:true,
-//   columnConfig: {
-//     resizable: true,
-//     useKey: true
-//   },
-//   filterConfig: {   //绛涢�夐厤缃」
-//     remote: true
-//   },
-//   customConfig: {
-//     storage: true
-//   },
-//   editConfig: {
-//     trigger: 'click',
-//     mode: 'row',
-//     showStatus: true
-//   },
-//   data:  [
-//     {
-//       'id': '1',
-//       'long': '5',
-//       'wide': '1005',
-//       'thick': '183.6',
-//     }
-//   ]
- 
-// })
 </script>
 
 <template>
-  <div style="height: 700px;">
-     <el-button type="primary" style="margin-top: 10px;margin-left: 10px;"  size="mini" id="searchButton" @click="add = true">娣诲姞鑿滃崟</el-button>
+  <div style="height: 600px;">
+     <el-button type="primary" style="margin-top: 10px;margin-left: 10px;"  size="mini" id="searchButton" @click="add = true">{{ $t('customer.addmenu') }}</el-button>
     <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
       <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 650px;">
               <el-table  
           :data="tableData" 
-          height="650"
+          height="550"
           @expand-change="handleExpandChange"  
           row-key="id" 
           :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}" 
@@ -206,61 +253,43 @@
                   row-key="id"  
                   :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}" 
                 >  
-                  <el-table-column prop="menuName" label="浜岀骇鑿滃崟鏍�" align="center" min-width="140" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"/>  
-                  <el-table-column prop="url" label="閾炬帴" align="center" min-width="160"/>  
-          <el-table-column prop="id" align="center" label="鎺掑簭" min-width="140"/>
-                  <el-table-column fixed="right" label="鎿嶄綔" align="center">
+                  <el-table-column prop="menuName" :label="$t('customer.semenu')" align="center" min-width="140" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"/>  
+                  <el-table-column prop="url" :label="$t('customer.link')" align="center" min-width="160"/>  
+          <el-table-column prop="listSort" align="center" :label="$t('customer.sort')" min-width="140"/>
+                  <el-table-column fixed="right" :label="$t('customer.operate')" align="center">
             <template #default="scope">
-              <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">缂栬緫</el-button>
-              <el-button size="mini" type="text" plain @click="opena(scope.row)">鍒犻櫎</el-button>
+              <el-button size="mini" type="text" plain @click="handleEditc(scope.row)">{{ $t('customer.exit') }}</el-button>
+              <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('customer.delete') }}</el-button>
             </template>
         </el-table-column>
                 </el-table>  
               </div>  
             </template>  
           </el-table-column>  
-          <el-table-column prop="menuName" label="涓�绾ц彍鍗曟爮" align="center" min-width="120"  />  
-                  <el-table-column prop="url" label="閾炬帴" align="center" min-width="200"/>  
-          <el-table-column prop="id" align="center" label="鎺掑簭" min-width="180" />
-          <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200">
+          <el-table-column prop="menuName" :label="$t('customer.firstmenu')" align="center" min-width="120"  />  
+                  <el-table-column prop="url" :label="$t('customer.link')" align="center" min-width="200"/>  
+          <el-table-column prop="listSort" align="center" :label="$t('customer.sort')" min-width="180" />
+          <el-table-column fixed="right" :label="$t('customer.operate')" align="center" width="200">
             <template #default="scope">
-              <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">缂栬緫</el-button>
-              <el-button size="mini" type="text" plain @click="opena(scope.row)">鍒犻櫎</el-button>
+              <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">{{ $t('customer.addmenua') }}</el-button>
+              <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">{{ $t('customer.exit') }}</el-button>
+              <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('customer.delete') }}</el-button>
             </template>
         </el-table-column>
-        </el-table>  
-       <!-- <el-table height="240" ref="table" 
-        @selection-change="handleSelectionChange"
-        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="menuName" align="center" label="鑿滃崟鏍�" min-width="180" />
-          <el-table-column align="center" label="閾炬帴" min-width="180">
-            <template #default="scope">  
-             <el-tag v-for="role in scope.row.children">  
-            {{role.url}}  
-           </el-tag>   
-         </template> 
-            </el-table-column>
-          <el-table-column prop="id" align="center" label="鎺掑簭" min-width="180" />
-          <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200">
-            <template #default="scope">
-              <el-button size="mini" type="text" plain @click="adda = true">缂栬緫</el-button>
-              <el-button size="mini" type="text" plain @click="opena(scope.row)">鍒犻櫎</el-button>
-            </template>
-        </el-table-column>
-        </el-table> -->
+        </el-table>
       </div>
     </el-card>
   </div>
-  <el-dialog v-model="add" top="23vh" width="37%" title="娣诲姞鑿滃崟" >
+  <el-dialog v-model="add" top="23vh" width="37%" :title="$t('customer.addmenu')">
     <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
             <el-form  size="mini" label-width="150px">
-      <el-form label-width="100px" label-position="right">
+      <el-form label-width="150px" label-position="right">
         <el-row style="margin-top: -15px;margin-bottom: -2px;">
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div> 
-          <el-form-item label="鑿滃崟鏍忥細" :required="true" style="width: 25vw">
-                <el-input v-model="menuName" autocomplete="off" />
+          <el-form-item :label="$t('customer.firstmenuname')" :required="true" style="width: 25vw">
+                <el-input v-model="menuName" autocomplete="off" :placeholder="$t('customer.inmenu')"/>
               </el-form-item></div></div>
           </el-col>
         </el-row>
@@ -268,8 +297,8 @@
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
-          <el-form-item label="閾炬帴锛�" :required="true" style="width: 25vw">
-                <el-input v-model="url" autocomplete="off" />
+          <el-form-item :label="$t('customer.linka')" :required="true" style="width: 25vw">
+                <el-input v-model="url" autocomplete="off" :placeholder="$t('customer.inlink')"/>
               </el-form-item></div></div>
           </el-col>
         </el-row>
@@ -277,8 +306,8 @@
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
-          <el-form-item label="鎺掑簭锛�" :required="true" style="width: 25vw">
-                <el-input v-model="parentId" autocomplete="off" />
+          <el-form-item :label="$t('customer.sorta')" :required="true" style="width: 25vw">
+                <el-input v-model="listSort" autocomplete="off" :placeholder="$t('customer.insort')"/>
               </el-form-item></div></div>
           </el-col>
         </el-row>
@@ -288,22 +317,79 @@
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="getTableRow">
-          纭
+          {{ $t('customer.sure') }}
         </el-button>
-        <el-button @click="add = false">鍙栨秷</el-button>
+        <el-button @click="add = false">{{ $t('customer.cancel') }}</el-button>
       </div>
     </template>
   </el-dialog> 
-  <el-dialog v-model="adda" top="23vh" width="37%" title="淇敼鑿滃崟" >
+  <el-dialog v-model="addb" top="23vh" width="37%" :title="$t('customer.addmenua')">
+    <div style="margin-bottom: 20px">
+      <el-form>
+        <el-row style="margin-top: -15px;margin-bottom: -2px;">
+          <el-col :span="6">
+              <div id="dt" style="font-size: 15px;">
+              <el-form-item :label="$t('customer.firstmenuname')"  style="width: 22vw">
+                <!-- {{ currentRow.menuName }} -->
+            <el-input disabled v-model="currentRow.menuName" autocomplete="off"></el-input>
+              </el-form-item>
+              </div>
+          </el-col>
+        </el-row>
+      </el-form>
+    </div>
     <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
-     <el-form  :model="editingUser" ref="formRef" size="mini" label-width="150px">
+            <el-form  size="mini" label-width="150px">
+      <el-form label-width="150px" label-position="right">
+        <el-row style="margin-top: -15px;margin-bottom: -2px;">
+          <el-col :span="6">
+              <div id="dt" style="font-size: 15px;">
+        <div> 
+          <el-form-item :label="$t('customer.semenuname')" :required="true" style="width: 25vw">
+                <el-input v-model="menuName" autocomplete="off" :placeholder="$t('customer.inmenu')"/>
+              </el-form-item></div></div>
+          </el-col>
+        </el-row>
+        <el-row style="margin-top: 10px;">
+          <el-col :span="6">
+              <div id="dt" style="font-size: 15px;">
+        <div>
+          <el-form-item :label="$t('customer.linka')" :required="true" style="width: 25vw">
+                <el-input v-model="url" autocomplete="off" :placeholder="$t('customer.inlink')"/>
+              </el-form-item></div></div>
+          </el-col>
+        </el-row>
+        <el-row style="margin-top: 10px;">
+          <el-col :span="6">
+              <div id="dt" style="font-size: 15px;">
+        <div>
+          <el-form-item :label="$t('customer.sorta')" :required="true" style="width: 25vw">
+                <el-input v-model="listSort" autocomplete="off" :placeholder="$t('customer.insort')"/>
+              </el-form-item></div></div>
+          </el-col>
+        </el-row>
+        </el-form>
+            </el-form>
+          </div>
+    <template #footer>
+      <div id="dialog-footer">
+        <el-button type="primary" @click="getTableRowb">
+          {{ $t('customer.sure') }}
+        </el-button>
+        <el-button @click="addb = false">{{ $t('customer.cancel') }}</el-button>
+      </div>
+    </template>
+  </el-dialog> 
+  <el-dialog v-model="adda" top="23vh" width="37%" :title="$t('customer.exmene')">
+    <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
+     <el-form ref="formRef" size="mini" label-width="150px">
       <el-form label-width="100px" label-position="right">
         <el-row style="margin-top: -15px;margin-bottom: -2px;">
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div> 
-          <el-form-item label="鑿滃崟鏍忥細" :required="true" style="width: 25vw">
-                <el-input v-model="editingUser.menuName" autocomplete="off" />
+          <el-form-item :label="$t('customer.menu')" :required="true" style="width: 25vw">
+                <el-input v-model="menuName" autocomplete="off" :placeholder="$t('customer.inmenu')"/>
               </el-form-item></div></div>
           </el-col>
         </el-row>
@@ -311,8 +397,8 @@
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
-          <el-form-item label="閾炬帴锛�" :required="true" style="width: 25vw">
-                <el-input v-model="editingUser.url" autocomplete="off" />
+          <el-form-item :label="$t('customer.linka')" :required="true" style="width: 25vw">
+                <el-input v-model="url" autocomplete="off" :placeholder="$t('customer.inlink')"/>
               </el-form-item></div></div>
           </el-col>
         </el-row>
@@ -320,8 +406,8 @@
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
-          <el-form-item label="鎺掑簭锛�" :required="true" style="width: 25vw">
-                <el-input v-model="editingUser.parentId" autocomplete="off" />
+          <el-form-item :label="$t('customer.sorta')" :required="true" style="width: 25vw">
+                <el-input v-model="listSort" autocomplete="off" :placeholder="$t('customer.insort')"/>
               </el-form-item></div></div>
           </el-col>
         </el-row>
@@ -331,9 +417,52 @@
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="getTableRowa">
-          纭
+          {{ $t('customer.sure') }}
         </el-button>
-        <el-button @click="adda = false">鍙栨秷</el-button>
+        <el-button @click="adda = false">{{ $t('customer.cancel') }}</el-button>
+      </div>
+    </template>
+  </el-dialog> 
+  <el-dialog v-model="addc" top="23vh" width="37%" :title="$t('customer.exmenea')">
+    <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
+     <el-form ref="formRef" size="mini" label-width="150px">
+      <el-form label-width="100px" label-position="right">
+        <el-row style="margin-top: -15px;margin-bottom: -2px;">
+          <el-col :span="6">
+              <div id="dt" style="font-size: 15px;">
+        <div> 
+          <el-form-item :label="$t('customer.menu')" :required="true" style="width: 25vw">
+                <el-input v-model="menuName" autocomplete="off" :placeholder="$t('customer.inmenu')"/>
+              </el-form-item></div></div>
+          </el-col>
+        </el-row>
+        <el-row style="margin-top: 10px;">
+          <el-col :span="6">
+              <div id="dt" style="font-size: 15px;">
+        <div>
+          <el-form-item :label="$t('customer.linka')" :required="true" style="width: 25vw">
+                <el-input v-model="url" autocomplete="off" :placeholder="$t('customer.inlink')"/>
+              </el-form-item></div></div>
+          </el-col>
+        </el-row>
+        <el-row style="margin-top: 10px;">
+          <el-col :span="6">
+              <div id="dt" style="font-size: 15px;">
+        <div>
+          <el-form-item :label="$t('customer.sorta')" :required="true" style="width: 25vw">
+                <el-input v-model="listSort" autocomplete="off" :placeholder="$t('customer.insort')"/>
+              </el-form-item></div></div>
+          </el-col>
+        </el-row>
+        </el-form>
+            </el-form>
+          </div>
+    <template #footer>
+      <div id="dialog-footer">
+        <el-button type="primary" @click="getTableRowac">
+          {{ $t('customer.sure') }}
+        </el-button>
+        <el-button @click="addc = false">{{ $t('customer.cancel') }}</el-button>
       </div>
     </template>
   </el-dialog> 
diff --git a/UI-Project/src/views/User/rolelist.vue b/UI-Project/src/views/User/rolelist.vue
index 81ec996..5dcbb0b 100644
--- a/UI-Project/src/views/User/rolelist.vue
+++ b/UI-Project/src/views/User/rolelist.vue
@@ -2,10 +2,12 @@
 import {Search} from "@element-plus/icons-vue";
 import {reactive} from "vue";
 import {useRouter} from "vue-router"
+  import { useI18n } from 'vue-i18n'
+  const { t } = useI18n()
+  let language = ref(localStorage.getItem('lang') || 'zh')
 const router = useRouter()
 const add = ref(false)
 const adda = ref(false)
-const editingUser = ref({}); // 鐢ㄤ簬瀛樺偍褰撳墠缂栬緫鐨勭敤鎴锋暟鎹� 
 import request from "@/utils/request"
 import { ref, onMounted } from "vue";
 // import { ref } from 'vue'
@@ -14,35 +16,34 @@
 const selectedProjectNoa = ref(''); // 褰撳墠閫変腑鐨勮鑹� 
 // const options = ref<any[]>([]); // 涓嬫媺閫夐」鍒楄〃  
   const name = ref('');
-
 const tableData = ref([])
+const options = ref([])
+const selectedOptions = ref([])
+// 瀹氫箟绾ц仈閫夋嫨鍣ㄧ殑灞炴��  
+const cascaderProps = {
+  value: 'id',  
+  label: 'menuName',  
+  multiple: true
+};  
 const slot = ref('')
 
 const titleSelectJsona = ref({
   processType: [],
  
 })
-// const handleInputChangea = async (value: string) => {  
-//   if (value) {  
-//     await fetchOptionsa(value);  
-//   } else {  
-//     options.value = []; // 娓呯┖閫夐」鍒楄〃  
-//   }  
-// };  
 onMounted(() => {  
-  // 鍦ㄧ粍浠舵寕杞藉悗璋冪敤 fetchOptions('') 鏉ュ姞杞藉垵濮嬫暟鎹紙濡傛灉闇�瑕侊級  
   fetchOptionsa('');  
 }); 
   // 瑙掕壊涓嬫媺閫�  
   const fetchOptionsa = async () => {  
   try {  
-    // 鍙戦�佽姹傚埌鍚庣鎺ュ彛  
     const response = await request.post('/loadGlass/sys/role/queryRole',{
   key: ''
 });  
     if (response.code == 200) {  
      tableData.value = response.data
     // titleSelectJsona.value.processTypea = response.data.menuList;
+    // options.value = response.data.menuList
     console.log(response.data);
  
     } else {  
@@ -54,47 +55,94 @@
 }; 
 // 娣诲姞 
 const getTableRow = async () => {
-  try {
-    const response = await request.post('/loadGlass/sys/role/saveRole', {
+  try {  
+    let menuList = [];
+    selectedOptions.value.forEach(array => {
+      if (array.length >= 2) {
+        let id = array[0];
+        let parentId = array[1];
+        menuList.push({  
+          id: id,  
+          parentId: 0,  
+          children: [
+        {
+          id: parentId,
+          parentId: id,
+        }
+      ],
+        });  
+      }  
+    });
+    const dataToSend = {  
       name: name.value,
-    }); 
- 
+      menuList: menuList
+    };  
+    const response = await request.post('/loadGlass/sys/role/saveRole', dataToSend);
     if (response.code == 200) {
-      // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
       ElMessage.success(response.message);
       add.value = false;
-    //  tableData.value = response.data;
+      name.value = '';
+      selectedOptions.value = '';
+      fetchOptionsa();
     } else {
-      // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
-      ElMessage.error(response.msg);
+      ElMessage.error(response.message);
     }
   } catch (error) {
-    // 澶勭悊閿欒
     console.error(error);
   }
 };
 // 澶勭悊缂栬緫鎸夐挳鐐瑰嚮  
 function handleEdit(row) {  
-  editingUser.value = { ...row }; // 浣跨敤灞曞紑杩愮畻绗﹀鍒跺綋鍓嶈鏁版嵁  
-  adda.value = true; // 鏄剧ず瀵硅瘽妗�  
+  name.value = row.name; 
+  selectedOptions.value = row.selectedOptions
+//  options.value = res.data.tree
+ adda.value = true; // 鏄剧ず瀵硅瘽妗�  
+  window.localStorage.setItem('id', row.id)
 }
 // 缂栬緫
 const getTableRowa = async () => {
-  try {
-    const response = await request.post('/loadGlass/sys/role/updateRole', {
+  let id = window.localStorage.getItem('id')
+  try {  
+    let menuList = [];
+    selectedOptions.value.forEach(array => {
+      if (array.length >= 2) {
+        let id = array[0];
+        let parentId = array[1];
+        menuList.push({  
+          id: id,  
+          parentId: 0,  
+          children: [
+        {
+          id: parentId,
+          parentId: id,
+        }
+      ],
+        });  
+      }  
+    });
+    const dataToSend = {  
+      id:id,
       name: name.value,
-
-    }); 
+      menuList: menuList
+    };  
+    const response = await request.post('/loadGlass/sys/role/updateRole', dataToSend);
+  // try {
+  //   const response = await request.post('/loadGlass/sys/role/updateRole', {
+  //     id: id,
+  //     name: name.value,
+  //   }); 
  
     if (response.code == 200) {
       // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
       ElMessage.success(response.message);
-      editingUser.value = {};  
       adda.value = false;
-     tableData.value = response.data;
+      name.value = '';
+       selectedOptions.value = '';
+      fetchOptionsa()
+      tableData.value = response.data;
     } else {
       // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
-      ElMessage.error(response.msg);
+      ElMessage.error(response.message);
     }
   } catch (error) {
     // 澶勭悊閿欒
@@ -103,26 +151,25 @@
 };
 // 鍒犻櫎 
  const opena = async(row) => {  
-  try {  
+  try {
     const confirmResult = await ElMessageBox.confirm(  
-      '鏄惁鍒犻櫎璇ョ敤鎴�?',  
-      '鎻愮ず',  
+      t('delivery.derole'), 
+      t('delivery.prompt'),  
       {  
-        confirmButtonText: '鏄�',  
-        cancelButtonText: '鍙栨秷',  
+        confirmButtonText: t('delivery.yes'), 
+        cancelButtonText: t('delivery.cancel'),
         type: 'warning',  
-      }  
-    );  
+      } 
+    ); 
     if (confirmResult === 'confirm') {  
       // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛  
-      const response = await request.post("/loadGlass/sys/role/delete", {
-        ids: row.id,
-    })
+      const response = await request.post("/loadGlass/sys/role/delete",[row.id])
     if (response.code === 200) {
       ElMessage.success(response.message);
+      fetchOptionsa()
       } else {  
         // 鍒犻櫎澶辫触锛屾偍鍙互澶勭悊閿欒鎴栨樉绀洪敊璇俊鎭粰鐢ㄦ埛  
-      ElMessage.error(response.msg);
+      ElMessage.error(response.message);
         // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); 
       }  
     }  
@@ -130,77 +177,62 @@
     // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑  
     console.error('鍙戠敓閿欒:', error);  
   }  
-};   
-
-const gridOptions = reactive({
-  border:  "full",//琛ㄦ牸鍔犺竟妗�
-  keepSource: true,//淇濇寔婧愭暟鎹�
-  align: 'center',//鏂囧瓧灞呬腑
-  stripe:true,//鏂戦┈绾�
-  rowConfig: {isCurrent: true, isHover: true,height: 50},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
-  id: 'OrderList',
-  showFooter: true,//鏄剧ず鑴�
-  printConfig: {},
-  importConfig: {},
-  exportConfig: {},
-  scrollY:{ enabled: true },//寮�鍚櫄鎷熸粴鍔�
-  showOverflow:true,
-  columnConfig: {
-    resizable: true,
-    useKey: true
-  },
-  filterConfig: {   //绛涢�夐厤缃」
-    remote: true
-  },
-  customConfig: {
-    storage: true
-  },
-  editConfig: {
-    trigger: 'click',
-    mode: 'row',
-    showStatus: true
-  },
-  data:  [
-    {
-      'id': '1',
-      'long': '5',
-      'wide': '1005',
-      'thick': '183.6',
-    }
-  ]
- 
-})
+};
+request.get("/loadGlass/sys/menu/nav").then((res) => {
+ if (res.code == 200) {
+ console.log(res.data);
+ options.value = res.data.tree
+ console.log( options.value);
+ } else {
+ ElMessage.warning(res.msg)
+ }
+ });
 </script>
 
 <template>
   <div>
-     <el-button type="primary" style="margin-top: 10px;margin-left: 10px;"  size="mini" id="searchButton" @click="add = true">娣诲姞瑙掕壊</el-button>
+     <el-button type="primary" style="margin-top: 10px;margin-left: 10px;"  size="mini" id="searchButton" @click="add = true">{{ $t('delivery.addrole') }}</el-button>
     <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
       <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
         <el-table height="240" ref="table" 
         @selection-change="handleSelectionChange"
         :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="name" align="center" label="瑙掕壊" min-width="180" />
-          <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200">
+          <el-table-column prop="name" align="center" :label="$t('delivery.role')" min-width="180" />
+          <el-table-column fixed="right" :label="$t('delivery.operate')" align="center" width="200">
             <template #default="scope">
-              <el-button size="mini" type="text" plain  @click="handleEdit(scope.row)">缂栬緫</el-button>
-              <el-button size="mini" type="text" plain @click="opena(scope.row)">鍒犻櫎</el-button>
+              <el-button size="mini" type="text" plain  @click="handleEdit(scope.row)">{{ $t('delivery.edit') }}</el-button>
+              <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('delivery.delete') }}</el-button>
             </template>
         </el-table-column>
         </el-table>
       </div>
     </el-card>
   </div>
-  <el-dialog v-model="add" top="23vh" width="37%" title="娣诲姞瑙掕壊" >
+  <el-dialog v-model="add" top="23vh" width="37%" :title="$t('productStock.addusername')" >
     <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
-            <el-form  size="mini" label-width="150px">
+            <el-form ref="formRef" size="mini" label-width="150px">
       <el-form label-width="100px" label-position="right">
         <el-row style="margin-top: -15px;margin-bottom: -2px;">
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
-          <el-form-item label="瑙掕壊锛�" :required="true" style="width: 25vw">
-                <el-input v-model="name" autocomplete="off" />
+          <el-form-item :label="$t('delivery.rolea')" :required="true" style="width: 25vw">
+                <el-input :placeholder="$t('delivery.inrole')" v-model="name" autocomplete="off" />
+              </el-form-item></div></div>
+          </el-col>
+        </el-row>
+        <el-row style="margin-top: 10px;">
+          <el-col :span="6">
+              <div id="dt" style="font-size: 15px;">
+        <div>
+              <el-form-item :label="$t('delivery.choice')" :required="true" style="width: 25vw;">
+        <el-cascader 
+         v-model="selectedOptions" 
+         :placeholder="$t('delivery.inchoice')"
+         :props="cascaderProps"  
+         :options="options" 
+               style="width: 330px"
+               clearable />
               </el-form-item></div></div>
           </el-col>
         </el-row>
@@ -210,22 +242,37 @@
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="getTableRow">
-          纭
+          {{ $t('delivery.sure') }}
         </el-button>
-        <el-button @click="add = false">鍙栨秷</el-button>
+        <el-button @click="add = false"> {{ $t('delivery.cancel') }}</el-button>
       </div>
     </template>
   </el-dialog> 
-  <el-dialog v-model="adda" top="23vh" width="37%" title="淇敼瑙掕壊" >
+  <el-dialog v-model="adda" top="23vh" width="37%" :title="$t('delivery.editrole')">
     <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
-            <el-form :model="editingUser" ref="formRef" size="mini" label-width="150px">
+            <el-form ref="formRef" size="mini" label-width="150px">
               <el-form label-width="100px" label-position="right">
         <el-row style="margin-top: -15px;margin-bottom: -2px;">
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
-          <el-form-item label="瑙掕壊锛�" :required="true" style="width: 25vw">
-                <el-input v-model="editingUser.name" autocomplete="off" />
+          <el-form-item :label="$t('delivery.rolea')" :required="true" style="width: 25vw">
+                <el-input :placeholder="$t('delivery.inrole')" v-model="name" autocomplete="off" />
+              </el-form-item></div></div>
+          </el-col>
+        </el-row>
+        <el-row style="margin-top: 10px;">
+          <el-col :span="6">
+              <div id="dt" style="font-size: 15px;">
+        <div>
+       <el-form-item :label="$t('delivery.choice')" :required="true" style="width: 25vw;">
+        <el-cascader 
+         v-model="selectedOptions"  
+         :placeholder="$t('delivery.inchoice')"
+         :props="cascaderProps"  
+         :options="options" 
+               style="width: 330px"
+               clearable />
               </el-form-item></div></div>
           </el-col>
         </el-row>
@@ -235,9 +282,9 @@
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="getTableRowa">
-          纭
+          {{ $t('delivery.sure') }}
         </el-button>
-        <el-button @click="adda = false">鍙栨秷</el-button>
+        <el-button @click="adda = false">{{ $t('delivery.cancel') }}</el-button>
       </div>
     </template>
   </el-dialog> 
diff --git a/UI-Project/src/views/User/userlist.vue b/UI-Project/src/views/User/userlist.vue
index ecd91ed..8e97491 100644
--- a/UI-Project/src/views/User/userlist.vue
+++ b/UI-Project/src/views/User/userlist.vue
@@ -5,11 +5,13 @@
 const router = useRouter()
 const add = ref(false)
 const adda = ref(false)
-const editingUser = ref({}); // 鐢ㄤ簬瀛樺偍褰撳墠缂栬緫鐨勭敤鎴锋暟鎹� 
 import request from "@/utils/request"
 import { ref, onMounted } from "vue";
 // import { ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
+  import { useI18n } from 'vue-i18n'
+  const { t } = useI18n()
+  let language = ref(localStorage.getItem('lang') || 'zh')
 //  import LanguageMixin from './lang/LanguageMixin'
 const selectedProjectNoa = ref(''); // 褰撳墠閫変腑鐨勮鑹� 
 // const options = ref<any[]>([]); // 涓嬫媺閫夐」鍒楄〃  
@@ -31,16 +33,16 @@
           });
 // 閲嶇疆瀵嗙爜
  const open = async(row) => {  
-  try {  
+  try {
     const confirmResult = await ElMessageBox.confirm(  
-      '鏄惁閲嶇疆鐢ㄦ埛瀵嗙爜?',  
-      '鎻愮ず',  
+      t('productStock.repassword'), 
+      t('productStock.prompt'),  
       {  
-        confirmButtonText: '鏄�',  
-        cancelButtonText: '鍙栨秷',  
+        confirmButtonText: t('productStock.yes'), 
+        cancelButtonText: t('productStock.cancel'),
         type: 'warning',  
-      }  
-    );  
+      } 
+    );
     if (confirmResult === 'confirm') {  
       // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛  
       var url="/loadGlass/sys/user/resetPassword?userId="+row.id;
@@ -83,7 +85,7 @@
     const response = await request.post('/loadGlass/sys/role/queryRole',{
   key: ''
 });  
-    if (response.code == 200) {  
+    if (response.code === 200) {  
     titleSelectJsona.value.processTypea = response.data;
     console.log(response.data);
  
@@ -96,23 +98,33 @@
 }; 
 // 澶勭悊缂栬緫鎸夐挳鐐瑰嚮  
 function handleEdit(row) {  
-  editingUser.value = { ...row }; // 浣跨敤灞曞紑杩愮畻绗﹀鍒跺綋鍓嶈鏁版嵁  
+  userName.value = row.userName; 
   adda.value = true; // 鏄剧ず瀵硅瘽妗�  
+  window.localStorage.setItem('id', row.id)
+
 } 
 // 娣诲姞 
 const getTableRow = async () => {
   try {
     const response = await request.post('/loadGlass/sys/user/saveUser', {
       userName: userName.value,
+      nickName: userName.value,
       password: password.value,
-      name: selectedProjectNoa.value,
+      roleList: [
+    {
+      id: selectedProjectNoa.value,
+      // name: selectedProjectNoa.value.name,
+    }]
+      // roleList: selectedProjectNoa.value.map(item => ({  
+      //   id: item.id,  
+      //   name: item.name  
+      // }))  
     }); 
- 
-    if (response.code == 200) {
+    if (response.code === 200) {
       // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
       ElMessage.success(response.message);
       add.value = false;
-    //  tableData.value = response.data;
+     tableData.value = response.data;
     } else {
       // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
       ElMessage.error(response.msg);
@@ -124,22 +136,26 @@
 };
 // 缂栬緫
 const getTableRowa = async () => {
+  let id = window.localStorage.getItem('id')
   try {
     const response = await request.post('/loadGlass/sys/user/updateUser', {
+      id: id,
       userName: userName.value,
-      password: password.value,
-      name: selectedProjectNoa.value,
-    }); 
- 
-    if (response.code == 200) {
+      roleList: [
+    {
+      id: selectedProjectNoa.value,
+      // roleKey: selectedProjectNoa.value.id,
+    }]
+  }
+  ); 
+    if (response.code === 200) {
       // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
       ElMessage.success(response.message);
-      editingUser.value = {};  
       adda.value = false;
      tableData.value = response.data;
     } else {
       // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
-      ElMessage.error(response.msg);
+      ElMessage.error(response.message);
     }
   } catch (error) {
     // 澶勭悊閿欒
@@ -148,21 +164,19 @@
 };
 // 鍒犻櫎 
  const opena = async(row) => {  
-  try {  
+  try {
     const confirmResult = await ElMessageBox.confirm(  
-      '鏄惁鍒犻櫎璇ョ敤鎴�?',  
-      '鎻愮ず',  
+      t('productStock.deusername'), 
+      t('productStock.prompt'),  
       {  
-        confirmButtonText: '鏄�',  
-        cancelButtonText: '鍙栨秷',  
+        confirmButtonText: t('productStock.yes'), 
+        cancelButtonText: t('productStock.cancel'),
         type: 'warning',  
-      }  
-    );  
+      } 
+    );
     if (confirmResult === 'confirm') {  
       // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛  
-      const response = await request.post("/loadGlass/sys/user/deleteUser", {
-        ids: [row.id],
-    })
+      const response = await request.post("/loadGlass/sys/user/deleteUser",  [row.id])
     if (response.code === 200) {
       ElMessage.success(response.message);
       } else {  
@@ -177,74 +191,36 @@
   }  
 };   
 
-const gridOptions = reactive({
-  border:  "full",//琛ㄦ牸鍔犺竟妗�
-  keepSource: true,//淇濇寔婧愭暟鎹�
-  align: 'center',//鏂囧瓧灞呬腑
-  stripe:true,//鏂戦┈绾�
-  rowConfig: {isCurrent: true, isHover: true,height: 50},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
-  id: 'OrderList',
-  showFooter: true,//鏄剧ず鑴�
-  printConfig: {},
-  importConfig: {},
-  exportConfig: {},
-  scrollY:{ enabled: true },//寮�鍚櫄鎷熸粴鍔�
-  showOverflow:true,
-  columnConfig: {
-    resizable: true,
-    useKey: true
-  },
-  filterConfig: {   //绛涢�夐厤缃」
-    remote: true
-  },
-  customConfig: {
-    storage: true
-  },
-  editConfig: {
-    trigger: 'click',
-    mode: 'row',
-    showStatus: true
-  },
-  data:  [
-    {
-      'id': '1',
-      'long': '5',
-      'wide': '1005',
-      'thick': '183.6',
-    }
-  ]
- 
-})
 </script>
 
 <template>
   <div>
-     <el-button type="primary" style="margin-top: 10px;margin-left: 10px;"  size="mini" id="searchButton" @click="add = true">娣诲姞鐢ㄦ埛</el-button>
+     <el-button type="primary" style="margin-top: 10px;margin-left: 10px;"  size="mini" id="searchButton" @click="add = true">{{ $t('productStock.addusers') }}</el-button>
     <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
       <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
         <el-table height="240" ref="table" 
         @selection-change="handleSelectionChange"
         :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="userName" align="center" label="鐢ㄦ埛鍚�" min-width="180" />
-          <el-table-column align="center" label="瑙掕壊" min-width="80">
+          <el-table-column prop="userName" align="center" :label="$t('productStock.username')" min-width="180" />
+          <el-table-column align="center" :label="$t('productStock.role')" min-width="80">
             <template #default="scope">  
              <el-tag v-for="role in scope.row.roleList">  
             {{role.name}}  
            </el-tag>   
          </template> 
             </el-table-column>
-          <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200">
+          <el-table-column fixed="right" :label="$t('productStock.operate')" align="center" width="270">
             <template #default="scope">
-              <el-button size="mini" type="text" plain @click="open(scope.row)">閲嶇疆瀵嗙爜</el-button>
-              <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">缂栬緫</el-button>
-              <el-button size="mini" type="text" plain @click="opena(scope.row)">鍒犻櫎</el-button>
+              <el-button size="mini" type="text" plain @click="open(scope.row)">{{ $t('productStock.resetpassword') }}</el-button>
+              <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">{{ $t('productStock.exit') }}</el-button>
+              <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('productStock.delete') }}</el-button>
             </template>
         </el-table-column>
         </el-table>
       </div>
     </el-card>
   </div>
-  <el-dialog v-model="add" top="23vh" width="37%" title="娣诲姞鐢ㄦ埛" >
+  <el-dialog v-model="add" top="23vh" width="37%" :title="$t('productStock.addusers')">
     <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
             <el-form  size="mini" label-width="150px">
       <el-form label-width="100px" label-position="right">
@@ -252,8 +228,8 @@
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
-          <el-form-item label="鐢ㄦ埛鍚嶏細" :required="true" style="width: 25vw">
-                <el-input v-model="userName" autocomplete="off" />
+          <el-form-item :label="$t('productStock.usernamea')" :required="true" style="width: 25vw">
+                <el-input v-model="userName" autocomplete="off" :placeholder="$t('productStock.inusername')" />
               </el-form-item></div></div>
           </el-col>
         </el-row>
@@ -261,19 +237,19 @@
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
-              <el-form-item label="瑙掕壊锛�" :required="true" style="width: 25vw;">
+              <el-form-item :label="$t('productStock.rolea')" :required="true" style="width: 25vw;">
                 <el-select
                v-model="selectedProjectNoa"
                filterable
                clearable
-               placeholder="璇烽�夋嫨瑙掕壊"
+               :placeholder="$t('productStock.inrole')"
                style="width: 330px"
              >
                <el-option
          v-for="item in titleSelectJsona['processTypea']"  
             :key="item.id"
             :label="item.name"
-            :value="item.name"
+            :value="item.id"
           />
         </el-select>
               </el-form-item></div></div>
@@ -283,9 +259,10 @@
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
-              <el-form-item label="瀵嗙爜锛�" :required="true" style="width: 25vw;">
+              <el-form-item :label="$t('productStock.password')" :required="true" style="width: 25vw;">
                 <el-input style="width: 340px;"
                         v-model="password"
+                        :placeholder="$t('productStock.inpassword')"
                         autocomplete="off"
                         :prefix-icon="Lock"
                         show-password/>
@@ -298,22 +275,22 @@
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="getTableRow">
-          纭
+          {{ $t('productStock.sure') }}
         </el-button>
-        <el-button @click="add = false">鍙栨秷</el-button>
+        <el-button @click="add = false">{{ $t('productStock.cancel') }}</el-button>
       </div>
     </template>
   </el-dialog> 
-  <el-dialog v-model="adda" top="23vh" width="37%" title="淇敼鐢ㄦ埛" >
+  <el-dialog v-model="adda" top="23vh" width="37%" :title="$t('productStock.reusername')" >
     <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
-            <el-form :model="editingUser" ref="formRef" size="mini" label-width="150px">
+            <el-form ref="formRef" size="mini" label-width="150px">
       <el-form label-width="100px" label-position="right">
         <el-row style="margin-top: -15px;margin-bottom: -2px;">
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
-          <el-form-item label="鐢ㄦ埛鍚嶏細" :required="true" style="width: 25vw">
-                <el-input v-model="editingUser.userName" autocomplete="off" />
+          <el-form-item :label="$t('productStock.usernamea')" :required="true" style="width: 25vw">
+                <el-input :placeholder="$t('productStock.inusername')" v-model="userName" autocomplete="off" />
               </el-form-item></div></div>
           </el-col>
         </el-row>
@@ -321,41 +298,21 @@
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
-          <!-- <el-table-column align="center" label="瑙掕壊" min-width="80">
-            <template #default="scope">  
-             <el-tag v-for="role in scope.row.roleList">  
-            {{role.name}}  
-           </el-tag>   
-         </template> 
-            </el-table-column> -->
-              <el-form-item label="瑙掕壊锛�" :required="true" style="width: 25vw;">
+              <el-form-item :label="$t('productStock.rolea')" :required="true" style="width: 25vw;">
                 <el-select
                v-model="selectedProjectNoa"
                filterable
                clearable
-               placeholder="璇烽�夋嫨瑙掕壊"
+               :placeholder="$t('productStock.inrole')"
                style="width: 330px"
              >
                <el-option
-         v-for="item in titleSelectJsona['processTypea']"  
+         v-for="item in titleSelectJsona['processTypea']"
             :key="item.id"
             :label="item.name"
-            :value="item.name"
+            :value="item.id"
           />
         </el-select>
-              </el-form-item></div></div>
-          </el-col>
-        </el-row>
-        <el-row style="margin-top: 10px;">
-          <el-col :span="6">
-              <div id="dt" style="font-size: 15px;">
-        <div>
-              <el-form-item label="瀵嗙爜锛�" :required="true" style="width: 25vw;">
-                <el-input style="width: 340px;"
-                        v-model="editingUser.password"
-                        autocomplete="off"
-                        :prefix-icon="Lock"
-                        show-password/>
               </el-form-item></div></div>
           </el-col>
         </el-row>
@@ -365,9 +322,9 @@
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="getTableRowa">
-          纭
+          {{ $t('productStock.sure') }}
         </el-button>
-        <el-button @click="adda = false">鍙栨秷</el-button>
+        <el-button @click="adda = false">{{ $t('productStock.cancel') }}</el-button>
       </div>
     </template>
   </el-dialog> 
diff --git a/UI-Project/vite.config.js b/UI-Project/vite.config.js
index b93f5ee..8fdf859 100644
--- a/UI-Project/vite.config.js
+++ b/UI-Project/vite.config.js
@@ -1,17 +1,27 @@
 import {fileURLToPath, URL} from 'node:url'
-
 import {defineConfig} from 'vite'
 import vue from '@vitejs/plugin-vue'
 import ReactivityTransform from '@vue-macros/reactivity-transform/vite'
+import AutoImport from 'unplugin-auto-import/vite'
 
 // https://vitejs.dev/config/
 export default defineConfig({
   plugins: [
     vue(),
-    ReactivityTransform()
+    ReactivityTransform(),
+    AutoImport({
+      imports: [
+        'vue-i18n',
+      ],
+      dts: './auto-imports.d.ts',
+      eslintrc: {
+        enabled: false, // 閰嶇疆鏇存柊鏃朵复鏃惰涓簍rue,
+      },
+    }),
   ],
   resolve: {
     alias: {
+      'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js',
       '@': fileURLToPath(new URL('./src', import.meta.url))
     }
   }, 
@@ -48,4 +58,4 @@
       })
     );
   },
-});
\ No newline at end of file
+});
diff --git a/hangzhoumesParent/JsonFile/PlcCacheVerticalGlass.json b/hangzhoumesParent/JsonFile/PlcCacheVerticalGlass.json
index 5838dac..10e8e33 100644
--- a/hangzhoumesParent/JsonFile/PlcCacheVerticalGlass.json
+++ b/hangzhoumesParent/JsonFile/PlcCacheVerticalGlass.json
@@ -1,57 +1,377 @@
 {
-  "plcAddressBegin":"DB.0",
-  "plcAddressLenght":"72",
-  "dataType":"word",
-  "parameteInfor":[
-    {
-      "codeId": "D01Request",
-      "addressIndex":"0",
-      "addressLenght":"2",
-      "ratio":"1",
-      "unit":"m/min"
-    },
-    {
-      "codeId": "D01ID1",
-      "addressIndex":"2",
-      "addressLenght":"6",
-      "ratio":"1",
-      "unit":""
-    },
-    {
-      "codeId": "D04Request",
-      "addressIndex":"8",
-      "addressLenght":"2",
-      "ratio":"1",
-      "unit":""
-    },
-    {
-      "codeId": "D04ID1",
-      "addressIndex":"10",
-      "addressLenght":"6",
-      "ratio":"1",
-      "unit":""
-    },
-    {
-      "codeId": "D02Go",
-      "addressIndex":"20",
-      "addressLenght":"2",
-      "ratio":"1",
-      "unit":""
-    },
-    {
-      "codeId": "D05Go",
-      "addressIndex":"22",
-      "addressLenght":"2",
-      "ratio":"1",
-      "unit":""
-    }
-  ,
-    {
-      "codeId": "DeviceStatus",
-      "addressIndex":"70",
-      "addressLenght":"2",
-      "ratio":"1",
-      "unit":""
-    }
-  ]
+	"plcAddressBegin": "DB14.0",
+	"plcAddressLenght": "938",
+	"dataType": "word",
+	"parameteInfor": [{
+			"codeId": "D01ID",
+			"addressIndex": "0",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D02ID",
+			"addressIndex": "32",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ID1",
+			"addressIndex": "64",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ID2",
+			"addressIndex": "96",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ID3",
+			"addressIndex": "128",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ID4",
+			"addressIndex": "160",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ID5",
+			"addressIndex": "192",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ID6",
+			"addressIndex": "224",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D04ID",
+			"addressIndex": "256",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ID1",
+			"addressIndex": "288",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ID2",
+			"addressIndex": "328",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ID3",
+			"addressIndex": "352",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ID4",
+			"addressIndex": "384",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ID5",
+			"addressIndex": "416",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ID6",
+			"addressIndex": "448",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01ID1",
+			"addressIndex": "480",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01ID2",
+			"addressIndex": "512",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01ID3",
+			"addressIndex": "544",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01ID4",
+			"addressIndex": "576",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01ID5",
+			"addressIndex": "608",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01ID6",
+			"addressIndex": "640",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02ID1",
+			"addressIndex": "672",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02ID2",
+			"addressIndex": "704",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02ID3",
+			"addressIndex": "736",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02ID4",
+			"addressIndex": "768",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02ID5",
+			"addressIndex": "800",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02ID6",
+			"addressIndex": "832",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ToMES",
+			"addressIndex": "874",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ToMES",
+			"addressIndex": "876",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D01ToMES",
+			"addressIndex": "878",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D04ToMES",
+			"addressIndex": "880",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "MESToD03",
+			"addressIndex": "888",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "MESToD05",
+			"addressIndex": "890",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "MESToPLC",
+			"addressIndex": "892",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "StartAddToImport1",
+			"addressIndex": "914",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "StartAddToImport2",
+			"addressIndex": "916",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "StartAddToImport3",
+			"addressIndex": "918",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "StartAddToImport4",
+			"addressIndex": "920",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "StartAddToImport5",
+			"addressIndex": "922",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "StartAddToImport6",
+			"addressIndex": "924",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "TargetAddToImport1",
+			"addressIndex": "926",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "TargetAddToImport2",
+			"addressIndex": "928",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "TargetAddToImport3",
+			"addressIndex": "930",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "TargetAddToImport4",
+			"addressIndex": "932",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "TargetAddToImport5",
+			"addressIndex": "934",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "TargetAddToImport6",
+			"addressIndex": "936",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "deviceState",
+			"addressIndex": "864",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01State",
+			"addressIndex": "866",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02State",
+			"addressIndex": "868",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03State",
+			"addressIndex": "870",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05State",
+			"addressIndex": "872",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "MESToD01",
+			"addressIndex": "894",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "MESToD04",
+			"addressIndex": "896",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		}
+	]
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/JsonFile/PlcdownGlass.json b/hangzhoumesParent/JsonFile/PlcdownGlass.json
index c813b1d..979dc66 100644
--- a/hangzhoumesParent/JsonFile/PlcdownGlass.json
+++ b/hangzhoumesParent/JsonFile/PlcdownGlass.json
@@ -1,362 +1,144 @@
 {
-  "plcAddressBegin": "DB100.0",
-  "plcAddressLenght": "142",
-  "dataType": "word",
-  "parameteInfor": [
-    {
-      "codeId": "RequestWord",
-      "addressIndex": "0",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G04ID",
-      "addressIndex": "2",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G06RobotTaskRequestWord",
-      "addressIndex": "4",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G06ID",
-      "addressIndex": "6",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G11RobotTaskRequestWord",
-      "addressIndex": "8",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G011ID",
-      "addressIndex": "10",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "12",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "14",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "16",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "18",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "MESSendingWord",
-      "addressIndex": "20",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InputGrid",
-      "addressIndex": "22",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "OutputGrid",
-      "addressIndex": "24",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "OutputID",
-      "addressIndex": "26",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "FrontOrRearLowerSlice",
-      "addressIndex": "28",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "30",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G06RobotTaskReply",
-      "addressIndex": "32",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G06Rack",
-      "addressIndex": "34",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G11RobotTaskReply",
-      "addressIndex": "36",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G11Rack",
-      "addressIndex": "38",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "40",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "42",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "44",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "46",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "48",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "50",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "52",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "54",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "MESTaskState",
-      "addressIndex": "56",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "58",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "AlarmState",
-      "addressIndex": "60",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "Alarm1",
-      "addressIndex": "62",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "Alarm2",
-      "addressIndex": "64",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "Alarm3",
-      "addressIndex": "66",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "Alarm4",
-      "addressIndex": "68",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "neirong",
-      "addressIndex": "70",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "device",
-      "addressIndex": "72",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "74",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "76",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut1",
-      "addressIndex": "78",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut2",
-      "addressIndex": "80",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut3",
-      "addressIndex": "82",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut4",
-      "addressIndex": "84",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut5",
-      "addressIndex": "86",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut6",
-      "addressIndex": "88",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut7",
-      "addressIndex": "90",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "92",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "94",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "96",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "98",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "100",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G04ActionState",
-      "addressIndex": "102",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G05ActionState",
-      "addressIndex": "104",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G06ActionState",
-      "addressIndex": "106",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G07ActionState",
-      "addressIndex": "108",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G08ActionState",
-      "addressIndex": "110",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G09ActionState",
-      "addressIndex": "112",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G10ActionState",
-      "addressIndex": "114",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G11ActionState",
-      "addressIndex": "116",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G12ActionState",
-      "addressIndex": "118",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G13ActionState",
-      "addressIndex": "120",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G04IDS",
-      "addressIndex": "122",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G05IDS",
-      "addressIndex": "124",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G06IDS",
-      "addressIndex": "126",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G07IDS",
-      "addressIndex": "128",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G08IDS",
-      "addressIndex": "130",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G09IDS",
-      "addressIndex": "132",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G10IDS",
-      "addressIndex": "134",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G11IDS",
-      "addressIndex": "136",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G12IDS",
-      "addressIndex": "138",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G13ID",
-      "addressIndex": "140",
-      "addressLenght": "2"
-    }
-  ]
+	"plcAddressBegin": "DB11.0",
+	"plcAddressLenght": "100",
+	"dataType": "word",
+	"parameteInfor": [
+
+		{
+			"codeId": "requestWord",
+			"addressIndex": "0",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "requestID",
+			"addressIndex": "2",
+			"addressLenght": "30"
+		},
+		{
+			"codeId": "currentCell",
+			"addressIndex": "32",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "glassStatus08",
+			"addressIndex": "36",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G06_glass_status",
+			"addressIndex": "40",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G11_glass_status",
+			"addressIndex": "42",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G13_glass_status",
+			"addressIndex": "44",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G04_error_status",
+			"addressIndex": "48",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G05_error_status",
+			"addressIndex": "50",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G06_error_status",
+			"addressIndex": "52",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "robot_error_status",
+			"addressIndex": "54",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G08_error_status",
+			"addressIndex": "56",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G09_error_status",
+			"addressIndex": "58",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G10_error_status",
+			"addressIndex": "60",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G11_error_status",
+			"addressIndex": "62",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "robot_error_status",
+			"addressIndex": "64",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G13_error_status",
+			"addressIndex": "66",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "confirmationWord",
+			"addressIndex": "72",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G06_prohibit_film_production",
+			"addressIndex": "74",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G11_prohibit_film_production",
+			"addressIndex": "76",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G13_prohibit_film_production",
+			"addressIndex": "78",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "Glass_width",
+			"addressIndex": "82",
+			"addressLenght": "4"
+		},
+		{
+			"codeId": "Glass_height",
+			"addressIndex": "86",
+			"addressLenght": "4"
+		},
+		{
+			"codeId": "Glass_thickness",
+			"addressIndex": "90",
+			"addressLenght": "4"
+		},
+		{
+			"codeId": "Start_cell",
+			"addressIndex": "94",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "End_cell",
+			"addressIndex": "96",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "task_type",
+			"addressIndex": "98",
+			"addressLenght": "2"
+		}
+
+	]
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/common/servicebase/pom.xml b/hangzhoumesParent/common/servicebase/pom.xml
index 07e9a43..4f1f015 100644
--- a/hangzhoumesParent/common/servicebase/pom.xml
+++ b/hangzhoumesParent/common/servicebase/pom.xml
@@ -19,8 +19,8 @@
     <dependencies>
         <dependency>
             <groupId>com.microsoft.sqlserver</groupId>
-            <artifactId>sqljdbc4</artifactId>
-            <version>4.0</version>
+            <artifactId>mssql-jdbc</artifactId>
+            <version>6.4.0.jre8</version>
         </dependency>
     </dependencies>
 
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/BigStorageCageBaseInfo.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/BigStorageCageBaseInfo.java
new file mode 100644
index 0000000..97eba6b
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/BigStorageCageBaseInfo.java
@@ -0,0 +1,32 @@
+package com.mes.base.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/6/21 9:40
+ * @Description:
+ */
+@Data
+public class BigStorageCageBaseInfo {
+
+    /**
+     * 鐜荤拑id
+     */
+    @ApiModelProperty(value = "鐜荤拑id")
+    private String glassId;
+
+    /**
+     * 瀹�
+     */
+    @ApiModelProperty(value = "瀹�")
+    private double width;
+
+    /**
+     * 鏍煎瓙鍙�
+     */
+    @ApiModelProperty(value = "鐜荤拑id")
+    private Integer slot;
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
index 73763d9..252da8f 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
@@ -18,28 +18,38 @@
      * 纾ㄨ竟娓呮礂鍓�
      */
     /**
-     * A09鍑虹墖鐩爣浣嶇疆2001
-     * A10鍑虹墖鐩爣浣嶇疆2002
+     * A09鍑虹墖鐩爣浣嶇疆  d02鍗ц浆绔�    2001
+     * A10鍑虹墖鐩爣浣嶇疆  d05鍗ц浆绔�    2002
      */
     public static final Integer A09_OUT_TARGET_POSITION = 2001;
     public static final Integer A10_OUT_TARGET_POSITION = 2002;
+
+
+    /**
+     * A09鍑虹墖鐩爣浣嶇疆  d02鍗ц浆绔� 閽㈠寲鍑虹墖    3001
+     * A10鍑虹墖鐩爣浣嶇疆  d05鍗ц浆绔� 浜哄伐鍑虹墖    3002
+     */
+    //todo:涓存椂灏嗛挗鍖栧嚭鐗囩嚎璺敼涓轰汉宸ュ嚭鐗�
+    public static final Integer TEMPERING_OUT_TARGET_POSITION = 3002;
+    public static final Integer ARTIFICIAL_OUT_TARGET_POSITION = 3002;
 
     /**
      * 鍗у紡鐞嗙墖绗艰鎯呰〃鐜荤拑鐘舵��
      * 璇嗗埆鍚庢垚鍔熺姸鎬�100
      * 鍑虹墖浠诲姟101
+     * 浜哄伐涓嬬墖102
      * 鎷胯蛋200
      * 鐮存崯201
      */
     public static final Integer GLASS_STATE_IN = 100;
     public static final Integer GLASS_STATE_OUT = 101;
+    public static final Integer GLASS_STATE_ARTIFICIAL = 102;
     public static final Integer GLASS_STATE_TAKE = 200;
     public static final Integer GLASS_STATE_DAMAGE = 201;
 
     /**
      * 鍗у紡鐞嗙墖绗艰鎯呰〃鐜荤拑鐘舵��
      * 杩涚墖浠诲姟1
-     * 鍑虹墖浠诲姟2
      * 鍑虹墖浠诲姟2
      */
     public static final Integer GLASS_CACHE_TYPE_IN = 1;
@@ -71,8 +81,8 @@
      * 0 澶х悊鐗囩鏃犺姹�
      * 1 澶х悊鐗囩杩涚墖璇锋眰
      */
-    public static final Integer BIG_STORAGE_REQUEST = 0;
-    public static final Integer BIG_STORAGE_REQUEST_IN = 1;
+    public static final String BIG_STORAGE_REQUEST = "0";
+    public static final String BIG_STORAGE_REQUEST_IN = "1";
 
     /**
      * 鍗ц浆绔嬭繘鐗囪姹�
@@ -85,6 +95,7 @@
     public static final Integer BIG_STORAGE_IN_UP = 2;
     public static final Integer BIG_STORAGE_IN_CAR = 3;
     public static final Integer BIG_STORAGE_IN_SLOT = 4;
+    public static final List<Integer> BIG_STORAGE_IN_UP_ALL = Arrays.asList(1, 2);
     /**
      * 鍗ц浆绔嬪嚭鐗囪姹�
      * 1 浠诲姟鐢熸垚
@@ -104,12 +115,6 @@
     public static final Integer BIG_STORAGE_IN_RUN = 2;
 
     /**
-     * 澶х悊鐗囩瀹藉害 鍙� 鐜荤拑闂磋窛
-     */
-    public static final Integer BIG_STORAGE_WIDTH = 5000;
-    public static final Integer BIG_STORAGE_GAP = 20;
-
-    /**
      * 閽㈠寲灏忕墖琛�
      * -1 鐢熸垚浠诲姟
      * 0  鍑虹墖瀹屾垚
@@ -121,13 +126,30 @@
      * 6  鎷胯蛋
      */
 
-    public static final Integer TEMPERING_NEW =-1;
-    public static final Integer TEMPERING_OUT =0;
-    public static final Integer TEMPERING_DROP =1;
-    public static final Integer TEMPERING_START =2;
-    public static final Integer TEMPERING_SUCCESS =3;
-    public static final Integer TEMPERING_END =4;
-    public static final Integer TEMPERING_DAMAGE =5;
-    public static final Integer TEMPERING_TAKE =6;
+    public static final Integer TEMPERING_NEW = -1;
+    public static final Integer TEMPERING_OUT = 0;
+    public static final Integer TEMPERING_DROP = 1;
+    public static final Integer TEMPERING_START = 2;
+    public static final Integer TEMPERING_SUCCESS = 3;
+    public static final Integer TEMPERING_END = 4;
+    public static final Integer TEMPERING_DAMAGE = 5;
+    public static final Integer TEMPERING_TAKE = 6;
+
+    /**
+     * 涓嬬墖
+     */
+    /**
+     * 鎵ц绾胯矾鏍煎瓙淇℃伅
+     */
+    public static final List<Integer> G06_WORK_STATION = Arrays.asList(1, 2, 3);
+    public static final List<Integer> G11_WORK_STATION = Arrays.asList(4, 5, 6);
+    public static final List<Integer> G13_WORK_STATION = Arrays.asList(7);
+
+    /**
+     * 鍚敤 1
+     * 绂佺敤 0
+     */
+    public static final Integer SLOT_ON = 1;
+    public static final Integer SLOT_OFF = 0;
 
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java
new file mode 100644
index 0000000..b821404
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java
@@ -0,0 +1,51 @@
+package com.mes.damage.controller;
+
+
+import cn.hutool.core.date.DateTime;
+import com.mes.damage.entity.Damage;
+import com.mes.damage.service.DamageService;
+import com.mes.utils.Result;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-25
+ */
+@RestController
+@RequestMapping("/damage")
+public class DamageController {
+
+    @Autowired
+    private DamageService damageService;
+    @ApiOperation("鎶ュ伐鏁版嵁鏌ヨ")
+    @GetMapping("/selectDamage")
+    public Result selectDamage(DateTime startTime , DateTime endTime,int type,int status,int workingProcedureId) {
+        return Result.build(200,"鏌ヨ鎴愬姛",damageService.selectDamage(startTime,endTime,type,status,workingProcedureId));
+    }
+
+    @ApiOperation("鎶ュ伐")
+    @GetMapping("/submitDamage")
+    public Result submitDamage(DateTime startTime , DateTime endTime,int type,int status,int workingProcedureId) {
+        damageService.submitDamage(startTime,endTime,type,status,workingProcedureId);
+        return Result.build(200,"鎶ュ伐鎴愬姛",1);
+    }
+
+    @ApiOperation("鎶ュ伐鏁版嵁淇敼")
+    @GetMapping("/updateDamage")
+    public Result updateDamage(List<Damage> damageList) {
+        damageService.updateBatchById(damageList);
+        return Result.build(200,"淇敼鎴愬姛",1);
+    }
+}
+
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/entity/Damage.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/entity/Damage.java
new file mode 100644
index 0000000..8eb6426
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/entity/Damage.java
@@ -0,0 +1,128 @@
+package com.mes.damage.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class Damage implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 绾胯矾
+     */
+    private Integer line;
+
+    /**
+     * 宸ュ簭
+     */
+    private Integer workingProcedure;
+
+    /**
+     * 鐜荤拑id
+     */
+    private String glassId;
+
+    /**
+     * 宸ョ▼鍙�
+     */
+    private String engineerId;
+
+    /**
+     * 閽㈠寲鐗堝浘id
+     */
+    private Integer temperingLayoutId;
+
+    /**
+     * 鐢熶骇鏃堕棿
+     */
+    private LocalDateTime damageTime;
+
+    /**
+     * 澶囨敞
+     */
+    private String remark;
+
+    /**
+     * 绫诲瀷锛�0锛氭姤宸� 1锛氱牬鎹� 2锛氭嬁璧�
+     */
+    private Integer type;
+
+    /**
+     * 鐘舵�侊細0锛氭湭鎶ュ伐 1锛氬凡鎶ュ伐
+     */
+    private Integer status;
+
+    /**
+     * 娴佺▼鍗�
+     */
+    private String processId;
+
+    /**
+     * 搴忓彿
+     */
+    private Integer orderNumber;
+
+    /**
+     * 宸ヨ壓纭搴忓彿
+     */
+    private Integer technologyNumber;
+
+    /**
+     * 鐮存崯绫诲瀷
+     */
+    private String breakageType;
+
+    /**
+     * 鐮存崯鍘熷洜
+     */
+    private String breakageReason;
+
+    /**
+     * 璐d换宸ュ簭
+     */
+    private String responsibleProcess;
+
+    /**
+     * 璐d换浜哄憳
+     */
+    private String responsiblePersonnel;
+
+    /**
+     * 璐d换鐝粍
+     */
+    private String responsibleTeam;
+
+    /**
+     * 璐d换璁惧
+     */
+    private String responsibleEquipment;
+
+    /**
+     * 鎶ュ伐鐝粍鍚嶇О
+     */
+    private String teamsGroupsName;
+
+    /**
+     * 鎶ュ伐璁惧鍚嶇О
+     */
+    private String deviceName;
+
+
+}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/mapper/DamageMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/mapper/DamageMapper.java
similarity index 100%
rename from hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/mapper/DamageMapper.java
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/mapper/DamageMapper.java
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java
new file mode 100644
index 0000000..43d1142
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java
@@ -0,0 +1,24 @@
+package com.mes.damage.service;
+
+import cn.hutool.core.date.DateTime;
+import com.mes.damage.entity.Damage;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-13
+ */
+public interface DamageService extends IService<Damage> {
+
+    List<Damage> selectDamage(DateTime startTime, DateTime endTime, int type, int status, int workingProcedureId);
+
+    void submitDamage(DateTime startTime, DateTime endTime, int type, int status, int workingProcedureId);
+
+    void insertDamage(Damage damage);
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java
new file mode 100644
index 0000000..8d32fb0
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java
@@ -0,0 +1,102 @@
+package com.mes.damage.service.impl;
+
+import cn.hutool.core.date.DateTime;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.mes.damage.entity.Damage;
+import com.mes.damage.mapper.DamageMapper;
+import com.mes.damage.service.DamageService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.glassinfo.mapper.GlassInfoMapper;
+import com.mes.work_assignment.entity.WorkAssignment;
+import com.mes.work_assignment.mapper.WorkAssignmentMapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-13
+ */
+@Service
+public class DamageServiceImpl extends ServiceImpl<DamageMapper, Damage> implements DamageService {
+
+    @Resource
+    GlassInfoMapper glassInfoMapper;
+    @Resource
+    WorkAssignmentMapper workAssignmentMapper;
+
+    /**
+     * 鏌ヨ鎶ュ伐淇℃伅
+     */
+    @Override
+    public List<Damage> selectDamage(DateTime startTime, DateTime endTime, int type, int status, int workingProcedureId){
+        LambdaQueryWrapper<Damage> damageSelectWrapper =new LambdaQueryWrapper<>();
+        damageSelectWrapper.between(Damage::getDamageTime,startTime,endTime);
+        if (type!=0){
+            damageSelectWrapper.eq(Damage::getType,type);
+        }
+        if (status!=0){
+            damageSelectWrapper.eq(Damage::getStatus,status);
+        }
+        if(workingProcedureId!=0){
+            damageSelectWrapper.eq(Damage::getWorkingProcedure,workingProcedureId);
+        }
+        return baseMapper.selectList(damageSelectWrapper);
+    }
+
+    /**
+     * 鎻愪氦鎶ュ伐
+     */
+    @Override
+    public void submitDamage(DateTime startTime, DateTime endTime, int type, int status, int workingProcedureId){
+        LambdaUpdateWrapper<Damage> damageUpdateWrapper=new LambdaUpdateWrapper<>();
+        damageUpdateWrapper.between(Damage::getDamageTime,startTime,endTime);
+        if (type!=0){
+            damageUpdateWrapper.eq(Damage::getType,type);
+        }
+        if (status!=0){
+            damageUpdateWrapper.eq(Damage::getStatus,status);
+        }
+        if(workingProcedureId!=0){
+            damageUpdateWrapper.eq(Damage::getWorkingProcedure,workingProcedureId);
+        }
+        Damage damage=new Damage();
+        damage.setStatus(2);
+        baseMapper.update(damage,damageUpdateWrapper);
+    }
+
+    /**
+     * 娣诲姞鎶ュ伐淇℃伅
+     */
+    @Override
+    public void insertDamage(Damage damage){
+        LambdaQueryWrapper<GlassInfo> glassInfoSelectWrapper=new LambdaQueryWrapper<>();
+        glassInfoSelectWrapper.eq(GlassInfo::getGlassId,damage.getGlassId());
+        GlassInfo glassInfo=glassInfoMapper.selectOne(glassInfoSelectWrapper);
+
+        LambdaQueryWrapper<WorkAssignment> workAssignmentSelectWrapper=new LambdaQueryWrapper<>();
+        workAssignmentSelectWrapper
+                .eq(WorkAssignment::getLine,damage.getLine())
+                .eq(WorkAssignment::getWorkProcesses,damage.getWorkingProcedure());
+        WorkAssignment workAssignment=workAssignmentMapper.selectOne(workAssignmentSelectWrapper);
+        damage.setTeamsGroupsName(workAssignment.getTeamsGroupsName());
+        damage.setDeviceName(workAssignment.getDeviceName());
+
+        damage.setEngineerId(glassInfo.getEngineerId());
+        damage.setTemperingLayoutId(glassInfo.getTemperingLayoutId());
+        damage.setProcessId(glassInfo.getFlowCardId());
+        damage.setOrderNumber(glassInfo.getGlassType());
+        damage.setTechnologyNumber(glassInfo.getLayer());
+        damage.setDamageTime(LocalDateTime.now());
+        baseMapper.insert(damage);
+    }
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/GlassInfo.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/GlassInfo.java
index f69a142..0c6ae56 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/GlassInfo.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/GlassInfo.java
@@ -35,22 +35,22 @@
     /**
      * 娴佺▼鍗$幓鐠冪被鍨�
      */
-    private String glassType;
+    private Integer glassType;
 
     /**
      * 瀹�
      */
-    private Double width;
+    private double width;
 
     /**
      * 楂�
      */
-    private Double height;
+    private double height;
 
     /**
      * 鍘氬害
      */
-    private Double thickness;
+    private double thickness;
 
     /**
      * 鑶滅郴
@@ -70,12 +70,12 @@
     /**
      * 纾ㄥ墠瀹�
      */
-    private Double edgWidth;
+    private double edgWidth;
 
     /**
      * 纾ㄥ墠楂�
      */
-    private Double edgHeight;
+    private double edgHeight;
 
     /**
      * 鏄惁閰嶇墖
@@ -85,12 +85,12 @@
     /**
      * 閰嶇墖鏈�澶у
      */
-    private Double maxWidth;
+    private double maxWidth;
 
     /**
      * 閰嶇墖鏈�澶ч珮
      */
-    private Double maxHeight;
+    private double maxHeight;
 
     /**
      * 閽㈠寲鏄惁鎺ュ彈妯斁
@@ -125,7 +125,7 @@
     /**
      * 鏃嬭浆瑙掑害锛堥�嗘椂閽堬級
      */
-    private Integer angle;
+    private double angle;
 
     /**
      * 宸ョ▼鍙�
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java
index 19cb029..54e844b 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java
@@ -25,17 +25,28 @@
     /**
      * 瀹�
      */
-    private Double width;
+    private double width;
 
     /**
      * 楂�
      */
-    private Double height;
+    private double height;
+
+    /**
+     * 瀹�
+     */
+    private double oHeight;
+
+    /**
+     * 楂�
+     */
+    private double oWidth;
+
 
     /**
      * 鍘氬害
      */
-    private Double glassThickness;
+    private double glassThickness;
 
     /**
      * 鐜荤拑鑶滅郴
@@ -55,11 +66,11 @@
     /**
      * 灏忕墖瀹斤紙鍔犵(閲忥級
      */
-    private Double pWidth;
+    private double pWidth;
     /**
      * 灏忕墖楂橈紙鍔犵(閲忥級
      */
-    private Double pHeight;
+    private double pHeight;
     /**
      * 鐗堝浘id
      */
@@ -88,5 +99,13 @@
      * 灏忕墖缂栧彿
      */
     private  String glassId;
+    /**
+     * 璁㈠崟搴忓彿
+     */
+    private Integer orderSort;
+    /**
+     * 鏃嬭浆瑙掑害
+     */
+    private double rotateAngle;
 
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java
index 4688c38..bdfb970 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java
@@ -2,16 +2,15 @@
 
 import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.glassinfo.entity.GlassInfo;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 /**
  * <p>
- *  Mapper 鎺ュ彛
+ * Mapper 鎺ュ彛
  * </p>
  *
  * @author wu
  * @since 2024-04-29
  */
-public interface GlassInfoMapper extends BaseMapper<GlassInfo>, MPJBaseMapper<GlassInfo> {
+public interface GlassInfoMapper extends MPJBaseMapper<GlassInfo> {
 
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
index be26553..6e35509 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
@@ -1,6 +1,7 @@
 package com.mes.glassinfo.service.impl;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.query.MPJQueryWrapper;
 import com.mes.glassinfo.entity.GlassInfo;
@@ -14,11 +15,14 @@
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
- *  鏈嶅姟瀹炵幇绫�
+ * 鏈嶅姟瀹炵幇绫�
  * </p>
  *
  * @author wu
@@ -29,22 +33,24 @@
 public class GlassInfoServiceImpl extends MPJBaseServiceImpl<GlassInfoMapper, GlassInfo> implements GlassInfoService {
     @Autowired
     OptimizeProjectMapper optimizeProjectMapper;
+
     @Override
     @DS("pp")
     public List<GlassInfo> selectGlassInfo(String engineeringId) {
-        List<OptimizeGlassinfo> optimizeGlassinfos=null;
+        List<OptimizeGlassinfo> optimizeGlassinfos = null;
         if (engineeringId != null) {
             optimizeGlassinfos = optimizeProjectMapper.selectJoinList(OptimizeGlassinfo.class, new MPJQueryWrapper<OptimizeProject>()
-                    .select("b.process_id,t.type,b.width,b.height,t.glass_thickness,t.glass_type,b.p_width,b.p_height,b.layer, b.total_layer, b.stock_id,b.heat_layout_id,b.heat_layout_sort,b.x_axis,b.y_axis,b.project_no,b.glass_id")
+                    .select("b.process_id,t.glass_type,b.o_width,b.o_height,t.glass_thickness,b.order_sort,b.p_width,b.p_height,b.layer, b.total_layer, b.stock_id,b.heat_layout_id,b.heat_layout_sort,c.x_axis,c.y_axis,b.project_no,b.glass_id,c.rotate_angle")
                     .leftJoin("optimize_detail b on t.project_no=b.project_no")
+                                    .leftJoin("optimize_heat_detail c on c.project_no=t.project_no and b.heat_layout_id=c.layout_id and b.heat_layout_sort=c.sort")
                     //.eq("t.state",100)
                     .eq("t.project_no", engineeringId));
         }
-
+        //order_sort,o_width,o_height
         // 鍒涘缓涓�涓� List 鐢ㄤ簬淇濆瓨鏄犲皠鍚庣殑瀹炰綋瀵硅薄
         List<GlassInfo> resultList = new ArrayList<>();
 
-        if(optimizeGlassinfos!=null){
+        if (optimizeGlassinfos != null) {
             for (OptimizeGlassinfo map : optimizeGlassinfos) {
                 // 鍒涘缓涓�涓柊鐨� OptimizeGlassinfo 瀵硅薄
                 GlassInfo glassInfo = new GlassInfo();
@@ -52,9 +58,9 @@
                 glassInfo.setEngineerId(map.getProjectNo());
                 glassInfo.setFlowCardId(map.getProcessId());
                 glassInfo.setFilmsid(map.getGlassType());
-                glassInfo.setGlassType(map.getType());
-                glassInfo.setWidth(map.getWidth());
-                glassInfo.setHeight(map.getHeight());
+                glassInfo.setGlassType(map.getOrderSort());//璁㈠崟搴忓彿
+                glassInfo.setWidth(map.getOWidth());//璁㈠崟瀹�
+                glassInfo.setHeight(map.getOHeight());//璁㈠崟楂�
                 glassInfo.setEdgWidth(map.getPWidth());
                 glassInfo.setLayer(map.getLayer());
                 glassInfo.setTotalLayer(map.getTotalLayer());
@@ -65,14 +71,14 @@
                 glassInfo.setTemperingFeedSequence(map.getHeatLayoutSort());//閽㈠寲鐗堝浘椤哄簭
                 glassInfo.setXCoordinate(map.getXAxis());
                 glassInfo.setYCoordinate(map.getYAxis());
-
+                glassInfo.setAngle(map.getRotateAngle());
                 glassInfo.setGlassId(map.getGlassId());
                 // 灏嗘槧灏勫悗鐨勫璞℃坊鍔犲埌缁撴灉鍒楄〃涓�
                 resultList.add(glassInfo);
             }
         }
-        log.info("鏌ヨ鍑篻lassinfo鐨勬暟鎹畕}:",resultList);
-        log.info("鏌ヨ鍑篻lassinfopro鐨勬暟鎹畕}:",optimizeGlassinfos);
+        log.info("鏌ヨ鍑篻lassinfo鐨勬暟鎹畕}:", resultList);
+        log.info("鏌ヨ鍑篻lassinfopro鐨勬暟鎹畕}:", optimizeGlassinfos);
         return resultList;
     }
 
@@ -80,4 +86,46 @@
     public void saveGlassInfo(List<GlassInfo> glassinfo) {
         this.saveBatch(glassinfo);
     }
+
+
+    @Override
+    public int getGlassInfoCountByFlowCardId(String flowCardId) {
+        return baseMapper.selectCount(new QueryWrapper<GlassInfo>().lambda()
+                .eq(GlassInfo::getFlowCardId, flowCardId));
+    }
+
+
+    @Override
+    public List<Map<String, Object>> getFlowCardId() {
+        // 绗簩涓煡璇細鏌ヨ OptimizeProject 琛紝鏍规嵁 GlassInfo 鐨� engineerId 鍜� state 杩涜绛涢��
+        List<OptimizeProject> optimizeProjects = optimizeProjectMapper.selectList(
+                new QueryWrapper<OptimizeProject>()
+                        .ne("state", 300)
+        );
+        // 鎻愬彇 engineerId 鍒楄〃
+        List<String> engineerIds = optimizeProjects.stream()
+                .map(OptimizeProject::getProjectNo)
+                .collect(Collectors.toList());
+
+        // 绗竴涓煡璇細鏌ヨ GlassInfo 琛ㄥ苟鎸� flow_card_id 鍒嗙粍锛屽悓鏃剁瓫閫夊嚭鍦� engineerIds 鍒楄〃涓殑璁板綍
+        List<GlassInfo> glassInfos = baseMapper.selectList(
+                new QueryWrapper<GlassInfo>()
+                        .in("engineer_id", engineerIds)
+                        .groupBy("flow_card_id")
+        );
+
+        // 杞崲涓� List<Map<String, Object>>
+        List<Map<String, Object>> result = glassInfos.stream()
+                .map(glassInfo -> {
+                    Map<String, Object> map = new HashMap<>();
+                    map.put("flow_card_id", glassInfo.getFlowCardId());
+                    // 濡傛灉杩樻湁鍏朵粬瀛楁闇�瑕佹坊鍔犲埌 map 涓紝鍦ㄨ繖閲岀户缁坊鍔�
+                    return map;
+                })
+                .collect(Collectors.toList());
+        log.info("result: {}", result);
+        return result;
+    }
+
+
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/controller/OrderController.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/controller/OrderController.java
new file mode 100644
index 0000000..06f0c22
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/controller/OrderController.java
@@ -0,0 +1,39 @@
+package com.mes.order.controller;
+import com.mes.order.entity.Orderdetail;
+import com.mes.order.entity.Orders;
+import com.mes.order.service.OrdersService;
+import com.mes.utils.Result;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-17
+ */
+@RestController
+@RequestMapping("/order/order")
+@Slf4j
+public class OrderController {
+    @Autowired
+    //鑾峰彇寰呴�夋嫨鐨勫伐绋嬪彿
+    private OrdersService ordersService;
+
+    @ApiOperation("鏄剧ず璁㈠崟璇︾粏")
+    @PostMapping("/selectOrderdetail") //鏄剧ず宸ョ▼閫夋嫨淇℃伅
+    @ResponseBody
+    public Result<List<Orderdetail>> listByState(@RequestBody Orders orders) {
+        log.info("灏嗚姹傚弬鏁板皝瑁呭湪璇锋眰绫婚噷闈�");
+        List<Orderdetail> glass = ordersService.selectOrderdetail(orders);
+        log.info("鏄剧ず璁㈠崟璇︽儏淇℃伅:{}", glass);
+        return Result.build(200, "", glass);
+    }
+}
+
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/Order.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/Order.java
new file mode 100644
index 0000000..0547f19
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/Order.java
@@ -0,0 +1,232 @@
+package com.mes.order.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class Order implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * <璁㈠崟琛�>
+     */
+      @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 璁㈠崟Id
+     */
+    private String orderId;
+
+    /**
+     * 椤圭洰鍚嶇О
+     */
+    private String project;
+
+    /**
+     * 瀹㈡埛Id
+     */
+    private Long customerId;
+
+    /**
+     * 瀹㈡埛鍚嶇О
+     */
+    private String customerName;
+
+    /**
+     * 璁㈠崟绫诲瀷
+     */
+    private String orderType;
+
+    /**
+     * 璁㈠崟鍒嗙被
+     */
+    private String orderClassify;
+
+    /**
+     * 鍟嗘爣閫夐」
+     */
+    private String icon;
+
+    /**
+     * 鍖呰鏂瑰紡
+     */
+    private String packType;
+
+    /**
+     * 閫佽揣鏃堕棿
+     */
+    private LocalDateTime deliveryDate;
+
+    /**
+     * 鎵规
+     */
+    private String batch;
+
+    /**
+     * 璁$畻鏂瑰紡
+     */
+    private Integer calculateType;
+
+    /**
+     * 閿�鍞汉鍛業d
+     */
+    private String salesmanId;
+
+    /**
+     * 閿�鍞汉
+     */
+    private String salesman;
+
+    /**
+     * 閾濇潯鏂瑰紡
+     */
+    private String alType;
+
+    /**
+     * 閲戦
+     */
+    private BigDecimal money;
+
+    /**
+     * 鍚堝悓缂栧彿
+     */
+    private String contractId;
+
+    /**
+     * 瀹㈡埛鎵规
+     */
+    private String customerBatch;
+
+    /**
+     * 鑱旂郴浜�
+     */
+    private String contacts;
+
+    /**
+     * 鑱旂郴鐢佃瘽
+     */
+    private String contactNumber;
+
+    /**
+     * 閫佽揣鍦板潃
+     */
+    private String deliveryAddress;
+
+    /**
+     * 鍏朵粬閲戦
+     */
+    private BigDecimal otherMoney;
+
+    /**
+     * 鍏朵粬閲戦澶囨敞
+     */
+    private String otherMoneyRemarks;
+
+    /**
+     * 璁㈠崟鍔犲伐澶囨敞
+     */
+    private String processingNote;
+
+    /**
+     * 鍏朵粬澶囨敞
+     */
+    private String otherRemarks;
+
+    /**
+     * 闈㈢Н
+     */
+    private BigDecimal area;
+
+    /**
+     * 鏁伴噺
+     */
+    private Long quantity;
+
+    /**
+     * 鍛ㄩ暱
+     */
+    private String perimeter;
+
+    /**
+     * 瀹℃牳浜篿d
+     */
+    private String verifierId;
+
+    /**
+     * 瀹℃牳浜�
+     */
+    private String verifier;
+
+    /**
+     * 鍒涘缓浜篿d
+     */
+    private String creatorId;
+
+    /**
+     * 鍒涘缓浜�
+     */
+    private String creator;
+
+    /**
+     * 涓嬪崟
+     */
+    private Integer createOrder;
+
+    /**
+     * 宸ヨ壓瀹℃牳
+     */
+    private Integer processReview;
+
+    /**
+     * 璁㈠崟瀹℃牳
+     */
+    private Integer orderReview;
+
+    /**
+     * 鐢熶骇璁㈠崟
+     */
+    private Integer productionOrder;
+
+    /**
+     * 娴佺▼鍗�
+     */
+    private Integer processingCard;
+
+    /**
+     * 鍏ュ簱	鏈叆搴撶姸鎬�0锛屾湭瀹屽叏鍏ュ簱鐘舵��1锛屽畬鍏ㄥ叆搴撶姸鎬�2
+     */
+    private Integer warehousing;
+
+    /**
+     * 鍙戣揣
+     */
+    private Integer delivery;
+
+    /**
+     * 鍒涘缓鏃ユ湡
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    private LocalDateTime updateTime;
+
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/Orderdetail.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/Orderdetail.java
new file mode 100644
index 0000000..01258d3
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/Orderdetail.java
@@ -0,0 +1,65 @@
+package com.mes.order.entity;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class Orderdetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    /**
+     * 璁㈠崟Id
+     */
+    private String orderId;
+    /**
+     * 椤圭洰鍚嶇О
+     */
+    private String project;
+
+    /**
+     * 浜у搧鍚嶇О
+     */
+    private String productName;
+
+    /**
+     * 瀹�
+     */
+    private String width;
+    /**
+     * 楂�
+     */
+    private String height;
+
+    /**
+     * 闈㈢Н
+     */
+    private double area;
+
+
+    /**
+     * 鍖呰鏂瑰紡
+     */
+    private Integer quantity;
+    /**
+     * 鐘舵��
+     */
+    private String processingNote;
+    /**
+     * 閫佽揣鏃堕棿
+     */
+    private String deliveryDate;
+
+
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/Orders.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/Orders.java
new file mode 100644
index 0000000..d41e4df
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/Orders.java
@@ -0,0 +1,63 @@
+package com.mes.order.entity;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class Orders implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * <璁㈠崟琛�>
+     */
+
+
+    /**
+     * 璁㈠崟Id
+     */
+    private String orderId;
+    /**
+     * 瀹㈡埛鍚嶇О
+     */
+    private String customerName;
+
+    /**
+     * 椤圭洰鍚嶇О
+     */
+    private String project;
+
+    /**
+     * 闈㈢Н
+     */
+    private double area;
+
+
+    /**
+     * 鍖呰鏂瑰紡
+     */
+    private Integer quantity;
+    /**
+     * 鐘舵��
+     */
+    private Integer warehousing;
+    /**
+     * 閫佽揣鏃堕棿
+     */
+    private String deliveryDate;
+
+
+
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrderMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrderMapper.java
new file mode 100644
index 0000000..f9ed0af
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrderMapper.java
@@ -0,0 +1,16 @@
+package com.mes.order.mapper;
+
+import com.mes.order.entity.Order;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-17
+ */
+public interface OrderMapper extends BaseMapper<Order> {
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrderdetailMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrderdetailMapper.java
new file mode 100644
index 0000000..87657fb
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrderdetailMapper.java
@@ -0,0 +1,15 @@
+package com.mes.order.mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.order.entity.Orderdetail;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-17
+ */
+public interface OrderdetailMapper extends BaseMapper<Orderdetail> {
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrdersMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrdersMapper.java
new file mode 100644
index 0000000..d7365d0
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrdersMapper.java
@@ -0,0 +1,15 @@
+package com.mes.order.mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.order.entity.Orders;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-17
+ */
+public interface OrdersMapper extends BaseMapper<Orders> {
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/xml/OrderMapper.xml b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/xml/OrderMapper.xml
new file mode 100644
index 0000000..39b3ea8
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/xml/OrderMapper.xml
@@ -0,0 +1,5 @@
+<?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.order.mapper.OrderMapper">
+
+</mapper>
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/OrdersService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/OrdersService.java
new file mode 100644
index 0000000..90702fa
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/OrdersService.java
@@ -0,0 +1,23 @@
+package com.mes.order.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.order.entity.Order;
+import com.mes.order.entity.Orderdetail;
+import com.mes.order.entity.Orders;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-17
+ */
+public interface OrdersService extends IService<Orders> {
+
+    List<Orders> selectOrders();
+
+    List<Orderdetail> selectOrderdetail(Orders orders);
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/impl/OrdersServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/impl/OrdersServiceImpl.java
new file mode 100644
index 0000000..938d4bf
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/impl/OrdersServiceImpl.java
@@ -0,0 +1,44 @@
+package com.mes.order.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.order.entity.Orderdetail;
+import com.mes.order.entity.Orders;
+import com.mes.order.mapper.OrderdetailMapper;
+import com.mes.order.mapper.OrdersMapper;
+import com.mes.order.service.OrdersService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-17
+ */
+@Service
+@DS("sd")
+public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Orders> implements OrdersService {
+@Autowired
+private OrderdetailMapper orderdetailMapper;
+    @Override
+    public List<Orders> selectOrders() {
+        //鑾峰彇鎵�鏈夋湭瀹屾垚鐨勮鍗�
+        QueryWrapper<Orders> queryWrapper = new QueryWrapper<>();
+        queryWrapper.ne("warehousing", "2");
+        return baseMapper.selectList(queryWrapper);
+    }
+
+    @Override
+    public List<Orderdetail> selectOrderdetail(Orders orders) {
+        QueryWrapper<Orderdetail> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("order_id", orders.getOrderId());
+        return orderdetailMapper.selectList(queryWrapper);
+    }
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/ReportingWorkController.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/ReportingWorkController.java
new file mode 100644
index 0000000..375cbc7
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/ReportingWorkController.java
@@ -0,0 +1,40 @@
+package com.mes.pp.controller;
+
+
+import com.mes.pp.entity.request.OptimizeRequest;
+import com.mes.pp.entity.request.Reportingdamage;
+import com.mes.pp.service.ReportingWorkService;
+import com.mes.utils.Result;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-26
+ */
+@RestController
+@RequestMapping("/reporting_work/reporting-work")
+@Slf4j
+public class ReportingWorkController {
+    @Autowired
+    private ReportingWorkService reportingWorkService;
+
+    @ApiOperation("鏄剧ず宸ョ▼閫夋嫨淇℃伅")
+    @PostMapping("/selectDamage") //鏄剧ず宸ョ▼閫夋嫨淇℃伅
+    @ResponseBody
+    public Result<List<Reportingdamage>> selectDamage(@RequestBody Reportingdamage reportingdamage) {
+        log.info("灏嗚姹傚弬鏁板皝瑁呭湪璇锋眰绫婚噷闈�");
+        List<Reportingdamage> glass = reportingWorkService.selectDamage(reportingdamage);
+        log.info("鏄剧ず宸ョ▼閫夋嫨淇℃伅:{}", glass);
+        return Result.build(200, "", glass);
+    }
+}
+
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeDetail.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeDetail.java
index ba5ea47..9d75bd7 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeDetail.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeDetail.java
@@ -73,32 +73,32 @@
     /**
      * 灏忕墖瀹斤紙鍔犵(閲忥級
      */
-    private Double pWidth;
+    private double pWidth;
 
     /**
      * 灏忕墖楂橈紙鍔犵(閲忥級
      */
-    private Double pHeight;
+    private double pHeight;
 
     /**
      * 灏忕墖瀹�
      */
-    private Double width;
+    private double width;
 
     /**
      * 灏忕墖楂�
      */
-    private Double height;
+    private double height;
 
     /**
      * x鍧愭爣
      */
-    private Double xAxis;
+    private double xAxis;
 
     /**
      * y鍧愭爣
      */
-    private Double yAxis;
+    private double yAxis;
 
     /**
      * 閽㈠寲鐗堝浘缂栧彿(鏋跺彿)
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeLayout.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeLayout.java
index 75e4d99..1d59674 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeLayout.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeLayout.java
@@ -36,13 +36,13 @@
      */
     private Integer stockId;
 
-    private Double width;
+    private double width;
 
-    private Double height;
+    private double height;
 
-    private Double realwidth;
+    private double realwidth;
 
-    private Double realheight;
+    private double realheight;
 
     /**
      * 鍒囪鐜�
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeProject.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeProject.java
index 032b7c5..ddc80fe 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeProject.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeProject.java
@@ -67,7 +67,7 @@
     /**
      * 鎬婚潰绉�
      */
-    private Double glassTotalArea;
+    private double glassTotalArea;
 
     /**
      * 娴佺▼鍗℃暟閲�
@@ -87,7 +87,7 @@
     /**
      * 绗竴娆″钩鍧囧垏瑁佺巼
      */
-    private Double fristCutPct;
+    private double fristCutPct;
 
     /**
      * 浣跨敤鐨勫師鏂欐暟
@@ -97,22 +97,22 @@
     /**
      * 浣跨敤鐨勫師鏂欓潰绉�
      */
-    private Double rawStockArea;
+    private double rawStockArea;
 
     /**
      * 骞冲潎鍒囪鐜�
      */
-    private Double avgCutPct;
+    private double avgCutPct;
 
     /**
      * 鏈夋晥鍒囪鐜�
      */
-    private Double validCutPct;
+    private double validCutPct;
 
     /**
      * 灏剧墖鍒囪鐜�
      */
-    private Double lastCutPct;
+    private double lastCutPct;
 
     /**
      * g娣锋帓绋嬪害
@@ -137,27 +137,27 @@
     /**
      * g涓婄墖瀹�
      */
-    private Double loadWidth;
+    private double loadWidth;
 
     /**
      * g涓婄墖闀�
      */
-    private Double loadLength;
+    private double loadLength;
 
     /**
      * x闂撮殧
      */
-    private Double xSpace;
+    private double xSpace;
 
     /**
      * y闂撮殧
      */
-    private Double ySpace;
+    private double ySpace;
 
     /**
      * g骞冲潎瑁呰浇鐜�
      */
-    private Double loadRate;
+    private double loadRate;
 
     /**
      * 娴佺▼鍗¢泦鍚�
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/ReportingWork.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/ReportingWork.java
new file mode 100644
index 0000000..d0f7876
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/ReportingWork.java
@@ -0,0 +1,176 @@
+package com.mes.pp.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class ReportingWork implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * <鎶ュ伐涓昏〃>
+     */
+      @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鎶ュ伐缂栧彿
+     */
+    private String reportingWorkId;
+
+    /**
+     * 閿�鍞崟鍙�
+     */
+    private String orderId;
+
+    /**
+     * 鐢熶骇璁㈠崟鍙�
+     */
+    private String productionId;
+
+    /**
+     * 娴佺▼鍗″彿
+     */
+    private String processId;
+
+    /**
+     * 鏈伐搴�
+     */
+    private String thisProcess;
+
+    /**
+     * 璁惧缂栧彿
+     */
+    private byte[] deviceId;
+
+    /**
+     * 璁惧鍚嶇О
+     */
+    private String deviceName;
+
+    /**
+     * 涓婂伐搴�
+     */
+    private String previousProcess;
+
+    /**
+     * 涓婂伐搴忔暟閲�
+     */
+    private Integer previousProcessQuantity;
+
+    /**
+     * 鏈伐搴忔暟閲�
+     */
+    private Integer thisProcessQuantity;
+
+    /**
+     * 鏈伐搴忓畬宸ユ暟
+     */
+    private Integer thisCompletedQuantity;
+
+    /**
+     * 鏈伐搴忔鐮存暟
+     */
+    private Integer thisWornQuantity;
+
+    /**
+     * 涓嬪伐搴�
+     */
+    private String nextProcess;
+
+    /**
+     * 鐝
+     */
+    private String classes;
+
+    /**
+     * 鐝粍缂栧彿
+     */
+    private String teamsGroupsId;
+
+    /**
+     * 鐝粍鍚嶇О
+     */
+    private String teamsGroupsName;
+
+    /**
+     * 鎶ュ伐鐘舵��
+     */
+    private Integer reportingWorkState;
+
+    /**
+     * 瀹℃牳浜�
+     */
+    private String reviewed;
+
+    /**
+     * 瀹℃牳鐘舵��(榛樿0,瀹℃牳閫氳繃1锛屼笉閫氳繃2,灏忎簬0鍒犻櫎)
+     */
+    private Integer reviewedState;
+
+    /**
+     * 澶囨敞
+     */
+    private String notes;
+
+    /**
+     * 璐ㄦ鍛�
+     */
+    private String qualityInspector;
+
+    /**
+     * 鍖呰鏂瑰紡
+     */
+    private String packagingMethod;
+
+    /**
+     * 鎶ュ伐鏃堕棿
+     */
+    private LocalDateTime reportingWorkTime;
+
+    /**
+     * 瀹℃牳鏃堕棿
+     */
+    private LocalDateTime examineTime;
+
+    /**
+     * 璐ㄦ鏃堕棿
+     */
+    private LocalDateTime qualityInsTime;
+
+    /**
+     * 鍒涘缓鑰卛d
+     */
+    private String creatorId;
+
+    /**
+     * 鍒涘缓鑰�
+     */
+    private String creator;
+
+    /**
+     * 寤虹珛鏃堕棿
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    private LocalDateTime updateTime;
+
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/AwaitingRepair.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/AwaitingRepair.java
new file mode 100644
index 0000000..5d08d26
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/AwaitingRepair.java
@@ -0,0 +1,161 @@
+package com.mes.pp.entity.request;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class AwaitingRepair implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 娆$牬鏃堕棿
+     */
+    private String reportingWorkTime;
+
+    /**
+     * 璁㈠崟鍙�
+     */
+    private String orderId;
+    /**
+     * 鎶ュ伐缂栧彿
+     */
+    private String reportingWorkId;
+    /**
+     * 鐢熶骇璁㈠崟鍙�
+     */
+    private String productionId;
+
+    /**
+     * 娴佺▼鍗″彿
+     */
+    private String processId;
+
+    /**
+     * 椤圭洰鍚嶇О
+     */
+    private String project;
+
+    /**
+     * 鎵规
+     */
+    private String batch;
+
+    /**
+     * 鏄庣粏id
+     */
+    private String reviewer;
+
+    /**
+     * 妤煎彿
+     */
+    private String buildingNumber;
+
+    /**
+     * 璁㈠崟搴忓彿
+     */
+    private Integer orderSort;
+    /**
+     * 浜у搧鍚嶇О
+     */
+    private String productName;
+
+    /**
+     * 宸ヨ壓纭搴忓彿
+     */
+    private Integer technologyNumber;
+    /**
+     * 鐗囨爣璁帮紙浣嶇疆锛�
+     */
+    private String glassAddress;
+
+    /**
+     * 琛ョ墖鏁伴噺
+     */
+    private Integer patchNum;
+
+    /**
+     * 瀹�
+     */
+    private double width;
+
+    /**
+     * 楂�
+     */
+    private double height;
+
+    /**
+     * 褰㈢姸
+     */
+    private String shape;
+
+    /**
+     * 璐d换宸ュ簭
+     */
+    private String responsibleProcess;
+
+    /**
+     * 鏈伐搴�
+     */
+    private String patchProcesses;
+
+    /**
+     * 娆$牬鏈ˉ鏁伴噺
+     */
+    private Integer breakageQuantity;
+
+    /**
+     * 閫�鍥炲伐搴�
+     */
+    private String returnProcesses;
+
+    /**
+     * 娆$牬鍘熷洜
+     */
+    private String patchReason;
+
+    /**
+     * 娆$牬绫诲瀷
+     */
+    private String patchType;
+
+    /**
+     * 璐d换浜哄憳
+     */
+    private String responsiblePersonnel;
+
+    /**
+     * 璐d换璁惧
+     */
+    private String responsibleEquipment;
+
+    /**
+     * 璐d换鐝粍
+     */
+    private String responsibleTeam;
+
+    /**
+     * 娆$牬闈㈢Н
+     */
+    private double patchArea;
+
+    /**
+     * 璐ㄦ鍛�
+     */
+    private String qualityInspector;
+
+
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/Reportingdamage.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/Reportingdamage.java
new file mode 100644
index 0000000..cd88ede
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/Reportingdamage.java
@@ -0,0 +1,38 @@
+package com.mes.pp.entity.request;
+
+import cn.hutool.core.date.DateTime;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+/**
+ * @author wu
+ */
+@Data
+public class Reportingdamage {
+    /**
+     * 宸ュ簭
+     */
+    private String thisProcess;
+
+    /**
+     * 璁惧
+     */
+    private String deviceName;
+    /**
+     * 鍔犲伐鏁伴噺
+     */
+    private Integer completedQuantity;
+    /**
+     * 娆$牬鏁伴噺
+     */
+    private Integer breakageQuantity;
+    /**
+     * 娆$牬鏃堕棿
+     */
+    private String reportingWorkTime;
+
+
+}
+
+
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeLayoutMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeLayoutMapper.java
deleted file mode 100644
index 1cef895..0000000
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeLayoutMapper.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.mes.pp.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.mes.pp.entity.OptimizeLayout;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * <p>
- * Mapper 鎺ュ彛
- * </p>
- *
- * @author zhoush
- * @since 2024-04-16
- */
-@Mapper
-public interface OptimizeLayoutMapper extends BaseMapper<OptimizeLayout> {
-
-}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/ReportingWorkMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/ReportingWorkMapper.java
new file mode 100644
index 0000000..3c5b64e
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/ReportingWorkMapper.java
@@ -0,0 +1,16 @@
+package com.mes.pp.mapper;
+
+import com.mes.pp.entity.ReportingWork;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-26
+ */
+public interface ReportingWorkMapper extends BaseMapper<ReportingWork> {
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/request/AwaitingRepairMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/request/AwaitingRepairMapper.java
new file mode 100644
index 0000000..a932fff
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/request/AwaitingRepairMapper.java
@@ -0,0 +1,16 @@
+package com.mes.pp.mapper.request;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.pp.entity.request.AwaitingRepair;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-26
+ */
+public interface AwaitingRepairMapper extends BaseMapper<AwaitingRepair> {
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/request/ReportingDamageMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/request/ReportingDamageMapper.java
new file mode 100644
index 0000000..c9ca9e2
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/request/ReportingDamageMapper.java
@@ -0,0 +1,16 @@
+package com.mes.pp.mapper.request;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.pp.entity.request.Reportingdamage;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-26
+ */
+public interface ReportingDamageMapper extends BaseMapper<Reportingdamage> {
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeLayoutService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeLayoutService.java
deleted file mode 100644
index ec7dc25..0000000
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeLayoutService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.mes.pp.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.mes.pp.entity.OptimizeLayout;
-
-/**
- * <p>
- * 鏈嶅姟绫�
- * </p>
- *
- * @author zhoush
- * @since 2024-04-16
- */
-public interface OptimizeLayoutService extends IService<OptimizeLayout> {
-
-}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java
index bdab088..a2d8310 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java
@@ -33,4 +33,11 @@
      * @return
      */
     boolean overTask(UpPattenUsage sequence, int state);
+    /**
+     * 鑾峰彇姝e湪杩涜涓殑浠诲姟
+     *
+     * @return
+     */
+    List<OptimizeProject> getDoingTask();
+
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/ReportingWorkService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/ReportingWorkService.java
new file mode 100644
index 0000000..2349dbb
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/ReportingWorkService.java
@@ -0,0 +1,33 @@
+package com.mes.pp.service;
+
+import com.mes.pp.entity.ReportingWork;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.pp.entity.request.AwaitingRepair;
+import com.mes.pp.entity.request.Reportingdamage;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-26
+ */
+public interface ReportingWorkService extends IService<ReportingWork> {
+
+     /**
+      * 鑾峰彇椤堕儴鎵囧舰鍥剧牬鎹熷姞宸ユ暟閲�,浼犲叆鍙傛暟锛氬伐搴忥紝璁惧锛屽姞宸ユ椂闂�
+      *
+      * @return
+      */
+     List<Reportingdamage> selectDamage(Reportingdamage reportingdamage);
+     /**
+      * 鑾峰彇鐮存崯鏈ˉ鐗囩殑鍒楄〃
+      *
+      * @return
+      */
+     List<AwaitingRepair> selectAwaitingRepair();
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeLayoutServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeLayoutServiceImpl.java
deleted file mode 100644
index 4881d52..0000000
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeLayoutServiceImpl.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.mes.pp.service.impl;
-
-
-import com.baomidou.dynamic.datasource.annotation.DS;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.mes.pp.entity.OptimizeLayout;
-import com.mes.pp.mapper.OptimizeLayoutMapper;
-import com.mes.pp.service.OptimizeLayoutService;
-import org.springframework.stereotype.Service;
-
-/**
- * <p>
- * 鏈嶅姟瀹炵幇绫�
- * </p>
- *
- * @author zhoush
- * @since 2024-04-16
- */
-@Service
-@DS("pp")
-public class OptimizeLayoutServiceImpl extends ServiceImpl<OptimizeLayoutMapper, OptimizeLayout> implements OptimizeLayoutService {
-
-}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java
index 22f9d8e..202a852 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.github.yulichang.base.MPJBaseServiceImpl;
@@ -13,6 +14,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -64,5 +66,13 @@
         return false;
     }
 
+    @Override
+    public List<OptimizeProject> getDoingTask() {
+        QueryWrapper<OptimizeProject> wrapper = new QueryWrapper<>();
+        wrapper.select("project_no,project_name")
+        .eq("state",200);
+        return this.list(wrapper);
+    }
+
 
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkServiceImpl.java
new file mode 100644
index 0000000..e42cefa
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkServiceImpl.java
@@ -0,0 +1,54 @@
+package com.mes.pp.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.mes.pp.entity.ReportingWork;
+import com.mes.pp.entity.request.AwaitingRepair;
+import com.mes.pp.entity.request.Reportingdamage;
+import com.mes.pp.mapper.ReportingWorkMapper;
+import com.mes.pp.mapper.request.AwaitingRepairMapper;
+import com.mes.pp.mapper.request.ReportingDamageMapper;
+import com.mes.pp.service.ReportingWorkService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-26
+ */
+@Service
+@DS("pp")
+@Slf4j
+public class ReportingWorkServiceImpl extends ServiceImpl<ReportingWorkMapper, ReportingWork> implements ReportingWorkService {
+@Autowired
+private ReportingDamageMapper reportingDamageMapper;
+@Autowired
+private AwaitingRepairMapper awaitingRepairMapper;
+    @Override
+    public List<Reportingdamage> selectDamage(Reportingdamage reportingdamage) {
+        QueryWrapper<Reportingdamage>queryWrapper=new QueryWrapper<>();
+        queryWrapper.select("this_process,sum(completed_quantity)as completedQuantity,sum(breakage_quantity)as breakageQuantity,device_name ")
+                .eq("this_process",reportingdamage.getThisProcess())
+                //.eq("device_name",reportingdamage.getDeviceName())
+                .ge("reporting_work_time",reportingdamage.getReportingWorkTime())
+                .groupBy("this_process");
+        return reportingDamageMapper.selectList(queryWrapper);
+    }
+
+    @Override
+    public List<AwaitingRepair> selectAwaitingRepair() {
+        QueryWrapper<AwaitingRepair>queryWrapper=new QueryWrapper<>();
+        queryWrapper.select("*");
+        return awaitingRepairMapper.selectList(queryWrapper);
+    }
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
index ac47c7b..63b0c45 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
@@ -2,6 +2,9 @@
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.mes.base.entity.BigStorageCageBaseInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -13,88 +16,92 @@
  * </p>
  *
  * @author zhoush
- * @since 2024-04-07
+ * @since 2024-03-27
  */
+@ApiModel(description = "<p> 閽㈠寲灏忕墖淇℃伅琛� </p>")
 @Data
 @EqualsAndHashCode(callSuper = false)
-public class TemperingGlassInfo implements Serializable {
+public class TemperingGlassInfo extends BigStorageCageBaseInfo implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
     /**
      * 閽㈠寲灏忕墖淇℃伅琛╥d
      */
+    @ApiModelProperty(value = "閽㈠寲灏忕墖淇℃伅琛╥d", position = 2)
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     /**
      * 娴佺▼鍗�
      */
-    private String flowcardId;
+    @ApiModelProperty(value = "娴佺▼鍗�", position = 4)
+    private String flowCardId;
 
     /**
      * 娴佺▼鍗$幓鐠冪被鍨�
      */
+    @ApiModelProperty(value = "娴佺▼鍗$幓鐠冪被鍨�", position = 5)
     private Integer glassType;
-
-    /**
-     * 瀹�
-     */
-    private Double width;
 
     /**
      * 楂�
      */
-    private Double height;
+    @ApiModelProperty(value = "楂�", position = 7)
+    private double height;
 
     /**
      * 鍘氬害
      */
-    private Double thickness;
+    @ApiModelProperty(value = "鍘氬害", position = 8)
+    private double thickness;
 
     /**
      * 鑶滅郴
      */
-    private Integer filmsid;
+    @ApiModelProperty(value = "鑶滅郴", position = 9)
+    private String filmsid;
 
     /**
      * 閽㈠寲鏄惁鎺ュ彈妯斁
      */
+    @ApiModelProperty(value = "閽㈠寲鏄惁鎺ュ彈妯斁", position = 10)
     private Integer ishorizontal;
 
     /**
      * 閽㈠寲鐗堝浘id
      */
+    @ApiModelProperty(value = "閽㈠寲鐗堝浘id", position = 11)
     private Integer temperingLayoutId;
 
     /**
      * 閽㈠寲鐗堝浘鐗囧簭
      */
+    @ApiModelProperty(value = "閽㈠寲鐗堝浘鐗囧簭", position = 12)
     private Integer temperingFeedSequence;
 
     /**
      * x鍧愭爣
      */
+    @ApiModelProperty(value = "x鍧愭爣", position = 13)
     private Integer xCoordinate;
 
     /**
      * y鍧愭爣
      */
+    @ApiModelProperty(value = "y鍧愭爣", position = 14)
     private Integer yCoordinate;
 
     /**
      * 鏃嬭浆瑙掑害锛堥�嗘椂閽堬級
      */
+    @ApiModelProperty(value = "鏃嬭浆瑙掑害锛堥�嗘椂閽堬級", position = 15)
     private Integer angle;
 
     /**
      * 鐘舵��
      */
+    @ApiModelProperty(value = "鐘舵��", position = 16)
     private Integer state;
-    /**
-     * 鏍煎瓙鍙�
-     */
-    private Integer slot;
-
 
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
index dc41a61..ef514ec 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
@@ -3,6 +3,9 @@
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.temperingglass.entity.TemperingGlassInfo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,7 +15,9 @@
  * @author zhoush
  * @since 2024-04-07
  */
-@DS("salve_hangzhoumes")
+@DS("salve_hangzhoumes_1")
 public interface TemperingGlassInfoMapper extends MPJBaseMapper<TemperingGlassInfo> {
 
+    boolean saveBatch(@Param(value = "list") List<TemperingGlassInfo> list);
+
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java
index 66b5c07..006c8f9 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java
@@ -22,7 +22,7 @@
         // 2銆佸叏灞�閰嶇疆
         // 鍏ㄥ眬閰嶇疆
         GlobalConfig gc = new GlobalConfig();
-        gc.setOutputDir("D:\\Documents\\hangzhoumesParent4\\");
+        gc.setOutputDir("D:\\Documents\\hangzhoumesParent5\\");
 
         gc.setServiceName("%sService");	//鍘绘帀Service鎺ュ彛鐨勯瀛楁瘝I
         gc.setAuthor("wu");
@@ -41,7 +41,7 @@
         // 4銆佸寘閰嶇疆
         PackageConfig pc = new PackageConfig();
         pc.setParent("com.mes");
-        pc.setModuleName("glassinfo"); //妯″潡鍚�
+        pc.setModuleName("work_assignment"); //妯″潡鍚�
         pc.setController("controller");
         pc.setService("service");
         pc.setMapper("mapper");
@@ -50,7 +50,7 @@
         // 5銆佺瓥鐣ラ厤缃�
         StrategyConfig strategy = new StrategyConfig();
 
-        strategy.setInclude("glass_info");
+        strategy.setInclude("work_assignment");
 
         strategy.setNaming(NamingStrategy.underline_to_camel);//鏁版嵁搴撹〃鏄犲皠鍒板疄浣撶殑鍛藉悕绛栫暐
 
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/DatabaseDesignDocUtil.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/DatabaseDesignDocUtil.java
index 07a4c33..2b31d34 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/DatabaseDesignDocUtil.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/DatabaseDesignDocUtil.java
@@ -31,9 +31,9 @@
     public static void documentGeneration() {
         //鏁版嵁婧�
         HikariConfig hikariConfig = new HikariConfig();
-        hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
-        hikariConfig.setJdbcUrl("jdbc:mysql://10.153.19.150:3306/hangzhoumes" + "?serverTimezone=GMT%2B8");
-        hikariConfig.setUsername("root");
+        hikariConfig.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
+        hikariConfig.setJdbcUrl("jdbc:sqlserver://10.153.19.150:1433;databasename=hangzhoumes");
+        hikariConfig.setUsername("sa");
         hikariConfig.setPassword("beibo.123/");
         //璁剧疆鍙互鑾峰彇tables remarks淇℃伅
         hikariConfig.addDataSourceProperty("useInformationSchema", "true");
@@ -43,7 +43,7 @@
         //鐢熸垚閰嶇疆
         EngineConfig engineConfig = EngineConfig.builder()
                 //鐢熸垚鏂囦欢璺緞
-                .fileOutputDir("E:\\椤圭洰\\椤圭洰鏂囨。\\鏉窞鍒╂潵1")
+                .fileOutputDir("E:\\椤圭洰\\椤圭洰鏂囨。\\鏉窞鍒╂潵2")
                 //鎵撳紑鐩綍
                 .openOutputDir(true)
                 //鏂囦欢绫诲瀷
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/uppattenusage/entity/UpPattenUsage.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/uppattenusage/entity/UpPattenUsage.java
index a92188d..d0beeb5 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/uppattenusage/entity/UpPattenUsage.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/uppattenusage/entity/UpPattenUsage.java
@@ -40,17 +40,17 @@
     /**
      * 瀹�
      */
-    private Double width;
+    private double width;
 
     /**
      * 楂�
      */
-    private Double height;
+    private double height;
 
     /**
      * 鍘氬害
      */
-    private Double thickness;
+    private double thickness;
 
     /**
      * 鍘熺墖鐗堝浘鐗囧簭
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/controller/WorkAssignmentController.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/controller/WorkAssignmentController.java
new file mode 100644
index 0000000..9836cf1
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/controller/WorkAssignmentController.java
@@ -0,0 +1,36 @@
+package com.mes.work_assignment.controller;
+
+
+import cn.hutool.core.date.DateTime;
+import com.mes.damage.service.DamageService;
+import com.mes.utils.Result;
+import com.mes.work_assignment.service.WorkAssignmentService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-07-01
+ */
+@RestController
+@RequestMapping("/work_assignment/work-assignment")
+public class WorkAssignmentController {
+
+    @Autowired
+    private WorkAssignmentService workAssignmentService;
+    @ApiOperation("鎶ュ伐鏁版嵁鏌ヨ")
+    @GetMapping("/selectWorkAssignment")
+    public Result selectDamage(int line,String workingProcedure) {
+        return Result.build(200,"鏌ヨ鎴愬姛",workAssignmentService.selectWorkAssignment(line,workingProcedure));
+    }
+
+}
+
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/entity/WorkAssignment.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/entity/WorkAssignment.java
new file mode 100644
index 0000000..44e68a8
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/entity/WorkAssignment.java
@@ -0,0 +1,44 @@
+package com.mes.work_assignment.entity;
+
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wu
+ * @since 2024-07-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class WorkAssignment implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      private Integer id;
+
+    /**
+     * 绾胯矾
+     */
+    private Integer line;
+
+    /**
+     * 宸ュ簭
+     */
+    private String workProcesses;
+
+    /**
+     * 鐝粍鍚嶇О
+     */
+    private String teamsGroupsName;
+
+    /**
+     * 璁惧鍚嶇О
+     */
+    private String deviceName;
+
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/mapper/WorkAssignmentMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/mapper/WorkAssignmentMapper.java
new file mode 100644
index 0000000..e713455
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/mapper/WorkAssignmentMapper.java
@@ -0,0 +1,16 @@
+package com.mes.work_assignment.mapper;
+
+import com.mes.work_assignment.entity.WorkAssignment;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author wu
+ * @since 2024-07-01
+ */
+public interface WorkAssignmentMapper extends BaseMapper<WorkAssignment> {
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/mapper/xml/WorkAssignmentMapper.xml b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/mapper/xml/WorkAssignmentMapper.xml
new file mode 100644
index 0000000..db1b33d
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/mapper/xml/WorkAssignmentMapper.xml
@@ -0,0 +1,5 @@
+<?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.work_assignment.mapper.WorkAssignmentMapper">
+
+</mapper>
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/WorkAssignmentService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/WorkAssignmentService.java
new file mode 100644
index 0000000..3571fe6
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/WorkAssignmentService.java
@@ -0,0 +1,17 @@
+package com.mes.work_assignment.service;
+
+import com.mes.work_assignment.entity.WorkAssignment;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-07-01
+ */
+public interface WorkAssignmentService extends IService<WorkAssignment> {
+
+    WorkAssignment selectWorkAssignment(int line, String workingProcedure);
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/impl/WorkAssignmentServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/impl/WorkAssignmentServiceImpl.java
new file mode 100644
index 0000000..e80cce6
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/impl/WorkAssignmentServiceImpl.java
@@ -0,0 +1,35 @@
+package com.mes.work_assignment.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.mes.work_assignment.entity.WorkAssignment;
+import com.mes.work_assignment.mapper.WorkAssignmentMapper;
+import com.mes.work_assignment.service.WorkAssignmentService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-07-01
+ */
+@Service
+public class WorkAssignmentServiceImpl extends ServiceImpl<WorkAssignmentMapper, WorkAssignment> implements WorkAssignmentService {
+
+    /**
+     * 鏌ヨ褰撳墠鍊肩彮淇℃伅
+     * @param line
+     * @param workingProcedure
+     * @return
+     */
+    @Override
+    public WorkAssignment selectWorkAssignment(int line, String workingProcedure){
+        LambdaQueryWrapper<WorkAssignment> workAssignmentSelectWrapper=new LambdaQueryWrapper<>();
+        workAssignmentSelectWrapper
+                .eq(WorkAssignment::getLine,line)
+                .eq(WorkAssignment::getWorkProcesses,workingProcedure);
+        return baseMapper.selectOne(workAssignmentSelectWrapper);
+    }
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml
new file mode 100644
index 0000000..c85d6d5
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml
@@ -0,0 +1,16 @@
+<?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.temperingglass.mapper.TemperingGlassInfoMapper">
+    <insert id="saveBatch">
+        INSERT INTO tempering_glass_info (glass_id, flow_card_id, glass_type, width, height, thickness, filmsid,
+        ishorizontal, tempering_layout_id,
+        tempering_feed_sequence, x_coordinate, y_coordinate, angle, state, slot ) VALUES
+        <foreach collection="list" item="item" separator=",">
+            (#{item.glassId}, #{item.flowCardId}, #{item.glassType}, #{item.width}, #{item.height}, #{item.thickness},
+            #{item.filmsid},#{item.ishorizontal},
+            #{item.temperingLayoutId}, #{item.temperingFeedSequence}, #{item.xCoordinate}, #{item.yCoordinate},
+            #{item.angle}, #{item.state}, #{item.slot})
+        </foreach>
+    </insert>
+
+</mapper>
\ No newline at end of file
diff --git a/hangzhoumesParent/common/springsecurity/pom.xml b/hangzhoumesParent/common/springsecurity/pom.xml
index 70e572c..9278822 100644
--- a/hangzhoumesParent/common/springsecurity/pom.xml
+++ b/hangzhoumesParent/common/springsecurity/pom.xml
@@ -23,6 +23,7 @@
             <artifactId>servicebase</artifactId>
             <version>1.0-SNAPSHOT</version>
         </dependency>
+
         <!-- Spring Security渚濊禆 -->
         <dependency>
             <groupId>org.springframework.boot</groupId>
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/controller/SysMenuController.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/controller/SysMenuController.java
index 4ca0cb9..b507a45 100644
--- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/controller/SysMenuController.java
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/controller/SysMenuController.java
@@ -29,15 +29,20 @@
     @PostMapping("/save")
 //    @PreAuthorize("hasAuthority('sys:menu:save')")
     public Result save(@Validated @RequestBody SysMenu sysMenu) {
-        return Result.success(sysMenuService.save(sysMenu));
+        sysMenuService.save(sysMenu);
+        GeneralRequest request=new GeneralRequest();
+        return Result.success(sysMenuService.getMenuTree(request));
+
     }
 
     @ApiOperation("淇敼鑿滃崟淇℃伅")
     @PostMapping("/updateMenu")
 //    @PreAuthorize("hasAuthority('sys:menu:update')")
-    public Result updateMenu(@Validated @RequestBody SysMenu sysMenu) {
+    public Result<List<SysMenu>> updateMenu(@Validated @RequestBody SysMenu sysMenu) {
+        //return Result.success(sysMenu);
         sysMenuService.updateMenu(sysMenu);
-        return Result.success(sysMenu);
+        GeneralRequest request=new GeneralRequest();
+        return Result.build(200,"淇敼鎴愬姛",sysMenuService.getMenuTree(request));
     }
 
     @ApiOperation("鑾峰彇鐢ㄦ埛鏈夋潈闄愮殑鎵�鏈夎彍鍗�")
@@ -62,8 +67,9 @@
     @ApiOperation("鍒犻櫎鑿滃崟")
     @PostMapping("/deleteMenu")
 //    @PreAuthorize("hasAuthority('sys:menu:delete')")
-    public Result<String> deleteMenu(Long menuId) {
-        return Result.success(sysMenuService.deleteMenu(menuId));
+    public Result<List<SysMenu>> deleteMenu(Long menuId) {
+        GeneralRequest request=new GeneralRequest();
+        return Result.build(200, sysMenuService.deleteMenu(menuId),sysMenuService.getMenuTree(request));
     }
 
     @ApiOperation("鎵归噺鍒犻櫎鑿滃崟")
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleController.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleController.java
index cb6da80..036e737 100644
--- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleController.java
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleController.java
@@ -57,7 +57,7 @@
 //    @PreAuthorize("hasAuthority('sys:role:delete')")
     @Transactional
     public Result<String> deleteRole(@RequestBody List<Long> ids) {
-        return Result.success(sysRoleService.deleteRole(ids));
+        return Result.build(200,"鍒犻櫎鎴愬姛",sysRoleService.deleteRole(ids));
     }
 
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleServiceImpl.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleServiceImpl.java
index 2d08603..3201d55 100644
--- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleServiceImpl.java
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleServiceImpl.java
@@ -19,6 +19,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
 import java.util.List;
@@ -102,7 +103,14 @@
      * @return
      */
     private String saveRoleMenu(Long roleId, List<SysMenu> menuList) {
-        log.info("閰嶇疆瑙掕壊鑿滃崟鍏冲績");
+        log.info("閰嶇疆瑙掕壊鑿滃崟鍏崇郴");
+        if (CollectionUtils.isEmpty(menuList)) {
+            // 鍏堝垹闄ゅ師鏉ョ殑璁板綍锛屽啀淇濆瓨鏂扮殑
+            sysRoleMenuService.remove(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, roleId));
+            // 鍒犻櫎缂撳瓨
+            sysUserService.clearUserAuthorityInfoByRoleId(roleId);
+            return "success";
+        }
         List<SysRoleMenu> roleMenuList = menuList.stream().map(menu -> {
             SysRoleMenu roleMenu = new SysRoleMenu();
             roleMenu.setRoleId(roleId);
@@ -110,12 +118,9 @@
             return roleMenu;
         }).collect(Collectors.toList());
         log.info("娓呯┖瑙掕壊鏉冮檺琛ㄤ腑璇ヨ鑹蹭俊鎭�");
-
-
         // 鍏堝垹闄ゅ師鏉ョ殑璁板綍锛屽啀淇濆瓨鏂扮殑
         sysRoleMenuService.remove(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, roleId));
         sysRoleMenuService.saveBatch(roleMenuList);
-
         // 鍒犻櫎缂撳瓨
         sysUserService.clearUserAuthorityInfoByRoleId(roleId);
         return "success";
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserController.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserController.java
index 2e0f357..6f13e7c 100644
--- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserController.java
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserController.java
@@ -60,8 +60,13 @@
     @ApiOperation("鏇存柊鐢ㄦ埛淇℃伅")
     @PostMapping("/updateUser")
 //    @PreAuthorize("hasAuthority('sys:user:update')")
-    public Result<SysUserVO> updateUser(@Validated @RequestBody SysUserVO sysUser) {
-        return Result.success(sysUserService.updateUser(sysUser));
+    public Result<List<SysUserVO>> updateUser(@Validated @RequestBody SysUserVO sysUser) {
+        //return Result.success(sysUserService.updateUser(sysUser));
+        sysUserService.updateUser(sysUser);
+        GeneralRequest request=new GeneralRequest();
+        request.setKey("");
+        return Result.success(sysUserService.listByUserName(request));
+        //鏇存敼浜嗕慨鏀逛箣鍚庤繑鍥炴墍鏈夌敤鎴峰垪琛�
     }
 
     @ApiOperation("閲嶇疆瀵嗙爜")
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java
index ac5df96..1e4a478 100644
--- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java
@@ -19,6 +19,7 @@
 import com.mes.userinfo.entity.SysUserRole;
 import com.mes.userinfo.entity.vo.SysUserVO;
 import com.mes.userinfo.mapper.SysUserMapper;
+import com.mes.userinfo.mapper.SysUserRoleMapper;
 import com.mes.userinfo.service.SysUserRoleService;
 import com.mes.userinfo.service.SysUserService;
 import lombok.extern.slf4j.Slf4j;
@@ -71,6 +72,8 @@
 
     @Resource
     BCryptPasswordEncoder passwordEncoder;
+    @Autowired
+    private SysUserRoleMapper sysUserRoleMapper;
 
     @Override
     public Map<String, String> login(SysUser user) {
@@ -125,10 +128,12 @@
         this.updateById(sysUser);
         log.info("鍒犻櫎鐢ㄦ埛瑙掕壊淇℃伅");
         List<Long> roleIds = user.getRoleList().stream().map(SysRole::getId).collect(Collectors.toList());
-        sysUserRoleService.remove(new LambdaQueryWrapper<SysUserRole>()
-                .eq(SysUserRole::getUserId, sysUser.getId()).in(CollectionUtil.isNotEmpty(roleIds), SysUserRole::getRoleId, roleIds));
-        log.info("淇濆瓨鐢ㄦ埛瑙掕壊淇℃伅");
-        saveUserRole(user.getRoleList(), sysUser.getId());
+//        sysUserRoleService.remove(new LambdaQueryWrapper<SysUserRole>()
+//                .eq(SysUserRole::getUserId, sysUser.getId()).in(CollectionUtil.isNotEmpty(roleIds), SysUserRole::getRoleId, roleIds));
+        SysUserRole sysUserRole = new SysUserRole(sysUser.getId(),roleIds.get(0));
+        sysUserRoleMapper.updateById(sysUserRole);
+//        log.info("淇濆瓨鐢ㄦ埛瑙掕壊淇℃伅");
+//        saveUserRole(user.getRoleList(), sysUser.getId());
         return user;
     }
 
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/pom.xml b/hangzhoumesParent/moduleService/CacheGlassModule/pom.xml
index 568e912..974c18f 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/pom.xml
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/pom.xml
@@ -17,11 +17,7 @@
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>com.microsoft.sqlserver</groupId>
-            <artifactId>sqljdbc4</artifactId>
-            <version>4.0</version>
-        </dependency>
+
         <dependency>
             <groupId>org.samba.jcifs</groupId>
             <artifactId>jcifs</artifactId>
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCage.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCage.java
index 1e7b87a..2ab45f6 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCage.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCage.java
@@ -40,7 +40,7 @@
     /**
      * 鍚敤鐘舵��
      */
-    private String enableState;
+    private Integer enableState;
 
     /**
      * 鍓╀綑
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java
index 8ec6a5a..6524403 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java
@@ -29,7 +29,7 @@
     private Long id;
 
     /**
-     * 璁惧id
+     * 宸ョ▼id
      */
     private String engineerId;
 
@@ -66,27 +66,27 @@
     /**
      * 瀹�
      */
-    private Double width;
+    private double width;
 
     /**
      * 楂�
      */
-    private Double height;
+    private double height;
 
     /**
      * 鍘氬害
      */
-    private Double thickness;
+    private double thickness;
 
     /**
      * 纾ㄥ墠瀹�
      */
-    private Double edgWidth;
+    private double edgWidth;
 
     /**
      * 纾ㄥ墠楂�
      */
-    private Double edgHeight;
+    private double edgHeight;
 
     /**
      * 閽㈠寲鐗堝浘id
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
index 81047b7..f52662f 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
@@ -19,6 +19,7 @@
 
     /**
      * 鏌ヨ绗煎唴绂绘寚瀹氭牸瀛愭渶杩戠┖鏍�
+     * flag :鏄惁涓虹洿閫�
      *
      * @return
      */
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
index 923a28b..0d6ddce 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
@@ -24,6 +24,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.print.attribute.standard.MediaSize;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -90,7 +91,8 @@
     public List<Map<String, Object>> selectCutTerritory() {
         List<UpPattenUsage> upPattenUsage = upPattenUsageMapper.selectList(new MPJLambdaWrapper<UpPattenUsage>()
                 .selectAll(UpPattenUsage.class)
-                .eq(UpPattenUsage::getState, 1).or().eq(UpPattenUsage::getState, 0).orderByDesc(UpPattenUsage::getState));
+                .orderByDesc(UpPattenUsage::getState)
+                .orderByDesc(UpPattenUsage::getId));
         if (!upPattenUsage.isEmpty()) {
             UpPattenUsage upPattenUsage1 = upPattenUsage.get(0);
             List<Map<String, Object>> cutTerritorys=optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class)
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
index e04f87a..715ba81 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
@@ -72,7 +72,7 @@
     @Value("${mes.secondLength}")
     private String secondLength;
 
-//    @Scheduled(fixedDelay = 5000000)
+    @Scheduled(fixedDelay = 1000)
     public void plcHomeEdgTask() {
         PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
         String taskRequestTypeValue = plcParameterObject.getPlcParameter("A06_request_word").getValue();
@@ -93,7 +93,7 @@
                 return;
             }
             log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓�0锛屽皢纭瀛楁敼涓�0");
-            S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, (short) 0);
+            S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, 0);
             return;
         }
         if (!"0".equals(confirmationWrodValue)) {
@@ -169,7 +169,7 @@
         boolean taskCache = saveTaskCache(details.getGlassId(), 0, nearestEmpty.getSlot(), Const.GLASS_CACHE_TYPE_IN);
         log.info("5銆佺敓鎴愯繘鐗囦换鍔′俊鎭瓨鍏ヤ换鍔¤〃鏄惁瀹屾垚锛歿}", taskCache);
 
-        S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, (short) 1);
+        S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, 1);
         log.info("6銆佸彂閫佺‘璁ゅ瓧瀹屾垚");
 
 
@@ -182,8 +182,8 @@
      * @return
      */
     public GlassInfo queryAndChangeGlass(String glassId) {
-        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId)
-                .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1"));
+        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
+//                .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1"));
         Assert.isFalse(null == glassInfo, "鐜荤拑淇℃伅涓嶅瓨鍦�");
         //鎸夌収鐜荤拑灏哄
         LambdaQueryWrapper<GlassInfo> queryWrapper = new LambdaQueryWrapper<GlassInfo>()
@@ -277,8 +277,8 @@
                     List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(wrapper);
                     if (CollectionUtil.isEmpty(list)) {
                         MPJQueryWrapper<GlassInfo> queryWrapper = new MPJQueryWrapper<GlassInfo>()
-                                .selectAll(GlassInfo.class).eq("t.glass_id", glassId)
-                                .inSql("t.engineer_id", "select engineer_id from engineering where state = 1");
+                                .selectAll(GlassInfo.class).eq("t.glass_id", glassId);
+//                                .inSql("t.engineer_id", "select engineer_id from engineering where state = 1");
                         if (endcell == Const.A10_OUT_TARGET_POSITION) {
                             queryWrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
                                     "case when width < height then width else height end as second_length from glass_info) t1 " +
@@ -347,8 +347,8 @@
         //todo: 鑾峰彇姝e湪鎵ц鐨勫伐绋嬩俊鎭�
         if (StringUtils.isNotBlank(glassId)) {
             GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
-                    .eq(GlassInfo::getGlassId, glassId)
-                    .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1"));
+                    .eq(GlassInfo::getGlassId, glassId));
+//                    .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1"));
             EdgStorageCageDetails resultDetails = new EdgStorageCageDetails();
             BeanUtils.copyProperties(one, resultDetails);
             glassList.add(resultDetails);
@@ -387,7 +387,7 @@
      * @param width
      * @param height
      */
-    private EdgStorageCageDetails queryMinGlass(Double width, Double height, String glassId) {
+    private EdgStorageCageDetails queryMinGlass(double width, double height, String glassId) {
         //鑾峰彇琛ㄥ唴鐗堝浘id鏈�灏忕殑鐜荤拑淇℃伅
         EdgStorageCageDetails glassDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
                 .eq(EdgStorageCageDetails::getState, 100)
@@ -400,8 +400,8 @@
             return glassDetails;
         }
         GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
-                .eq(GlassInfo::getGlassId, glassId)
-                .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1")
+                        .eq(GlassInfo::getGlassId, glassId)
+//                .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1")
         );
         EdgStorageCageDetails resultDetails = new EdgStorageCageDetails();
         BeanUtils.copyProperties(one, resultDetails);
@@ -451,7 +451,8 @@
             return null;
         }
         return edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getGlassId, taskCache.getGlassId())
-                .inSql(EdgStorageCageDetails::getEngineerId, "select engineer_id from engineering where state = 1").last(" limit 1 "));
+//                .inSql(EdgStorageCageDetails::getEngineerId, "select engineer_id from engineering where state = 1")
+                .last(" limit 1 "));
     }
 
     /**
@@ -466,10 +467,10 @@
      */
     private Integer queryLineByGlassInfo(EdgStorageCageDetails a08EdgStorageCageDetails, EdgStorageCageDetails a10EdgStorageCageDetails,
                                          EdgStorageCageDetails glassInfo, int out08Glassstate, int out10Glassstate) {
-        boolean b08 = a08EdgStorageCageDetails != null && a08EdgStorageCageDetails.getHeight().equals(glassInfo.getHeight())
-                && a08EdgStorageCageDetails.getWidth().equals(glassInfo.getWidth());
-        boolean b10 = a10EdgStorageCageDetails != null && a10EdgStorageCageDetails.getHeight().equals(glassInfo.getHeight())
-                && a10EdgStorageCageDetails.getWidth().equals(glassInfo.getWidth());
+        boolean b08 = a08EdgStorageCageDetails != null && a08EdgStorageCageDetails.getHeight() == glassInfo.getHeight()
+                && a08EdgStorageCageDetails.getWidth() == glassInfo.getWidth();
+        boolean b10 = a10EdgStorageCageDetails != null && a10EdgStorageCageDetails.getHeight() == glassInfo.getHeight()
+                && a10EdgStorageCageDetails.getWidth() == glassInfo.getWidth();
         //瀛樺湪鍑虹墖浠诲姟 07涓虹┖
         if (b10) {
             return out10Glassstate == 2 ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
@@ -507,16 +508,16 @@
         //鑾峰彇瀹介珮鎷嶇涓�鐨勭幓鐠冧俊鎭�
         EdgStorageCageDetails firstSize = list.get(0);
         Integer firstCount = firstSize.getCount();
-        Double firstWidth = firstSize.getWidth();
-        Double firstHeight = firstSize.getHeight();
+        double firstWidth = firstSize.getWidth();
+        double firstHeight = firstSize.getHeight();
         if (list.size() == 1) {
             return queryMinGlass(firstWidth, firstHeight, glassId);
         }
         //鑾峰彇瀹介珮鎷嶇浜岀殑鐜荤拑淇℃伅
         EdgStorageCageDetails secondSize = list.get(1);
         Integer secondCount = secondSize.getCount();
-        Double secondWidth = secondSize.getWidth();
-        Double secondHeight = secondSize.getHeight();
+        double secondWidth = secondSize.getWidth();
+        double secondHeight = secondSize.getHeight();
         //鑾峰彇鏁伴噺鍓�2鐨勭幓鐠冩暟閲忔瘮渚�
         Integer mix = firstCount / secondCount;
         log.info("鑾峰彇鐜荤拑鏁伴噺鍓�2鐨勭幓鐠冨崰姣斾负锛歿}", mix);
@@ -536,7 +537,7 @@
             EdgStorageCageDetails outGlassInfo = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
                     .eq(EdgStorageCageDetails::getGlassId, taskCache.getGlassId()));
             log.info("{}绾挎湁鍑虹墖浠诲姟淇℃伅,浠诲姟淇℃伅涓簕}锛岀幓鐠冧俊鎭负{}", endcell, taskCache, outGlassInfo);
-            if (outGlassInfo.getWidth().equals(firstWidth) && outGlassInfo.getHeight().equals(firstHeight)) {
+            if (outGlassInfo.getWidth() == firstWidth && outGlassInfo.getHeight() == firstHeight) {
                 log.info("鏁伴噺鏈�澶氱殑瀹絳}楂榹}鍜寋}绾夸换鍔$殑瀹絳}楂榹}鐩稿悓锛屽嚭鏁伴噺鎺掔浜岀殑鐜荤拑锛屽{}楂榹}",
                         firstWidth, firstHeight, endcell, outGlassInfo.getWidth(), outGlassInfo.getHeight(), secondWidth, secondHeight);
                 return queryMinGlass(secondWidth, secondHeight, glassId);
@@ -588,7 +589,7 @@
             }
             boolean glassSizeStatus = saveGlassSize(glassInfo);
             log.info("7銆佹坊鍔犲嚭鐗囩幓鐠冨昂瀵镐俊鎭埌纾ㄨ竟鍓嶇幓鐠冭〃鏄惁瀹屾垚锛歿}", glassSizeStatus);
-            S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, (short) 1);
+            S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, 1);
             log.info("8銆佸彂閫佺‘璁ゅ瓧宸插畬鎴�");
             return Boolean.TRUE;
         }
@@ -631,23 +632,24 @@
         return edgGlassTaskInfoService.save(edgGlassTaskInfo);
     }
 
-    /**
-     * 褰撳墠鍒囧壊鐗堝浘淇℃伅 +纾ㄨ竟浠诲姟+纾ㄨ竟鍓� 缂撳瓨鍐呬俊鎭�
-     *
-     * @param
-     * @return
-     */
+
+
     @Scheduled(fixedDelay = 1000)
-    public void currentCutTerritory(){
+    public void CacheGlassTasks() {
         JSONObject jsonObject = new JSONObject();
+        //璇嗗埆鎽嗙墖
         List<Map<String, Object>> currentCutTerritorys = edgStorageCageDetailsService.selectCutTerritory();
         jsonObject.append("currentCutTerritory", currentCutTerritorys);
-        List<Map<String,Object>> EdgTasks1 = taskCacheService.selectEdgInfo("2001");
-        List<Map<String,Object>> EdgTasks2 = taskCacheService.selectEdgInfo("2002");
+        //纾ㄨ竟淇℃伅
+        List<Map<String, Object>> EdgTasks1 = taskCacheService.selectEdgInfo("2001");
+        List<Map<String, Object>> EdgTasks2 = taskCacheService.selectEdgInfo("2002");
         jsonObject.append("EdgTasks1", EdgTasks1);
         jsonObject.append("EdgTasks2", EdgTasks2);
-        List<Map<String, Object>> EdgStorageCageinfos=edgStorageCageService.selectEdgStorageCages();
+
+        //鍗у缂撳瓨绗煎唴淇℃伅
+        List<Map<String, Object>> EdgStorageCageinfos = edgStorageCageService.selectEdgStorageCages();
         jsonObject.append("EdgStorageCageinfos", EdgStorageCageinfos);
+
         ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("cacheGlass");
         if (sendwServer != null) {
             for (WebSocketServer webserver : sendwServer) {
@@ -664,7 +666,6 @@
             }
         }
     }
-
 
 
 
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application-prod.yml b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application-prod.yml
index ea75fe3..fe37e51 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application-prod.yml
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application-prod.yml
@@ -15,10 +15,10 @@
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
         salve_hangzhoumes:
-            url: jdbc:sqlserver://10.153.19.150:3306;databasename=hangzhoumes
-            username: sa
-            password: beibo.123/
-            driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+          url: jdbc:sqlserver://10.153.19.150:1433;databasename=hangzhoumes
+          username: sa
+          password: beibo.123/
+          driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
   cloud:
     nacos:
       discovery:
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/pom.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/pom.xml
index cb109f5..6b6533a 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/pom.xml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/pom.xml
@@ -17,11 +17,6 @@
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>com.microsoft.sqlserver</groupId>
-            <artifactId>sqljdbc4</artifactId>
-            <version>4.0</version>
-        </dependency>
     </dependencies>
 <properties>
     <maven.compiler.source>8</maven.compiler.source>
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageController.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageController.java
index a868ca4..6980cfb 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageController.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageController.java
@@ -1,7 +1,4 @@
 package com.mes.bigstorage.controller;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.mes.bigstorage.entity.BigStorageCage;
 import com.mes.bigstorage.service.BigStorageCageService;
 import com.mes.utils.Result;
 import io.swagger.annotations.Api;
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java
index a9b6525..bca9539 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java
@@ -1,15 +1,15 @@
 package com.mes.bigstorage.controller;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
 import com.mes.bigstorage.service.BigStorageCageDetailsService;
+import com.mes.bigstorage.service.BigStorageCageService;
 import com.mes.utils.Result;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -26,48 +26,52 @@
 
     @Autowired
     private BigStorageCageDetailsService bigStorageCageDetailsService;
+    @Autowired
+    private BigStorageCageService bigStorageCageService;
 
 
     @ApiOperation("鐜荤拑璇︽儏鏌ヨ")
     @PostMapping("/selectBigStorageCageDetails")
-    public Result selectBigStorageCageDetails(String glassId) {
-        BigStorageCageDetails bigStorageCageDetails=bigStorageCageDetailsService.selectBigStorageCageDetails(glassId);
+    public Result selectBigStorageCageDetails(@RequestBody Map map) {
+        List<BigStorageCageDetails> bigStorageCageDetails=bigStorageCageDetailsService.selectBigStorageCageDetails(map.get("glassId").toString());
         return Result.build(200,"鏌ヨ鎴愬姛",bigStorageCageDetails);
     }
 
     @ApiOperation("鐞嗙墖绗艰鎯呮坊鍔�")
     @PostMapping("/insertBigStorageCageDetails")
-    public Result insertBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) {
+    public Result insertBigStorageCageDetails(@RequestBody BigStorageCageDetails bigStorageCageDetails) {
         bigStorageCageDetailsService.insertBigStorageCageDetails(bigStorageCageDetails);
-        return Result.build(200,"娣诲姞鎴愬姛",1);
+        return Result.build(200,"娣诲姞鎴愬姛",bigStorageCageService.querybigStorageCageDetail(0));
     }
 
     @ApiOperation("鐞嗙墖绗艰鎯呭垹闄�")
     @PostMapping("/deleteBigStorageCageDetails")
-    public Result deleteBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) {
+    public Result deleteBigStorageCageDetails(@RequestBody BigStorageCageDetails bigStorageCageDetails) {
         bigStorageCageDetailsService.deleteBigStorageCageDetails(bigStorageCageDetails);
-        return Result.build(200,"鍒犻櫎鎴愬姛",1);
+        return Result.build(200,"鍒犻櫎鎴愬姛",bigStorageCageService.querybigStorageCageDetail(0));
     }
 
-    @ApiOperation("鐞嗙墖绗间换鍔$牬鎹�")
+    @ApiOperation("鐞嗙墖绗间换鍔$牬鎹�0/鎷胯蛋1")
     @PostMapping("/damageBigStorageCageDetails")
-    public Result damageBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) {
-        bigStorageCageDetailsService.damageBigStorageCageDetails(bigStorageCageDetails.getGlassId());
-        return Result.build(200,"鐮存崯鎴愬姛",1);
+    public Result damageBigStorageCageDetails(@RequestBody BigStorageCageDetails bigStorageCageDetails,int status) {
+        bigStorageCageDetailsService.damageBigStorageCageDetails(bigStorageCageDetails.getGlassId(),status);
+        return Result.build(200,"鐮存崯/鎷胯蛋鎴愬姛",1);
     }
 
     @ApiOperation("鐞嗙墖绗间换鍔″畬鎴�")
     @PostMapping("/finishBigStorageCageDetails")
-    public Result finishBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) {
+    public Result finishBigStorageCageDetails(@RequestBody BigStorageCageDetails bigStorageCageDetails) {
         bigStorageCageDetailsService.finishBigStorageCageDetails(bigStorageCageDetails);
-        return Result.build(200,"鐮存崯鎴愬姛",1);
+        return Result.build(200,"浠诲姟瀹屾垚鎴愬姛",1);
     }
 
     @ApiOperation("鐞嗙墖绗间换鍔″嚭鐗�")
     @PostMapping("/outBigStorageCageDetails")
-    public Result outBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) {
+    public Result outBigStorageCageDetails(@RequestBody BigStorageCageDetails bigStorageCageDetails) {
+
         bigStorageCageDetailsService.outBigStorageCageDetails(bigStorageCageDetails);
-        return Result.build(200,"鐮存崯鎴愬姛",1);
+        return Result.build(200,"鍑虹墖娣诲姞鎴愬姛",1);
     }
+
 }
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCage.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCage.java
index 2c7de7c..9b6ecc4 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCage.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCage.java
@@ -29,8 +29,8 @@
     /**
      * 澶х悊鐗囩琛╥d
      */
-      @ApiModelProperty(value = "澶х悊鐗囩琛╥d", position = 2)
-      @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty(value = "澶х悊鐗囩琛╥d", position = 2)
+    @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
     /**
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java
index 0acc5f2..33fe7f5 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java
@@ -3,16 +3,15 @@
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.mes.base.entity.BigStorageCageBaseInfo;
 import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
 import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.io.Serializable;
-import java.util.List;
 
 /**
  * <p>
@@ -22,19 +21,18 @@
  * @author zhoush
  * @since 2024-03-27
  */
-@ApiModel(description = "<p> </p>")
 @Api(description = "澶х悊鐗囩璇︽儏")
 @Data
 @EqualsAndHashCode(callSuper = false)
-public class BigStorageCageDetails implements Serializable {
+public class BigStorageCageDetails extends BigStorageCageBaseInfo implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
     /**
      * 澶х悊鐗囩璇︽儏琛╥d
      */
-      @ApiModelProperty(value = "澶х悊鐗囩璇︽儏琛╥d", position = 2)
-      @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty(value = "澶х悊鐗囩璇︽儏琛╥d", position = 2)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     /**
@@ -43,17 +41,6 @@
     @ApiModelProperty(value = "璁惧id", position = 3)
     private Integer deviceId;
 
-    /**
-     * 鏍呮牸鍙�
-     */
-    @ApiModelProperty(value = "鏍呮牸鍙�", position = 4)
-    private Integer slot;
-
-    /**
-     * 鐜荤拑id
-     */
-    @ApiModelProperty(value = "鐜荤拑id", position = 5)
-    private String glassId;
 
     /**
      * 灏忕墖鍦ㄦ牸鍐呯殑椤哄簭
@@ -74,22 +61,16 @@
     private Integer glassType;
 
     /**
-     * 瀹�
-     */
-    @ApiModelProperty(value = "瀹�", position = 9)
-    private Double width;
-
-    /**
      * 楂�
      */
     @ApiModelProperty(value = "楂�", position = 10)
-    private Double height;
+    private double height;
 
     /**
      * 鍘氬害
      */
     @ApiModelProperty(value = "鍘氬害", position = 11)
-    private Double thickness;
+    private double thickness;
 
     /**
      * 閽㈠寲鐗堝浘id
@@ -116,6 +97,12 @@
     private Integer gap;
 
     /**
+     * 宸ョ▼鍙�
+     */
+    @ApiModelProperty(value = "宸ョ▼鍙�")
+    private String engineerId;
+
+    /**
      * 杩涚墖浠诲姟
      */
     @ApiModelProperty(value = "杩涚墖浠诲姟", position = 16)
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageDTO.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageDTO.java
index 24ab69c..a2df9ab 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageDTO.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageDTO.java
@@ -9,6 +9,17 @@
  */
 @Data
 public class BigStorageDTO {
+    /**
+     * 鏍煎瓙鍙�
+     */
     private Integer slot;
+    /**
+     * 鍓╀綑瀹藉害
+     */
     private Integer width;
+
+    /**
+     * 鐜荤拑鏁伴噺
+     */
+    private Integer glassCount;
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/SlotSequenceDTO.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/SlotSequenceDTO.java
new file mode 100644
index 0000000..f22b64b
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/SlotSequenceDTO.java
@@ -0,0 +1,38 @@
+package com.mes.bigstorage.entity.dto;
+
+import lombok.Data;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/6/13 15:51
+ * @Description:
+ */
+@Data
+public class SlotSequenceDTO {
+    /**
+     * 閽㈠寲鐗堝浘id
+     */
+    private String engineerId;
+
+    /**
+     * 閽㈠寲鐗堝浘id
+     */
+    private Integer temperingLayoutId;
+    /**
+     * 澶х悊鐗囪鎯呬腑鏍煎瓙鍙�
+     */
+    private Integer slot;
+    /**
+     * 鏍煎瓙鍐呯殑鏈�澶у簭鍙�
+     */
+    private Integer maxSequence;
+    /**
+     * 鏍煎瓙鍐呯殑鏈�灏忓簭鍙�
+     */
+    private Integer minSequence;
+
+    /**
+     * 鏍煎瓙鍓╀綑瀹藉害
+     */
+    private Integer remainWidth;
+}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingLayoutDTO.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingLayoutDTO.java
new file mode 100644
index 0000000..18d4edb
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingLayoutDTO.java
@@ -0,0 +1,30 @@
+package com.mes.bigstorage.entity.dto;
+
+import lombok.Data;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/6/13 15:51
+ * @Description:
+ */
+@Data
+public class TemperingLayoutDTO {
+    /**
+     * 閽㈠寲鐗堝浘id
+     */
+    private String engineerId;
+
+    /**
+     * 閽㈠寲鐗堝浘id
+     */
+    private Integer temperingLayoutId;
+    /**
+     * 褰撳墠鐗堝浘鏁伴噺
+     */
+    private Integer count;
+
+    /**
+     * 褰撳墠鐗堝浘鍗犵敤鏍煎瓙鏁伴噺
+     */
+    private Integer slotCount;
+}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
index 3b9bb40..da14719 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
@@ -1,9 +1,12 @@
 package com.mes.bigstorage.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
-import feign.Param;
+import com.mes.bigstorage.entity.dto.SlotSequenceDTO;
+import com.mes.bigstorage.entity.dto.TemperingLayoutDTO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 
 /**
@@ -16,4 +19,20 @@
  */
 public interface BigStorageCageDetailsMapper extends MPJBaseMapper<BigStorageCageDetails> {
 
+    /**
+     * 鑾峰彇閽㈠寲鐗堝浘宸茬粡鍒伴綈鐨勫伐绋嬪彿鍙婄増鍥緄d
+     *
+     * @return
+     */
+    TemperingLayoutDTO temperingIsAll();
+
+    /**
+     * 鑾峰彇姣忎釜閽㈠寲鐗堝浘鍗犵敤鐨勬牸瀛愭暟閲�
+     *
+     * @return
+     */
+    TemperingLayoutDTO queryTemperingOccupySlot(@Param(value = "count") int count);
+
+
+    List<SlotSequenceDTO> queryGlassMaxAndMin(@Param(value = "engineerId") String engineerId, @Param(value = "temperingLayoutId") Integer temperingLayoutId);
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
index 64b7ecb..83d86fe 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
@@ -3,6 +3,8 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
 import com.mes.bigstorage.entity.BigStorageDTO;
+import com.mes.bigstorage.entity.dto.SlotSequenceDTO;
+import com.mes.bigstorage.entity.dto.TemperingLayoutDTO;
 import com.mes.glassinfo.entity.GlassInfo;
 
 import java.util.List;
@@ -23,9 +25,9 @@
 
     void deleteBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails);
 
-    void damageBigStorageCageDetails(String glassId);
+    void damageBigStorageCageDetails(String glassId,int status);
 
-    BigStorageCageDetails selectBigStorageCageDetails(String glassId);
+    List<BigStorageCageDetails> selectBigStorageCageDetails(String glassId);
 
     void insertBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails);
 
@@ -39,4 +41,27 @@
      * @param glassInfo
      */
     BigStorageDTO queryTargetSlotByTempering(GlassInfo glassInfo);
+
+    /**
+     * 鑾峰彇閽㈠寲鐗堝浘宸茬粡鍒伴綈鐨勫伐绋嬪彿鍙婄増鍥緄d
+     *
+     * @return
+     */
+    TemperingLayoutDTO temperingIsAll();
+
+    /**
+     * 鑾峰彇姣忎釜閽㈠寲鐗堝浘鍗犵敤鐨勬牸瀛愭暟閲�
+     *
+     * @return
+     */
+    TemperingLayoutDTO queryTemperingOccupySlot();
+
+    /**
+     * 鑾峰彇鐗堝浘姣忎釜鏍煎瓙鐨勬渶澶ф渶灏忓簭鍙�
+     *
+     * @param engineerId
+     * @param temperingLayoutId
+     * @return
+     */
+    List<SlotSequenceDTO> queryGlassMaxAndMin(String engineerId, Integer temperingLayoutId);
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java
index 3d204b7..1ac51f3 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java
@@ -26,7 +26,9 @@
 
     List<BigStorageCage> querybigStorageCageDetail(int deviceId);
 
+    Map<Integer, List<BigStorageCage>> querybigStorageCageDetail();
+
     List<Map<String, Object>> selectBigStorageCageUsage();
 
-    void updateStorageCageDisabled(int slot,int enableState);
+    void updateStorageCageDisabled(int slot, int enableState);
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
index ebaec10..aa3f45e 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
@@ -7,6 +7,8 @@
 import com.mes.bigstorage.entity.BigStorageCage;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
 import com.mes.bigstorage.entity.BigStorageDTO;
+import com.mes.bigstorage.entity.dto.SlotSequenceDTO;
+import com.mes.bigstorage.entity.dto.TemperingLayoutDTO;
 import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper;
 import com.mes.bigstorage.service.BigStorageCageDetailsService;
 import com.mes.bigstorage.service.BigStorageCageService;
@@ -20,9 +22,11 @@
 import com.mes.temperingglass.entity.TemperingGlassInfo;
 import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -49,46 +53,57 @@
     @Resource
     private GlassInfoMapper glassInfoMapper;
 
+    @Value("${mes.minCount}")
+    private int minCount;
+
+    @Value("${mes.slotWidth}")
+    private Integer slotWidth;
+
+    @Value("${mes.galssGap}")
+    private Integer galssGap;
+
     /**
      * 鏌ヨ杩�/鍑虹墖浠诲姟
      */
     @Override
     public List<BigStorageCageDetails> selectTask(int taskType) {
-        if (taskType == 1) {
-            //杩涚墖浠诲姟鏁版嵁
-            LambdaQueryWrapper<BigStorageCageDetails> feedWrapper = new LambdaQueryWrapper<>();
-            feedWrapper.eq(BigStorageCageDetails::getState, 1)
-                    .or()
-                    .eq(BigStorageCageDetails::getState, 2);
-            List<BigStorageCageDetails> bigStorageCageDetailsList = baseMapper.selectList(feedWrapper);
-            List<BigStorageCageFeedTask> bigStorageCageFeedTaskList = bigStorageCageFeedTaskMapper.selectList(null);
-
-            Map<String, BigStorageCageFeedTask> listMap = bigStorageCageFeedTaskList.stream()
-                    .collect(Collectors.toMap(BigStorageCageFeedTask::getGlassId, task -> task));
-
-            for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList) {
-                BigStorageCageFeedTask bigStorageCageFeedTask = listMap.get(bigStorageCageDetails.getGlassId());
-                bigStorageCageDetails.setBigStorageCageFeedTask(bigStorageCageFeedTask);
-            }
-            return bigStorageCageDetailsList;
-        } else {
-            //鍑虹墖浠诲姟鏁版嵁
-            LambdaQueryWrapper<BigStorageCageDetails> outWrapper = new LambdaQueryWrapper<>();
-            outWrapper.eq(BigStorageCageDetails::getState, 3)
-                    .or()
-                    .eq(BigStorageCageDetails::getState, 4);
-            List<BigStorageCageDetails> bigStorageCageDetailsList = baseMapper.selectList(outWrapper);
-            List<BigStorageCageOutTask> bigStorageCageOutTaskList = bigStorageCageOutTaskMapper.selectList(null);
-
-            Map<String, BigStorageCageOutTask> listMap = bigStorageCageOutTaskList.stream()
-                    .collect(Collectors.toMap(BigStorageCageOutTask::getGlassId, task -> task));
-            for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList) {
-                BigStorageCageOutTask bigStorageCageOutTask = listMap.get(bigStorageCageDetails.getGlassId());
-                bigStorageCageDetails.setBigStorageCageOutTask(bigStorageCageOutTask);
-            }
-            return bigStorageCageDetailsList;
-        }
-
+        return null;
+//        if (taskType == 1) {
+//            //杩涚墖浠诲姟鏁版嵁
+//            LambdaQueryWrapper<BigStorageCageDetails> feedWrapper = new LambdaQueryWrapper<>();
+//            feedWrapper.eq(BigStorageCageDetails::getState, Const.BIG_STORAGE_IN);
+//            List<BigStorageCageDetails> bigStorageCageDetailsList = baseMapper.selectList(feedWrapper);
+//
+//            LambdaQueryWrapper<BigStorageCageFeedTask> feedTaskWrapper = new LambdaQueryWrapper<>();
+//            feedTaskWrapper.lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT);
+//            List<BigStorageCageFeedTask> bigStorageCageFeedTaskList = bigStorageCageFeedTaskMapper.selectList(feedTaskWrapper);
+//
+//            Map<String, BigStorageCageFeedTask> listMap = bigStorageCageFeedTaskList.stream()
+//                    .collect(Collectors.toMap(BigStorageCageFeedTask::getGlassId, task -> task));
+//
+//            for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList) {
+//                BigStorageCageFeedTask bigStorageCageFeedTask = listMap.get(bigStorageCageDetails.getGlassId());
+//                bigStorageCageDetails.setBigStorageCageFeedTask(bigStorageCageFeedTask);
+//            }
+//            return bigStorageCageDetailsList;
+//        } else {
+//            //鍑虹墖浠诲姟鏁版嵁
+//            LambdaQueryWrapper<BigStorageCageDetails> outWrapper = new LambdaQueryWrapper<>();
+//            outWrapper.eq(BigStorageCageDetails::getState, Const.BIG_STORAGE_OUT);
+//            List<BigStorageCageDetails> bigStorageCageDetailsList = baseMapper.selectList(outWrapper);
+//
+//            LambdaQueryWrapper<BigStorageCageOutTask> outTaskWrapper = new LambdaQueryWrapper<>();
+//            outTaskWrapper.lt(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_SUCCESS);
+//            List<BigStorageCageOutTask> bigStorageCageOutTaskList = bigStorageCageOutTaskMapper.selectList(outTaskWrapper);
+//
+//            Map<String, BigStorageCageOutTask> listMap = bigStorageCageOutTaskList.stream()
+//                    .collect(Collectors.toMap(BigStorageCageOutTask::getGlassId, task -> task));
+//            for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList) {
+//                BigStorageCageOutTask bigStorageCageOutTask = listMap.get(bigStorageCageDetails.getGlassId());
+//                bigStorageCageDetails.setBigStorageCageOutTask(bigStorageCageOutTask);
+//            }
+//            return bigStorageCageDetailsList;
+//        }
     }
 
     /**
@@ -116,7 +131,7 @@
         for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList
         ) {
             if (bigStorageCageDetails.getBigStorageCageFeedTask().getTaskState() == 0) {
-                carWidth -= Integer.parseInt(bigStorageCageDetails.getWidth().toString()) + bigStorageCageDetails.getGap();
+                carWidth = carWidth - bigStorageCageDetails.getWidth() - galssGap;
             }
         }
         return carWidth;
@@ -133,7 +148,8 @@
 
     //鐞嗙墖绗艰鎯呯牬鎹�
     @Override
-    public void damageBigStorageCageDetails(String glassId) {
+    public void damageBigStorageCageDetails(String glassId, int status) {
+
         LambdaQueryWrapper<TemperingGlassInfo> temperingGlassInfoWrapper = new LambdaQueryWrapper<>();
         temperingGlassInfoWrapper.eq(TemperingGlassInfo::getGlassId, glassId);
         TemperingGlassInfo temperingGlassInfo = temperingGlassInfoMapper.selectOne(temperingGlassInfoWrapper);
@@ -142,13 +158,20 @@
         bigStorageCageDetailsWrapper.eq(BigStorageCageDetails::getGlassId, glassId);
         BigStorageCageDetails bigStorageCageDetails = baseMapper.selectOne(bigStorageCageDetailsWrapper);
 
-        if (temperingGlassInfo.getState() == -2) {
-            temperingGlassInfoMapper.deleteById(temperingGlassInfo);
-        } else {
-            temperingGlassInfo.setState(5);
+        if (temperingGlassInfo != null) {
+            if (status == 0) {
+                temperingGlassInfo.setState(Const.TEMPERING_DAMAGE);
+            } else {
+                temperingGlassInfo.setState(Const.TEMPERING_TAKE);
+            }
             temperingGlassInfoMapper.updateById(temperingGlassInfo);
         }
-        baseMapper.deleteById(bigStorageCageDetails.getId());
+        if (status == 0) {
+            bigStorageCageDetails.setState(Const.GLASS_STATE_TAKE);
+        } else {
+            bigStorageCageDetails.setState(Const.GLASS_STATE_DAMAGE);
+        }
+        baseMapper.updateById(bigStorageCageDetails);
         bigStorageCageService.updateRemainWidth(bigStorageCageDetails.getSlot());
         //todo:鎻掑叆鐮存崯鏁版嵁
 
@@ -156,20 +179,25 @@
 
     //鏌ヨ鐜荤拑淇℃伅
     @Override
-    public BigStorageCageDetails selectBigStorageCageDetails(String glassId) {
+    public List<BigStorageCageDetails> selectBigStorageCageDetails(String glassId) {
         LambdaQueryWrapper<GlassInfo> glassInfoWrapper = new LambdaQueryWrapper<>();
         glassInfoWrapper.eq(GlassInfo::getGlassId, glassId);
         GlassInfo glassInfo = glassInfoMapper.selectOne(glassInfoWrapper);
         BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails();
-        BeanUtils.copyProperties(glassInfo, bigStorageCageDetails);
-        bigStorageCageDetails.setState(0);
-        bigStorageCageDetails.setGap(20);
-        return bigStorageCageDetails;
+        if (glassInfo != null) {
+            BeanUtils.copyProperties(glassInfo, bigStorageCageDetails);
+            bigStorageCageDetails.setState(1);
+            bigStorageCageDetails.setGap(galssGap);
+        }
+        List<BigStorageCageDetails> bigStorageCageDetailsList = new ArrayList<>();
+        bigStorageCageDetailsList.add(bigStorageCageDetails);
+        return bigStorageCageDetailsList;
     }
 
     //鐞嗙墖绗艰鎯呮坊鍔�
     @Override
     public void insertBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) {
+        bigStorageCageDetails.setState(100);
         baseMapper.insert(bigStorageCageDetails);
         bigStorageCageService.updateRemainWidth(bigStorageCageDetails.getSlot());
     }
@@ -177,62 +205,48 @@
     //鐞嗙墖绗艰鎯呭畬鎴�
     @Override
     public void finishBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) {
-        if (bigStorageCageDetails.getState() == 1 || bigStorageCageDetails.getState() == 2) {
-            bigStorageCageDetails.setState(0);
-            baseMapper.updateById(bigStorageCageDetails);
-            bigStorageCageFeedTaskMapper.deleteById(bigStorageCageDetails.getBigStorageCageFeedTask().getId());
-        } else {
-            baseMapper.deleteById(bigStorageCageDetails.getId());
-            bigStorageCageOutTaskMapper.deleteById(bigStorageCageDetails.getBigStorageCageOutTask().getId());
-        }
-
+//        if (bigStorageCageDetails.getBigStorageCageFeedTask() != null) {
+//            bigStorageCageDetails.setState(Const.BIG_STORAGE_INSIDE);
+//            baseMapper.updateById(bigStorageCageDetails);
+//        } else {
+//            bigStorageCageDetails.setState(Const.BIG_STORAGE_OUTSIDE);
+//            baseMapper.updateById(bigStorageCageDetails);
+//            bigStorageCageService.updateRemainWidth(bigStorageCageDetails.getSlot());
+//        }
     }
 
     //鎵嬪姩鍑虹墖
     @Override
     public void outBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) {
-        LambdaQueryWrapper<TemperingGlassInfo> temperingGlassInfoWrapper = new LambdaQueryWrapper<>();
-        temperingGlassInfoWrapper
-                .eq(TemperingGlassInfo::getGlassId, bigStorageCageDetails.getGlassId());
-        TemperingGlassInfo temperingGlassInfo = temperingGlassInfoMapper.selectOne(temperingGlassInfoWrapper);
-        if (temperingGlassInfo.getGlassId() == null) {
-            LambdaQueryWrapper<GlassInfo> glassInfoWrapper = new LambdaQueryWrapper<>();
-            glassInfoWrapper
-                    .eq(GlassInfo::getGlassId, bigStorageCageDetails.getGlassId());
-            GlassInfo glassInfo = glassInfoMapper.selectOne(glassInfoWrapper);
-            TemperingGlassInfo temperingGlassInfo1 = new TemperingGlassInfo();
-            BeanUtils.copyProperties(glassInfo, temperingGlassInfo1);
-
-            if (temperingGlassInfo.getTemperingLayoutId() != null) {
-                temperingGlassInfo1.setState(-1);
-            } else {
-                temperingGlassInfo1.setState(-2);
-            }
-            temperingGlassInfoMapper.insert(temperingGlassInfo1);
-        }
+        bigStorageCageDetails.setState(Const.GLASS_STATE_ARTIFICIAL);
+        baseMapper.updateById(bigStorageCageDetails);
     }
 
     @Override
     public BigStorageDTO queryTargetSlotByTempering(GlassInfo glassInfo) {
-//        MPJLambdaWrapper<BigStorageDTO> wrapper = new MPJLambdaWrapper<>(BigStorageCage.class)
-//                .selectAll(BigStorageDTO.class)
-//                .leftJoin(BigStorageCageDetails.class, BigStorageCageDetails::getSlot, BigStorageCage::getSlot)
-//                .eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId())
-//                .eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() + 1)
-//                .last("limit 1");
         BigStorageDTO bigStorageDTO = null;
         MPJLambdaWrapper<BigStorageCage> wrapper = new MPJLambdaWrapper<>(BigStorageCage.class)
-                .selectAsClass(BigStorageCage.class, BigStorageDTO.class)
+                .selectAll(BigStorageCage.class)
                 .leftJoin(BigStorageCageDetails.class, BigStorageCageDetails::getSlot, BigStorageCage::getSlot)
+                .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
                 .eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId())
-                .eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() + 1)
+                .gt(BigStorageCage::getRemainWidth, glassInfo.getWidth())
                 .last("limit 1");
-        bigStorageDTO = bigStorageCageService.selectJoinOne(BigStorageDTO.class, wrapper);
-        if (null != bigStorageDTO) {
+        if (glassInfo.getTemperingLayoutId() == 0) {
+            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) {
+            bigStorageDTO = new BigStorageDTO();
+            bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
+            bigStorageDTO.setSlot(bigStorageCage.getSlot());
             return bigStorageDTO;
         }
-        BigStorageCage bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
-                .eq(BigStorageCage::getRemainWidth, Const.BIG_STORAGE_WIDTH)
+        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 tempering_layout_id = " + glassInfo.getTemperingLayoutId())
                 .last("limit 1"));
@@ -243,14 +257,29 @@
             return bigStorageDTO;
         }
         bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
-                .eq(BigStorageCage::getRemainWidth, Const.BIG_STORAGE_WIDTH)
+                .eq(BigStorageCage::getRemainWidth, slotWidth)
+                .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
                 .last("limit 1"));
         Assert.isTrue(null != bigStorageCage, "娌℃湁绌轰綑鐨勭瀛愬瓨鏀剧幓鐠�");
         bigStorageDTO = new BigStorageDTO();
         bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
         bigStorageDTO.setSlot(bigStorageCage.getSlot());
         return bigStorageDTO;
+    }
+
+    @Override
+    public TemperingLayoutDTO temperingIsAll() {
+        return baseMapper.temperingIsAll();
+    }
 
 
+    @Override
+    public TemperingLayoutDTO queryTemperingOccupySlot() {
+        return baseMapper.queryTemperingOccupySlot(minCount);
+    }
+
+    @Override
+    public List<SlotSequenceDTO> queryGlassMaxAndMin(String engineerId, Integer temperingLayoutId) {
+        return baseMapper.queryGlassMaxAndMin(engineerId, temperingLayoutId);
     }
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java
index a9bfa0c..4372aa0 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java
@@ -4,7 +4,6 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.mes.bigstorage.entity.BigStorageCage;
@@ -12,18 +11,16 @@
 import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper;
 import com.mes.bigstorage.mapper.BigStorageCageMapper;
 import com.mes.bigstorage.service.BigStorageCageService;
+import com.mes.common.config.Const;
 import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.glassinfo.service.GlassInfoService;
 import com.mes.temperingglass.entity.TemperingGlassInfo;
 import com.mes.temperingglass.service.TemperingGlassInfoService;
 import lombok.extern.slf4j.Slf4j;
-import com.mes.glassinfo.entity.GlassInfo;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -57,9 +54,9 @@
     public BigStorageCageDetails feedGlass(GlassInfo glassInfo, BigStorageCageDetails bigStorageCageDetails) {
         BeanUtils.copyProperties(glassInfo, bigStorageCageDetails);
         //鐜荤拑涓嶉挗鍖栨椂
-        if(glassInfo.getTemperingLayoutId()==null){
+        if (glassInfo.getTemperingLayoutId() == null) {
 
-            BigStorageCage bigStorageCage=baseMapper.selectJoinOne(BigStorageCage.class, new MPJLambdaWrapper<BigStorageCage>()
+            BigStorageCage bigStorageCage = baseMapper.selectJoinOne(BigStorageCage.class, new MPJLambdaWrapper<BigStorageCage>()
                     .selectAll(BigStorageCage.class)
                     .leftJoin(BigStorageCageDetails.class, on -> on
                             .eq(BigStorageCage::getDeviceId, BigStorageCageDetails::getDeviceId)
@@ -70,15 +67,15 @@
                     .last("limit 1")
             );
 
-            if(bigStorageCage.getSlot()!=null){
+            if (bigStorageCage.getSlot() != null) {
                 bigStorageCageDetails.setSlot(bigStorageCage.getSlot());
                 bigStorageCageDetails.setDeviceId(bigStorageCage.getDeviceId());
             }
-        }else{
+        } else {
             //鐜荤拑閽㈠寲鏃�
-            BigStorageCage bigStorageCage=new BigStorageCage();
+            BigStorageCage bigStorageCage = new BigStorageCage();
 
-            bigStorageCage=baseMapper.selectJoinOne(BigStorageCage.class, new MPJLambdaWrapper<BigStorageCage>()
+            bigStorageCage = baseMapper.selectJoinOne(BigStorageCage.class, new MPJLambdaWrapper<BigStorageCage>()
                     .selectAll(BigStorageCage.class)
                     .leftJoin(BigStorageCageDetails.class, on -> on
                             .eq(BigStorageCage::getDeviceId, BigStorageCageDetails::getDeviceId)
@@ -87,16 +84,16 @@
                     .eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() - 1)
                     .gt(BigStorageCage::getRemainWidth, glassInfo.getWidth())
             );
-            log.info("1銆佹煡璇㈢悊鐗囩鍐呯墖搴�-1绛変簬褰撳墠鐜荤拑鐗囧簭鐨勭幓鐠�"+bigStorageCage);
+            log.info("1銆佹煡璇㈢悊鐗囩鍐呯墖搴�-1绛変簬褰撳墠鐜荤拑鐗囧簭鐨勭幓鐠�" + bigStorageCage);
 
-            log.info("2銆佹煡璇㈢悊鐗囩鍐呯墖搴�-1绛変簬褰撳墠鐜荤拑鐗囧簭鐨勭幓鐠冪殑缁撴灉涓嶄负绌烘椂"+bigStorageCage.getSlot());
+            log.info("2銆佹煡璇㈢悊鐗囩鍐呯墖搴�-1绛変簬褰撳墠鐜荤拑鐗囧簭鐨勭幓鐠冪殑缁撴灉涓嶄负绌烘椂" + bigStorageCage.getSlot());
             if (bigStorageCage.getSlot() != null) {
                 bigStorageCageDetails.setSlot(bigStorageCage.getSlot());
                 bigStorageCageDetails.setDeviceId(bigStorageCage.getDeviceId());
             } else {
                 log.info("3銆佹煡璇㈢悊鐗囩鍐呯墖搴�-1绛変簬褰撳墠鐜荤拑鐗囧簭鐨勭幓鐠冪殑缁撴灉涓虹┖鏃惰幏鍙栧綋鍓嶇幓鐠冪増鍥緄d鏄惁瀛樺湪鐞嗙墖绗煎唴");
 
-                bigStorageCage=baseMapper.selectJoinOne(BigStorageCage.class, new MPJLambdaWrapper<BigStorageCage>()
+                bigStorageCage = baseMapper.selectJoinOne(BigStorageCage.class, new MPJLambdaWrapper<BigStorageCage>()
                         .selectAll(BigStorageCage.class)
                         .leftJoin(BigStorageCageDetails.class, on -> on
                                 .eq(BigStorageCage::getDeviceId, BigStorageCageDetails::getDeviceId)
@@ -105,12 +102,12 @@
                         .gt(BigStorageCage::getRemainWidth, glassInfo.getWidth())
                 );
 
-                if(bigStorageCage != null){
+                if (bigStorageCage != null) {
                     log.info("4銆佽幏鍙栫瀛愬唴閫傚悎鐨勬牸瀛�");
-                    BigStorageCage bigStorageCages=bigStorageCageSlot(bigStorageCage.getDeviceId());
+                    BigStorageCage bigStorageCages = bigStorageCageSlot(bigStorageCage.getDeviceId());
                     bigStorageCageDetails.setSlot(bigStorageCages.getSlot());
                     bigStorageCageDetails.setDeviceId(bigStorageCages.getDeviceId());
-                }else{
+                } else {
                     log.info("5銆佽幏鍙栨瘡涓瀛愮増鍥緄d鐨勪釜鏁�");
                     QueryWrapper<BigStorageCageDetails> queryWrapper = new QueryWrapper<>();
                     queryWrapper.select("a.device_id", "COUNT(DISTINCT b.tempering_layout_id) AS layoutCount")
@@ -118,22 +115,22 @@
                             .apply("LEFT JOIN (SELECT device_id, tempering_layout_id FROM big_storage_cage_details) b ON a.device_id = b.device_id AND a.slot = b.slot")
                             .orderByAsc("layoutCount")
                             .orderByAsc("a.device_id");
-                    List<Map<String, Object>> bigStorageCageDetailsCount= bigStorageCageDetailsMapper.selectMaps(queryWrapper);
+                    List<Map<String, Object>> bigStorageCageDetailsCount = bigStorageCageDetailsMapper.selectMaps(queryWrapper);
 
                     log.info("5銆佹煡璇㈢瀛愬唴鏄惁鏈夊悎閫傜殑鏍煎瓙");
-                    boolean found=false;
+                    boolean found = false;
                     for (Map<String, Object> map : bigStorageCageDetailsCount) {
                         for (Map.Entry<String, Object> entry : map.entrySet()) {
                             int deviceId = Integer.parseInt(entry.getKey());
-                            BigStorageCage bigStorageCages=bigStorageCageSlot(deviceId);
-                            if(bigStorageCage!=null){
+                            BigStorageCage bigStorageCages = bigStorageCageSlot(deviceId);
+                            if (bigStorageCage != null) {
                                 bigStorageCageDetails.setSlot(bigStorageCages.getSlot());
                                 bigStorageCageDetails.setDeviceId(deviceId);
-                                found=true;
+                                found = true;
                                 break;
                             }
                         }
-                        if(found){
+                        if (found) {
                             break;
                         }
                     }
@@ -142,40 +139,39 @@
         }
 
 
-
         if (bigStorageCageDetails.getSlot() != null) {
             log.info("6銆佸綋鎵惧埌鍚堥�傜殑鏍煎瓙鏃舵坊鍔犵幓鐠冨埌绗煎瓙琛�");
             bigStorageCageDetails.setState(0);
             bigStorageCageDetailsMapper.insert(bigStorageCageDetails);
-            updateRemainWidth(bigStorageCageDetails.getSlot()) ;
+            updateRemainWidth(bigStorageCageDetails.getSlot());
         }
         return bigStorageCageDetails;
     }
 
     //鑾峰彇绗煎瓙鍐呯殑绌烘牸瀛�
     private BigStorageCage bigStorageCageSlot(Integer deviceId) {
-        LambdaQueryWrapper<BigStorageCage> bigStorageCageWrapper=new LambdaQueryWrapper<>();
-                bigStorageCageWrapper
-                        .eq(BigStorageCage::getRemainWidth,"5000")
-                        .eq(BigStorageCage::getEnableState,"0")
-                        .eq(BigStorageCage::getDeviceId,deviceId)
-                        .orderByAsc(BigStorageCage::getSlot)
-                        .last("LIMIT 1");
-                return bigStorageCageMapper.selectOne(bigStorageCageWrapper);
+        LambdaQueryWrapper<BigStorageCage> bigStorageCageWrapper = new LambdaQueryWrapper<>();
+        bigStorageCageWrapper
+                .eq(BigStorageCage::getRemainWidth, "5000")
+                .eq(BigStorageCage::getEnableState, "0")
+                .eq(BigStorageCage::getDeviceId, deviceId)
+                .orderByAsc(BigStorageCage::getSlot)
+                .last("LIMIT 1");
+        return bigStorageCageMapper.selectOne(bigStorageCageWrapper);
     }
 
     //鍑虹墖閫昏緫
     @Override
     public boolean outGlass() {
-        LambdaQueryWrapper<TemperingGlassInfo> temperingGlassInfoWrapper=new LambdaQueryWrapper<>();
-        temperingGlassInfoWrapper.eq(TemperingGlassInfo::getState,-1);
+        LambdaQueryWrapper<TemperingGlassInfo> temperingGlassInfoWrapper = new LambdaQueryWrapper<>();
+        temperingGlassInfoWrapper.eq(TemperingGlassInfo::getState, -1);
         List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.list(temperingGlassInfoWrapper);
-        log.info("1銆佹煡璇㈤挗鍖栧皬鐗囦换鍔¤〃鏄惁鏈夊緟鍑虹幓鐠�"+temperingGlassInfoList.size());
-        if(temperingGlassInfoList.size()>0){
+        log.info("1銆佹煡璇㈤挗鍖栧皬鐗囦换鍔¤〃鏄惁鏈夊緟鍑虹幓鐠�" + temperingGlassInfoList.size());
+        if (temperingGlassInfoList.size() > 0) {
             temperingGlassInfoService.addOutTask(temperingGlassInfoList);
             log.info("2銆佹坊鍔犱换鍔″埌浠诲姟琛�");
             return true;
-        }else{
+        } else {
             log.info("3銆佹病鏈夊彲鍑虹殑鐜荤拑鏃惰幏鍙栨槸鍚︽湁灏忕墖鍒伴綈鐨勭増鍥�");
 
             QueryWrapper<BigStorageCageDetails> wrapper = Wrappers.query();
@@ -183,28 +179,28 @@
                     .groupBy("tempering_layout_id");
             List<Map<String, Object>> temperingLayoutIdList = bigStorageCageDetailsMapper.selectMaps(wrapper);
 
-            boolean key=false;
+            boolean key = false;
             for (Map<String, Object> row : temperingLayoutIdList) {
                 for (Map.Entry<String, Object> entry : row.entrySet()) {
                     String temperingId = entry.getKey();
                     Object temperingNo = entry.getValue();
 
-                        LambdaQueryWrapper<GlassInfo> glassInfoWrapper=new LambdaQueryWrapper<>();
-                        glassInfoWrapper.eq(GlassInfo::getTemperingLayoutId,temperingId)
-                                .orderByDesc(GlassInfo::getTemperingFeedSequence);
-                        List<GlassInfo> glassInfoList= glassInfoService.list(glassInfoWrapper);
-                        if(glassInfoList.size()==Integer.parseInt(temperingNo.toString())){
-                            for (GlassInfo glassInfo:glassInfoList
-                            ) {
+                    LambdaQueryWrapper<GlassInfo> glassInfoWrapper = new LambdaQueryWrapper<>();
+                    glassInfoWrapper.eq(GlassInfo::getTemperingLayoutId, temperingId)
+                            .orderByDesc(GlassInfo::getTemperingFeedSequence);
+                    List<GlassInfo> glassInfoList = glassInfoService.list(glassInfoWrapper);
+                    if (glassInfoList.size() == Integer.parseInt(temperingNo.toString())) {
+                        for (GlassInfo glassInfo : glassInfoList
+                        ) {
 
-                                TemperingGlassInfo temperingGlassInfo=new TemperingGlassInfo();
-                                BeanUtils.copyProperties(glassInfo, temperingGlassInfo);
-                                temperingGlassInfoService.save(temperingGlassInfo);
+                            TemperingGlassInfo temperingGlassInfo = new TemperingGlassInfo();
+                            BeanUtils.copyProperties(glassInfo, temperingGlassInfo);
+                            temperingGlassInfoService.save(temperingGlassInfo);
 
-                            }
-                            key=true;
                         }
-                    if(key){
+                        key = true;
+                    }
+                    if (key) {
                         return false;
                     }
                 }
@@ -217,28 +213,40 @@
     @Override
     public void updateRemainWidth(int slot) {
         log.info("鑾峰彇璇ユ牸瀛愬唴鐜荤拑淇℃伅锛岃绠楁牸瀛愬墿浣欏搴�");
-        Integer width = 5000;
-        List<BigStorageCageDetails> bigStorageCageDetailsList = Collections.singletonList(bigStorageCageDetailsMapper.selectById(slot));
+        double width = 5000;
+        LambdaQueryWrapper<BigStorageCageDetails> bigStorageCageDetailsWrapper = new LambdaQueryWrapper();
+        bigStorageCageDetailsWrapper
+                .eq(BigStorageCageDetails::getSlot, slot)
+                .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL);
+
+        List<BigStorageCageDetails> bigStorageCageDetailsList = bigStorageCageDetailsMapper.selectList(bigStorageCageDetailsWrapper);
         for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList
         ) {
-            width -= Integer.parseInt(bigStorageCageDetails.getWidth().toString()) + bigStorageCageDetails.getGap();
+            double widths = bigStorageCageDetails.getWidth();
+            double gap = bigStorageCageDetails.getGap();
+            width -= widths + gap;
         }
         //淇敼鏍煎瓙鍓╀綑瀹藉害
         BigStorageCage bigStorageCage = new BigStorageCage();
-        bigStorageCage.setRemainWidth(width);
+        bigStorageCage.setRemainWidth((int) width);
         UpdateWrapper<BigStorageCage> bigStorageCageWrapper = new UpdateWrapper<>();
-        bigStorageCageWrapper.eq("remain_width", width);
+        bigStorageCageWrapper.eq("slot", slot);
         bigStorageCageMapper.update(bigStorageCage, bigStorageCageWrapper);
     }
 
     //鏌ヨ澶х悊鐗囦俊鎭紝鍓嶇灞曠ず鐢�
     @Override
     public List<BigStorageCage> querybigStorageCageDetail(int deviceId) {
-        LambdaQueryWrapper<BigStorageCage> bigStorageCageWrapper =new LambdaQueryWrapper<>();
-        LambdaQueryWrapper<BigStorageCageDetails> bigStorageCageDetailsWrapper =new LambdaQueryWrapper<>();
-        if(deviceId!=0){
-            bigStorageCageWrapper.eq(BigStorageCage::getDeviceId,deviceId);
-            bigStorageCageDetailsWrapper.eq(BigStorageCageDetails::getDeviceId,deviceId);
+        LambdaQueryWrapper<BigStorageCage> bigStorageCageWrapper = new LambdaQueryWrapper<>();
+        LambdaQueryWrapper<BigStorageCageDetails> bigStorageCageDetailsWrapper = new LambdaQueryWrapper<>();
+        bigStorageCageDetailsWrapper
+                .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                .or()
+                .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL);
+        if (deviceId != 0) {
+            bigStorageCageWrapper.eq(BigStorageCage::getDeviceId, deviceId);
+            bigStorageCageDetailsWrapper.eq(BigStorageCageDetails::getDeviceId, deviceId);
         }
 
         List<BigStorageCage> bigStorageCages = bigStorageCageMapper.selectList(bigStorageCageWrapper);
@@ -254,6 +262,19 @@
         return bigStorageCages;
     }
 
+    //鏌ヨ澶х悊鐗囦俊鎭紝鍓嶇灞曠ず鐢�
+    @Override
+    public Map<Integer, List<BigStorageCage>> querybigStorageCageDetail() {
+
+        MPJLambdaWrapper<BigStorageCage> wrapper = new MPJLambdaWrapper<>();
+        wrapper.selectAll(BigStorageCage.class).selectCollection(BigStorageCageDetails.class, BigStorageCage::getBigStorageCageDetails)
+                .leftJoin(BigStorageCageDetails.class, on -> on.eq(BigStorageCageDetails::getSlot, BigStorageCage::getSlot)
+                        .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN, Const.GLASS_STATE_ARTIFICIAL));
+        List<BigStorageCage> bigStorageCages = bigStorageCageMapper.selectJoinList(BigStorageCage.class, wrapper);
+        Map<Integer, List<BigStorageCage>> listMap = bigStorageCages.stream().collect(Collectors.groupingBy(item -> item.getDeviceId()));
+        return listMap;
+    }
+
     //绗煎瓙浣跨敤鎯呭喌锛岀晫闈㈠睍绀虹敤
     @Override
     public List<Map<String, Object>> selectBigStorageCageUsage() {
@@ -261,18 +282,18 @@
         wrapper.select("device_id,ROUND(1 - SUM(CASE WHEN remain_width = 5000 THEN 1 ELSE 0 END) / COUNT(device_id), 2) AS percentage,COUNT(device_id) - SUM(CASE WHEN remain_width = 5000 THEN 1 ELSE 0 END) AS count")
 
                 .groupBy("device_id");
-        List<Map<String, Object>> bigStorageCageUsages=baseMapper.selectMaps(wrapper);
+        List<Map<String, Object>> bigStorageCageUsages = baseMapper.selectMaps(wrapper);
 
         return bigStorageCageUsages;
     }
 
     //绗煎瓙鐨勫惎鐢�/绂佺敤
     @Override
-    public void updateStorageCageDisabled(int slot,int enableState){
-        BigStorageCage bigStorageCage=new BigStorageCage();
+    public void updateStorageCageDisabled(int slot, int enableState) {
+        BigStorageCage bigStorageCage = new BigStorageCage();
         bigStorageCage.setEnableState(enableState);
         LambdaQueryWrapper<BigStorageCage> bigStorageCageWrapper = new LambdaQueryWrapper<>();
-        bigStorageCageWrapper.eq(BigStorageCage::getSlot,slot);
-        baseMapper.update(bigStorageCage,bigStorageCageWrapper);
+        bigStorageCageWrapper.eq(BigStorageCage::getSlot, slot);
+        baseMapper.update(bigStorageCage, bigStorageCageWrapper);
     }
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageFeedTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageFeedTask.java
index c8e0a81..d539f7c 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageFeedTask.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageFeedTask.java
@@ -42,7 +42,7 @@
      * 鐩爣浣嶇疆
      */
     @ApiModelProperty(value = "鐩爣浣嶇疆", position = 4)
-    private Integer targetSlot;
+    private int targetSlot;
 
     /**
      * 鐜荤拑绫诲瀷
@@ -60,7 +60,7 @@
      * 绾胯矾
      */
     @ApiModelProperty(value = "绾胯矾", position = 7)
-    private Integer line;
+    private int line;
     /**
      * 瀹藉害
      */
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java
index a9959d5..b439101 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java
@@ -2,16 +2,16 @@
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.io.Serializable;
-
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.io.Serializable;
+
 /**
  * <p>
- * 
+ *
  * </p>
  *
  * @author zhoush
@@ -24,11 +24,23 @@
 
     private static final long serialVersionUID = 1L;
 
+    public BigStorageCageOutTask() {
+    }
+
+    public BigStorageCageOutTask(String glassId, Integer startSlot, Integer endSlot, Integer width, Integer trainNumber, Integer serialNumber, Integer taskState) {
+        this.glassId = glassId;
+        this.startSlot = startSlot;
+        this.endSlot = endSlot;
+        this.trainNumber = trainNumber;
+        this.serialNumber = serialNumber;
+        this.taskState = taskState;
+    }
+
     /**
      * 涓婚敭id
      */
-      @ApiModelProperty(value = "涓婚敭id", position = 2)
-      @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭id", position = 2)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     /**
@@ -66,6 +78,5 @@
      */
     @ApiModelProperty(value = "浠诲姟鐘舵��", position = 8)
     private Integer taskState;
-
 
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageFeedTaskMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageFeedTaskMapper.java
index 3e0794e..7c57951 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageFeedTaskMapper.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageFeedTaskMapper.java
@@ -1,8 +1,10 @@
 package com.mes.bigstoragetask.mapper;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.mes.bigstorage.entity.BigStorageDTO;
 import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -14,8 +16,10 @@
  * @author zhoush
  * @since 2024-04-16
  */
-@DS("salve_hangzhoumes")
-public interface BigStorageCageFeedTaskMapper extends BaseMapper<BigStorageCageFeedTask> {
+@DS("salve_hangzhoumes_1")
+public interface BigStorageCageFeedTaskMapper extends MPJBaseMapper<BigStorageCageFeedTask> {
 
-    List<String> querySitToUpGlass();
+    List<Integer> querySitToUpGlass();
+
+    BigStorageDTO querySitToUpRemainWidth(@Param(value = "line") Integer line);
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageOutTaskMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageOutTaskMapper.java
index 4140cfa..8e53da7 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageOutTaskMapper.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageOutTaskMapper.java
@@ -1,8 +1,11 @@
 package com.mes.bigstoragetask.mapper;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
-import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,7 +15,8 @@
  * @author zhoush
  * @since 2024-04-16
  */
-@DS("salve_hangzhoumes")
+@DS("salve_hangzhoumes_1")
 public interface BigStorageCageOutTaskMapper extends BaseMapper<BigStorageCageOutTask> {
 
+    boolean saveBatch(@Param(value = "list") List<BigStorageCageOutTask> list);
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageFeedTaskService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageFeedTaskService.java
index 669023d..40e1827 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageFeedTaskService.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageFeedTaskService.java
@@ -1,7 +1,9 @@
 package com.mes.bigstoragetask.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.yulichang.base.MPJBaseService;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
+import com.mes.bigstorage.entity.BigStorageDTO;
 import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
 
 import java.util.List;
@@ -14,7 +16,7 @@
  * @author zhoush
  * @since 2024-04-16
  */
-public interface BigStorageCageFeedTaskService extends IService<BigStorageCageFeedTask> {
+public interface BigStorageCageFeedTaskService extends MPJBaseService<BigStorageCageFeedTask> {
 
     void addFeedTask(BigStorageCageDetails slotInfo, Integer plcFeedReqLine, int taskType);
 
@@ -23,5 +25,10 @@
     /**
      * 鏌ヨ鍗ц浆绔嬬幓鐠冩槸鍚﹁繘鐗囧畬鎴�
      */
-    List<String> querySitToUpGlass();
+    BigStorageDTO querySitToUpRemainWidth(Integer line);
+
+    /**
+     * 鏌ヨ鍗ц浆绔嬬幓鐠冩槸鍚﹁繘鐗囧畬鎴�
+     */
+    List<Integer> querySitToUpGlass();
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageOutTaskService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageOutTaskService.java
index 2c9a9e2..8987889 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageOutTaskService.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageOutTaskService.java
@@ -1,7 +1,7 @@
 package com.mes.bigstoragetask.service;
 
-import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
 
 import java.util.List;
 
@@ -19,5 +19,7 @@
 
     void updateOutTask();
 
+    boolean saveBatch(List<BigStorageCageOutTask> list);
+
     void deleteOutTask(String glassId);
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageFeedTaskServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageFeedTaskServiceImpl.java
index 716c92a..03110f0 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageFeedTaskServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageFeedTaskServiceImpl.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
+import com.mes.bigstorage.entity.BigStorageDTO;
 import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
 import com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper;
 import com.mes.bigstoragetask.service.BigStorageCageFeedTaskService;
@@ -39,7 +40,12 @@
     }
 
     @Override
-    public List<String> querySitToUpGlass() {
+    public BigStorageDTO querySitToUpRemainWidth(Integer line) {
+        return baseMapper.querySitToUpRemainWidth(line);
+    }
+
+    @Override
+    public List<Integer> querySitToUpGlass() {
         return baseMapper.querySitToUpGlass();
     }
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageOutTaskServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageOutTaskServiceImpl.java
index 32938c2..54f9a88 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageOutTaskServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageOutTaskServiceImpl.java
@@ -1,13 +1,12 @@
 package com.mes.bigstoragetask.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
 import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper;
 import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
 import com.mes.bigstoragetask.mapper.BigStorageCageOutTaskMapper;
 import com.mes.bigstoragetask.service.BigStorageCageOutTaskService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.mes.temperingglass.entity.TemperingGlassInfo;
 import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
 import lombok.extern.slf4j.Slf4j;
@@ -35,14 +34,19 @@
     @Resource
     BigStorageCageDetailsMapper bigStorageCageDetailsMapper;
 
+    @Override
+    public boolean saveBatch(List<BigStorageCageOutTask> list) {
+        return baseMapper.saveBatch(list);
+    }
+
     /**
      * 鏌ヨ浠诲姟淇℃伅
      */
     @Override
-    public List<BigStorageCageOutTask> querybigStorageCageOutTask(int taskState){
-        log.info("鏍规嵁浼犲叆鐨勪换鍔$姸鎬佹煡璇换鍔′俊鎭細"+taskState);
-        LambdaQueryWrapper<BigStorageCageOutTask> getOutTaskWrapper=new LambdaQueryWrapper<>();
-        getOutTaskWrapper.eq(BigStorageCageOutTask::getTaskState,taskState);
+    public List<BigStorageCageOutTask> querybigStorageCageOutTask(int taskState) {
+        log.info("鏍规嵁浼犲叆鐨勪换鍔$姸鎬佹煡璇换鍔′俊鎭細" + taskState);
+        LambdaQueryWrapper<BigStorageCageOutTask> getOutTaskWrapper = new LambdaQueryWrapper<>();
+        getOutTaskWrapper.eq(BigStorageCageOutTask::getTaskState, taskState);
         return baseMapper.selectList(getOutTaskWrapper);
     }
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java
index 304846e..68312bf 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java
@@ -14,7 +14,7 @@
 public class S7object extends Thread {
     public S7control plccontrol; // PLC閫氳绫诲疄渚�
     private EPlcType plcType = EPlcType.S1200; // 瑗块棬瀛怭LC绫诲瀷
-    private String ip = "192.168.10.1"; // plc ip鍦板潃
+    private String ip = "192.168.20.2"; // plc ip鍦板潃
     private int port = 102; // plc 绔彛鍙�
 
 
@@ -25,8 +25,8 @@
         if (plccontrol == null) {
             plccontrol = new S7control(plcType, ip, port, 0, 0);
 
-            String PlcLoadGlass=S7object.class.getResource("/JsonFile/PlcCacheVerticalGlass.json").getPath();
-            //log.info(PLCAutoMes.class.getResource("").getPath());
+            String PlcLoadGlass = System.getProperty("user.dir") + "/JsonFile/PlcCacheVerticalGlass.json";
+            System.out.println("鑾峰彇鍒扮殑鏂囦欢璺緞涓猴細" + PlcLoadGlass);
             PlcMesObject = InitUtil.initword(PlcLoadGlass);
         }
     }
@@ -54,8 +54,9 @@
             }
 
             byte[] getplcvlues = plccontrol.readByte(PlcMesObject.getPlcAddressBegin(), PlcMesObject.getPlcAddressLength());
-            PlcMesObject.setPlcParameterList(getplcvlues);
-
+            if (getplcvlues != null) {
+                PlcMesObject.setPlcParameterList(getplcvlues);
+            }
         }
     }
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/controller/DamageController.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/controller/DamageController.java
deleted file mode 100644
index 29a1038..0000000
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/controller/DamageController.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.mes.damage.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- *  鍓嶇鎺у埗鍣�
- * </p>
- *
- * @author wu
- * @since 2024-06-13
- */
-@RestController
-@RequestMapping("/glassinfo/damage")
-public class DamageController {
-
-}
-
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/entity/Damage.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/entity/Damage.java
deleted file mode 100644
index 0467855..0000000
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/entity/Damage.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.mes.damage.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import java.time.LocalDateTime;
-import java.io.Serializable;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * <p>
- * 
- * </p>
- *
- * @author wu
- * @since 2024-06-13
- */
-@Data
-@EqualsAndHashCode(callSuper = false)
-public class Damage implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-      @TableId(value = "id", type = IdType.AUTO)
-    private Long id;
-
-    private String glassId;
-
-    private Integer deviceId;
-
-    private String engineerId;
-
-    private Integer temperingLayoutId;
-
-    private LocalDateTime damageTime;
-
-    private String remark;
-
-    private Integer type;
-
-    private Integer status;
-
-
-}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/service/DamageService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/service/DamageService.java
deleted file mode 100644
index ae90667..0000000
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/service/DamageService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.mes.damage.service;
-
-import com.mes.damage.entity.Damage;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
- * <p>
- *  鏈嶅姟绫�
- * </p>
- *
- * @author wu
- * @since 2024-06-13
- */
-public interface DamageService extends IService<Damage> {
-
-}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/controller/TaskCacheController.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/controller/TaskCacheController.java
deleted file mode 100644
index 23b286a..0000000
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/controller/TaskCacheController.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.mes.edgstoragetask.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- *  鍓嶇鎺у埗鍣�
- * </p>
- *
- * @author zhoush
- * @since 2024-04-16
- */
-@RestController
-@RequestMapping("/task-cache")
-public class TaskCacheController {
-    
-}
-
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/entity/TaskCache.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/entity/TaskCache.java
deleted file mode 100644
index c307e69..0000000
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/entity/TaskCache.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.mes.edgstoragetask.entity;
-
-import com.baomidou.mybatisplus.annotation.TableId;
-import java.io.Serializable;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * <p>
- * 
- * </p>
- *
- * @author zhoush
- * @since 2024-04-16
- */
-@Data
-@EqualsAndHashCode(callSuper = false)
-public class TaskCache implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * ID缂栧彿
-     */
-      @TableId("ID")
-    private Long id;
-
-    /**
-     * 璧峰
-     */
-    private String startCell;
-
-    /**
-     * 鐩爣
-     */
-    private String endCell;
-
-    /**
-     * 浠诲姟绫诲瀷 1:杩�   2锛氬嚭
-     */
-    private String taskType;
-
-    /**
-     * 浠诲姟鐘舵�� 0 鏈紑濮�  1宸插畬鎴�
-     */
-    private String taskStauts;
-
-
-}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/mapper/TaskCacheMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/mapper/TaskCacheMapper.java
deleted file mode 100644
index dee45f9..0000000
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/mapper/TaskCacheMapper.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.mes.edgstoragetask.mapper;
-
-import com.baomidou.dynamic.datasource.annotation.DS;
-import com.mes.edgstoragetask.entity.TaskCache;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
- * <p>
- *  Mapper 鎺ュ彛
- * </p>
- *
- * @author zhoush
- * @since 2024-04-16
- */
-@DS("salve_hangzhoumes")
-public interface TaskCacheMapper extends BaseMapper<TaskCache> {
-
-}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/service/TaskCacheService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/service/TaskCacheService.java
deleted file mode 100644
index 337dbb0..0000000
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/service/TaskCacheService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.mes.edgstoragetask.service;
-
-import com.mes.edgstoragetask.entity.TaskCache;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
- * <p>
- *  鏈嶅姟绫�
- * </p>
- *
- * @author zhoush
- * @since 2024-04-16
- */
-public interface TaskCacheService extends IService<TaskCache> {
-
-}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/service/impl/TaskCacheServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/service/impl/TaskCacheServiceImpl.java
deleted file mode 100644
index 8253eeb..0000000
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/service/impl/TaskCacheServiceImpl.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.mes.edgstoragetask.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
-import com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper;
-import com.mes.edgstoragetask.entity.TaskCache;
-import com.mes.edgstoragetask.mapper.TaskCacheMapper;
-import com.mes.edgstoragetask.service.TaskCacheService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.util.List;
-
-/**
- * <p>
- *  鏈嶅姟瀹炵幇绫�
- * </p>
- *
- * @author zhoush
- * @since 2024-04-16
- */
-@Qualifier("")
-@Service
-public class TaskCacheServiceImpl extends ServiceImpl<TaskCacheMapper, TaskCache> implements TaskCacheService {
-
-
-}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/glassinfo/controller/GlassInfoController.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/glassinfo/controller/GlassInfoController.java
deleted file mode 100644
index 1eaae48..0000000
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/glassinfo/controller/GlassInfoController.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.mes.glassinfo.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- *  鍓嶇鎺у埗鍣�
- * </p>
- *
- * @author zhoush
- * @since 2024-03-27
- */
-@RestController
-@RequestMapping("/glassInfo")
-public class GlassInfoController {
-
-}
-
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java
deleted file mode 100644
index f2595d8..0000000
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.mes.glassinfo.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.mes.glassinfo.entity.GlassInfo;
-
-/**
- * <p>
- *  Mapper 鎺ュ彛
- * </p>
- *
- * @author zhoush
- * @since 2024-03-27
- */
-public interface GlassInfoMapper extends BaseMapper<GlassInfo> {
-
-}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/glassinfo/service/GlassInfoService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/glassinfo/service/GlassInfoService.java
deleted file mode 100644
index 981b2b7..0000000
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/glassinfo/service/GlassInfoService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.mes.glassinfo.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.mes.glassinfo.entity.GlassInfo;
-
-/**
- * <p>
- *  鏈嶅姟绫�
- * </p>
- *
- * @author zhoush
- * @since 2024-03-27
- */
-public interface GlassInfoService extends IService<GlassInfo> {
-
-}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
deleted file mode 100644
index a30866a..0000000
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.mes.glassinfo.service.impl;
-
-import com.mes.glassinfo.entity.GlassInfo;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.mes.glassinfo.mapper.GlassInfoMapper;
-import com.mes.glassinfo.service.GlassInfoService;
-import org.springframework.stereotype.Service;
-
-/**
- * <p>
- *  鏈嶅姟瀹炵幇绫�
- * </p>
- *
- * @author zhoush
- * @since 2024-03-27
- */
-@Service
-public class GlassInfoServiceImpl extends ServiceImpl<GlassInfoMapper, GlassInfo> implements GlassInfoService {
-
-}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java
index bc3d222..aa06134 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java
@@ -36,7 +36,7 @@
      * fixedRate : 涓婁竴涓皟鐢ㄥ紑濮嬪悗鍐嶆璋冪敤鐨勫欢鏃讹紙涓嶇敤绛夊緟涓婁竴娆¤皟鐢ㄥ畬鎴愶級
      * fixedDelay : 涓婁竴涓皟鐢ㄧ粨鏉熷悗鍐嶆璋冪敤鐨勫欢鏃�
      */
-    @Scheduled(fixedDelay = 5000)
+    @Scheduled(fixedDelay = 1000)
     public void plcStorageCageTask() throws InterruptedException {
         JSONObject jsonObject = new JSONObject();
         try {
@@ -65,9 +65,6 @@
             //鍑虹墖闃熷垪
             List<TemperingGlassInfo> temperingGlassInfoList= temperingGlassInfoService.list();
             jsonObject.append("temperingGlassInfoList", temperingGlassInfoList);
-
-            //鎶ヨ淇℃伅
-            jsonObject.append("bigStorageCageFullAlarm", PlcStorageCageTask.bigStorageCageFullAlarm);
 
             //鐞嗙墖绗艰〃鏍间俊鎭�
             jsonObject.append("bigStorageCageInfo", bigStorageCageService.querybigStorageCageDetail(0));
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
index 02228b4..4d4ec63 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
@@ -2,12 +2,20 @@
 
 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.toolkit.JoinWrappers;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.mes.base.entity.BigStorageCageBaseInfo;
+import com.mes.bigstorage.entity.BigStorageCage;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
 import com.mes.bigstorage.entity.BigStorageDTO;
+import com.mes.bigstorage.entity.dto.SlotSequenceDTO;
+import com.mes.bigstorage.entity.dto.TemperingLayoutDTO;
 import com.mes.bigstorage.service.BigStorageCageDetailsService;
 import com.mes.bigstorage.service.BigStorageCageService;
 import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
+import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
 import com.mes.bigstoragetask.service.BigStorageCageFeedTaskService;
 import com.mes.bigstoragetask.service.BigStorageCageOutTaskService;
 import com.mes.common.S7object;
@@ -17,22 +25,18 @@
 import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
 import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.glassinfo.service.GlassInfoService;
+import com.mes.temperingglass.entity.TemperingGlassInfo;
 import com.mes.temperingglass.service.TemperingGlassInfoService;
+import com.mes.tools.S7control;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicReference;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -57,217 +61,237 @@
     @Resource
     private TemperingGlassInfoService temperingGlassInfoService;
 
+    private static final String REQUEST_WORD = "1";
+
     @Value("${mes.sequence.order}")
     private boolean sequenceOrder;
 
-    public static boolean bigStorageCageFullAlarm = false;
+    @Value("${mes.carWidth}")
+    private Integer carWidth;
 
-    private int line1Time = 0;
-    private int line2Time = 0;
+    @Value("${mes.slotWidth}")
+    private Integer slotWidth;
 
-    /**
-     * fixedRate : 涓婁竴涓皟鐢ㄥ紑濮嬪悗鍐嶆璋冪敤鐨勫欢鏃讹紙涓嶇敤绛夊緟涓婁竴娆¤皟鐢ㄥ畬鎴愶級
-     * fixedDelay : 涓婁竴涓皟鐢ㄧ粨鏉熷悗鍐嶆璋冪敤鐨勫欢鏃�
-     */
-//    @Scheduled(fixedDelay = 5000)
-//    public void plcStorageCageTask() throws InterruptedException {
-//
-//        PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
-//        try {
-//
-//            String plcFeedGlassid = "";
-//            String plcFeedReqLine = "0";
-//            if ("1".equals(plcParameterObject.getPlcParameter("D01Request").getValue())) {
-//                plcFeedReqLine = "1";
-//                plcFeedGlassid = plcParameterObject.getPlcParameter("D01ID1").getValue();
-//            }
-//            if ("1".equals(plcParameterObject.getPlcParameter("D04Request").getValue())) {
-//                plcFeedReqLine = "2";
-//                plcFeedGlassid = plcParameterObject.getPlcParameter("D04ID1").getValue();
-//            }
-//            line1Time += 1;
-//            line2Time += 1;
-//
-//            if (!("0".equals(plcFeedReqLine))) {
-//                log.info("1銆丳lc杩涚墖璇锋眰鏃�");
-//                BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails();
-//                GlassInfo glassInfo = glassInfoService.getById(plcFeedGlassid);
-//                log.info("2銆佹牴鎹幓鐠僫d鑾峰彇鐜荤拑淇℃伅" + glassInfo);
-//                if (bigStorageCageDetailsService.selectGetBoard(plcFeedReqLine) >= 0) {
-//                    BigStorageCageDetails slotInfo = bigStorageCageService.feedGlass(glassInfo, bigStorageCageDetails);
-//                    if (slotInfo != null) {
-//                        int taskType = edgGlassTaskInfoService.judgeTasktype(plcFeedReqLine);
-//                        log.info("3銆佹煡璇换鍔¤〃鍒ゆ柇褰撳墠浠诲姟绫诲瀷涓轰笂杞︾瓑鍒拌繕鏄笂杞﹀惎鍔�" + taskType);
-//                        bigStorageCageFeedTaskService.addFeedTask(slotInfo, Integer.parseInt(plcFeedReqLine), taskType);
-//                        log.info("4銆佹坊鍔犱换鍔″埌浠诲姟琛�");
-//                        bigStorageCageFullAlarm = false;
-//                    } else {
-//                        bigStorageCageFullAlarm = true;
-//                    }
-//                } else {
-//                    log.info("褰撳墠鐜荤拑瀹藉害涓嶅涓婅溅" + glassInfo);
-//                    if (!("1".equals(plcFeedReqLine))) {
-//                        S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D02Go").getAddress(), 1);
-//                    } else {
-//                        S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D05Go").getAddress(), 1);
-//                    }
-//                }
-//            } else {
-//                List<BigStorageCageFeedTask> bigStorageCageFeedTaskList = bigStorageCageFeedTaskService.querybigStorageCageFeedTask(1);
-//                log.info("5銆佹煡璇换鍔¤〃鏄惁鏈夊凡缁忓畬鎴愮殑杩涚墖浠诲姟" + bigStorageCageFeedTaskList.size());
-//                for (BigStorageCageFeedTask bigStorageCageFeedTask : bigStorageCageFeedTaskList
-//                ) {
-//                    BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails();
-//                    bigStorageCageDetails.setId(bigStorageCageFeedTask.getId());
-//                    bigStorageCageDetails.setState(1);
-//                    bigStorageCageDetailsService.updateById(bigStorageCageDetails);
-//                    log.info("6銆佷慨鏀圭悊鐗囩璇︽儏鐜荤拑鐘舵��");
-//                    bigStorageCageFeedTaskService.removeById(bigStorageCageFeedTask);
-//                    log.info("7銆佸垹闄ゅ凡缁忓畬鎴愮殑杩涚墖浠诲姟");
-//                }
-//                //鍚姩闃堝��
-//                if (line1Time >= 300) {
-//                    if ("0".equals(plcParameterObject.getPlcParameter("D05Go").getValue())) {
-//                        S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D02Go").getAddress(), 1);
-//                    }
-//                }
-//                if (line2Time >= 300) {
-//                    if ("0".equals(plcParameterObject.getPlcParameter("D02Go").getValue())) {
-//                        S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D05Go").getAddress(), 1);
-//                    }
-//                }
-//            }
-//
-//            //鏌ヨ鍑虹墖琛ㄦ槸鍚︽湁浠诲姟鏈畬鎴愮殑浠诲姟
-//            List<BigStorageCageOutTask> bigStorageCageOutTask = bigStorageCageOutTaskService.querybigStorageCageOutTask(0);
-//            if (bigStorageCageOutTask.size() == 0) {
-//                boolean result = bigStorageCageService.outGlass();
-//                log.info("8銆佹病鏈夋湭瀹屾垚浠诲姟鏃惰皟鐢ㄥ嚭鐗囨帴鍙�");
-//                if (result == false) {
-//                    temperingGlassInfoService.schedulingTask();
-//                }
-//            }
-//            bigStorageCageOutTaskService.updateOutTask();
-//            log.info("9銆佹牴鎹换鍔¤〃鐘舵�佷慨鏀归挗鍖栧皬鐗囪〃浠诲姟鐘舵��");
-//
-//            //鏉ヤ笉鍙婇�佹椂鐩存帴璧�
-//            String line = Integer.toString(edgGlassTaskInfoService.startTask());
-//
-//            if (!(line.equals(plcFeedReqLine))) {
-//                S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D02Go").getAddress(), 1);
-//            } else {
-//                S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D05Go").getAddress(), 1);
-//            }
-//
-//
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//    }
-    @Scheduled(fixedDelay = 5000)
+    @Value("${mes.inCarMaxSize}")
+    private Integer inCarMaxSize;
+
+    @Value("${mes.outCarMaxSize}")
+    private Integer outCarMaxSize;
+
+    @Value("${mes.galssGap}")
+    private Integer galssGap;
+
+    @Scheduled(fixedDelay = 300)
     public void plcToHomeEdgScan() {
         PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
-        String d01Request = plcParameterObject.getPlcParameter("D01Request").getValue();
-        String d01ID1 = plcParameterObject.getPlcParameter("D01ID1").getValue();
-        String d04Request = plcParameterObject.getPlcParameter("D04Request").getValue();
-        String d04ID1 = plcParameterObject.getPlcParameter("D04ID1").getValue();
-        log.info("1銆佽幏鍙栧埌鐨勮姹傚瓧d01涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{};鑾峰彇鍒扮殑璇锋眰瀛梔04涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{};",
-                d01Request, d01ID1, d04Request, d04ID1);
-        if (!"1".equals(d01Request) && !"1".equals(d04Request)) {
+        String d01Id = plcParameterObject.getPlcParameter("D01ID").getValue();
+        String d04Id = plcParameterObject.getPlcParameter("D04ID").getValue();
+        //D02id鍒ゆ柇鏄惁涓虹┖  纭鏄惁绌洪棽 鍏佽杩涚墖
+        String d02State = plcParameterObject.getPlcParameter("D02ID").getValue();
+        String d03State = plcParameterObject.getPlcParameter("D03State").getValue();
+        String d05State = plcParameterObject.getPlcParameter("D05State").getValue();
+        String mesD01Address = plcParameterObject.getPlcParameter("MESToD01").getAddress();
+        String mesD04Address = plcParameterObject.getPlcParameter("MESToD04").getAddress();
+        String d01ToMES = plcParameterObject.getPlcParameter("D01ToMES").getValue();
+        if (!REQUEST_WORD.equals(d01ToMES)) {
+            log.info("璇锋眰瀛椾负{}锛岀粨鏉熸湰娆℃壂鎻忚繘鍗ц浆绔嬩换鍔�", d01ToMES);
+            return;
+        }
+
+        log.info("1銆佽幏鍙杁01Id鎵弿ID涓猴細{};鑾峰彇d04Id鎵弿ID涓猴細{};", d01Id, d04Id);
+        if (StringUtils.isBlank(d01Id) && StringUtils.isBlank(d04Id)) {
             log.info("涓ゆ潯绾挎湭鏀跺埌杩涚墖浠诲姟锛岀粨鏉熸湰娆℃壂鎻忚繘鍗ц浆绔嬩换鍔�");
             return;
         }
-        //        0锛氫笉骞查 锛� 1锛氭潯浠舵弧瓒虫儏鍐典笅绔嬪嵆鍙戣溅
-        String d02GoAdress = plcParameterObject.getPlcParameter("D02Go").getAddress();
-        //        0锛氫笉骞查 锛� 1锛氭潯浠舵弧瓒虫儏鍐典笅绔嬪嵆鍙戣溅
-        String d05GoAdress = plcParameterObject.getPlcParameter("D05Go").getAddress();
-        Boolean flag01 = Boolean.FALSE;
-        Boolean flag04 = Boolean.FALSE;
+        if (REQUEST_WORD.equals(d03State) && REQUEST_WORD.equals(d05State)) {
+            log.info("涓ゆ潯绾垮崸杞珛鍧囧湪鎵ц浠诲姟锛岀粨鏉熸湰娆℃壂鎻忚繘鍗ц浆绔嬩换鍔�");
+            return;
+        }
+//        Boolean flag01 = Boolean.FALSE;
+//        Boolean flag04 = Boolean.FALSE;
         //鎸夌収绾胯矾鍙婄幓鐠僫d鑾峰彇鐩搁偦涓ゅ潡鐜荤拑 鍗ц浆绔嬩笂鐨勭幓鐠�
-        if ("1".equals(d01Request)) {
-            flag01 = judgeGlassTypeStatus(d01ID1, Const.A09_OUT_TARGET_POSITION);
+        if (StringUtils.isNotBlank(d01Id) && (StringUtils.isBlank(d02State) || !REQUEST_WORD.equals(d03State))) {
+            judgeGlassTypeStatus(d01Id, Const.A09_OUT_TARGET_POSITION, mesD01Address);
         }
-        if ("1".equals(d04Request)) {
-            flag04 = judgeGlassTypeStatus(d04ID1, Const.A10_OUT_TARGET_POSITION);
+        if (StringUtils.isNotBlank(d04Id) && !REQUEST_WORD.equals(d05State)) {
+            judgeGlassTypeStatus(d04Id, Const.A10_OUT_TARGET_POSITION, mesD04Address);
         }
-        if (flag01 && flag04) {
-            //姣旇緝鏈�鏃╀竴鐗囦换鍔$殑鐗堝浘id鍙婄増搴� 姹傚嚭鍗ц浆绔嬬殑绾胯矾
-            Integer startLine = getStartLine();
-            //璁$畻鐩爣鏍煎瓙锛屽彂閫佸惎鍔ㄤ换鍔�
-            computeTargetByLine(startLine, d02GoAdress, d05GoAdress);
-        } else if (flag01 || flag04) {
-            Integer startLine = flag01.equals(Boolean.TRUE) ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
-            //璁$畻鐩爣鏍煎瓙锛屽彂閫佸惎鍔ㄤ换鍔�
-            computeTargetByLine(startLine, d02GoAdress, d05GoAdress);
-        } else {
-            log.info("涓ゆ潯绾挎湭鏀跺埌杩涚墖浠诲姟锛岀粨鏉熸湰娆℃壂鎻忚繘鍗ц浆绔嬩换鍔�");
-        }
+        log.info("缁撴潫鎵爜浠诲姟");
+//        if (flag01 && flag04) {
+//            //姣旇緝鏈�鏃╀竴鐗囦换鍔$殑鐗堝浘id鍙婄増搴� 姹傚嚭鍗ц浆绔嬬殑绾胯矾
+//            Integer startLine = getStartLine();
+//            //璁$畻鐩爣鏍煎瓙锛屽彂閫佸惎鍔ㄤ换鍔�
+//            computeTargetByLine(startLine);
+//        } else if (flag01 || flag04) {
+//            Integer startLine = flag01.equals(Boolean.TRUE) ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
+//            //璁$畻鐩爣鏍煎瓙锛屽彂閫佸惎鍔ㄤ换鍔�
+//            computeTargetByLine(startLine);
+//        } else {
+//            log.info("涓ゆ潯绾挎湭鏀跺埌杩涚墖浠诲姟锛岀粨鏉熸湰娆℃壂鎻忚繘鍗ц浆绔嬩换鍔�");
+//        }
     }
 
-    @Scheduled(fixedDelay = 5000)
+    @Scheduled(fixedDelay = 300)
     public void plcToHomeEdgFreeCarTask() {
         PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
-        String freeCar = plcParameterObject.getPlcParameter("freeCar").getValue();
-        if ("1".equals(freeCar)) {
-            log.info("澶ц溅闈炵┖闂�");
+        String e01Status = plcParameterObject.getPlcParameter("E01State").getValue();
+        String d03ToMES = plcParameterObject.getPlcParameter("D03ToMES").getValue();
+        String d05ToMES = plcParameterObject.getPlcParameter("D05ToMES").getValue();
+        log.info("鎵ц绌鸿溅閫佺墖浠诲姟锛岃幏鍙栧埌鐨勫ぇ杞︾姸鎬佷负{}锛屽崸杞珛鐘舵�佸垎鍒负d03:{}锛宒05:{}", e01Status, d03ToMES, d05ToMES);
+        if (REQUEST_WORD.equals(e01Status)) {
+            log.info("杩涚墖澶ц溅闈炵┖闂诧紝缁撴潫閫佺墖浠诲姟");
             return;
         }
-        String d01Request = plcParameterObject.getPlcParameter("D01Request").getValue();
-        String d01ID1 = plcParameterObject.getPlcParameter("D01ID1").getValue();
-        String d04Request = plcParameterObject.getPlcParameter("D04Request").getValue();
-        String d04ID1 = plcParameterObject.getPlcParameter("D04ID1").getValue();
-        log.info("1銆佽幏鍙栧埌鐨勮姹傚瓧d01涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{};鑾峰彇鍒扮殑璇锋眰瀛梔04涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{};",
-                d01Request, d01ID1, d04Request, d04ID1);
+        if (!REQUEST_WORD.equals(d03ToMES) && !REQUEST_WORD.equals(d05ToMES)) {
+            log.info("鍗ц浆绔嬫病鏈夐�佺墖璇锋眰锛岀粨鏉熼�佺墖浠诲姟");
+            return;
+        }
+        LambdaQueryWrapper<BigStorageCageFeedTask> wrapper = new LambdaQueryWrapper<BigStorageCageFeedTask>()
+                .eq(BigStorageCageFeedTask::getTaskType, Const.BIG_STORAGE_IN_RUN)
+                .eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP);
+        //鑾峰彇鍙互鍚姩鍗ц浆绔嬬殑浠诲姟绾胯矾
+        List<BigStorageCageFeedTask> feedTaskList = bigStorageCageFeedTaskService.list(wrapper);
+        if (CollectionUtils.isNotEmpty(feedTaskList)) {
+            if (feedTaskList.size() == 1) {
+                computeTargetByLine(feedTaskList.get(0).getLine());
+                return;
+            } else {
+                //姣旇緝鏈�鏃╀竴鐗囦换鍔$殑鐗堝浘id鍙婄増搴� 姹傚嚭鍗ц浆绔嬬殑绾胯矾
+                Integer startLine = getStartLine();
+//            //璁$畻鐩爣鏍煎瓙锛屽彂閫佸惎鍔ㄤ换鍔�
+                computeTargetByLine(startLine);
+                return;
+            }
+        }
+        String d01Id = plcParameterObject.getPlcParameter("D01ID").getValue();
+        String d04Id = plcParameterObject.getPlcParameter("D04ID").getValue();
+        log.info("1銆佽幏鍙杁01Id鎵弿ID涓猴細{};鑾峰彇d04Id鎵弿ID涓猴細{};", d01Id, d04Id);
         //涓ゆ潯绾块兘鏈夎繘鍗ц浆绔嬩换鍔★紝鐩存帴缁撴潫
-        if (Const.BIG_STORAGE_REQUEST_IN.equals(d01Request)
-                && Const.BIG_STORAGE_REQUEST_IN.equals(d04Request)
-                && StringUtils.isNotBlank(d01ID1)
-                && StringUtils.isNotBlank(d04ID1)) {
-            log.info("涓ゆ潯绾块兘瀛樺湪杩涚墖浠诲姟锛岀粨鏉熶换鍔�");
-            return;
-        }
+//        if (StringUtils.isNotBlank(d01Id) && StringUtils.isNotBlank(d04Id)) {
+//            log.info("涓ゆ潯绾块兘瀛樺湪杩涚墖浠诲姟锛岀粨鏉熶换鍔�");
+//            return;
+//        }
         //鑾峰彇涓ゆ潯绾垮崸杞珛鏄惁鏈夌幓鐠冿紝涓斾换鍔$姸鎬侀兘涓�2
-        List<String> lineList = bigStorageCageFeedTaskService.querySitToUpGlass();
+        List<Integer> lineList = bigStorageCageFeedTaskService.querySitToUpGlass();
         if (CollectionUtils.isEmpty(lineList)) {
             log.info("涓ゆ潯绾垮崸杞珛涓虹┖鎴栬�呮湁杩涚墖浠诲姟鏈畬鎴愶紝缁撴潫浠诲姟");
             return;
         }
-//        0锛氫笉骞查 锛� 1锛氭潯浠舵弧瓒虫儏鍐典笅绔嬪嵆鍙戣溅
-        String d02GoAdress = plcParameterObject.getPlcParameter("D02Go").getAddress();
-        //        0锛氫笉骞查 锛� 1锛氭潯浠舵弧瓒虫儏鍐典笅绔嬪嵆鍙戣溅
-        String d05GoAdress = plcParameterObject.getPlcParameter("D05Go").getAddress();
-        String line1 = lineList.get(0);
-        String flagLine = line1.equals(Const.A09_OUT_TARGET_POSITION) ? d01ID1 : d04ID1;
+        Integer lineFirst = lineList.get(0);
+        String lineGlassId = lineFirst.equals(Const.A09_OUT_TARGET_POSITION) ? d01Id : d04Id;
+        //浠呮湁涓�鏉″厛绗﹀悎鍚姩鍚姩鏉′欢
         if (lineList.size() == 1) {
-            //鍙戦��
-            if (StringUtils.isNotBlank(flagLine)) {
-                return;
+            //濡傛灉杩涚墖璇锋眰浣嗙幓鐠冧负绌猴紝璁$畻浠诲姟琛ㄨ繘鐗囨牸瀛� 鍙戦�佽繘鐗囦换鍔�
+            if (StringUtils.isEmpty(lineGlassId)) {
+                computeTargetByLine(lineFirst);
+            } else {
+                //todo:璁$畻鎵弿鍒扮殑鐜荤拑鏄惁鍙互瀛樿繘鍗ц浆绔�
+                //鑾峰彇鍗ц浆绔嬪墿浣欏搴�
+                if (computeIsRun(lineFirst, lineGlassId)) {
+                    computeTargetByLine(lineFirst);
+                }
             }
-            //璁$畻浠诲姟琛ㄨ繘鐗囨牸瀛� 鍙戦�佽繘鐗囦换鍔�
-            computeTargetByLine(Integer.parseInt(flagLine), d02GoAdress, d05GoAdress);
+            return;
         }
-        if (StringUtils.isBlank(d01ID1) && StringUtils.isBlank(d04ID1)) {
+        //涓ゆ潯鍏堝潎鍙墽琛岃繘鐗囦换鍔★紝鍒ゆ柇涓ゆ潯绾挎槸鍚﹁繘鐗囪姹傛槸鍚﹂兘涓虹┖
+        if (StringUtils.isBlank(d01Id) && StringUtils.isBlank(d04Id)) {
             //姣旇緝鏈�鏃╀竴鐗囦换鍔$殑鐗堝浘id鍙婄増搴� 姹傚嚭鍗ц浆绔嬬殑绾胯矾
             Integer line = getStartLine();
             //璁$畻浠诲姟琛ㄨ繘鐗囨牸瀛� 鍙戦�佽繘鐗囦换鍔�
-            computeTargetByLine(line, d02GoAdress, d05GoAdress);
+            computeTargetByLine(line);
             return;
+        } else if (StringUtils.isNotBlank(d01Id) && StringUtils.isNotBlank(d04Id)) {
+//            todo:涓や釜閮芥湁杩涚墖鐜荤拑
+            if (computeIsRun(Const.A09_OUT_TARGET_POSITION, d01Id) && computeIsRun(Const.A10_OUT_TARGET_POSITION, d04Id)) {
+                //姣旇緝鏈�鏃╀竴鐗囦换鍔$殑鐗堝浘id鍙婄増搴� 姹傚嚭鍗ц浆绔嬬殑绾胯矾
+                Integer line = getStartLine();
+                //璁$畻浠诲姟琛ㄨ繘鐗囨牸瀛� 鍙戦�佽繘鐗囦换鍔�
+                computeTargetByLine(line);
+            } else if (computeIsRun(Const.A09_OUT_TARGET_POSITION, d01Id)) {
+                computeTargetByLine(Const.A09_OUT_TARGET_POSITION);
+            } else if (computeIsRun(Const.A10_OUT_TARGET_POSITION, d04Id)) {
+                computeTargetByLine(Const.A10_OUT_TARGET_POSITION);
+            } else {
+                return;
+            }
+        } else {
+            //锛屾垨鑰呬粎鏈変竴鏉℃湁鐜荤拑
+            //涓�鏉$嚎涓虹┖锛屼竴鏉$嚎鏈夎繘鐗囪姹傛湁鐜荤拑
+            int outLine = StringUtils.isBlank(d01Id) ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
+            //鑾峰彇杩涚墖璇锋眰鐜荤拑涓虹┖鐨勶紝璁$畻浠诲姟琛ㄨ繘鐗囨牸瀛� 鍙戦�佽繘鐗囦换鍔�
+            computeTargetByLine(outLine);
         }
-        int outLine = StringUtils.isBlank(d01ID1) ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
-        //璁$畻浠诲姟琛ㄨ繘鐗囨牸瀛� 鍙戦�佽繘鐗囦换鍔�
-        computeTargetByLine(outLine, d02GoAdress, d05GoAdress);
+
     }
 
-    @Scheduled(fixedDelay = 5000)
+    @Scheduled(fixedDelay = 300)
     public void plcToHomeEdgOutTask() {
 
+        List<BigStorageCageOutTask> outingList = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>().eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_NEW));
+        Assert.isTrue(CollectionUtils.isEmpty(outingList), "鏈夋鍦ㄦ墽琛屽嚭鐗囩殑浠诲姟锛岀粨鏉熷綋鍓嶅嚭鐗囩嚎绋�");
+
+        //鏄惁鏈夋鍦ㄩ挗鍖栫殑鐜荤拑
+        List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.selectJoinList(TemperingGlassInfo.class, new MPJLambdaWrapper<TemperingGlassInfo>()
+                .selectAll(TemperingGlassInfo.class)
+                .leftJoin(BigStorageCageOutTask.class, BigStorageCageOutTask::getGlassId, TemperingGlassInfo::getGlassId)
+                .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW)
+                .isNull(BigStorageCageOutTask::getGlassId)
+                .orderBy(Boolean.TRUE, sequenceOrder, TemperingGlassInfo::getTemperingFeedSequence));
+        if (CollectionUtils.isNotEmpty(temperingGlassInfoList)) {
+            log.info("鏈夋鍦ㄥ嚭鐗囩殑閽㈠寲浠诲姟");
+            computeOutGlassInfo(temperingGlassInfoList, Boolean.TRUE);
+            return;
+        }
+        //鏄惁鏈変汉宸ヤ笅鐗囦换鍔�   鏈夌洿鎺ュ嚭
+        List<BigStorageCageDetails> artificialList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
+                .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL).orderByDesc(BigStorageCageDetails::getWidth));
+        if (CollectionUtils.isNotEmpty(artificialList)) {
+            computeOutGlassInfo(temperingGlassInfoList, Boolean.FALSE);
+            return;
+        }
+        //閽㈠寲浼樺厛锛氳幏鍙栫悊鐗囩  鐜荤拑灏忕墖  鐮存崯琛� 鏁伴噺   鍒ゆ柇绗煎唴鐗堝浘鏄惁鍒伴綈
+        TemperingLayoutDTO temperingLayoutDTO = bigStorageCageDetailsService.temperingIsAll();
+        if (null != temperingLayoutDTO) {
+            //鐜荤拑鍒伴綈
+            //鍒伴綈锛屽皢鐜荤拑灏忕墖鏁版嵁瀛樺叆閽㈠寲灏忕墖琛紝閫昏緫鐢熸垚鍑虹墖浠诲姟  缁撴潫
+            List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.class, JoinWrappers.lambda(GlassInfo.class)
+                    .selectAll(GlassInfo.class)
+                    .select("-1 as state")
+                    .selectAs(BigStorageCageDetails::getSlot, TemperingGlassInfo::getSlot)
+                    .innerJoin(BigStorageCageDetails.class, BigStorageCageDetails::getGlassId, GlassInfo::getGlassId)
+                    .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                    .eq(GlassInfo::getTemperingLayoutId, temperingLayoutDTO.getTemperingLayoutId())
+                    .eq(GlassInfo::getEngineerId, temperingLayoutDTO.getEngineerId()));
+            temperingGlassInfoService.saveBatch(temperingGlassInfos);
+            computeOutGlassInfo(temperingGlassInfoList, Boolean.TRUE);
+            return;
+        }
+        //鏈埌榻� 鎵ц鍐呴儴璋冨害浠诲姟
+        TemperingLayoutDTO temperingOccupySlot = bigStorageCageDetailsService.queryTemperingOccupySlot();
+        if (null != temperingOccupySlot) {
+            List<SlotSequenceDTO> slotSequenceList = bigStorageCageDetailsService.queryGlassMaxAndMin(temperingOccupySlot.getEngineerId(), temperingOccupySlot.getTemperingLayoutId());
+            for (int i = 0; i < slotSequenceList.size() - 1; i++) {
+                SlotSequenceDTO first = slotSequenceList.get(i);
+                SlotSequenceDTO second = slotSequenceList.get(i + 1);
+                int slotWidth = carWidth - first.getRemainWidth() - galssGap;
+                if (first.getMinSequence() == second.getMaxSequence() + 1
+                        && second.getRemainWidth() > slotWidth) {
+                    List<BigStorageCageDetails> list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
+                            .eq(BigStorageCageDetails::getSlot, first.getSlot()).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN));
+                    List<BigStorageCageOutTask> outTasks = list.stream().map(e -> new BigStorageCageOutTask(e.getGlassId(), first.getSlot(), second.getSlot(),
+                            slotWidth, 0, 0, 1)).collect(Collectors.toList());
+                    bigStorageCageOutTaskService.saveBatch(outTasks);
+                    return;
+                }
+            }
+        }
     }
 
 
     /**
      * 鎸夌収鐜荤拑id鍒ゆ柇鐜荤拑鐘舵�佸強鍗ц浆绔嬫槸鍚﹀彲鐩存帴鍚姩
      */
-    public Boolean judgeGlassTypeStatus(String glassId, Integer line) {
+    public Boolean judgeGlassTypeStatus(String glassId, Integer line, String mesAddress) {
         //1銆佽幏鍙栦换鍔¤〃涓浉閭荤幓鐠�
         List<EdgGlassTaskInfo> edgGlassTaskInfoList = edgGlassTaskInfoService.list(new LambdaQueryWrapper<EdgGlassTaskInfo>()
                 .eq(EdgGlassTaskInfo::getLine, line)
@@ -275,33 +299,52 @@
                 .orderByAsc(EdgGlassTaskInfo::getTime));
         Assert.isFalse(CollectionUtils.isEmpty(edgGlassTaskInfoList), "璇嗗埆鐜荤拑淇℃伅鏈嚭鐜板湪灏哄琛ㄤ腑,鑾峰彇鐩搁偦涓ゅ潡鐜荤拑澶辫触");
         //2銆佽幏鍙栧崸杞珛鍓╀綑瀹藉害
-        Map<String, Object> map = bigStorageCageFeedTaskService.getMap(new QueryWrapper<BigStorageCageFeedTask>()
-                .select("cast(5000 - sum(width + 20)  as INT)as remainWidth")
-                .eq("line", line).eq("task_state", Const.BIG_STORAGE_IN_UP));
-        Integer remainWidth = null == map ? 5000 : Integer.parseInt(map.get("remainWidth") + "");
+        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 = edgGlassTaskInfoList.get(0).getWidth();
         if (edgGlassTaskInfoList.size() == 1) {
             if (remainWidth >= widthFirst) {
-                addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst);
-                return Boolean.FALSE;
+                if (glassCount <= 5) {
+                    addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst);
+                } else {
+                    addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst);
+                }
             } else {
-                //璁板綍鏃犳硶鏀句笅鐜荤拑锛屽悗缁垽鏂惎鍔�
-                return Boolean.TRUE;
+                flag = Boolean.FALSE;
             }
-        }
-        Integer widthSecond = edgGlassTaskInfoList.get(1).getWidth();
-        if (remainWidth >= widthFirst) {
-            if (remainWidth - widthFirst - Const.BIG_STORAGE_GAP >= widthSecond) {
-                addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthSecond);
-            } else {
-                addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthSecond);
-            }
-            return Boolean.FALSE;
-
         } else {
-            return Boolean.TRUE;
+            Integer widthSecond = edgGlassTaskInfoList.get(1).getWidth();
+            if (remainWidth >= widthFirst) {
+                if (remainWidth - widthFirst - galssGap >= widthSecond) {
+                    if (glassCount <= inCarMaxSize - 1) {
+                        addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst);
+                    } else {
+                        addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst);
+                    }
+                } else {
+                    addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst);
+                }
+            } else {
+                flag = Boolean.FALSE;
+            }
         }
+        //鍚憄lc鍙戦�佽繘鐗囩‘璁�
+        if (flag) {
+            S7object.getinstance().plccontrol.writeWord(mesAddress, 1);
+        }
+        //璁板綍鏃犳硶鏀句笅鐜荤拑锛屽悗缁垽鏂惎鍔�
+        return flag;
     }
 
     /**
@@ -310,7 +353,7 @@
     private Boolean addFeedTask(String glassId, Integer line, Integer taskType, Integer width) {
         BigStorageCageFeedTask bigStorageCageFeedTask = new BigStorageCageFeedTask();
         bigStorageCageFeedTask.setGlassId(glassId);
-        bigStorageCageFeedTask.setTaskState(Const.BIG_STORAGE_REQUEST_IN);
+        bigStorageCageFeedTask.setTaskState(Const.BIG_STORAGE_IN_NEW);
         bigStorageCageFeedTask.setLine(line);
         bigStorageCageFeedTask.setTaskType(taskType);
         bigStorageCageFeedTask.setWidth(width);
@@ -321,7 +364,7 @@
     /**
      * 鑾峰彇闇�瑕佸惎鍔ㄧ殑绾胯矾锛氫袱鏉$嚎閮藉彲鍚姩 鑾峰彇绗竴鐗囩幓鐠冪増鍥緄d鏈�灏� 鐗堝簭鏈�澶х殑绾胯矾
      *
-     * @return
+     * @return 闇�瑕佸惎鍔ㄧ殑绾胯矾
      */
     public Integer getStartLine() {
         List<BigStorageCageFeedTask> taskList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>()
@@ -340,52 +383,135 @@
     /**
      * 璁$畻浠诲姟琛ㄨ繘鐗囩嚎璺殑鐩爣鏍煎瓙锛屽苟鍚姩浠诲姟
      */
-    public boolean computeTargetByLine(Integer line, String d02GoAdress, String d05GoAdress) {
+    public boolean computeTargetByLine(Integer line) {
         //1銆佽幏鍙栦换鍔¤〃涓殑鎵�鏈夌幓鐠冿紙鎸囧畾绾胯矾涓斿凡缁忚繘鍗ц浆绔嬪畬鎴愶級
         List<BigStorageCageFeedTask> taskList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>()
                 .eq(BigStorageCageFeedTask::getLine, line)
-                .eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP)
+                .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));
-        AtomicReference<Integer> temperingLayoutIdTemp = new AtomicReference<>(0);
-        AtomicReference<Integer> temperingFeedSequenceTemp = new AtomicReference<>(0);
-        AtomicReference<BigStorageDTO> bigStorageDTO = new AtomicReference<>(new BigStorageDTO());
-        Map<String, GlassInfo> glassInfoMap = glassInfos.stream().collect(Collectors.toMap(GlassInfo::getGlassId, p -> p));
-        List<BigStorageCageDetails> bigStorageCageDetailsList = new ArrayList<>();
-        AtomicBoolean taskFlag = new AtomicBoolean(Boolean.TRUE);
-        taskList.stream().forEach(e -> {
-            BigStorageCageDetails cageDetails = new BigStorageCageDetails();
-            //鎸夌収鐗堝浘淇℃伅鑾峰彇杩涚墖绗煎瓙鏍煎瓙鍙�
-            GlassInfo info = glassInfoMap.get(e.getGlassId());
-            BeanUtils.copyProperties(info, cageDetails);
-            if (temperingLayoutIdTemp.equals(info.getTemperingLayoutId())
-                    && temperingFeedSequenceTemp.equals(info.getTemperingFeedSequence() + 1)
-                    && info.getWidth() <= bigStorageDTO.get().getWidth()) {
-                bigStorageDTO.get().setWidth(bigStorageDTO.get().getWidth() - info.getWidth().intValue() - Const.BIG_STORAGE_GAP);
-            } else {
-                bigStorageDTO.set(bigStorageCageDetailsService.queryTargetSlotByTempering(info));
-            }
-            e.setTargetSlot(bigStorageDTO.get().getSlot());
-            cageDetails.setSlot(bigStorageDTO.get().getSlot());
-            cageDetails.setState(Const.GLASS_STATE_IN);
-            temperingLayoutIdTemp.set(info.getTemperingLayoutId());
-            temperingFeedSequenceTemp.set(info.getTemperingFeedSequence());
-            bigStorageCageDetailsList.add(cageDetails);
-            taskFlag.set(bigStorageCageFeedTaskService.updateById(e));
-            if (!taskFlag.get()) {
-                return;
-            }
-        });
-        //3銆佹洿鏂拌繘鐗囦换鍔¤〃  閬囧埌闂锛氭棤娉曟壒閲忔洿鏂帮紝鎵归噺鏇存柊鏃犳硶璧版寚瀹氫粠搴�
-
-        //4銆佸湪璇︽儏琛ㄤ腑鍔犲叆杩涚墖鐜荤拑淇℃伅
-        bigStorageCageDetailsService.saveBatch(bigStorageCageDetailsList);
-        if (taskFlag.get()) {
-            String lineAddress = line.equals(Const.A09_OUT_TARGET_POSITION) ? d02GoAdress : d05GoAdress;
-//            S7object.getinstance().plccontrol.writeWord(lineAddress, (short) 1);
-        }
-        return taskFlag.get();
+        return computeIsTemperingTargetByLine(glassInfos, taskList, line);
     }
+
+    /**
+     * 鏄惁閽㈠寲鐜荤拑杩涚鐩爣浣嶇疆
+     *
+     * @param glassInfos 褰撴潯绾垮崸杞珛鎵�鏈夌幓鐠�
+     * @param taskList   褰撴潯绾垮崸杞珛鎵�鏈変换鍔�
+     * @param line       浠诲姟鏄摢鏉$嚎
+     */
+    private boolean computeIsTemperingTargetByLine(List<GlassInfo> glassInfos, List<BigStorageCageFeedTask> taskList, Integer line) {
+        //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);
+            //2銆佽幏鍙栫洰鏍囨牸瀛愪俊鎭�
+            BigStorageDTO bigStorageDTO = bigStorageCageDetailsService.queryTargetSlotByTempering(info);
+            //3銆佹洿鏂板ぇ鐞嗙墖绗艰〃鍓╀綑瀹藉害
+            bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, bigStorageDTO.getWidth() - info.getWidth())
+                    .eq(BigStorageCage::getSlot, bigStorageDTO.getSlot()));
+            //4銆佹洿鏂拌繘鐗囦换鍔¤〃锛岀洰鏍囨牸瀛愬強鐘舵�侊紙鐘舵�佹敼涓�2 鐢垫皵鎵埌鑷澶勭悊锛�  閬囧埌闂锛氭棤娉曟壒閲忔洿鏂帮紝鎵归噺鏇存柊鏃犳硶璧版寚瀹氫粠搴�
+            e.setTargetSlot(bigStorageDTO.getSlot());
+//            e.setTaskType(Const.BIG_STORAGE_IN_RUN);
+            bigStorageCageFeedTaskService.updateById(e);
+
+            //5銆佸皢杩涚墖淇℃伅瀛樺叆澶х悊鐗囩璇︽儏琛�
+            cageDetails.setSlot(bigStorageDTO.getSlot());
+            cageDetails.setState(Const.GLASS_STATE_IN);
+            bigStorageCageDetailsService.save(cageDetails);
+        }
+        sendTaskListToPLC(taskList, line);
+        return Boolean.TRUE;
+    }
+
+    private void sendTaskListToPLC(List<BigStorageCageFeedTask> taskList, Integer line) {
+        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());
+        }
+        s7control.writeWord(outLine, 2);
+        log.info("閫佺墖浠诲姟宸插彂閫佸畬鎴愶紝浠诲姟绾胯矾涓猴細{}锛屽惎鍔ㄥ湴鍧�涓簕}", line, outLine);
+    }
+
+    private <T extends BigStorageCageBaseInfo> Boolean computeOutGlassInfo(List<T> list, Boolean isTempering) {
+        //浠诲姟鏁版嵁  鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲�  鐜荤拑闂撮殧
+        List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>();
+        //鎵撹溅鍓╀綑灏哄
+        Integer remainWidth = carWidth;
+        for (T e : list) {
+            if (bigStorageCageOutTaskList.size() > outCarMaxSize || e.getWidth() > remainWidth) {
+                break;
+            }
+            remainWidth = remainWidth - (int) e.getWidth() - galssGap;
+            if (isTempering) {
+                bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION,
+                        (int) e.getWidth() * 10, 0, 0, 1));
+            } else {
+                bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
+                        (int) e.getWidth() * 10, 0, 0, 1));
+            }
+
+        }
+        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)
+                .in(BigStorageCageDetails::getGlassId, glassIds));
+        //鏇存柊绗煎瓙鍐呮牸瀛愮殑鍓╀綑灏哄
+        updateSlotRemain(list, glassIds);
+        return Boolean.TRUE;
+    }
+
+    /**
+     * 鏇存柊绗煎瓙鍐呮牸瀛愮殑鍓╀綑灏哄
+     *
+     * @param list
+     * @param taskGlassIds
+     * @param <T>
+     */
+    public <T extends BigStorageCageBaseInfo> void updateSlotRemain(List<T> list, List<String> taskGlassIds) {
+        //鑾峰彇闇�瑕佸嚭鍘伙紙鍖呮嫭寰呭嚭鍘荤殑锛夌殑鎵�鏈夌幓鐠冩牸瀛愬彿
+        List<Integer> slotList = list.stream().map(T::getSlot).distinct().collect(Collectors.toList());
+        //鑾峰彇寰呭嚭鍘荤殑鐜荤拑淇℃伅锛堢瓑涓嬭溅鍑哄幓鐨勭幓鐠冿級
+        Map<Integer, Double> slotRemainMap = list.stream().filter(e -> !taskGlassIds.contains(e.getGlassId()))
+                .collect(Collectors.groupingBy(T::getSlot, Collectors.summingDouble(item -> item.getWidth() + galssGap)));
+        if (CollectionUtils.isNotEmpty(slotRemainMap)) {
+            //鎸夌収鏍煎瓙鍙锋洿鏂板墿浣欏昂瀵�
+            slotRemainMap.forEach((e, v) -> {
+                bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, slotWidth - v)
+                        .eq(BigStorageCage::getSlot, e));
+            });
+        }
+        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));
+        }
+    }
+
+    public Boolean computeIsRun(int line, String glassId) {
+        //鑾峰彇鍗ц浆绔嬪墿浣欏搴�
+        BigStorageDTO sitToUpRemainWidth = bigStorageCageFeedTaskService.querySitToUpRemainWidth(line);
+        //鑾峰彇鐜荤拑淇℃伅
+        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
+        return sitToUpRemainWidth.getWidth() < glassInfo.getWidth();
+    }
+
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java
index ad8b70f..13dbcca 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java
@@ -10,11 +10,7 @@
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -38,15 +34,15 @@
 
     @ApiOperation("鍑虹墖浠诲姟鍒犻櫎")
     @PostMapping("/deleteTemperingGlassInfo")
-    public Result deleteTemperingGlassInfo(TemperingGlassInfo temperingGlassInfo) {
-        temperingGlassInfoService.removeById(temperingGlassInfo);
+    public Result deleteTemperingGlassInfo(@RequestBody TemperingGlassInfo temperingGlassInfo) {
+        temperingGlassInfoService.removeById(temperingGlassInfo.getId());
         return Result.build(200,"鍒犻櫎鎴愬姛",1);
     }
 
-    @ApiOperation("鍑虹墖浠诲姟鐮存崯")
+    @ApiOperation("鍑虹墖浠诲姟鐮存崯0/鎷胯蛋1")
     @PostMapping("/damageTemperingGlassInfo")
-    public Result damageTemperingGlassInfo(TemperingGlassInfo temperingGlassInfo) {
-        bigStorageCageDetailsService.damageBigStorageCageDetails(temperingGlassInfo.getGlassId());
+    public Result damageTemperingGlassInfo(@RequestBody TemperingGlassInfo temperingGlassInfo,int status) {
+        bigStorageCageDetailsService.damageBigStorageCageDetails(temperingGlassInfo.getGlassId(),status);
         return Result.build(200,"鐮存崯鎴愬姛",1);
     }
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
deleted file mode 100644
index 40878b5..0000000
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package com.mes.temperingglass.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import java.io.Serializable;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * <p>
- * 
- * </p>
- *
- * @author zhoush
- * @since 2024-03-27
- */
-@ApiModel(description = "<p> 閽㈠寲灏忕墖淇℃伅琛� </p>")
-@Data
-@EqualsAndHashCode(callSuper = false)
-public class TemperingGlassInfo implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 閽㈠寲灏忕墖淇℃伅琛╥d
-     */
-      @ApiModelProperty(value = "閽㈠寲灏忕墖淇℃伅琛╥d", position = 2)
-      @TableId(value = "id", type = IdType.AUTO)
-    private Long id;
-
-    /**
-     * 鐜荤拑id
-     */
-    @ApiModelProperty(value = "鐜荤拑id", position = 3)
-    private String glassId;
-
-    /**
-     * 娴佺▼鍗�
-     */
-    @ApiModelProperty(value = "娴佺▼鍗�", position = 4)
-    private String flowcardId;
-
-    /**
-     * 娴佺▼鍗$幓鐠冪被鍨�
-     */
-    @ApiModelProperty(value = "娴佺▼鍗$幓鐠冪被鍨�", position = 5)
-    private Integer glassType;
-
-    /**
-     * 瀹�
-     */
-    @ApiModelProperty(value = "瀹�", position = 6)
-    private Double width;
-
-    /**
-     * 楂�
-     */
-    @ApiModelProperty(value = "楂�", position = 7)
-    private Double height;
-
-    /**
-     * 鍘氬害
-     */
-    @ApiModelProperty(value = "鍘氬害", position = 8)
-    private Double thickness;
-
-    /**
-     * 鑶滅郴
-     */
-    @ApiModelProperty(value = "鑶滅郴", position = 9)
-    private Integer filmsid;
-
-    /**
-     * 閽㈠寲鏄惁鎺ュ彈妯斁
-     */
-    @ApiModelProperty(value = "閽㈠寲鏄惁鎺ュ彈妯斁", position = 10)
-    private Integer ishorizontal;
-
-    /**
-     * 閽㈠寲鐗堝浘id
-     */
-    @ApiModelProperty(value = "閽㈠寲鐗堝浘id", position = 11)
-    private Integer temperingLayoutId;
-
-    /**
-     * 閽㈠寲鐗堝浘鐗囧簭
-     */
-    @ApiModelProperty(value = "閽㈠寲鐗堝浘鐗囧簭", position = 12)
-    private Integer temperingFeedSequence;
-
-    /**
-     * x鍧愭爣
-     */
-    @ApiModelProperty(value = "x鍧愭爣", position = 13)
-    private Integer xCoordinate;
-
-    /**
-     * y鍧愭爣
-     */
-    @ApiModelProperty(value = "y鍧愭爣", position = 14)
-    private Integer yCoordinate;
-
-    /**
-     * 鏃嬭浆瑙掑害锛堥�嗘椂閽堬級
-     */
-    @ApiModelProperty(value = "鏃嬭浆瑙掑害锛堥�嗘椂閽堬級", position = 15)
-    private Integer angle;
-
-    /**
-     * 鐘舵��
-     */
-    @ApiModelProperty(value = "鐘舵��", position = 16)
-    private Integer state;
-
-
-}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
deleted file mode 100644
index bb591f5..0000000
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.mes.temperingglass.mapper;
-
-import com.baomidou.dynamic.datasource.annotation.DS;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.mes.temperingglass.entity.TemperingGlassInfo;
-
-/**
- * <p>
- *  Mapper 鎺ュ彛
- * </p>
- *
- * @author zhoush
- * @since 2024-03-27
- */
-@DS("salve_hangzhoumes")
-public interface TemperingGlassInfoMapper extends BaseMapper<TemperingGlassInfo> {
-
-}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java
index 5f1a325..ab5372d 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java
@@ -1,6 +1,6 @@
 package com.mes.temperingglass.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.yulichang.base.MPJBaseService;
 import com.mes.temperingglass.entity.TemperingGlassInfo;
 
 import java.util.List;
@@ -13,9 +13,11 @@
  * @author zhoush
  * @since 2024-03-27
  */
-public interface TemperingGlassInfoService extends IService<TemperingGlassInfo> {
+public interface TemperingGlassInfoService extends MPJBaseService<TemperingGlassInfo> {
 
     public void addOutTask(List<TemperingGlassInfo> temperingGlassInfoList);
 
+    boolean saveBatch(List<TemperingGlassInfo> list);
+
     void schedulingTask();
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
index 5f802b5..82d885e 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
@@ -2,7 +2,6 @@
 
 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.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
@@ -11,7 +10,6 @@
 import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper;
 import com.mes.bigstorage.mapper.BigStorageCageMapper;
 import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
-import com.mes.glassinfo.mapper.GlassInfoMapper;
 import com.mes.temperingglass.entity.TemperingGlassInfo;
 import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
 import com.mes.temperingglass.service.TemperingGlassInfoService;
@@ -53,23 +51,28 @@
                 temperingGlassInfo.setState(-1);
                 baseMapper.updateById(temperingGlassInfo);
                 log.info("3銆佷慨鏀归挗鍖栧皬鐗囪〃浠诲姟鐘舵��");
-                BigStorageCageOutTask bigStorageCageOutTask =new BigStorageCageOutTask();
+                BigStorageCageOutTask bigStorageCageOutTask = new BigStorageCageOutTask();
                 bigStorageCageOutTask.setId(temperingGlassInfo.getId());
-            }else{
+            } else {
                 break;
             }
         }
     }
 
+    @Override
+    public boolean saveBatch(List<TemperingGlassInfo> list) {
+        return baseMapper.saveBatch(list);
+    }
+
     //璋冨害
     @Override
-    public void schedulingTask(){
+    public void schedulingTask() {
         QueryWrapper<BigStorageCageDetails> detailsWrapper1 = Wrappers.query();
         detailsWrapper1.select("tempering_layout_id", "count(distinct slot)")
                 .groupBy("tempering_layout_id");
         List<Map<String, Object>> temperingLayoutIdList = bigStorageCageDetailsMapper.selectMaps(detailsWrapper1);
 
-        boolean key=false;
+        boolean key = false;
         for (Map<String, Object> row : temperingLayoutIdList) {
             for (Map.Entry<String, Object> entry : row.entrySet()) {
                 String temperingId = entry.getKey();
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/JsonFile/PlcCacheVerticalGlass.json b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/JsonFile/PlcCacheVerticalGlass.json
index 5838dac..10e8e33 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/JsonFile/PlcCacheVerticalGlass.json
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/JsonFile/PlcCacheVerticalGlass.json
@@ -1,57 +1,377 @@
 {
-  "plcAddressBegin":"DB.0",
-  "plcAddressLenght":"72",
-  "dataType":"word",
-  "parameteInfor":[
-    {
-      "codeId": "D01Request",
-      "addressIndex":"0",
-      "addressLenght":"2",
-      "ratio":"1",
-      "unit":"m/min"
-    },
-    {
-      "codeId": "D01ID1",
-      "addressIndex":"2",
-      "addressLenght":"6",
-      "ratio":"1",
-      "unit":""
-    },
-    {
-      "codeId": "D04Request",
-      "addressIndex":"8",
-      "addressLenght":"2",
-      "ratio":"1",
-      "unit":""
-    },
-    {
-      "codeId": "D04ID1",
-      "addressIndex":"10",
-      "addressLenght":"6",
-      "ratio":"1",
-      "unit":""
-    },
-    {
-      "codeId": "D02Go",
-      "addressIndex":"20",
-      "addressLenght":"2",
-      "ratio":"1",
-      "unit":""
-    },
-    {
-      "codeId": "D05Go",
-      "addressIndex":"22",
-      "addressLenght":"2",
-      "ratio":"1",
-      "unit":""
-    }
-  ,
-    {
-      "codeId": "DeviceStatus",
-      "addressIndex":"70",
-      "addressLenght":"2",
-      "ratio":"1",
-      "unit":""
-    }
-  ]
+	"plcAddressBegin": "DB14.0",
+	"plcAddressLenght": "938",
+	"dataType": "word",
+	"parameteInfor": [{
+			"codeId": "D01ID",
+			"addressIndex": "0",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D02ID",
+			"addressIndex": "32",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ID1",
+			"addressIndex": "64",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ID2",
+			"addressIndex": "96",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ID3",
+			"addressIndex": "128",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ID4",
+			"addressIndex": "160",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ID5",
+			"addressIndex": "192",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ID6",
+			"addressIndex": "224",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D04ID",
+			"addressIndex": "256",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ID1",
+			"addressIndex": "288",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ID2",
+			"addressIndex": "328",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ID3",
+			"addressIndex": "352",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ID4",
+			"addressIndex": "384",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ID5",
+			"addressIndex": "416",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ID6",
+			"addressIndex": "448",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01ID1",
+			"addressIndex": "480",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01ID2",
+			"addressIndex": "512",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01ID3",
+			"addressIndex": "544",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01ID4",
+			"addressIndex": "576",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01ID5",
+			"addressIndex": "608",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01ID6",
+			"addressIndex": "640",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02ID1",
+			"addressIndex": "672",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02ID2",
+			"addressIndex": "704",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02ID3",
+			"addressIndex": "736",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02ID4",
+			"addressIndex": "768",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02ID5",
+			"addressIndex": "800",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02ID6",
+			"addressIndex": "832",
+			"addressLenght": "32",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03ToMES",
+			"addressIndex": "874",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05ToMES",
+			"addressIndex": "876",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D01ToMES",
+			"addressIndex": "878",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D04ToMES",
+			"addressIndex": "880",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "MESToD03",
+			"addressIndex": "888",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "MESToD05",
+			"addressIndex": "890",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "MESToPLC",
+			"addressIndex": "892",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "StartAddToImport1",
+			"addressIndex": "914",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "StartAddToImport2",
+			"addressIndex": "916",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "StartAddToImport3",
+			"addressIndex": "918",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "StartAddToImport4",
+			"addressIndex": "920",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "StartAddToImport5",
+			"addressIndex": "922",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "StartAddToImport6",
+			"addressIndex": "924",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "TargetAddToImport1",
+			"addressIndex": "926",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "TargetAddToImport2",
+			"addressIndex": "928",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "TargetAddToImport3",
+			"addressIndex": "930",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "TargetAddToImport4",
+			"addressIndex": "932",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "TargetAddToImport5",
+			"addressIndex": "934",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "TargetAddToImport6",
+			"addressIndex": "936",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "deviceState",
+			"addressIndex": "864",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E01State",
+			"addressIndex": "866",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "E02State",
+			"addressIndex": "868",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D03State",
+			"addressIndex": "870",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05State",
+			"addressIndex": "872",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "MESToD01",
+			"addressIndex": "894",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "MESToD04",
+			"addressIndex": "896",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		}
+	]
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-cz.yml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-cz.yml
index 6dc9dfd..608a2ca 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-cz.yml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-cz.yml
@@ -14,6 +14,10 @@
           username: sa
           password: beibo.123/
           driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+        salve_hangzhoumes_1:
+          url: jdbc:sqlserver://192.168.20.24:1433;databasename=hangzhoumes
+          username: sa
+          password: beibo.123/
   cloud:
     nacos:
       discovery:
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-dev.yml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-dev.yml
index b4d7552..23a3bb3 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-dev.yml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-dev.yml
@@ -14,6 +14,10 @@
           username: sa
           password: beibo.123/
           driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+        salve_hangzhoumes_1:
+          url: jdbc:sqlserver://127.0.0.1:1433;databasename=hangzhoumes
+          username: sa
+          password: beibo.123/
   cloud:
     nacos:
       discovery:
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-prod.yml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-prod.yml
index 25593bb..3bac93d 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-prod.yml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-prod.yml
@@ -14,6 +14,11 @@
           username: sa
           password: beibo.123/
           driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+        salve_hangzhoumes_1:
+          url: jdbc:sqlserver://10.153.19.150:1433;databasename=hangzhoumes
+          username: sa
+          password: beibo.123/
+          driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
   cloud:
     nacos:
       discovery:
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
index 7209b1f..9fc2464 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
@@ -3,7 +3,7 @@
 
 spring:
   profiles:
-    active: dev
+    active: prod
   application:
     name: cacheVerticalGlass
 mybatis-plus:
@@ -12,4 +12,10 @@
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 mes:
   sequence:
-    order: false
\ No newline at end of file
+    order: false
+  minCount: 5
+  carWidth: 5000   #澶ц溅瀹藉害
+  slotWidth: 5000   #澶ц溅瀹藉害
+  inCarMaxSize: 6     #杩涚墖澶ц溅鏈�澶у瓨鏀剧幓鐠冩暟閲�
+  outCarMaxSize: 1     #鍑虹墖澶ц溅鏈�澶у瓨鏀剧幓鐠冩暟閲�
+  galssGap: 300      #鐜荤拑闂磋窛
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
new file mode 100644
index 0000000..a0f23bf
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
@@ -0,0 +1,74 @@
+<?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.bigstorage.mapper.BigStorageCageDetailsMapper">
+
+    <resultMap id="temperingLayoutDTO" type="com.mes.bigstorage.entity.dto.TemperingLayoutDTO">
+        <result column="engineer_id" property="engineerId"/>
+        <result column="tempering_layout_id" property="temperingLayoutId"/>
+        <result column="count" property="count"/>
+        <result column="slot_count" property="slotCount"/>
+    </resultMap>
+
+    <resultMap id="slotSequenceDTO" type="com.mes.bigstorage.entity.dto.SlotSequenceDTO">
+        <result column="engineer_id" property="engineerId"/>
+        <result column="tempering_layout_id" property="temperingLayoutId"/>
+        <result column="slot" property="slot"/>
+        <result column="max_sequence" property="maxSequence"/>
+        <result column="min_sequence" property="minSequence"/>
+        <result column="remain_width" property="remainWidth"/>
+    </resultMap>
+
+    <select id="temperingIsAll" resultMap="temperingLayoutDTO">
+        SELECT T2.*
+        FROM (
+                 SELECT T.ENGINEER_ID,
+                        T.TEMPERING_LAYOUT_ID,
+                        COUNT(T.TEMPERING_FEED_SEQUENCE) AS COUNT
+                 FROM
+                     GLASS_INFO T
+                     LEFT JOIN DAMAGE T1
+                 ON T.ENGINEER_ID = T1.ENGINEER_ID
+                     AND T.GLASS_ID = T1.GLASS_ID
+                 WHERE
+                     T1.GLASS_ID IS NULL
+                 GROUP BY
+                     T.ENGINEER_ID,
+                     T.TEMPERING_LAYOUT_ID
+             ) T2
+                 INNER JOIN (SELECT ENGINEER_ID, TEMPERING_LAYOUT_ID, COUNT(TEMPERING_FEED_SEQUENCE) AS COUNT
+                             FROM BIG_STORAGE_CAGE_DETAILS
+                             WHERE STATE in (100, 101, 102)
+                             GROUP BY ENGINEER_ID, TEMPERING_LAYOUT_ID) T3 ON T2.ENGINEER_ID = T3.ENGINEER_ID
+            AND T2.TEMPERING_LAYOUT_ID = T3.TEMPERING_LAYOUT_ID
+            AND T2.COUNT = T3.COUNT LIMIT 1
+    </select>
+
+    <select id="queryTemperingOccupySlot" resultMap="temperingLayoutDTO">
+        SELECT TEMPERING_LAYOUT_ID,
+               COUNT(DISTINCT SLOT) as SLOT_COUNT
+        FROM BIG_STORAGE_CAGE_DETAILS
+        WHERE STATE = 100
+        GROUP BY ENGINEER_ID,
+                 TEMPERING_LAYOUT_ID
+        HAVING SLOT_COUNT &gt;= #{count} LIMIT 1
+    </select>
+    <select id="queryGlassMaxAndMin" resultMap="slotSequenceDTO">
+        SELECT T.*,
+               T1.REMAIN_WIDTH
+        FROM (
+                 SELECT ENGINEER_ID,
+                        TEMPERING_LAYOUT_ID,
+                        SLOT,
+                        MAX(TEMPERING_FEED_SEQUENCE) AS MAX_SEQUENCE,
+                        MIN(TEMPERING_FEED_SEQUENCE) AS MIN_SEQUENCE
+                 FROM BIG_STORAGE_CAGE_DETAILS
+                 WHERE ENGINEER_ID = #{engineerId}
+                   AND TEMPERING_LAYOUT_ID = #{temperingLayoutId}
+                 GROUP BY ENGINEER_ID,
+                          TEMPERING_LAYOUT_ID,
+                          SLOT
+             ) T
+                 INNER JOIN BIG_STORAGE_CAGE T1 ON T.SLOT = T1.SLOT
+        ORDER BY T.MAX_SEQUENCE DESC
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageFeedTaskMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageFeedTaskMapper.xml
index 1ef2f3f..a0a5902 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageFeedTaskMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageFeedTaskMapper.xml
@@ -2,7 +2,12 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper">
 
-    <select id="querySitToUpGlass" resultType="java.lang.String">
+    <resultMap id="bigStorageDTO" type="com.mes.bigstorage.entity.BigStorageDTO">
+        <result column="REMAIN_WIDTH" property="width"/>
+        <result column="GLASS_COUNT" property="glassCount"/>
+    </resultMap>
+
+    <select id="querySitToUpGlass" resultType="java.lang.Integer">
         select t.line
         from (
                  select line,
@@ -10,9 +15,17 @@
                         SUM(case task_state when 2 then 1 else 0 end) as real_count
                  from big_storage_cage_feed_task
                  where task_state in (1, 2)
+                   and (target_slot = 0 or target_slot is null)
                  group by line
              ) t
         where t.total_count = t.real_count
     </select>
+    <select id="querySitToUpRemainWidth" resultMap="bigStorageDTO">
+        SELECT cast(5000 - sum(width + 20) as INT) as REMAIN_WIDTH,
+               count(glass_id)                     as GLASS_COUNT
+        FROM big_storage_cage_feed_task
+        WHERE line = #{line}
+          AND task_state in (1, 2)
+    </select>
 
 </mapper>
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageOutTaskMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageOutTaskMapper.xml
new file mode 100644
index 0000000..338e5e1
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageOutTaskMapper.xml
@@ -0,0 +1,14 @@
+<?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.bigstoragetask.mapper.BigStorageCageOutTaskMapper">
+
+    <insert id="saveBatch">
+        INSERT INTO big_storage_cage_out_task ( glass_id, start_slot, end_slot, train_number, serial_number, task_state
+        )
+        values
+        <foreach collection="list" item="item" separator=",">
+            (#{item.glassId}, #{item.startSlot}, #{item.endSlot}, #{item.trainNumber}, #{item.serialNumber},
+            #{item.taskState})
+        </foreach>
+    </insert>
+</mapper>
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java
index ae11d30..f9deff8 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java
@@ -1,5 +1,6 @@
 package com.mes;
 
+import com.mes.bigstorage.service.BigStorageCageDetailsService;
 import com.mes.bigstorage.service.BigStorageCageService;
 import com.mes.common.config.Const;
 import com.mes.job.PlcStorageCageTask;
@@ -26,6 +27,8 @@
     BigStorageCageService bigStorageCageService;
     @Autowired
     PlcStorageCageTask plcStorageCageTask;
+    @Autowired
+    BigStorageCageDetailsService bigStorageCageDetailsService;
 
     @Test
     public void testFindPath() {
@@ -33,28 +36,50 @@
     }
 
     @Test
+    public void outGlass() {
+        log.info("瀹屾暣璺緞锛歿}", bigStorageCageService.outGlass());
+    }
+
+    @Test
+    public void plcToHomeEdgOutTask() {
+        plcStorageCageTask.plcToHomeEdgOutTask();
+    }
+
+    @Test
+    public void plcToHomeEdgFreeCarTask() {
+        plcStorageCageTask.plcToHomeEdgFreeCarTask();
+    }
+
+    @Test
+    public void plcStorageCageTask() {
+        plcStorageCageTask.plcToHomeEdgScan();
+
+    }
+
+    @Test
     public void computeTargetByLine() {
-//        log.info("鑾峰彇澶х悊鐗囩淇℃伅锛歿}",bigStorageCageService.querybigStorageCageDetail());
-        plcStorageCageTask.computeTargetByLine(2001, "", "");
+        plcStorageCageTask.computeTargetByLine(2001);
     }
 
     @Test
     public void judgeGlassTypeStatus() {
-//        log.info("鑾峰彇澶х悊鐗囩淇℃伅锛歿}",bigStorageCageService.querybigStorageCageDetail());
-        plcStorageCageTask.judgeGlassTypeStatus("P24060403|6|7", Const.A09_OUT_TARGET_POSITION);
+        plcStorageCageTask.judgeGlassTypeStatus("P24060403|6|7", Const.A09_OUT_TARGET_POSITION, "mesD03Address");
     }
 
     @Test
     public void getStartLine() {
-//        log.info("鑾峰彇澶х悊鐗囩淇℃伅锛歿}",bigStorageCageService.querybigStorageCageDetail());
         Integer startLine = plcStorageCageTask.getStartLine();
         log.info("---------{}", startLine);
     }
 
     @Test
     public void selectBigStorageCageUsage() {
-//        bigStorageCageService.querybigStorageCageDetail(1);
         log.info("鑾峰彇澶х悊鐗囩淇℃伅锛歿}", bigStorageCageService.selectBigStorageCageUsage());
     }
 
+    @Test
+    public void selectBigStorageCageDetails() {
+        log.info("鑾峰彇澶х悊鐗囩淇℃伅锛歿}", bigStorageCageDetailsService.selectBigStorageCageDetails("P24060403|3|6"));
+    }
+
 }
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/entity/Engineering.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/entity/Engineering.java
index 94df6c1..c9321fa 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/entity/Engineering.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/entity/Engineering.java
@@ -40,17 +40,17 @@
     /**
      * 骞冲潎鍒╃敤鐜�
      */
-    private Double avgAvailability;
+    private double avgAvailability;
 
     /**
      * 鏈夋晥鍒╃敤鐜�
      */
-    private Double validAvailability;
+    private double validAvailability;
 
     /**
      * 灏剧墖鍒╃敤鐜�
      */
-    private Double lastAvailability;
+    private double lastAvailability;
 
     /**
      * 鐘舵��
@@ -65,7 +65,7 @@
     /**
      * 灏忕墖鎬婚潰绉�
      */
-    private Double glassTotalArea;
+    private double glassTotalArea;
 
     /**
      * 璁″垝鍘熺墖鎬绘暟
@@ -75,7 +75,7 @@
     /**
      * 璁″垝鍘熺墖鎬婚潰绉�
      */
-    private Double planPatternTotalArea;
+    private double planPatternTotalArea;
 
     /**
      * 瀹為檯鍘熺墖鎬绘暟
@@ -85,7 +85,7 @@
     /**
      * 瀹為檯鍘熺墖鎬婚潰绉�
      */
-    private Double realityPatternTotalArea;
+    private double realityPatternTotalArea;
 
     /**
      * 鑶滅郴id
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/entity/OptimizeEngineering.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/entity/OptimizeEngineering.java
index 38b62f7..5b214f1 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/entity/OptimizeEngineering.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/entity/OptimizeEngineering.java
@@ -25,17 +25,17 @@
     /**
      * 骞冲潎鍒╃敤鐜�
      */
-    private Double avgCutPct;
+    private double avgCutPct;
 
     /**
      * 鏈夋晥鍒╃敤鐜�
      */
-    private Double validCutPct;
+    private double validCutPct;
 
     /**
      * 灏剧墖鍒╃敤鐜�
      */
-    private Double lastCutPct;
+    private double lastCutPct;
 
     /**
      * 鐘舵��
@@ -49,7 +49,7 @@
     /**
      * 灏忕墖鎬婚潰绉�
      */
-    private Double glassTotalArea;
+    private double glassTotalArea;
     /**
      * 璁″垝鍘熺墖鎬绘暟
      */
@@ -57,7 +57,7 @@
     /**
      * 璁″垝鍘熺墖鎬婚潰绉�
      */
-    private Double rawStockArea;
+    private double rawStockArea;
     /**
      * 瀹為檯鍘熺墖鎬绘暟
      */
@@ -65,11 +65,11 @@
     /**
      * 瀹為檯鍘熺墖鎬婚潰绉�
      */
-    private Double actualStockArea;
+    private double actualStockArea;
     /**
      * 鑶滅郴
      */
-    private  String glassType;
+    private String glassType;
     /**
      * 澶囨敞
      */
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/entity/OptimizeUpPattenUsage.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/entity/OptimizeUpPattenUsage.java
index d4aca93..3b9b0e0 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/entity/OptimizeUpPattenUsage.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/entity/OptimizeUpPattenUsage.java
@@ -25,17 +25,17 @@
     /**
      * 瀹�
      */
-    private Double width;
+    private double width;
 
     /**
      * 楂�
      */
-    private Double height;
+    private double height;
 
     /**
      * 鍘氬害
      */
-    private Double glassThickness;
+    private double glassThickness;
 
     /**
      * 鍘熺墖鐗堝浘鐗囧簭
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java
index ada2a7b..9d93d35 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java
@@ -19,7 +19,6 @@
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 
 /**
@@ -67,8 +66,8 @@
         List<OptimizeUpPattenUsage> upPattenUsageList = null;
         if (engineeringId != null) {
             upPattenUsageList = optimizeProjectMapper.selectJoinList(OptimizeUpPattenUsage.class, new MPJQueryWrapper<OptimizeProject>()
-                    .select("t.project_no,t.glass_type,b.realwidth as width,b.realheight as height ,REGEXP_REPLACE(t.glass_thickness,'\\D','')as glass_thickness,b.stock_id")
-                    .leftJoin("optimize_layout b on t.project_no=b.project_no")
+                    .select("t.project_no,t.glass_type,b.o_width as width,b.o_height as height ,REGEXP_REPLACE(t.glass_thickness,'\\D','')as glass_thickness,b.stock_number")
+                    .leftJoin("optimize_detail b on t.project_no=b.project_no")
                     .eq("b.project_no", engineeringId));
         }
         // 鍒涘缓涓�涓� List 鐢ㄤ簬淇濆瓨鏄犲皠鍚庣殑瀹炰綋瀵硅薄
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/UpWorkstation.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/UpWorkstation.java
index ed0bc83..3fa49a8 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/UpWorkstation.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/UpWorkstation.java
@@ -50,17 +50,17 @@
     /**
      * 鍘熺墖瀹�
      */
-    private Double patternWidth;
+    private double patternWidth;
 
     /**
      * 鍘熺墖楂�
      */
-    private Double patternHeight;
+    private double patternHeight;
 
     /**
      * 鍘熺墖鍘氬害
      */
-    private Double patternThickness;
+    private double patternThickness;
 
     /**
      * 鑶滅郴
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/mapper/LoadGlassMapper.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/mapper/LoadGlassMapper.java
deleted file mode 100644
index 93ba7fb..0000000
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/mapper/LoadGlassMapper.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.mes.workstation.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.mes.workstation.entity.UpWorkstation;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Select;
-
-import java.util.Map;
-
-@Mapper
-public interface LoadGlassMapper extends BaseMapper<UpWorkstation> {
-    //鍒ゆ柇浼樺厛宸ヤ綅鍚哥墖
-    @Select("select b.layout_sequence,a.number from up_workstation a left join up_patten_usage b " +
-            "on a.pattern_width=b.width and a.pattern_height=b.height " +
-            "and a.pattern_thickness=b.thickness where a.workstation_id=#{id}")
-    Map<String, Object> selectPriority(int id);
-
-}
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-cz.yml b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-cz.yml
index 9918e23..1d19003 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-cz.yml
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-cz.yml
@@ -14,6 +14,11 @@
           username: root
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
+        sd:
+            url: jdbc:mysql://192.168.1.199:3306/sd?serverTimezone=GMT%2b8
+            username: root
+            password: beibo.123/
+            driver-class-name: com.mysql.cj.jdbc.Driver
   cloud:
     nacos:
       discovery:
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml
index 66f9c31..d4558c8 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml
@@ -14,16 +14,11 @@
           username: root
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
-#        hangzhoumes:
-#          url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8
-#          username: root
-#          password: beibo.123/
-#          driver-class-name: com.mysql.cj.jdbc.Driver
-#        pp:
-#          url: jdbc:mysql://10.153.19.150:3306/pp?serverTimezone=GMT%2b8
-#          username: root
-#          password: beibo.123/
-#          driver-class-name: com.mysql.cj.jdbc.Driver
+        sd:
+          url: jdbc:mysql://127.0.0.1:3306/sd?serverTimezone=GMT%2b8
+          username: root
+          password: beibo.123/
+          driver-class-name: com.mysql.cj.jdbc.Driver
   cloud:
     nacos:
       discovery:
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-prod.yml b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-prod.yml
index c372c41..a218f03 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-prod.yml
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-prod.yml
@@ -14,6 +14,11 @@
           username: root
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
+        sd:
+            url: jdbc:mysql://10.153.19.150:3306/sd?serverTimezone=GMT%2b8
+            username: root
+            password: beibo.123/
+            driver-class-name: com.mysql.cj.jdbc.Driver
   cloud:
     nacos:
       discovery:
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/ApplicationTest.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/ApplicationTest.java
index 9f636a1..3d9b452 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/ApplicationTest.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/ApplicationTest.java
@@ -30,4 +30,5 @@
         List<OptimizeDetail> list = optimizationDetailService.list();
         System.out.println("鑾峰彇璁板綍鏁帮細" + list.size());
     }
+
 }
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/LoadGlassModuleApplicationTest.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/LoadGlassModuleApplicationTest.java
index d052648..5ed0657 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/LoadGlassModuleApplicationTest.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/LoadGlassModuleApplicationTest.java
@@ -1,11 +1,17 @@
 package com.mes;
-
 import com.mes.engineering.entity.Engineering;
 import com.mes.engineering.service.EngineeringService;
+import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.glassinfo.service.GlassInfoService;
+import com.mes.order.entity.Orderdetail;
+import com.mes.order.entity.Orders;
+import com.mes.order.service.OrdersService;
 import com.mes.pp.entity.OptimizeProject;
+import com.mes.pp.entity.request.AwaitingRepair;
 import com.mes.pp.entity.request.OptimizeRequest;
+import com.mes.pp.entity.request.Reportingdamage;
 import com.mes.pp.service.OptimizeProjectService;
+import com.mes.pp.service.ReportingWorkService;
 import com.mes.uppattenusage.entity.UpPattenUsage;
 import com.mes.uppattenusage.service.impl.UpPattenUsageServiceImpl;
 import com.mes.workstation.entity.UpWorkstation;
@@ -16,7 +22,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
-
 import java.util.Arrays;
 import java.util.List;
 
@@ -40,6 +45,10 @@
     private UpWorkstationService workstationService;
     @Autowired
     private OptimizeProjectService optimizeProjectService;
+    @Autowired
+    private OrdersService ordersService;
+    @Autowired
+    private ReportingWorkService reportingWorkService;
     @Test
     public void test() {
 //        List<OptimizeProject> list = optimizeProjectMapper.saveProject("P24032204");
@@ -109,5 +118,54 @@
         boolean isOver= upPattenUsageService.updateGlassState(upPattenUsage);
         log.info("鏇存敼鏄惁鎴愬姛{}",isOver);
     }
+    @Test
+    public void test2() {
+        List<Orders> list = ordersService.selectOrders();
+        System.out.println("鑾峰彇璁板綍鏁帮細" + list);
+    }
+    @Test
+    public void test3() {
+        Orders orders = new Orders();
+        orders.setOrderId("P24051103");
+        List<Orderdetail> list = ordersService.selectOrderdetail(orders);
+        System.out.println("璁㈠崟璇︾粏鏁版嵁锛�" + list);
+    }
+    @Test
+    public void test4() {
+        //鑾峰彇宸ュ簭鍔犲伐娆$牬鏁伴噺
+        Reportingdamage reportingdamage = new Reportingdamage();
+        reportingdamage.setThisProcess("纾ㄨ竟");
+        reportingdamage.setDeviceName("蹇�熺(");
+        reportingdamage.setReportingWorkTime("2024-05-22");
+        List<Reportingdamage> list = reportingWorkService.selectDamage(reportingdamage);
+        System.out.println("璁㈠崟璇︾粏鏁版嵁锛�" + list);
+    }
+    @Test
+    public void test5() {
+        //鑾峰彇娆$牬鏈ˉ淇℃伅
+        List<AwaitingRepair> list = reportingWorkService.selectAwaitingRepair();
+        System.out.println("鑾峰彇璁板綍鏁帮細" + list);
+    }
+    @Test
+    public void test6() {
+        //鑾峰彇娆$牬鏈ˉ淇℃伅
+       List<OptimizeProject> list=optimizeProjectService.getDoingTask();
+        System.out.println("鑾峰彇姝e湪杩涜鐨勫伐绋嬶細" + list);
+    }
+    @Test
+    public void test7() {
+        //鑾峰彇娆$牬鏈ˉ淇℃伅
+        List<GlassInfo> list=glassInfoService.selectGlassInfo("P24062706");
+        System.out.println("宸ョ▼锛�"+list);
+    }
+    @Test
+    public void test8() {
+        //鑾峰彇娆$牬鏈ˉ淇℃伅
+        UpPattenUsage upPattenUsage=new UpPattenUsage();
+        upPattenUsage.setEngineeringId("P24062706");
+        List<UpPattenUsage> list=upPattenUsageService.selectSaveUpPattenUsage("P24062706");
+        System.out.println("宸ョ▼锛�"+list);
+    }
+
 
 }
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcScreenTask.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcScreenTask.java
new file mode 100644
index 0000000..d5d59a5
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcScreenTask.java
@@ -0,0 +1,88 @@
+package com.mes.job;
+import cn.hutool.json.JSONObject;
+import com.mes.order.entity.Orders;
+import com.mes.order.service.OrdersService;
+import com.mes.pp.entity.OptimizeProject;
+import com.mes.pp.entity.request.AwaitingRepair;
+import com.mes.pp.entity.request.Reportingdamage;
+import com.mes.pp.service.OptimizeProjectService;
+import com.mes.pp.service.ReportingWorkService;
+import com.mes.tools.WebSocketServer;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author SNG-010
+ */
+@Component
+@Slf4j
+public class PlcScreenTask {
+
+    @Autowired
+    private ReportingWorkService reportingWorkService;
+    @Autowired
+    private  OptimizeProjectService optimizeProjectService;
+    @Autowired
+    private OrdersService ordersService;
+    /**
+     * fixedRate : 涓婁竴涓皟鐢ㄥ紑濮嬪悗鍐嶆璋冪敤鐨勫欢鏃讹紙涓嶇敤绛夊緟涓婁竴娆¤皟鐢ㄥ畬鎴愶級
+     * fixedDelay : 涓婁竴涓皟鐢ㄧ粨鏉熷悗鍐嶆璋冪敤鐨勫欢鏃�
+     */
+
+    @Scheduled(fixedDelay = 2000)
+    public void screenHome(){
+        JSONObject jsonObject = new JSONObject();
+        //姝e湪绛夊緟杩涚墖鐨勭幓鐠�
+        Reportingdamage reportingdamage = new Reportingdamage();
+        reportingdamage.setReportingWorkTime("2024-05-11");
+        //鑾峰彇鍒囧壊淇℃伅
+        reportingdamage.setThisProcess("鍒囧壊");
+        List<Reportingdamage> cutting = reportingWorkService.selectDamage(reportingdamage);
+        jsonObject.append("cutting", cutting);
+        //鑾峰彇纾ㄨ竟淇℃伅
+        reportingdamage.setThisProcess("纾ㄨ竟");
+        List<Reportingdamage> edging = reportingWorkService.selectDamage(reportingdamage);
+        jsonObject.append("edging", edging);
+        //鑾峰彇閽㈠寲淇℃伅
+        reportingdamage.setThisProcess("閽㈠寲");
+        List<Reportingdamage> tempering = reportingWorkService.selectDamage(reportingdamage);
+        jsonObject.append("tempering", tempering);
+        //鑾峰彇澶硅兌淇℃伅
+        reportingdamage.setThisProcess("澶硅兌");
+        List<Reportingdamage> doubling = reportingWorkService.selectDamage(reportingdamage);
+        jsonObject.append("doubling", doubling);
+        //鑾峰彇涓┖淇℃伅
+        reportingdamage.setThisProcess("涓┖");
+        List<Reportingdamage> hollow = reportingWorkService.selectDamage(reportingdamage);
+        jsonObject.append("hollow", hollow);
+        //鑾峰彇鍖呰淇℃伅
+        reportingdamage.setThisProcess("鍖呰");
+        List<Reportingdamage> packaging = reportingWorkService.selectDamage(reportingdamage);
+        jsonObject.append("packaging", packaging);
+        //鑾峰彇娆$牬鏈ˉ淇℃伅
+        List<AwaitingRepair>awaitingRepairs = reportingWorkService.selectAwaitingRepair();
+        jsonObject.append("awaitingRepairs", awaitingRepairs);
+        //鑾峰彇姝e湪杩涜鐨勫伐绋�
+        List<OptimizeProject>optimizeProjects= optimizeProjectService.getDoingTask();
+        jsonObject.append("DoingTask", optimizeProjects);
+        //鑾峰彇褰撳墠璁㈠崟
+        List<Orders>orders=ordersService.selectOrders();
+        jsonObject.append("orders", orders);
+
+        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("screen");
+        if (sendwServer != null) {
+            for (WebSocketServer webserver : sendwServer) {
+                if (webserver != null) {
+                    webserver.sendMessage(jsonObject.toString());
+                } else {
+                    log.info("Home is closed");
+                }
+            }
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java
index d548f45..3f108b5 100644
--- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java
@@ -1,9 +1,7 @@
 package com.mes.job;
-
 import cn.hutool.json.JSONObject;
 import com.mes.temperingglass.service.TemperingAgoService;
 import com.mes.temperingglass.entity.TemperingGlassInfo;
-import com.mes.temperingglass.service.TemperingAgoService;
 import com.mes.tools.WebSocketServer;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -28,7 +26,7 @@
      */
 
     @Scheduled(fixedDelay = 1000)
-    public void loadGlassHome(){
+    public void temperingGlassHome(){
         JSONObject jsonObject = new JSONObject();
         //姝e湪绛夊緟杩涚墖鐨勭幓鐠�
         List<TemperingGlassInfo> waitingGlass = temperingAgoService.selectWaitingGlass();
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-cz.yml b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-cz.yml
index 0b433b2..870e2c8 100644
--- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-cz.yml
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-cz.yml
@@ -9,9 +9,8 @@
           username: root
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
-
         salve_hangzhoumes:
-          url: jdbc:sqlserver://192.168.10.2:1433;databasename=hangzhoumes
+          url: jdbc:sqlserver://192.168.20.24:1433;databasename=hangzhoumes
           username: sa
           password: beibo.123/
           driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml
index a5bc31d..7a1a916 100644
--- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml
@@ -4,16 +4,36 @@
       primary: hangzhoumes #璁剧疆榛樿鐨勬暟鎹簮鎴栬�呮暟鎹簮缁�,榛樿鍊煎嵆涓簃aster
       strict: false #璁剧疆涓ユ牸妯″紡,榛樿false涓嶅惎鍔�. 鍚姩鍚庡湪鏈尮閰嶅埌鎸囧畾鏁版嵁婧愭椂鍊欏洖鎶涘嚭寮傚父,涓嶅惎鍔ㄤ細浣跨敤榛樿鏁版嵁婧�.
       datasource:
+#        hangzhoumes:
+#          url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8
+#          username: root
+#          password: beibo.123/
+#          driver-class-name: com.mysql.cj.jdbc.Driver
+#        salve_hangzhoumes:
+#          url: jdbc:sqlserver://127.0.0.1:1433;databasename=hangzhoumes
+#          username: sa
+#          password: beibo.123/
+#          driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
         hangzhoumes:
-          url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8
+          url: jdbc:mysql:10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8
           username: root
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
         salve_hangzhoumes:
-          url: jdbc:sqlserver://127.0.0.1:1433;databasename=hangzhoumes
+          url: jdbc:sqlserver://10.153.19.150:1433;databasename=hangzhoumes
           username: sa
           password: beibo.123/
           driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+        pp:
+          url: jdbc:mysql://10.153.19.150:3306/pp?serverTimezone=GMT%2b8
+          username: root
+          password: beibo.123/
+          driver-class-name: com.mysql.cj.jdbc.Driver
+        sd:
+          url: jdbc:mysql://10.153.19.150:3306/sd?serverTimezone=GMT%2b8
+          username: root
+          password: beibo.123/
+          driver-class-name: com.mysql.cj.jdbc.Driver
   cloud:
     nacos:
       discovery:
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-prod.yml b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-prod.yml
index 7aab87f..d00e665 100644
--- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-prod.yml
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-prod.yml
@@ -15,6 +15,16 @@
             username: sa
             password: beibo.123/
             driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+        pp:
+          url: jdbc:mysql://10.153.19.150:3306/pp?serverTimezone=GMT%2b8
+          username: root
+          password: beibo.123/
+          driver-class-name: com.mysql.cj.jdbc.Driver
+        sd:
+          url: jdbc:mysql://10.153.19.150:3306/sd?serverTimezone=GMT%2b8
+          username: root
+          password: beibo.123/
+          driver-class-name: com.mysql.cj.jdbc.Driver
   cloud:
     nacos:
       discovery:
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml
index 0a70a4a..e9fcc1e 100644
--- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml
@@ -2,7 +2,7 @@
   port: 8084
 spring:
   profiles:
-    active: cz
+    active: prod
   application:
     name: temperingGlass
 mybatis-plus:
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/test/java/com/mes/TemperingApplicationTest.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/test/java/com/mes/TemperingApplicationTest.java
index e5e4608..d6edffc 100644
--- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/test/java/com/mes/TemperingApplicationTest.java
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/test/java/com/mes/TemperingApplicationTest.java
@@ -1,60 +1,60 @@
-//package com.mes;
-//
-//import com.mes.temperingglass.entity.TemperingGlassInfo;
-//import com.mes.temperingglass.service.TemperingAgoService;
-//import lombok.extern.slf4j.Slf4j;
-//import org.junit.Test;
-//import org.junit.runner.RunWith;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.boot.test.context.SpringBootTest;
-//import org.springframework.test.context.junit4.SpringRunner;
-//
-//import java.util.Arrays;
-//import java.util.List;
-//
-///**
-// * @Author : zhoush
-// * @Date: 2024/3/27 16:37
-// * @Description:
-// */
-//@Slf4j
-//@RunWith(SpringRunner.class)
-//@SpringBootTest(classes = TemperingGlassModuleApplication.class)
-//public class TemperingApplicationTest {
-//
-//    @Autowired
-//    private TemperingAgoService temperingAgoService;
-//
-//
-//    @Test
-//    public void testFindPa() {
-//        List<TemperingGlassInfo> glass = temperingAgoService.selectIntoGlass(12);
-//        log.info("杩涚倝涓殑鐜荤拑锛歿}", Arrays.asList(glass));
-//    }
-//    @Test
-//    public void testFindPa2() {
-//        List<TemperingGlassInfo> glass = temperingAgoService.selectOutGlass();
-//        log.info("宸插嚭涓殑鐜荤拑锛歿}", Arrays.asList(glass));
-//    }
-//
-//    @Test
-//    public void testFindPa3() {
-//        List<TemperingGlassInfo> glass = temperingAgoService.selectWaitingGlass();
-//        log.info("绛夊緟涓殑鐜荤拑锛歿}", Arrays.asList(glass));
-//    }
-//    @Test
-//    public void testFindPa4() {
-//        List<TemperingGlassInfo> glass = temperingAgoService.selectOverGlass();
-//        log.info("绛夊緟涓殑鐜荤拑锛歿}", Arrays.asList(glass));
-//    }
-//    @Test
-//    public void testFindPa5() {
-//        List<TemperingGlassInfo> layoutId = temperingAgoService.selectLayoutId();
-//        //杩涚倝涓殑鐜荤拑
-//        log.info("鐗堝浘id锛歿}", Arrays.asList(layoutId.get(0).getTemperingLayoutId()));
-//        List<TemperingGlassInfo> intoGlass = temperingAgoService.selectIntoGlass(layoutId.get(0).getTemperingLayoutId());
-//        log.info("鐜荤拑鐗堝浘id锛歿}", Arrays.asList(intoGlass));
-//        List<TemperingGlassInfo> intoGlass2 = temperingAgoService.selectIntoGlass(layoutId.get(1).getTemperingLayoutId());
-//        log.info("鐜荤拑鐗堝浘id锛歿}", Arrays.asList(intoGlass2));
-//    }
-//}
+package com.mes;
+
+import com.mes.temperingglass.entity.TemperingGlassInfo;
+import com.mes.temperingglass.service.TemperingAgoService;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/3/27 16:37
+ * @Description:
+ */
+@Slf4j
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = TemperingGlassModuleApplication.class)
+public class TemperingApplicationTest {
+
+    @Autowired
+    private TemperingAgoService temperingAgoService;
+
+
+    @Test
+    public void testFindPa() {
+        List<TemperingGlassInfo> glass = temperingAgoService.selectIntoGlass(12);
+        log.info("杩涚倝涓殑鐜荤拑锛歿}", Arrays.asList(glass));
+    }
+    @Test
+    public void testFindPa2() {
+        List<TemperingGlassInfo> glass = temperingAgoService.selectOutGlass();
+        log.info("宸插嚭涓殑鐜荤拑锛歿}", Arrays.asList(glass));
+    }
+
+    @Test
+    public void testFindPa3() {
+        List<TemperingGlassInfo> glass = temperingAgoService.selectWaitingGlass();
+        log.info("绛夊緟涓殑鐜荤拑锛歿}", Arrays.asList(glass));
+    }
+    @Test
+    public void testFindPa4() {
+        List<TemperingGlassInfo> glass = temperingAgoService.selectOverGlass();
+        log.info("绛夊緟涓殑鐜荤拑锛歿}", Arrays.asList(glass));
+    }
+    @Test
+    public void testFindPa5() {
+        List<TemperingGlassInfo> layoutId = temperingAgoService.selectLayoutId();
+        //杩涚倝涓殑鐜荤拑
+        log.info("鐗堝浘id锛歿}", Arrays.asList(layoutId.get(0).getTemperingLayoutId()));
+        List<TemperingGlassInfo> intoGlass = temperingAgoService.selectIntoGlass(layoutId.get(0).getTemperingLayoutId());
+        log.info("鐜荤拑鐗堝浘id锛歿}", Arrays.asList(intoGlass));
+        List<TemperingGlassInfo> intoGlass2 = temperingAgoService.selectIntoGlass(layoutId.get(1).getTemperingLayoutId());
+        log.info("鐜荤拑鐗堝浘id锛歿}", Arrays.asList(intoGlass2));
+    }
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/pom.xml b/hangzhoumesParent/moduleService/UnLoadGlassModule/pom.xml
index c9fd5bc..13e2d80 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/pom.xml
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/pom.xml
@@ -24,12 +24,6 @@
             <version>2.8.9</version>
             <scope>compile</scope>
         </dependency>
-
-        <dependency>
-            <groupId>com.microsoft.sqlserver</groupId>
-            <artifactId>sqljdbc4</artifactId>
-            <version>4.0</version>
-        </dependency>
     </dependencies>
 
     <properties>
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/AppRunnerConfig.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/AppRunnerConfig.java
index 0f18b76..0fe78d6 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/AppRunnerConfig.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/AppRunnerConfig.java
@@ -1,6 +1,7 @@
 package com.mes;
 
-//import com.mes.common.S7object;
+
+import com.mes.common.S7object;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
@@ -13,14 +14,12 @@
 @Slf4j
 @Component
 @Order(1)
-
 public class AppRunnerConfig implements ApplicationRunner {
 
 
     @Override
     public void run(ApplicationArguments args) throws Exception {
         log.info("鍚姩瀹屾垚");
-        //S7object.getinstance().start();
-
+        S7object.getinstance().start();
     }
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/S7object.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/S7object.java
index 15b3372..670d12c 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/S7object.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/S7object.java
@@ -14,7 +14,7 @@
 public class S7object extends Thread {
     public S7control plccontrol; // PLC閫氳绫诲疄渚�
     private EPlcType plcType = EPlcType.S1200; // 瑗块棬瀛怭LC绫诲瀷
-    private String ip = "192.168.10.1"; // plc ip鍦板潃
+    private String ip = "192.168.30.100"; // plc ip鍦板潃
     private int port = 102; // plc 绔彛鍙�
 
 
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassTaskController.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassTaskController.java
index 4daca39..cf952c6 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassTaskController.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassTaskController.java
@@ -1,9 +1,13 @@
 package com.mes.downglassinfo.controller;
 
 
-import io.swagger.annotations.Api;
+import com.mes.downglassinfo.service.DownGlassInfoService;
+import com.mes.downstorage.entity.DownStorageCageDetails;
+import com.mes.utils.Result;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -20,5 +24,14 @@
 @RequestMapping("/downGlassTask")
 public class DownGlassTaskController {
 
+    @Autowired
+    DownGlassInfoService downGlassInfoService;
+
+    @PostMapping("/generateOutGlassTask")
+    @ApiOperation(value = "鐢熸垚鍑虹墖浠诲姟", notes = "鐢熸垚鍑虹墖浠诲姟")
+    public Result<Boolean> generateOutGlassTask(@RequestBody DownStorageCageDetails downStorageCageDetails) {
+        return Result.success(downGlassInfoService.generateOutGlassTask(downStorageCageDetails.getGlassId()));
+    }
+
 }
 
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java
index 5543ab5..410a443 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java
@@ -1,10 +1,10 @@
 package com.mes.downglassinfo.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import org.springframework.data.annotation.Id;
 import org.springframework.stereotype.Component;
-
 
 import java.io.Serializable;
 
@@ -26,13 +26,18 @@
     /**
      * 涓嬬墖鐜荤拑淇℃伅琛╥d
      */
-
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     /**
      * 娴佺▼鍗″彿
      */
     private String flowCardId;
+
+    /**
+     * 灞傚彿
+     */
+    private Integer layer;
 
     /**
      * 椤哄簭
@@ -42,17 +47,17 @@
     /**
      * 瀹�
      */
-    private Double width;
+    private double width;
 
     /**
      * 楂�
      */
-    private Double height;
+    private double height;
 
     /**
      * 鍘氬害
      */
-    private Double thickness;
+    private double thickness;
 
     /**
      * 鑶滅郴
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java
index 13fbc8a..d14ded1 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java
@@ -1,5 +1,6 @@
 package com.mes.downglassinfo.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -24,18 +25,24 @@
     /**
      * id
      */
-    @TableId(value = "id")
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
+
+    /**
+     * 鐜荤拑id
+     */
+    private String glassId;
+
 
     /**
      * 璧峰
      */
-    private String startCell;
+    private Integer startCell;
 
     /**
      * 鐩爣
      */
-    private String endCell;
+    private Integer endCell;
 
     /**
      * 浠诲姟绫诲瀷 1:杩�   2锛氬嚭
@@ -45,12 +52,12 @@
     /**
      * 瀹�
      */
-    private Double width;
+    private Integer width;
 
     /**
      * 楂�
      */
-    private Double height;
+    private Integer height;
 
     /**
      * 鑶滅郴
@@ -60,22 +67,21 @@
     /**
      * 鍘氬害
      */
-    private Double thickness;
+    private Integer thickness;
 
     /**
      * 娴佺▼鍗″彿
      */
     private String flowCardId;
+    /**
+     * 灞傚彿
+     */
+    private int layer;
 
     /**
      * 浠诲姟鐘舵�� 0 鏈紑濮�  1姝e湪杩涜   2瀹屾垚
      */
     private Integer taskStauts;
-
-    /**
-     * 鐜荤拑id
-     */
-    private String glassId;
 
     /**
      * 鍒涘缓鏃堕棿
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java
index d10f370..fac40d1 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java
@@ -2,11 +2,19 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.mes.downglassinfo.entity.DownGlassInfo;
+import com.mes.downworkstation.entity.dto.DownGlassInfoDTO;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
+
+import java.util.List;
 
 @Repository
 public interface DownGlassInfoMapper extends BaseMapper<DownGlassInfo> {
 
 
+    DownGlassInfoDTO queryDownGlassMaxLayer(@Param(value = "flowCardId") String flowCardId);
 
+    Integer queryMaxSequence(@Param(value = "flowCardId") String flowCardId, @Param(value = "layer") int layer);
+
+    List<DownGlassInfoDTO> queryWorkStationIsIn(@Param(value = "isDownload") Boolean isDownload);
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java
index 2feead5..0830e6b 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java
@@ -2,6 +2,9 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.mes.downglassinfo.entity.DownGlassInfo;
+import com.mes.downworkstation.entity.dto.DownGlassInfoDTO;
+
+import java.util.List;
 
 public interface DownGlassInfoService extends IService<DownGlassInfo> {
 
@@ -10,7 +13,7 @@
      * @param flowCardId
      * @return // 鏍规嵁娴佺▼鍗″彿鏌ヨ鏈�澶у簭鍙�
      */
-    Integer getMaxSequenceByFlowCardId(String flowCardId);
+    Integer getMaxSequenceByFlowCardId(String flowCardId, int layer);
 
     /**
      * @param downGlassInfo 鎻掑叆涓嬬墖淇℃伅
@@ -18,4 +21,23 @@
     void insertDownGlassInfo(DownGlassInfo downGlassInfo);
 
 
+    DownGlassInfoDTO queryDownGlassMaxLayer(String flowCardId);
+
+    Integer queryMaxSequence(String flowCardId, int layer);
+
+    /**
+     * 鑾峰彇鏋跺瓙缁戝畾 娴佺▼鍗$殑鐜荤拑淇℃伅锛堝凡钀芥灦/鏈惤鏋讹級
+     *
+     * @param isDownload true/false
+     * @return
+     */
+    List<DownGlassInfoDTO> queryWorkStationIsIn(Boolean isDownload);
+
+    /**
+     * 鐢熸垚鍑虹墖浠诲姟
+     *
+     * @param glassId
+     * @return
+     */
+    boolean generateOutGlassTask(String glassId);
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
index e5bf336..df92487 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
@@ -1,21 +1,41 @@
 package com.mes.downglassinfo.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.common.config.Const;
 import com.mes.downglassinfo.entity.DownGlassInfo;
 import com.mes.downglassinfo.mapper.DownGlassInfoMapper;
 import com.mes.downglassinfo.service.DownGlassInfoService;
+import com.mes.downstorage.entity.DownStorageCageDetails;
+import com.mes.downstorage.service.DownStorageCageDetailsService;
+import com.mes.downworkstation.entity.dto.DownGlassInfoDTO;
+import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.job.DownLoadCacheGlassTask;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 @Service
 public class DownGlassInfoServiceImpl extends ServiceImpl<DownGlassInfoMapper, DownGlassInfo> implements DownGlassInfoService {
 
-    // 鏍规嵁娴佺▼鍗″彿鏌ヨ鏈�澶у簭鍙�
+    @Autowired
+    DownLoadCacheGlassTask downLoadCacheGlassTask;
+
+    @Autowired
+    DownStorageCageDetailsService downStorageCageDetailsService;
+
+    /**
+     * 鏍规嵁娴佺▼鍗″彿鏌ヨ鏈�澶у簭鍙�
+     */
     @Override
-    public Integer getMaxSequenceByFlowCardId(String flowCardId) {
+    public Integer getMaxSequenceByFlowCardId(String flowCardId, int layer) {
         LambdaQueryWrapper<DownGlassInfo> lambdaQueryWrapper = Wrappers.lambdaQuery();
         lambdaQueryWrapper.eq(DownGlassInfo::getFlowCardId, flowCardId)
+                .eq(DownGlassInfo::getLayer, layer)
                 .select(DownGlassInfo::getSequence)
                 .orderByDesc(DownGlassInfo::getSequence)
                 .last("LIMIT 1");
@@ -24,14 +44,42 @@
         return downGlassInfo != null ? downGlassInfo.getSequence() : 0;
     }
 
-
     @Override
     public void insertDownGlassInfo(DownGlassInfo downGlassInfo) {
-
-
-
         baseMapper.insert(downGlassInfo);
     }
 
+    @Override
+    public DownGlassInfoDTO queryDownGlassMaxLayer(String flowCardId) {
+        return baseMapper.queryDownGlassMaxLayer(flowCardId);
+    }
 
+    @Override
+    public Integer queryMaxSequence(String flowCardId, int layer) {
+        return baseMapper.queryMaxSequence(flowCardId, layer);
+    }
+
+    @Override
+    public List<DownGlassInfoDTO> queryWorkStationIsIn(Boolean isDownload) {
+        return baseMapper.queryWorkStationIsIn(isDownload);
+    }
+
+    @Override
+    public boolean generateOutGlassTask(String glassId) {
+        //鏇存柊鍗у紡鐞嗙墖绗煎唴鐜荤拑鐘舵��
+        downStorageCageDetailsService.update(new LambdaUpdateWrapper<DownStorageCageDetails>()
+                .set(DownStorageCageDetails::getState, Const.GLASS_STATE_OUT).eq(DownStorageCageDetails::getGlassId, glassId));
+        DownStorageCageDetails details = downStorageCageDetailsService.getOne(new LambdaQueryWrapper<DownStorageCageDetails>()
+                .eq(DownStorageCageDetails::getGlassId, glassId));
+        //鐢熸垚涓嬬墖淇℃伅
+        DownGlassInfo downGlassInfo = new DownGlassInfo();
+        BeanUtils.copyProperties(details, downGlassInfo);
+        //鑾峰彇褰撳墠娴佺▼鍗℃渶澶х墖搴�
+        downGlassInfo.setSequence(this.getMaxSequenceByFlowCardId(details.getFlowCardId(), details.getLayer()) + 1);
+        this.save(downGlassInfo);
+        //鐢熸垚浠诲姟淇℃伅 骞跺悜plc鍙戦�佸嚭鐗囦换鍔�
+        GlassInfo glassInfo = new GlassInfo();
+        BeanUtils.copyProperties(details, glassInfo);
+        return downLoadCacheGlassTask.initDownGlassTask(glassInfo, details.getSlot(), 3001, 2);
+    }
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassTaskServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassTaskServiceImpl.java
index d145b2c..c66855e 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassTaskServiceImpl.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassTaskServiceImpl.java
@@ -5,14 +5,21 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.downglassinfo.entity.DownGlassInfo;
 import com.mes.downglassinfo.entity.DownGlassTask;
+import com.mes.downglassinfo.mapper.DownGlassInfoMapper;
 import com.mes.downglassinfo.mapper.DownGlassTaskMapper;
+import com.mes.downglassinfo.service.DownGlassInfoService;
 import com.mes.downglassinfo.service.DownGlassTaskService;
+import com.mes.downworkstation.entity.DownWorkstation;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -22,17 +29,37 @@
  * @author zhoush
  * @since 2024-04-07
  */
+@Slf4j
 @Service
 public class DownGlassTaskServiceImpl extends ServiceImpl<DownGlassTaskMapper, DownGlassTask> implements DownGlassTaskService {
 
+    @Autowired
+    private DownGlassInfoService downGlassInfoService; // MySQL Mapper
+
+    @Autowired
+    private DownGlassTaskMapper downGlassTaskMapper; // SQL Server Mapper
 
     @Override
     public List<DownGlassTask> getUnloadingTaskState() {
+        log.info("鎺掗櫎宸茬粡涓嬬墖鐨勫嚭鐗囨垨鐩撮�氫换鍔$姸鎬佷负1鐨勪换鍔�");
+
+        // Step 1: 浠� MySQL 涓幏鍙栫幓鐠� ID 鍒楄〃
+
+        // Step 2: 浠� SQL Server 涓繃婊ゆ帀杩欎簺鐜荤拑 ID 骞舵煡璇换鍔�
         QueryWrapper<DownGlassTask> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("task_stauts", 0).eq("task_type", 2).or().eq("task_stauts", 3);
+        queryWrapper.eq("task_stauts", 1)
+                .and(qw -> qw.eq("task_type", 2).or().eq("task_type", 3));
+
+        List<DownGlassInfo> excludedGlassIds = downGlassInfoService.list();
+        if (!excludedGlassIds.isEmpty()) {
+            queryWrapper.notIn("glass_id", excludedGlassIds.stream().map(DownGlassInfo::getGlassId).collect(Collectors.toList()));
+        }
+        log.info(String.valueOf(excludedGlassIds));
+
         return baseMapper.selectList(queryWrapper);
     }
 
+
     @Override
     public void updateTaskState(String id) {
         UpdateWrapper<DownGlassTask> updateWrapper = new UpdateWrapper<>();
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java
index 2f56341..e7feaef 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java
@@ -69,8 +69,15 @@
 
 
 
-//
+    @ApiOperation("淇敼鐜荤拑鐘舵��   鍔熻兘锛氬绗煎唴鏍呮牸鐜荤拑杩涜銆愮牬鎹�/鎷胯蛋銆�  ")
+    @PostMapping("/ReportStatus")
+    @ResponseBody
+    public Result edgReportStatus(@RequestBody Map<String, String> arguments) {
+        String downStorageCageDetailsId=arguments.get("glassId");
+        int controlsId=Integer.valueOf(arguments.get("controlsId"));
+        boolean isSucess=downStorageCageDetailsService.identWorn(downStorageCageDetailsId,controlsId);
+        return Result.build(200,"銆愮牬鎹�/鎷胯蛋銆戞垚鍔�",1);
+    }
 
 
-    // Other CRUD operations can be defined here
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCage.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCage.java
index 0a68f47..4379860 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCage.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCage.java
@@ -50,7 +50,7 @@
      */
     @ApiModelProperty(value = "鍚敤鐘舵��", position = 5)
     @TableField("enable_state")
-    private String enableState;
+    private Integer enableState;
 
     /**
      * 鍓╀綑
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCageDetails.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCageDetails.java
index 9298084..24f9182 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCageDetails.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCageDetails.java
@@ -60,17 +60,17 @@
     /**
      * 瀹�
      */
-    private Double width;
+    private double width;
 
     /**
      * 楂�
      */
-    private Double height;
+    private double height;
 
     /**
      * 鍘氬害
      */
-    private Double thickness;
+    private double thickness;
 
     /**
      * 閽㈠寲鐗堝浘id
@@ -96,6 +96,14 @@
      * 鐜荤拑闂撮殭
      */
     private Integer gap;
+    /**
+     * 鎬诲眰鏁�
+     */
+    private Integer totalLayer;
+    /**
+     * 灞傛暟
+     */
+    private Integer layer;
 
 
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageDetailsMapper.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageDetailsMapper.java
index 49a3bd9..327b48e 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageDetailsMapper.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageDetailsMapper.java
@@ -1,13 +1,8 @@
 package com.mes.downstorage.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.github.yulichang.base.MPJBaseMapper;
-import com.mes.downglassinfo.entity.DownGlassTask;
 import com.mes.downstorage.entity.DownStorageCageDetails;
-import com.mes.glassinfo.entity.GlassInfo;
-import org.apache.ibatis.annotations.*;
-
-import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
 
 /**
  * <p>
@@ -20,4 +15,5 @@
 @Mapper
 public interface DownStorageCageDetailsMapper extends MPJBaseMapper<DownStorageCageDetails> {
 
+    DownStorageCageDetails getGlassInfoMaxCount();
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java
index 38e5f48..29c215b 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java
@@ -56,7 +56,27 @@
 
 
     /**
+     * @param start
+     * @param end
+     * @return   鏍规嵁浼犲叆鐨勬枡鏋跺彿 鏌ヨ绗﹀悎鎸夌収娴佺▼鍗′腑椤哄簭鍑虹墖鐨勫皬鐗�
+     */
+    List<DownStorageCageDetails> CacheOut2(int start, int end);
+//    /**
+//     * @return 鐩撮�氭煡璇�
+//     */
+//    List<GlassInfo>  DirectConnection();
+
+    /**
      * @return 鐩撮�氭煡璇�
      */
-    List<GlassInfo>  DirectConnection();
+    boolean DirectConnection(GlassInfo glassInfo);
+
+    DownStorageCageDetails getGlassInfoMaxCount();
+
+    /**
+     * @param glassId
+     * @param ControlsId
+     * @return  鐮存崯
+     */
+    boolean identWorn(String glassId, int ControlsId);
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java
index 32d55a3..705feb6 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java
@@ -1,6 +1,5 @@
 package com.mes.downstorage.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
 import com.github.yulichang.base.MPJBaseService;
 import com.mes.downglassinfo.entity.DownGlassTask;
 import com.mes.downstorage.entity.DownStorageCage;
@@ -20,18 +19,21 @@
  */
 public interface DownStorageCageService extends MPJBaseService<DownStorageCage> {
 
-    DownGlassTask createDownGlassTask(GlassInfo glassInfo, String startCell, String endCell, String taskType);
-    DownGlassTask createDownGlassTask(DownStorageCageDetails glassInfo, String startCell, String endCell, String taskType);
+    DownGlassTask createDownGlassTask(GlassInfo glassInfo, Integer startCell, Integer endCell, String taskType);
+
+    DownGlassTask createDownGlassTask(DownStorageCageDetails glassInfo, Integer startCell, Integer endCell, String taskType);
     //    List<Map<String, Object>> selectCacheLeisure();
-
-
-
 
 
     /**
      * @return 鎵惧埌绌烘牸瀛�
      */
-    List<DownStorageCageDetails> selectCacheEmpty() ;
+    DownStorageCage selectCacheEmpty(int currentSlot, boolean flag);
+
+    /**
+     * @return 鎵惧埌绌烘牸瀛�
+     */
+    List<DownStorageCageDetails> selectCacheEmpty();
 
     /**
      * @param downStorageCage
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java
index 0696121..1b3d559 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java
@@ -3,12 +3,15 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.yulichang.query.MPJLambdaQueryWrapper;
 import com.github.yulichang.query.MPJQueryWrapper;
 
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 import com.github.yulichang.toolkit.JoinWrappers;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.mes.common.config.Const;
 import com.mes.downstorage.entity.DownStorageCage;
 import com.mes.downstorage.entity.DownStorageCageDetails;
 import com.mes.downstorage.mapper.DownStorageCageDetailsMapper;
@@ -110,6 +113,7 @@
         return downStorageCageDetailsMapper.selectJoinMaps(JoinWrappers.lambda(DownStorageCageDetails.class) // 浣跨敤 JoinWrappers.lambda 鍒涘缓鑱斿悎鏌ヨ
                 .selectAll(DownStorageCageDetails.class) // 閫夋嫨鎵�鏈夊瓧娈�
                 .eq(DownStorageCage::getSlot, DownStorageCageDetails::getSlot) // 璁剧疆鍏宠仈鏉′欢
+                .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN)
                 .orderByAsc(DownStorageCage::getSlot) // 鎸� slot 瀛楁鍗囧簭鎺掑簭
         );
     }
@@ -160,38 +164,58 @@
 //
 //    }
 
+  //  @Override
+//    public List<GlassInfo>  DirectConnection(){
+//        LambdaQueryWrapper<GlassInfo> queryWrapper2 = Wrappers.lambdaQuery();
+//        queryWrapper2.select(GlassInfo::getFlowCardId,
+//                GlassInfo::getGlassId,
+//                GlassInfo::getTemperingLayoutId,
+//                GlassInfo::getTemperingFeedSequence)
+//                .notInSql(GlassInfo::getGlassId, "SELECT glass_id FROM down_glass_info")
+//                .orderByAsc(GlassInfo::getTemperingLayoutId)
+//                .orderByDesc(GlassInfo::getTemperingFeedSequence)
+//                .last("LIMIT 1");
+//
+//        // 鏌ヨ GlassInfo 琛�
+//        log.info("鐩撮�氭煡璇�");
+//        return glassInfoMapper.selectList(queryWrapper2);
+//
+//    };
+
     @Override
-    public List<GlassInfo>  DirectConnection(){
-        LambdaQueryWrapper<GlassInfo> queryWrapper2 = Wrappers.lambdaQuery();
-        queryWrapper2.select(GlassInfo::getFlowCardId,
-                GlassInfo::getGlassId,
-                GlassInfo::getTemperingLayoutId,
-                GlassInfo::getTemperingFeedSequence)
+    public boolean DirectConnection(GlassInfo glassInfo) {
+        LambdaQueryWrapper<GlassInfo> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(GlassInfo::getGlassId, glassInfo.getGlassId())
                 .notInSql(GlassInfo::getGlassId, "SELECT glass_id FROM down_glass_info")
-                .orderByAsc(GlassInfo::getTemperingLayoutId)
-                .orderByDesc(GlassInfo::getTemperingFeedSequence)
+                .orderByDesc(GlassInfo::getGlassType)
+                .groupBy(GlassInfo::getFlowCardId)
                 .last("LIMIT 1");
 
-        // 鏌ヨ GlassInfo 琛�
-        log.info("鐩撮�氭煡璇�");
-        return glassInfoMapper.selectList(queryWrapper2);
+        // 鏌ヨ绗﹀悎鏉′欢鐨� GlassInfo 璁板綍鏁伴噺
+        int count = glassInfoMapper.selectCount(queryWrapper);
 
-    };
+        return count > 0;
+    }
 
-
-
+    @Override
+    public DownStorageCageDetails getGlassInfoMaxCount() {
+        return baseMapper.getGlassInfoMaxCount();
+    }
 
 
     @Override
     public List<DownStorageCageDetails> CacheOut1(int start, int end) {
 
 
-        List<DownStorageCageDetails> cageDetails = downStorageCageDetailsMapper.selectList(null);
+        // 鍒涘缓涓�涓� LambdaQueryWrapper 瀹炰緥
+        LambdaQueryWrapper<DownStorageCageDetails> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+// 鏉′欢 state=100
+        lambdaQueryWrapper.eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN);
+        List<DownStorageCageDetails> cageDetails = downStorageCageDetailsMapper.selectList(lambdaQueryWrapper);
         // Step 5: 鍒ゆ柇 down_storage_cage_details 缁撴灉鏁伴噺鏄惁涓�9锛屽鏋滄槸锛屽垯鎵ц鍙﹀涓�涓煡璇�
         if (cageDetails.size() == 9) {
             log.info("1銆佺瀛愭弧浜嗙殑鏃跺�欙紝鎸夌収绗煎唴鐗堝浘id 鐗堝浘鐗囧簭鍑�");
             List<DownWorkstation> workstationList = downWorkstationMapper.selectList(new QueryWrapper<DownWorkstation>().between("workstation_id", start, end));
-
 
             List<String> flowCardIds = new ArrayList<>();
             for (DownWorkstation workstation : workstationList) {
@@ -207,6 +231,7 @@
             anotherQueryWrapper.orderByAsc(DownStorageCageDetails::getTemperingLayoutId);
             anotherQueryWrapper.orderByDesc(DownStorageCageDetails::getTemperingFeedSequence);
             anotherQueryWrapper.in(DownStorageCageDetails::getFlowCardId, flowCardIds);
+            anotherQueryWrapper.eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN);
             anotherQueryWrapper.last("LIMIT 1");
             return downStorageCageDetailsMapper.selectList(anotherQueryWrapper);
         } else {
@@ -214,12 +239,10 @@
             // Step 1: 鏌ヨ DownWorkstation 琛ㄨ幏鍙栧搴� workstation_id 鐨� flow_card_id
             List<DownWorkstation> workstationList = downWorkstationMapper.selectList(new QueryWrapper<DownWorkstation>().between("workstation_id", start, end));
 
-
             List<String> flowCardIds = new ArrayList<>();
             for (DownWorkstation workstation : workstationList) {
                 flowCardIds.add(workstation.getFlowCardId());
             }
-
             if (flowCardIds.isEmpty()) {
                 log.error("2銆佹湭鎵惧埌瀵瑰簲鐨� flow_card_id");
                 return Collections.emptyList(); // 杩斿洖绌哄垪琛ㄦ垨鑰呮姏鍑哄紓甯革紝瑙嗘儏鍐佃�屽畾
@@ -246,7 +269,7 @@
             LambdaQueryWrapper<DownStorageCageDetails> cageDetailsQueryWrapper = Wrappers.lambdaQuery();
             cageDetailsQueryWrapper.in(DownStorageCageDetails::getGlassId, glassIds);
             cageDetailsQueryWrapper.in(DownStorageCageDetails::getFlowCardId, flowCardIds);
-
+            cageDetailsQueryWrapper.eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN);
             log.info("鎸夌収娴佺▼鍗$殑鐗堝浘id 鐗堝浘鐗囧簭鍑�");
             // Step 4: 鏌ヨ down_storage_cage_details 琛ㄥ苟杩斿洖缁撴灉
             return downStorageCageDetailsMapper.selectList(cageDetailsQueryWrapper);
@@ -256,4 +279,98 @@
     }
 
 
+
+
+        @Override
+        public List<DownStorageCageDetails> CacheOut2(int start, int end) {
+
+
+            // 鍒涘缓涓�涓� LambdaQueryWrapper 瀹炰緥
+            LambdaQueryWrapper<DownStorageCageDetails> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+// 鏉′欢 state=100
+            lambdaQueryWrapper.eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN);
+            List<DownStorageCageDetails> cageDetails = downStorageCageDetailsMapper.selectList(lambdaQueryWrapper);
+            // Step 5: 鍒ゆ柇 down_storage_cage_details 缁撴灉鏁伴噺鏄惁涓�9锛屽鏋滄槸锛屽垯鎵ц鍙﹀涓�涓煡璇�
+            if (cageDetails.size() == 9) {
+                log.info("1銆佺瀛愭弧浜嗙殑鏃跺�欙紝鎸夌収绗煎唴娴佺▼鍗¢『搴忓嚭 GlassType鐩墠鏄祦绋嬪崱涓殑椤哄簭");
+                List<DownWorkstation> workstationList = downWorkstationMapper.selectList(new QueryWrapper<DownWorkstation>().between("workstation_id", start, end));
+
+                List<String> flowCardIds = new ArrayList<>();
+                for (DownWorkstation workstation : workstationList) {
+                    flowCardIds.add(workstation.getFlowCardId());
+                }
+
+                if (flowCardIds.isEmpty()) {
+                    log.error("鏈壘鍒板搴旂殑 flow_card_id");
+                    return Collections.emptyList(); // 杩斿洖绌哄垪琛ㄦ垨鑰呮姏鍑哄紓甯革紝瑙嗘儏鍐佃�屽畾
+                }
+                LambdaQueryWrapper<DownStorageCageDetails> anotherQueryWrapper = Wrappers.lambdaQuery();
+
+                anotherQueryWrapper.orderByAsc(DownStorageCageDetails::getGlassType);
+                anotherQueryWrapper.in(DownStorageCageDetails::getFlowCardId, flowCardIds);
+                anotherQueryWrapper.eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN);
+                anotherQueryWrapper.last("LIMIT 1");
+                return downStorageCageDetailsMapper.selectList(anotherQueryWrapper);
+            } else {
+
+                // Step 1: 鏌ヨ DownWorkstation 琛ㄨ幏鍙栧搴� workstation_id 鐨� flow_card_id
+                List<DownWorkstation> workstationList = downWorkstationMapper.selectList(new QueryWrapper<DownWorkstation>().between("workstation_id", start, end));
+
+                List<String> flowCardIds = new ArrayList<>();
+                for (DownWorkstation workstation : workstationList) {
+                    flowCardIds.add(workstation.getFlowCardId());
+                }
+                if (flowCardIds.isEmpty()) {
+                    log.error("2銆佹湭鎵惧埌瀵瑰簲鐨� flow_card_id");
+                    return Collections.emptyList(); // 杩斿洖绌哄垪琛ㄦ垨鑰呮姏鍑哄紓甯革紝瑙嗘儏鍐佃�屽畾
+                }
+                log.info("娴佺▼鍗�:{}", flowCardIds);
+                LambdaQueryWrapper<GlassInfo> queryWrapper2 = Wrappers.lambdaQuery();
+                queryWrapper2.select(GlassInfo::getFlowCardId,
+                        GlassInfo::getGlassId)
+                        .notInSql(GlassInfo::getGlassId, "SELECT glass_id FROM down_glass_info")
+                        .orderByAsc(GlassInfo::getGlassType)
+                        .last("LIMIT 1");
+
+                // 鏌ヨ GlassInfo 琛�
+                List<GlassInfo> glassInfos = glassInfoMapper.selectList(queryWrapper2);
+                if (glassInfos.isEmpty()) {
+                    log.error("鏈壘鍒板搴旂殑鐜荤拑淇℃伅");
+                    return Collections.emptyList(); // 杩斿洖绌哄垪琛ㄦ垨鑰呮姏鍑哄紓甯革紝瑙嗘儏鍐佃�屽畾
+                }
+                // Step 3: 鏋勯�犳煡璇� down_storage_cage_details 琛ㄧ殑鏉′欢
+                List<String> glassIds = glassInfos.stream().map(GlassInfo::getGlassId).collect(Collectors.toList());
+                LambdaQueryWrapper<DownStorageCageDetails> cageDetailsQueryWrapper = Wrappers.lambdaQuery();
+                cageDetailsQueryWrapper.in(DownStorageCageDetails::getGlassId, glassIds);
+                cageDetailsQueryWrapper.in(DownStorageCageDetails::getFlowCardId, flowCardIds);
+                cageDetailsQueryWrapper.eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN);
+                log.info("鎸夌収娴佺▼鍗$殑椤哄簭鍑�");
+                // Step 4: 鏌ヨ down_storage_cage_details 琛ㄥ苟杩斿洖缁撴灉
+                return downStorageCageDetailsMapper.selectList(cageDetailsQueryWrapper);
+            }
+
+
+    }
+
+
+
+
+    @Override
+    public boolean identWorn(String glassId, int ControlsId) {
+        List<DownStorageCageDetails> edgStorageCageDetails = baseMapper.selectList(new MPJLambdaQueryWrapper<DownStorageCageDetails>().selectAll(DownStorageCageDetails.class).eq(DownStorageCageDetails::getGlassId, glassId));
+        if (edgStorageCageDetails.size() == 1) {
+            DownStorageCageDetails item = edgStorageCageDetails.get(0);
+            item.setState(ControlsId);
+            baseMapper.update(item, new MPJLambdaWrapper<DownStorageCageDetails>().selectAll(DownStorageCageDetails.class).eq(DownStorageCageDetails::getGlassId, glassId));
+            return true;
+        }
+
+        return false;
+    }
+
+
+
+
+
+
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java
index 53d6be3..07dbd63 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java
@@ -1,15 +1,13 @@
 package com.mes.downstorage.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.yulichang.toolkit.JoinWrappers;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
-
-//import com.mes.device.PlcParameterObject;
+import com.mes.common.config.Const;
 import com.mes.downglassinfo.entity.DownGlassTask;
 import com.mes.downglassinfo.service.DownGlassTaskService;
 import com.mes.downstorage.entity.DownStorageCage;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.mes.downstorage.entity.DownStorageCageDetails;
 import com.mes.downstorage.mapper.DownStorageCageDetailsMapper;
 import com.mes.downstorage.mapper.DownStorageCageMapper;
@@ -17,7 +15,6 @@
 import com.mes.downstorage.service.DownStorageCageService;
 import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.glassinfo.service.GlassInfoService;
-import com.mes.pp.entity.OptimizeDetail;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -51,7 +48,7 @@
     private DownStorageCageDetailsMapper downStorageCageDetailsMapper;
 
     @Override
-    public DownGlassTask createDownGlassTask(GlassInfo glassInfo, String startCell, String endCell, String taskType) {
+    public DownGlassTask createDownGlassTask(GlassInfo glassInfo, Integer startCell, Integer endCell, String taskType) {
         DownGlassTask downGlassTask = new DownGlassTask();
 
         BeanUtils.copyProperties(glassInfo, downGlassTask);
@@ -63,7 +60,7 @@
     }
 
     @Override
-    public DownGlassTask createDownGlassTask(DownStorageCageDetails glassInfo, String startCell, String endCell, String taskType) {
+    public DownGlassTask createDownGlassTask(DownStorageCageDetails glassInfo, Integer startCell, Integer endCell, String taskType) {
         DownGlassTask downGlassTask = new DownGlassTask();
 
         BeanUtils.copyProperties(glassInfo, downGlassTask);
@@ -72,27 +69,61 @@
         downGlassTask.setEndCell(endCell);
         return downGlassTask;
     }
-
-
 
 
     //鎵惧埌绌烘牸瀛�
     @Override
     public List<DownStorageCageDetails> selectCacheEmpty() {
-        return baseMapper.selectJoinList(DownStorageCageDetails.class,
+        return this.selectJoinList(DownStorageCageDetails.class,
                 JoinWrappers.lambda(DownStorageCage.class)
                         .selectAll(DownStorageCage.class)
-                        .select(DownStorageCageDetails::getWidth, DownStorageCageDetails::getHeight, DownStorageCageDetails::getGlassId)
                         .leftJoin(DownStorageCageDetails.class, on -> on
                                 .eq(DownStorageCageDetails::getDeviceId, DownStorageCage::getDeviceId)
-                                .eq(DownStorageCageDetails::getSlot, DownStorageCage::getSlot))
+                                .eq(DownStorageCageDetails::getSlot, DownStorageCage::getSlot)
+                                .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN))
                         .isNull(DownStorageCageDetails::getSlot)
         );
     }
 
+    //鎵惧埌绌烘牸瀛�
+    @Override
+    public DownStorageCage selectCacheEmpty(int currentSlot, boolean flag) {
+        List<DownStorageCage> emptyList = this.selectJoinList(DownStorageCage.class,
+                JoinWrappers.lambda(DownStorageCage.class)
+                        .selectAll(DownStorageCage.class)
+                        .leftJoin(DownStorageCageDetails.class, on -> on
+                                .eq(DownStorageCageDetails::getSlot, DownStorageCage::getSlot)
+                                .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN))
+                        .isNull(DownStorageCageDetails::getSlot)
+                        .last("order by abs(t.slot - " + currentSlot + ")  asc limit 2")
+        );
+        if (flag && CollectionUtil.isNotEmpty(emptyList)) {
+            return emptyList.get(0);
+        }
+        if (CollectionUtil.isEmpty(emptyList) || emptyList.size() == 1) {
+            return null;
+        }
+        return emptyList.get(0);
+    }
 
+    @Override
+    public List<DownStorageCageDetails> selectCacheMax() {
+        return baseMapper.selectJoinList(DownStorageCageDetails.class,
+                JoinWrappers.lambda(DownStorageCage.class)
+                        // 娣诲姞 DownStorageCage 鐨� enableState 涓� 1 鐨勬潯浠�
+                        .select(DownStorageCageDetails::getFlowCardId)
+                        .leftJoin(DownStorageCageDetails.class, on -> on
+                                .eq(DownStorageCageDetails::getDeviceId, DownStorageCage::getDeviceId)
+                                .eq(DownStorageCageDetails::getSlot, DownStorageCage::getSlot)
+                                .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN))
+                        .isNull(DownStorageCageDetails::getSlot)
+                        .eq(DownStorageCage::getEnableState, 1)
+                        .groupBy(DownStorageCageDetails::getFlowCardId) // 鏍规嵁 flowCardId 鍒嗙粍
+                        // 浣跨敤瀛愭煡璇㈠拰鎺掑簭鏉ヨ幏鍙栫浉鍚� FlowCardId 涓殑鏈�澶氳褰�
+                        .having("count(*) = (select max(cnt) from (select count(*) as cnt from down_storage_cage_details group by flow_card_id) as temp)")
 
-
+        );
+    }
 
 
     @Override
@@ -103,7 +134,8 @@
                 .select(DownStorageCageDetails::getGlassId, DownStorageCageDetails::getWidth, DownStorageCageDetails::getHeight, DownStorageCageDetails::getId)
                 .leftJoin(DownStorageCageDetails.class, on -> on
                         .eq(DownStorageCageDetails::getDeviceId, DownStorageCage::getDeviceId)
-                        .eq(DownStorageCageDetails::getSlot, DownStorageCage::getSlot))
+                        .eq(DownStorageCageDetails::getSlot, DownStorageCage::getSlot)
+                        .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN))
         );
 
     }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java
index d242127..7afc44a 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java
@@ -53,6 +53,11 @@
      */
     private Integer workState;
 
+    /**
+     * 灞傛暟
+     */
+    private Integer layer;
+
 
     /**
      * 鎬绘暟閲�
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstationTask.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstationTask.java
index 15cbb9f..f5300b1 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstationTask.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstationTask.java
@@ -29,12 +29,12 @@
     /**
      * 瀹�
      */
-    private Double width;
+    private double width;
 
     /**
      * 楂�
      */
-    private Double height;
+    private double height;
 
     /**
      * 鑶滅郴
@@ -44,7 +44,7 @@
     /**
      * 鍘氬害
      */
-    private Double thickness;
+    private double thickness;
 
     /**
      * 娴佺▼鍗″彿
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstionAndDownGlassinfo.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstionAndDownGlassinfo.java
index 0ebb340..1229f98 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstionAndDownGlassinfo.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstionAndDownGlassinfo.java
@@ -6,8 +6,6 @@
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
-import java.io.Serializable;
-
 /**
  * <p>
  *
@@ -70,19 +68,19 @@
     /**
      * 瀹�
      */
-    private Double width;
+    private double width;
 
     /**
      * 楂�
      */
-    private Double height;
-    private Double totalwidth;
+    private double height;
+    private double totalwidth;
 
-    private Double totalheight;
+    private double totalheight;
     /**
      * 鍘氬害
      */
-    private Double thickness;
+    private double thickness;
 
 
     private String Filmsid;
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/dto/DownGlassInfoDTO.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/dto/DownGlassInfoDTO.java
new file mode 100644
index 0000000..dc3fe51
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/dto/DownGlassInfoDTO.java
@@ -0,0 +1,32 @@
+package com.mes.downworkstation.entity.dto;
+
+import com.mes.glassinfo.entity.GlassInfo;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/6/21 16:06
+ * @Description:
+ */
+@Data
+public class DownGlassInfoDTO {
+    /**
+     * 娴佺▼鍗″彿
+     */
+    private String flowCardId;
+    /**
+     * 灞傛暟
+     */
+    private Integer layer;
+    /**
+     * 钀芥灦鏁伴噺
+     */
+    private Integer count;
+
+    /**
+     * 娴佺▼鍗℃湭杩涚墖鐨勭幓鐠冧俊鎭�
+     */
+    private List<GlassInfo> glassInfoList;
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownCacheGlassTask.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownCacheGlassTask.java
index e858451..45eab78 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownCacheGlassTask.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownCacheGlassTask.java
@@ -1,6 +1,7 @@
 package com.mes.job;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.mes.common.config.Const;
 import com.mes.downglassinfo.entity.DownGlassInfo;
 import com.mes.downglassinfo.entity.DownGlassTask;
 import com.mes.downglassinfo.service.DownGlassInfoService;
@@ -41,38 +42,58 @@
     @Autowired
     DownWorkstationService downWorkstationService;
     @Autowired
-     DownGlassInfoService downGlassInfoService;
-
-
+    DownGlassInfoService downGlassInfoService;
 
 
     @Autowired
     private DownWorkstationTaskService downWorkstationTaskService;
 
-//    @Value("${mes.threshold}")
+    //    @Value("${mes.threshold}")
     private int threshold;
 
-  // @Scheduled(fixedDelay = 1000)
+//    @Scheduled(fixedDelay = 1000)
+    public void autoBindRack() {
+        log.info("鏍规嵁缂撳瓨涓凡缁忚繘鐗囩殑鐜荤拑绉嶆暟閲忔渶澶氱殑娴佺▼鍗″彿鑷姩缁戝畾涓�涓惎鐢ㄧ姸鎬佺殑绌烘灦瀛�");
+
+        List<DownStorageCageDetails> Details = downStorageCageService.selectCacheMax();
+        if (Details.size() > 0) {
+            DownStorageCageDetails downStorageCageDetails = Details.get(0);
+            String flowCardId = downStorageCageDetails.getFlowCardId();
+            int glassInfoCount = glassInfoService.getGlassInfoCountByFlowCardId(flowCardId);
+            DownWorkstation downWorkstation = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>().eq(DownWorkstation::getFlowCardId, null));
+            List<DownWorkstation> downWorkstations = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>()
+                    .eq(DownWorkstation::getEnableState, 1));
+
+            if (!downWorkstations.stream().anyMatch(workstation -> workstation.getFlowCardId().equals(flowCardId))) {
+                downWorkstationService.updateFlowCardIdAndCount(flowCardId, glassInfoCount, downWorkstation.getWorkstationId());
+            }
+
+
+        }
+    }
+
+
+    // @Scheduled(fixedDelay = 1000)
     public void plcdownGlassTask() {
-   //   PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
+        //   PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
 //        String taskRequestTypeValue = plcParameterObject.getPlcParameter("A06_request_word").getValue();
 //        String glassIdeValue = plcParameterObject.getPlcParameter("A05_scanning_ID").getValue();
 //        String confirmationWrodValue = plcParameterObject.getPlcParameter("MES_confirmation_word").getValue();
 //        String outGlassstate = plcParameterObject.getPlcParameter("A09_glass_status").getValue();
-//        String confirmationWrodAddress = plcParameterObject.getPlcParameter("MES_confirmation_word").getAddress();
-      // String G06RobotTaskRequestWord = plcParameterObject.getPlcParameter("G06RobotTaskRequestWord").getAddress();
+//        String MESSendingWord = plcParameterObject.getPlcParameter("MES_confirmation_word").getAddress();
+        // String G06RobotTaskRequestWord = plcParameterObject.getPlcParameter("G06RobotTaskRequestWord").getAddress();
 
 
-                String taskRequestTypeValue ="0";
-        String glassIdeValue ="NG24041101C002-2-6-1-6";
-        String confirmationWrodValue ="1";
-        String outGlassstate="1";
-        String confirmationWrodAddress="1";
-        String G11RobotTaskRequestWord ="0";
-        String G06RobotTaskRequestWord ="0";
-        String G13RobotTaskRequestWord ="0";
+        String taskRequestTypeValue = "0";
+        String glassIdeValue = "NG24041101C002-2-6-1-6";
+        String confirmationWrodValue = "1";
+        String outGlassstate = "1";
+        String MESSendingWord = "1";
+        String G11RobotTaskRequestWord = "0";
+        String G06RobotTaskRequestWord = "0";
+        String G13RobotTaskRequestWord = "0";
 
-                log.info("1銆佽幏鍙栧埌鐨勮姹傚瓧涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{}锛岃幏鍙栧埌鐨勭‘璁ゅ瓧涓猴細{}锛岃幏鍙栧埌鐨勫嚭鐗囩姸鎬佷负锛歿}",
+        log.info("1銆佽幏鍙栧埌鐨勮姹傚瓧涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{}锛岃幏鍙栧埌鐨勭‘璁ゅ瓧涓猴細{}锛岃幏鍙栧埌鐨勫嚭鐗囩姸鎬佷负锛歿}",
                 taskRequestTypeValue, glassIdeValue, confirmationWrodValue, outGlassstate);
 
 //        if ("0".equals(taskRequestTypeValue)) {
@@ -81,52 +102,48 @@
 //                return;
 //            }
 //            log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓�0锛屽皢纭瀛楁敼涓�0");
-//            S7object.getinstance().plccontrol.WriteWord(confirmationWrodAddress, (short) 0);
+//            S7object.getinstance().plccontrol.WriteWord(MESSendingWord, 0);
 //            return;
 //        }
 //        if (!"0".equals(confirmationWrodValue)) {
 //            log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓嶄负0锛屽皢纭瀛楁敼涓�0");
-//            S7object.getinstance().plccontrol.WriteWord(confirmationWrodAddress, (short) 0);
+//            S7object.getinstance().plccontrol.WriteWord(MESSendingWord, 0);
 //            return;
 //        }
 
         if ("1".equals(taskRequestTypeValue)) {
             log.info("3銆佽繘鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛岃繘鐗囦换鍔�");
-            inTo(glassIdeValue, confirmationWrodAddress);
+            inTo(glassIdeValue, MESSendingWord);
         } else if ("2".equals(taskRequestTypeValue)) {
 
             log.info("3銆佸嚭鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛岃繘鐗囦换鍔�");
-            outTo( confirmationWrodAddress);
+            outTo(MESSendingWord);
 
         } else if ("3".equals(taskRequestTypeValue)) {
             log.info("3銆佽繘鐗囧拰鍑虹墖閮界┖闂诧紝鎵ц鍑虹墖浠诲姟");
-            if (outTo(confirmationWrodAddress)) {
-                inTo(glassIdeValue, confirmationWrodAddress);
+            if (outTo(MESSendingWord)) {
+                inTo(glassIdeValue, MESSendingWord);
 
 
             }
         }
 
-        if (("1".equals(G11RobotTaskRequestWord) || "1".equals(G06RobotTaskRequestWord))  || "1".equals(G13RobotTaskRequestWord)) {
-            log.info("4銆佹湁鏈哄櫒浜轰笅鐗囪姹傦紝鎵ц涓嬬墖浠诲姟");
+        if (("0".equals(G11RobotTaskRequestWord) || "0".equals(G06RobotTaskRequestWord)) || "0".equals(G13RobotTaskRequestWord)) {
+            log.info("4銆佹湁涓嬬墖瀹屾垚淇″彿鏇存柊钀芥灦鏁伴噺");
             insertdownglassinfo();
         }
-
-        //鑷姩缁戝畾鏋跺瓙锛屽鏋滃伐浣嶈〃娌℃湁缁戝畾鏋跺瓙锛岄粯璁ゅ皢绗煎瓙涓暟閲忔渶澶氱殑娴佺▼鍗″彿缁戝畾鏈哄櫒鎵�2鐨勭┖鏋跺瓙
-
-
-
 
 
     }
 
     /**
      * 杩涚墖浠诲姟
+     *
      * @param glassId
-     * @param confirmationWrodAddress
+     * @param MESSendingWord
      * @param
      */
-    private void inTo(String glassId, String confirmationWrodAddress) {
+    private void inTo(String glassId, String MESSendingWord) {
         log.info("1銆佹寜鐓х幓鐠僫d:{}鑾峰彇鐜荤拑灏忕墖淇℃伅", glassId);
         GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
         if (glassInfo == null) {
@@ -135,152 +152,152 @@
         }
         log.info("2銆佽幏鍙栧埌鐨勭幓鐠冧俊鎭负{}", glassInfo);
 
-        if (glassInfo.getGlassId().equals(downStorageCageDetailsService.DirectConnection()) ) {
+        if (downStorageCageDetailsService.DirectConnection(glassInfo)) {
             //鐩撮��
-            log.info("3銆佸鏋滃綋鍓嶇幓鐠冨睘浜庣増鍥緄d鍜岀墖搴忕殑椤哄簭鍒欑洿閫氾紝鎵ц涓嬬墖浠诲姟");
+            //log.info("3銆佸鏋滃綋鍓嶇幓鐠冨睘浜庣増鍥緄d鍜岀墖搴忕殑椤哄簭鍒欑洿閫氾紝鎵ц涓嬬墖浠诲姟");
+            log.info("3銆佸鏋滃綋鍓嶇幓鐠冨睘浜庢祦绋嬪崱涓殑鐗囧簭鐨勯『搴忓垯鐩撮�氾紝鎵ц涓嬬墖浠诲姟");
             DownWorkstation downWorkstation = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>().eq(DownWorkstation::getFlowCardId, glassInfo.getFlowCardId()));
-            int WorkstationId=downWorkstation.getWorkstationId();
-            DownGlassTask downGlassTask = downStorageCageService.createDownGlassTask(glassInfo, "0", String.valueOf(WorkstationId), "3");
+            int WorkstationId = downWorkstation.getWorkstationId();
+            DownGlassTask downGlassTask = downStorageCageService.createDownGlassTask(glassInfo, 0, WorkstationId, "3");
             downGlassTaskService.insertCacheTask(downGlassTask);
 
-        }else{
+        } else {
 
-            log.info("4銆佸鏋滀笉灞炰簬鐗堝浘id鍜岀墖搴忕殑椤哄簭鎵ц杩涚墖浠诲姟");
-        //娣诲姞杩涚墖浠诲姟  鏌ユ壘绌烘牸
-        List<DownStorageCageDetails> list = downStorageCageService.selectCacheEmpty();
-        if(list.size()>0){
-            DownStorageCageDetails item = list.get(0);
+            // log.info("4銆佸鏋滀笉灞炰簬鐗堝浘id鍜岀墖搴忕殑椤哄簭鎵ц杩涚墖浠诲姟");
+            log.info("4銆佸鏋滀笉灞炰簬娴佺▼鍗′腑鐨勭墖搴忕殑椤哄簭鎵ц杩涚墖浠诲姟");
+
+            //娣诲姞杩涚墖浠诲姟  鏌ユ壘绌烘牸
+            List<DownStorageCageDetails> list = downStorageCageService.selectCacheEmpty();
+            if (list.size() > 0) {
+                DownStorageCageDetails item = list.get(0);
 
 
+                log.info("5銆佹煡璇㈠崸寮忕悊鐗囩閲岄潰鐨勭┖鏍�:{}", list);
+                log.info("6銆佸皢鐜荤拑淇℃伅鎻掑叆鍗у紡鐞嗙墖绗�,褰撳墠鐜荤拑淇℃伅:{}", glassInfo);
+                DownStorageCageDetails details = new DownStorageCageDetails();
+                BeanUtils.copyProperties(glassInfo, details);
+                details.setState(Const.GLASS_STATE_IN);
+                details.setGlassId(glassInfo.getGlassId());
+                details.setSlot(item.getSlot());
+                details.setDeviceId(item.getDeviceId());
+                downStorageCageDetailsService.save(details);
+                log.info("7銆佺幓鐠冧俊鎭凡瀛樺叆鐞嗙墖绗艰鎯呰〃锛岀幓鐠冧俊鎭负{}", details);
 
-        log.info("5銆佹煡璇㈠崸寮忕悊鐗囩閲岄潰鐨勭┖鏍�:{}", list);
-        log.info("6銆佸皢鐜荤拑淇℃伅鎻掑叆鍗у紡鐞嗙墖绗�,褰撳墠鐜荤拑淇℃伅:{}", glassInfo);
-        DownStorageCageDetails details = new DownStorageCageDetails();
-        BeanUtils.copyProperties(glassInfo, details);
-        details.setState(1);
-        details.setGlassId(glassInfo.getGlassId());
-        details.setSlot(item.getSlot());
-        details.setDeviceId(item.getDeviceId());
-        downStorageCageDetailsService.save(details);
-        log.info("7銆佺幓鐠冧俊鎭凡瀛樺叆鐞嗙墖绗艰鎯呰〃锛岀幓鐠冧俊鎭负{}", details);
-
-            DownGlassTask downGlassTask = downStorageCageService.createDownGlassTask(glassInfo, "0", item.getSlot() + "", "1");
-        //娣诲姞杩涚墖浠诲姟
-        log.info("8銆佺敓鎴愯繘鐗囦换鍔′俊鎭瓨鍏ヤ换鍔¤〃{}", downGlassTask);
-            downGlassTaskService.insertCacheTask(downGlassTask);
-        }
-
+                DownGlassTask downGlassTask = downStorageCageService.createDownGlassTask(glassInfo, 0, item.getSlot(), "1");
+                //娣诲姞杩涚墖浠诲姟
+                log.info("8銆佺敓鎴愯繘鐗囦换鍔′俊鎭瓨鍏ヤ换鍔¤〃{}", downGlassTask);
+                downGlassTaskService.insertCacheTask(downGlassTask);
+            }
 
 
         }
         log.info("9銆佸彂閫佺‘璁ゅ瓧瀹屾垚");
-        //S7object.getinstance().plccontrol.WriteWord(confirmationWrodAddress, (short) 1);
+        //S7object.getinstance().plccontrol.WriteWord(MESSendingWord, 1);
     }
 
     /**
      * 鍑虹墖浠诲姟
      *
-     * @param confirmationWrodAddress
-     *
+     * @param MESSendingWord
      */
-    private Boolean outTo( String confirmationWrodAddress) {
-        log.info("鍗曠墖鎯呭喌鏍规嵁浼犲叆鐨勬枡鏋跺彿 鏌ヨ绗﹀悎鎸夌収鐗堝浘id鍜岀墖搴忓嚭鐗�,骞朵笖浼樺厛鍑烘弧鏋剁殑灏忕墖");
-        List<DownStorageCageDetails> list = downStorageCageDetailsService.CacheOut1(1,3);
+    private Boolean outTo(String MESSendingWord) {
+        // log.info("鍗曠墖鎯呭喌鏍规嵁浼犲叆鐨勬枡鏋跺彿 鏌ヨ绗﹀悎鎸夌収鐗堝浘id鍜岀墖搴忓嚭鐗�,骞朵笖浼樺厛鍑烘弧鏋剁殑灏忕墖");
+        log.info("鍗曠墖鎯呭喌鏍规嵁浼犲叆鐨勬枡鏋跺彿 鏌ヨ绗﹀悎鎸夌収娴佺▼鍗′腑椤哄簭鍑虹墖,骞朵笖浼樺厛鍑烘弧鏋剁殑灏忕墖");
 
-        List<DownStorageCageDetails> list2 = downStorageCageDetailsService.CacheOut1(4,6);
+//        List<DownStorageCageDetails> list1to3 = downStorageCageDetailsService.CacheOut1(1, 3);
+//        List<DownStorageCageDetails> list4to6 = downStorageCageDetailsService.CacheOut1(4, 6);
+        List<DownStorageCageDetails> list1to6 = downStorageCageDetailsService.CacheOut2(1, 6);
 
-        List<DownStorageCageDetails> list3 = downStorageCageDetailsService.CacheOut1(1,6);
+        DownStorageCageDetails selectedItem = null;
+
+        Integer endCell = null;
+
         // 浼樺厛 瓒呭嚭灏哄浼樺厛浜哄伐鍑虹墖 浜哄伐澶勭悊
-        if (!list3.isEmpty()) {
-
-            DownStorageCageDetails item3 = list3.get(0);
+        if (!list1to6.isEmpty()) {
+            DownStorageCageDetails item3 = list1to6.get(0);
+            //鍚庢湡鏈夌敓浜ц鍒�
             if (item3.getHeight() >= 2500 && item3.getWidth() >= 2660) {
                 log.info("浜哄伐澶勭悊");
-                String endcell = "7";
+                selectedItem = item3;
 
-
-                DownGlassTask downGlassTask = downStorageCageService.createDownGlassTask(item3, "9", endcell, "2");
-                downGlassTaskService.insertCacheTask(downGlassTask);
-              // S7object.getinstance().plccontrol.WriteWord(confirmationWrodAddress, (short) 2);
-
-              return true;
-            }
-            else if (!list2.isEmpty() && !list3.isEmpty()) {
-                log.info("鍓嶅悗绔兘绌洪棽 浼樺厛鍚庣鍑虹墖骞朵笖浼樺厛婊℃灦");
-                DownStorageCageDetails item4 = list2.get(0);
-
-                DownWorkstation downWorkstation = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>().eq(DownWorkstation::getFlowCardId, item4.getFlowCardId()));
-                String endcell = String.valueOf(downWorkstation.getWorkstationId());
-
-                DownGlassTask downGlassTask = downStorageCageService.createDownGlassTask(item4, "9", endcell, "2");
-                downGlassTaskService.insertCacheTask(downGlassTask);
-
-                //S7object.getinstance().plccontrol.WriteWord(confirmationWrodAddress, (short) 2);
-
-                return true;
-
-            }
-            // 鎸夌収鐗堝浘id鍜岀墖搴忕鍚堝墠绔嚭鐗�
-            else if (!list.isEmpty()) {
-                log.info("鍓嶇鍑虹墖");
-                DownStorageCageDetails item = list.get(0);
-                DownWorkstation downWorkstation = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>().eq(DownWorkstation::getFlowCardId, item.getFlowCardId()));
-                String endcell = String.valueOf(downWorkstation.getWorkstationId());
-                // 鍑哄埌 G06
-                DownGlassTask downGlassTask = downStorageCageService.createDownGlassTask(item, "9", endcell, "2");
-                downGlassTaskService.insertCacheTask(downGlassTask);
-                // S7object.getinstance().plccontrol.WriteWord(confirmationWrodAddress, (short) 2);
-
-
-                return true;
-                // 鎸夌収鐗堝浘id鍜岀墖搴忕鍚堝悗绔嚭鐗�
-            } else if (!list2.isEmpty()) {
-                log.info("鍚庣鍑虹墖");
-                DownStorageCageDetails item2 = list2.get(0);
-                DownWorkstation downWorkstation = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>().eq(DownWorkstation::getFlowCardId, item2.getFlowCardId()));
-                String endcell = String.valueOf(downWorkstation.getWorkstationId());
-                // 鍑哄埌 G11
-                DownGlassTask downGlassTask = downStorageCageService.createDownGlassTask(item2, "9", endcell, "2");
-                downGlassTaskService.insertCacheTask(downGlassTask);
-                //  S7object.getinstance().plccontrol.WriteWord(confirmationWrodAddress, (short) 2);
-                return true;
+            } else if (!!list1to6.isEmpty()) {
+                log.info("鍓嶅悗绔兘绌洪棽浼樺厛婊℃灦");
+                selectedItem = list1to6.get(0);
             }
         }
-        //濡傛灉鍚屾椂鍓嶅悗绔兘绌洪棽 浼樺厛鍚庣鍑虹墖骞朵笖浼樺厛婊℃灦
+
+        // 鎸夌収鐗堝浘id鍜岀墖搴忕鍚堝墠绔嚭鐗�
+//        if (selectedItem == null && !list1to3.isEmpty()) {
+//            log.info("鍓嶇鍑虹墖");
+//            selectedItem = list1to3.get(0);
+//        }
+//
+//        // 鎸夌収鐗堝浘id鍜岀墖搴忕鍚堝悗绔嚭鐗�
+//        if (selectedItem == null && !list4to6.isEmpty()) {
+//            log.info("鍚庣鍑虹墖");
+//            selectedItem = list4to6.get(0);
+//        }
+
+        if (selectedItem != null) {
+            DownWorkstation downWorkstation = downWorkstationService.getOne(
+                    new LambdaQueryWrapper<DownWorkstation>()
+                            .eq(DownWorkstation::getFlowCardId, selectedItem.getFlowCardId())
+            );
+            endCell = downWorkstation.getWorkstationId();
+            if (endCell == null) {
+                endCell = 7;
+            }
+            DownGlassTask downGlassTask = downStorageCageService.createDownGlassTask(selectedItem, 9, endCell, "2");
+            downGlassTaskService.insertCacheTask(downGlassTask);
+            LambdaQueryWrapper<DownStorageCageDetails> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(DownStorageCageDetails::getGlassId, selectedItem.getGlassId());
+            DownStorageCageDetails updateDetail = new DownStorageCageDetails();
+            updateDetail.setState(Const.GLASS_STATE_OUT);
+            downStorageCageDetailsService.update(updateDetail, wrapper);
+            log.info("鏇存柊鍑虹墖鐜荤拑鐨勭姸鎬佷负{}", Const.GLASS_STATE_OUT);
+            // S7object.getinstance().plccontrol.WriteWord(MESSendingWord, 2);
+
+            return true;
+        }
 
         // 杩斿洖缁撴灉
         return false;
     }
 
 
-//
+    //
     public void insertdownglassinfo() {
         try {
 
-        List<DownGlassTask> taskdownGlassInf = downGlassTaskService.getUnloadingTaskState();
-        if (taskdownGlassInf != null && !taskdownGlassInf.isEmpty()) {
+            List<DownGlassTask> taskdownGlassInf = downGlassTaskService.getUnloadingTaskState();
+            if (taskdownGlassInf != null && !taskdownGlassInf.isEmpty()) {
 
-            for (DownGlassTask downGlassInfo : taskdownGlassInf) {
-                // 鍒涘缓鏂扮殑 DownGlassInfo 瀵硅薄骞惰缃浉鍏冲睘鎬�
-                DownGlassInfo newdownGlassInfo = new DownGlassInfo();
+                for (DownGlassTask downGlassInfo : taskdownGlassInf) {
+                    // 鍒涘缓鏂扮殑 DownGlassInfo 瀵硅薄骞惰缃浉鍏冲睘鎬�
+                    DownGlassInfo newdownGlassInfo = new DownGlassInfo();
 
-                Integer maxSequence = downGlassInfoService.getMaxSequenceByFlowCardId(downGlassInfo.getFlowCardId());
-                // 鍒濆鍖栭『搴忓瓧娈靛��
-                int sequence = maxSequence != null ? maxSequence + 1 : 1;
-                BeanUtils.copyProperties(downGlassInfo, newdownGlassInfo);
-                // 璁剧疆椤哄簭瀛楁鍊�
-                newdownGlassInfo.setSequence(sequence);
-                // 鎻掑叆鏁版嵁鍒颁笅鐗囩幓鐠冧俊鎭〃
-                downGlassInfoService.insertDownGlassInfo(newdownGlassInfo);
-                log.info("鎻掑叆鏁版嵁鍒颁笅鐗囩幓鐠冧俊鎭〃");
-                DownWorkstation downWorkstation1 = downWorkstationService.selectByFlowCardId(downGlassInfo.getFlowCardId());
-                downWorkstationService.updateracksnumber(downGlassInfo.getFlowCardId(), downWorkstation1.getRacksnumber() + 1);
-                log.info("鏇存柊钀芥灦鏁伴噺");
-                sequence++; // 閫掑椤哄簭瀛楁鍊�
+                    Integer maxSequence = downGlassInfoService.getMaxSequenceByFlowCardId(downGlassInfo.getFlowCardId(), downGlassInfo.getLayer());
+                    // 鍒濆鍖栭『搴忓瓧娈靛��
+                    int sequence = maxSequence != null ? maxSequence + 1 : 1;
+                    BeanUtils.copyProperties(downGlassInfo, newdownGlassInfo);
+                    // 璁剧疆椤哄簭瀛楁鍊�
+                    newdownGlassInfo.setSequence(sequence);
+                    // 鎻掑叆鏁版嵁鍒颁笅鐗囩幓鐠冧俊鎭〃
+                    downGlassInfoService.insertDownGlassInfo(newdownGlassInfo);
+                    log.info("鎻掑叆鏁版嵁鍒颁笅鐗囩幓鐠冧俊鎭〃");
+                    DownWorkstation downWorkstation1 = downWorkstationService.selectByFlowCardId(downGlassInfo.getFlowCardId());
+                    downWorkstationService.updateracksnumber(downGlassInfo.getFlowCardId(), downWorkstation1.getRacksnumber() + 1);
+                    log.info("鏇存柊钀芥灦鏁伴噺");
+//                    LambdaQueryWrapper<DownGlassTask> wrapper = new LambdaQueryWrapper<>();
+//                    wrapper.eq(DownGlassTask::getGlassId, newdownGlassInfo.getGlassId());
+//                    DownGlassTask updateDetail = new DownGlassTask();
+//                    updateDetail.setTaskStauts(2);
+//                    downGlassTaskService.update(updateDetail, wrapper);
+                    sequence++; // 閫掑椤哄簭瀛楁鍊�
 
 
+                }
             }
-        }
         } catch (Exception e) {
             // 鎵撳嵃寮傚父淇℃伅
             e.printStackTrace();
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
new file mode 100644
index 0000000..e9503b4
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
@@ -0,0 +1,520 @@
+package com.mes.job;
+
+import cn.hutool.core.lang.Assert;
+import cn.smallbun.screw.core.util.CollectionUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.mes.common.S7object;
+import com.mes.common.config.Const;
+import com.mes.device.PlcParameterObject;
+import com.mes.downglassinfo.entity.DownGlassInfo;
+import com.mes.downglassinfo.entity.DownGlassTask;
+import com.mes.downglassinfo.service.DownGlassInfoService;
+import com.mes.downglassinfo.service.DownGlassTaskService;
+import com.mes.downstorage.entity.DownStorageCage;
+import com.mes.downstorage.entity.DownStorageCageDetails;
+import com.mes.downstorage.service.DownStorageCageDetailsService;
+import com.mes.downstorage.service.DownStorageCageService;
+import com.mes.downworkstation.entity.DownWorkstation;
+import com.mes.downworkstation.entity.dto.DownGlassInfoDTO;
+import com.mes.downworkstation.service.DownWorkstationService;
+import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.glassinfo.service.GlassInfoService;
+import com.mes.tools.S7control;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+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 java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/5/8 8:17
+ * @Description:
+ */
+@Component
+@Slf4j
+public class DownLoadCacheGlassTask {
+
+    @Autowired
+    DownGlassTaskService downGlassTaskService;
+    @Autowired
+    GlassInfoService glassInfoService;
+    @Autowired
+    DownStorageCageDetailsService downStorageCageDetailsService;
+    @Autowired
+    DownStorageCageService downStorageCageService;
+    @Autowired
+    DownWorkstationService downWorkstationService;
+    @Autowired
+    DownGlassInfoService downGlassInfoService;
+
+    @Value("${mes.threshold}")
+    private Integer threshold;
+
+    @Value("${mes.throughWidth}")
+    private Integer throughWidth;
+
+    @Value("${mes.throughHeight}")
+    private Integer throughHeight;
+
+    @Value("${mes.maxWidth}")
+    private Integer maxWidth;
+
+    @Value("${mes.maxHeight}")
+    private Integer maxHeight;
+
+
+    @Scheduled(fixedDelay = 1000)
+    public void plcHomeEdgTask() {
+        PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
+        String requestWord = plcParameterObject.getPlcParameter("requestWord").getValue();
+        String glassIdeValue = plcParameterObject.getPlcParameter("requestID").getValue();
+        //A08  A09琛ㄧず绾胯矾鐩稿悓  鍙仛绛変环  鏃犳暟鎹浆int寮傚父
+        String out06Glassstate = plcParameterObject.getPlcParameter("glassStatus06").getValue();
+        String out08Glassstate = plcParameterObject.getPlcParameter("glassStatus08").getValue();
+        String out11Glassstate = plcParameterObject.getPlcParameter("glassStatus11").getValue();
+        String out13Glassstate = plcParameterObject.getPlcParameter("glassStatus13").getValue();
+        String confirmationWrodValue = plcParameterObject.getPlcParameter("confirmationWord").getValue();
+        String confirmationWrodAddress = plcParameterObject.getPlcParameter("confirmationWord").getAddress();
+        String currentSlot = plcParameterObject.getPlcParameter("currentCell").getValue();
+
+        log.info("1銆佽幏鍙栧埌鐨勮姹傚瓧涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{}锛岃幏鍙栧埌鐨勭‘璁ゅ瓧涓猴細{}锛岃幏鍙栧埌鐨勫嚭鐗囩姸鎬佸垎鍒负锛歡06:{}銆乬08:{}銆乬11:{}銆乬13:{},褰撳墠鏍煎瓙鍙蜂负锛歿}",
+                requestWord, glassIdeValue, confirmationWrodValue, out06Glassstate, out08Glassstate, out11Glassstate, out13Glassstate, currentSlot);
+
+        if ("0".equals(requestWord)) {
+            if ("0".equals(confirmationWrodValue)) {
+                log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓�0锛屼笖纭瀛椾负0锛屼笉鎵ц浠诲姟");
+                return;
+            }
+            log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓�0锛屽皢纭瀛楁敼涓�0");
+            S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, 0);
+            return;
+        }
+        if (!"0".equals(confirmationWrodValue)) {
+            log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓嶄负0锛屽皢纭瀛椾笉涓�0锛岀洿鎺ョ粨鏉�");
+            return;
+        }
+        if ("1".equals(requestWord)) {
+            log.info("2銆佽繘鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛岃繘鐗囦换鍔�");
+            inTo(glassIdeValue, requestWord, currentSlot);
+        } else if ("2".equals(requestWord)) {
+            //09绌洪棽 锛�1      10绌洪棽 锛�2        閮界┖闂诧細3    鍏朵粬0
+            log.info("2銆佸嚭鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛岃繘鐗囦换鍔�");
+            outTo(out06Glassstate, out08Glassstate, out11Glassstate, out13Glassstate, glassIdeValue, currentSlot);
+        } else if ("3".equals(requestWord)) {
+            log.info("2銆佽繘鐗囧拰鍑虹墖閮界┖闂诧紝鎵ц鍑虹墖浠诲姟");
+            //鍔犵瀛愰噷闈㈡槸鍚︽湁鐜荤拑锛屾湁鍏堝嚭锛屾棤鐜荤拑鍏堣繘
+            boolean outFlase = outTo(out06Glassstate, out08Glassstate, out11Glassstate, out13Glassstate, glassIdeValue, currentSlot);
+            log.info("鍑虹墖浠诲姟鏄惁瀹屾垚锛歿},澶辫触涓旂幓鐠僫d:{}涓嶄负绌哄垯鎵ц杩涚墖浠诲姟", outFlase, glassIdeValue);
+            if (!outFlase && StringUtils.isNotBlank(glassIdeValue)) {
+                inTo(glassIdeValue, requestWord, currentSlot);
+            }
+        }
+    }
+
+    public void inTo(String glassId, String requestWord, String currentSlot) {
+        log.info("1銆佹寜鐓х幓鐠僫d:{}鑾峰彇鐜荤拑灏忕墖淇℃伅,褰撳墠鏍煎瓙涓�:{}", glassId, currentSlot);
+        //娣诲姞杩涚墖浠诲姟  鏌ユ壘绌烘牸
+        DownStorageCage nearestEmpty = downStorageCageService.selectCacheEmpty(Integer.parseInt(currentSlot), Boolean.FALSE);
+        Assert.isTrue(null != nearestEmpty, "鏍煎瓙宸叉弧,鏃犳硶鎵ц杩涚墖鎿嶄綔");
+        log.info("2銆佹煡璇㈠崸寮忕悊鐗囩閲岄潰鐨勭┖鏍�:{}", nearestEmpty);
+        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
+        Assert.isFalse(null == glassInfo, "鐜荤拑淇℃伅涓嶅瓨鍦�");
+        if ("1".equals(requestWord) && (glassInfo.getWidth() > throughWidth || glassInfo.getHeight() > throughHeight)) {
+            log.info("鐜荤拑褰撳墠灏哄瀹斤細{}锛岄珮锛歿}鍙兘鐩撮�氾紝褰撳墠杩涚墖浠诲姟闇�绛夊緟", glassInfo.getWidth(), glassInfo.getHeight());
+            return;
+        }
+        Boolean checkFlag = Boolean.FALSE;
+        //鐜荤拑灏哄鏄惁璧颁汉宸ヤ笅鐗�
+        if (glassInfo.getWidth() > maxWidth || glassInfo.getHeight() > maxHeight) {
+            log.info("璇ョ幓鐠冨昂瀵歌蛋浜哄伐涓嬬墖,鐩存帴杩涚墖");
+        } else {
+            log.info("璇ョ幓鐠冨昂瀵搁潪浜哄伐涓嬬墖");
+            //鑾峰彇璇ョ幓鐠冪殑娴佺▼鍗℃槸鍚﹀凡缁戝畾鏋跺瓙
+            DownWorkstation one = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>()
+                    .eq(DownWorkstation::getLayer, glassInfo.getLayer())
+                    .eq(DownWorkstation::getFlowCardId, glassInfo.getFlowCardId()));
+            Boolean isBind = Boolean.FALSE;
+            if (null != one) {
+                log.info("璇ユ祦绋嬪崱宸茬粦瀹氭灦瀛�");
+                isBind = Boolean.TRUE;
+                checkFlag = multilayerCheck(glassInfo, isBind);
+            }
+            if (!checkFlag && !isBind) {
+                log.info("璇ョ幓鐠冪殑娴佺▼鍗℃湭缁戝畾鏋跺瓙锛岃幏鍙栨槸鍚︽湁绌烘灦瀛�");
+                List<DownWorkstation> list = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>()
+                        .isNull(DownWorkstation::getFlowCardId));
+                if (CollectionUtils.isNotEmpty(list)) {
+                    log.info("鏈夌┖鏋跺瓙,灏嗘祦绋嬪崱涓庢灦瀛愬ソ缁戝畾锛屾墽琛岃繘鐗囦换鍔� 缁撴潫");
+                    //缁戝畾娴佺▼鍗�
+                    downWorkstationService.update(new LambdaUpdateWrapper<DownWorkstation>()
+                            .set(DownWorkstation::getFlowCardId, glassInfo.getFlowCardId())
+                            .set(DownWorkstation::getLayer, glassInfo.getLayer())
+                            .eq(DownWorkstation::getWorkstationId, list.get(0).getWorkstationId()));
+                    checkFlag = Boolean.TRUE;
+                }
+            }
+            if (!checkFlag) {
+                log.info("鏃犵┖鏋跺瓙,鑾峰彇宸茬粦瀹氭灦瀛愮殑娴佺▼鍗′俊鎭�,鏌ョ湅鐜荤拑淇℃伅鏄惁鍙瀵硅皟");
+                List<DownGlassInfoDTO> downGlassInfoDTOList = downGlassInfoService.queryWorkStationIsIn(Boolean.FALSE);
+                log.info("鑾峰彇鏋跺瓙涓婂凡缁戝畾娴佺▼鍗¤惤鏋剁殑鏁伴噺鍙婃湭钀芥灦鐨勭幓鐠冩暟鎹細{}", downGlassInfoDTOList);
+                if (CollectionUtils.isEmpty(downGlassInfoDTOList)) {
+                    log.info("宸茬粦瀹氭祦绋嬪崱鍧囨棤鏈惤鏋剁幓鐠冿紝璇峰強鏃跺鐞嗘灦瀛愪笂鐨勭幓鐠冿紝娓呴櫎娴佺▼鍗�,鎵ц杩涚墖浠诲姟");
+                } else {
+                    //鏇挎崲鐜荤拑淇℃伅
+                    endLoop:
+                    for (DownGlassInfoDTO e : downGlassInfoDTOList) {
+                        List<GlassInfo> glassInfoList = e.getGlassInfoList();
+                        for (GlassInfo item : glassInfoList) {
+                            if (item.getWidth() == glassInfo.getWidth() && item.getHeight() == glassInfo.getHeight()
+                                    && item.getThickness() == glassInfo.getThickness() && item.getFilmsid().equals(glassInfo.getFilmsid())) {
+                                //鐜荤拑鏄惁涓哄灞�
+                                checkFlag = multilayerCheck(item, Boolean.FALSE);
+                                if (checkFlag) {
+                                    //鐜荤拑鏇挎崲 浠呮浛鎹㈡祦绋嬪崱id鍙婂眰鏁�
+                                    String tempFlowCardId = item.getFlowCardId();
+                                    Integer tempLayer = item.getLayer();
+                                    String flowCardId = glassInfo.getFlowCardId();
+                                    Integer layer = glassInfo.getLayer();
+                                    log.info("鏇挎崲娴佺▼鍗′俊鎭�,褰撳墠鐜荤拑淇℃伅:{}鐨勬祦绋嬪崱鍙穥}鍙婂眰鏁皗},鏇挎崲鍚庣幓鐠冧俊鎭�:{}鐨勬祦绋嬪崱鍙穥}鍙婂眰鏁皗}",
+                                            item, glassInfo, flowCardId, layer, tempFlowCardId, tempLayer);
+                                    glassInfo.setFlowCardId(tempFlowCardId);
+                                    glassInfo.setLayer(tempLayer);
+                                    glassInfoService.updateById(glassInfo);
+                                    item.setFlowCardId(flowCardId);
+                                    item.setLayer(layer);
+                                    glassInfoService.updateById(item);
+                                    break endLoop;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        //灏嗕换鍔℃彃鍏ョ悊鐗囩璇︽儏琛�
+        DownStorageCageDetails downStorageCageDetails = new DownStorageCageDetails();
+        BeanUtils.copyProperties(glassInfo, downStorageCageDetails);
+        downStorageCageDetails.setState(Const.GLASS_STATE_IN);
+        downStorageCageDetails.setSlot(nearestEmpty.getSlot());
+        downStorageCageDetailsService.save(downStorageCageDetails);
+//        鐢熸垚杩涚墖浠诲姟
+        initDownGlassTask(glassInfo, 0, nearestEmpty.getSlot(), Const.GLASS_CACHE_TYPE_IN);
+    }
+
+    public Boolean outTo(String glassStatus06, String out08Glassstate, String glassStatus11, String glassStatus13, String glassId, String currentSlot) {
+        if ("2".equals(glassStatus06) && "2".equals(glassStatus11) && "2".equals(glassStatus13)) {
+            log.info("G06銆丟11銆丟13鍒嗗埆涓簕},{}銆亄}闈炶嚜鍔ㄧ姸鎬侊紝鏃犳硶鍑虹墖", glassStatus06, glassStatus11, glassStatus13);
+            return Boolean.FALSE;
+        }
+
+        List<DownStorageCageDetails> tempList = downStorageCageDetailsService.list(new LambdaQueryWrapper<DownStorageCageDetails>()
+                .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN));
+        //鑾峰彇寰呰繘鐗囩幓鐠�
+        DownStorageCageDetails cageDetails = new DownStorageCageDetails();
+        if (StringUtils.isNotBlank(glassId)) {
+            GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
+            BeanUtils.copyProperties(glassInfo, cageDetails);
+            //鑾峰彇褰撳墠绗煎瓙绌烘牸淇℃伅
+            DownStorageCage empty = downStorageCageService.selectCacheEmpty(Integer.parseInt(currentSlot), Boolean.TRUE);
+            cageDetails.setSlot(empty.getSlot());
+            tempList.add(cageDetails);
+        }
+
+        log.info("绗煎唴鐜荤拑鐨勬暟鎹湁锛歿}", tempList);
+        if (CollectionUtils.isEmpty(tempList)) {
+            log.info("绗煎唴娌℃湁鐜荤拑,鏃犳硶鎵ц鍑虹墖");
+            return Boolean.FALSE;
+        }
+        Boolean flag08 = "1".equals(out08Glassstate) ? Boolean.TRUE : Boolean.FALSE;
+        if (!generateTaskByShelf(glassStatus11, flag08, glassStatus13, tempList, cageDetails)) {
+            return generateTaskByShelf(glassStatus11, !flag08, glassStatus13, tempList, cageDetails);
+        }
+        return Boolean.TRUE;
+    }
+
+    private Boolean multilayerCheck(GlassInfo glassInfo, boolean isBind) {
+        //鏌ヨ璇ユ祦绋嬪崱鏄惁涓哄灞�
+        if (glassInfo.getTotalLayer() > 1) {
+            log.info("鎸夌収娴佺▼鍗¤幏鍙栧綋鍓嶆祦绋嬪崱鍚勫眰宸茶惤鏋舵暟閲�");
+            DownGlassInfoDTO downGlassInfoDTO = downGlassInfoService.queryDownGlassMaxLayer(glassInfo.getFlowCardId());
+            if (null == downGlassInfoDTO) {
+                if (isBind) {
+                    return Boolean.TRUE;
+                } else {
+                    log.info("鏋跺瓙宸茬粡鍗犳弧锛屽灞傜幓鐠冩棤娉曟壘鍒板搴旂殑鏍煎瓙锛岄渶鎵ц鏇挎崲鐜荤拑鐨勬搷浣�");
+                    return Boolean.FALSE;
+                }
+
+            }
+            if (downGlassInfoDTO.getLayer().equals(glassInfo.getLayer())) {
+                log.info("褰撳墠鐜荤拑鐨勬祦绋嬪湪鏋跺瓙涓婅惤鏋舵渶澶� 鐩存帴杩涚墖");
+                return Boolean.TRUE;
+            }
+            Integer sequence = downGlassInfoService.queryMaxSequence(glassInfo.getFlowCardId(), glassInfo.getLayer());
+            log.info("鑾峰彇褰撳墠鐜荤拑闇�瑕佹斁鐨勬搴忥細绗煎唴鍚屾祦绋� 鍚屽眰鏁扮殑閫氳揪娆″簭+1:{}", sequence);
+            DownGlassInfo downGlassInfo = downGlassInfoService.getOne(new LambdaQueryWrapper<DownGlassInfo>()
+                    .eq(DownGlassInfo::getFlowCardId, downGlassInfoDTO.getFlowCardId())
+                    .eq(DownGlassInfo::getLayer, downGlassInfoDTO.getLayer()).eq(DownGlassInfo::getSequence, sequence));
+            log.info("鎷垮綋鍓嶇増搴忚幏鍙栫幓鐠冧俊鎭瘂}锛屾寜鐓ф搴忓垽鏂綋鍓嶇幓鐠冩槸鍚﹀昂瀵稿搴旂殑涓婏紙涓庢暟閲忔渶澶氱殑娆″簭姣旇緝锛夈��", downGlassInfo);
+            if (null != downGlassInfoDTO && downGlassInfo.getWidth() == glassInfo.getWidth() && downGlassInfo.getHeight() == glassInfo.getHeight()) {
+                log.info("鐩稿悓娆″簭鐜荤拑瀵瑰簲涓婏紝鍙墽琛岃繘鐗囦换鍔�");
+                return Boolean.TRUE;
+            } else {
+                log.info("鍚屾搴忕幓鐠冨搴斾笉涓婏紝闇�鎵ц鏇挎崲鐜荤拑鐨勬搷浣�");
+                return Boolean.FALSE;
+            }
+        } else {
+            log.info("闈炲灞傜幓鐠冿紝鐩存帴杩涚墖");
+            return Boolean.TRUE;
+        }
+    }
+
+    private Boolean generateTaskByShelf(String glassStatus, Boolean flag08, String glassStatus13, List<DownStorageCageDetails> tempList, DownStorageCageDetails cageDetails) {
+        //鑾峰彇2涓満姊拌噦鑼冨洿鍐呯殑鏋跺瓙缁戝畾鐨勬祦绋嬪崱淇℃伅
+        List<Integer> workList = new ArrayList();
+
+        if (flag08) {
+            if (!"2".equals(glassStatus)) {
+                workList.addAll(Const.G11_WORK_STATION);
+            }
+        } else {
+            if (!"2".equals(glassStatus)) {
+                workList.addAll(Const.G06_WORK_STATION);
+            }
+        }
+        List<DownStorageCageDetails> list = new ArrayList();
+        Boolean isEmptyShelf = Boolean.FALSE;
+        //瀵圭鍐呯幓鐠冭繘琛岃繃婊わ紝浠呭嚭绗﹀悎閫昏緫鐨勭幓鐠�
+        if (CollectionUtils.isNotEmpty(workList)) {
+            List<DownWorkstation> downWorkstationList = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>()
+                    .eq(DownWorkstation::getEnableState, 0).in(DownWorkstation::getWorkstationId, workList));
+            log.info("鏋跺瓙琚鐢紝鏃犳硶鍑虹墖钀芥灦");
+            if (CollectionUtils.isEmpty(downWorkstationList)) {
+                log.info("绗煎瓙琚鐢紝鏃犳硶璧版満姊拌噦涓嬬墖");
+                //璧颁汉宸ヤ笅鐗�
+                if (!"2".equals(glassStatus13)) {
+                    list = tempList.stream().filter(item -> item.getWidth() > maxWidth || item.getHeight() > maxHeight).collect(Collectors.toList());
+                }
+            } else {
+                List<DownWorkstation> workstationsIsNotBind = downWorkstationList.stream().filter(item -> null == (item.getFlowCardId())).collect(Collectors.toList());
+                Map<String, List<DownWorkstation>> listMap = downWorkstationList.stream().collect(Collectors.groupingBy(item -> item.getFlowCardId() + ":" + item.getLayer()));
+                if (CollectionUtils.isEmpty(workstationsIsNotBind)) {
+                    log.info("涓嶅瓨鍦ㄦ湭缁戝畾娴佺▼鍗℃灦瀛�");
+                    //绛涢�夊嚭瀵瑰簲鏋跺瓙宸茬粦瀹氭祦绋嬪崱鍙笅鐗囩殑鐜荤拑
+                    list = tempList.stream().filter(item -> listMap.containsKey(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList());
+                } else {
+                    log.info("瀛樺湪鏈粦瀹氭祦绋嬪崱鏋跺瓙锛岀洿鎺ヨ幏鍙栫鍐呮墍鏈夌幓鐠�");
+                    isEmptyShelf = Boolean.TRUE;
+                    //todo:濡傛灉绂佺敤鏋跺瓙宸茬粦瀹氭祦绋嬪崱锛屽洜涓烘椂闂翠笉纭畾锛岀瀛愬唴鐨勭幓鐠冨彲閲嶆柊缁戝畾鏂版灦瀛�
+//                    list = tempList.stream().filter(item -> !listMap.containsKey(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList());
+                    list = tempList;
+                }
+            }
+        } else {
+            if (flag08 && !"2".equals(glassStatus13)) {
+                //鐩存帴璧颁汉宸ヤ笅鐗�
+                list = tempList.stream().filter(item -> item.getWidth() > maxWidth || item.getHeight() > maxHeight).collect(Collectors.toList());
+            }
+        }
+        if (CollectionUtils.isEmpty(list)) {
+            log.info("绗煎唴鐜荤拑鏃犳硶鎵ц鍑虹墖");
+            return Boolean.FALSE;
+        }
+        String tempGlassId = null;
+        Boolean isBind = Boolean.FALSE;
+
+        for (DownStorageCageDetails item : list) {
+            if (item.getWidth() > maxWidth || item.getHeight() > maxHeight) {
+                if (flag08 && !"2".equals(glassStatus13)) {
+                    log.info("鐜荤拑瀹藉害鎴栭珮搴﹁秴鍑洪槇鍊硷紝鎵ц浜哄伐涓嬬墖");
+                    tempGlassId = item.getGlassId();
+                    break;
+                }
+            }
+        }
+        loop:
+        if (tempGlassId == null) {
+            //鑾峰彇姝e湪钀芥灦鐨勭粦瀹氭祦绋嬪崱鐨勪俊鎭�(娴佺▼鍗°�佸眰鏁般�佽惤鏋舵暟閲�)
+            List<DownGlassInfoDTO> downGlassInfoDTOList = downGlassInfoService.queryWorkStationIsIn(Boolean.TRUE);
+            List<String> downGlassFlowList = downGlassInfoDTOList.stream().map(item -> item.getFlowCardId() + ":" + item.getLayer()).collect(Collectors.toList());
+            if (CollectionUtils.isEmpty(downGlassFlowList)) {
+                //鏋跺瓙閮芥湭缁戝畾娴佺▼鍗★紝鍑虹鍐呭瓙鏁伴噺鏈�澶氬昂瀵告渶澶х殑鐜荤拑
+                DownStorageCageDetails downStorageCageDetails = downStorageCageDetailsService.getGlassInfoMaxCount();
+                //缁戝畾娴佺▼鍗★紝鏇存柊鐜荤拑鐘舵�侊紝鐢熸垚鍑虹墖浠诲姟锛�
+                tempGlassId = downStorageCageDetails.getGlassId();
+                isBind = Boolean.TRUE;
+                break loop;
+            }
+            //灏嗙瀛愬唴鐨勭幓鐠冭繘琛岃繃婊わ紝浠呰幏鍙栨棤娉曡惤鏋剁殑娴佺▼鍗$幓鐠�
+            List<DownStorageCageDetails> noDownLoadList = list.stream().filter(item -> !downGlassFlowList.contains(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(noDownLoadList)) {
+                //鏄惁鏈夌┖鏋跺瓙
+//                List<DownWorkstation> emptyShelfList = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>()
+//                        .isNull(DownWorkstation::getFlowCardId));
+                if (isEmptyShelf) {
+                    DownStorageCageDetails downStorageCageDetails = downStorageCageDetailsService.getGlassInfoMaxCount();
+                    //缁戝畾娴佺▼鍗★紝鏇存柊鐜荤拑鐘舵�侊紝鐢熸垚鍑虹墖浠诲姟
+                    tempGlassId = downStorageCageDetails.getGlassId();
+                    isBind = Boolean.TRUE;
+                    break loop;
+                }
+            }
+            //灏嗙瀛愬唴鐨勭幓鐠冭繘琛岃繃婊わ紝浠呰幏鍙栧彲钀芥灦鐨勬祦绋嬪崱鐜荤拑
+            List<DownStorageCageDetails> downLoadList = list.stream().filter(item -> downGlassFlowList.contains(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList());
+            if (CollectionUtils.isEmpty(downLoadList)) {
+                //涓嶆墽琛屽嚭鐗囦换鍔★紝绗煎唴娌℃湁鍚堥�傜殑鍑虹墖鐜荤拑
+                return Boolean.FALSE;
+            }
+            //灏嗙鍐呯幓鐠冪殑娴佺▼鍗�+灞傚彿 鍜岃惤鏋剁殑娴佺▼鍗� 鍘婚噸锛屽緱鍑哄睍绀烘棤娉曡惤鏋剁殑鐜荤拑锛屽垽鏂幓鐠冩暟鏄惁瓒呰繃闃堝��
+            //绗煎唴鐜荤拑鏄惁鍙惤鏋�:绗煎唴鏄惁鏈夐渶瑕佷腑绌虹殑
+            List<DownStorageCageDetails> multiLayerList = list.stream().filter(item -> item.getTotalLayer() >= 2).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(multiLayerList)) {
+                for (DownStorageCageDetails item : multiLayerList) {
+                    DownGlassInfoDTO downGlassInfoDTO = downGlassInfoService.queryDownGlassMaxLayer(item.getFlowCardId());
+                    if (null == downGlassInfoDTO) {
+//                    鍘嗗彶钀芥灦鐜荤拑鎸夌収鐩稿叧娴佺▼鍗″彇鏁版嵁搴撴湭鎵惧埌鏈�澶氱幓鐠冧俊鎭紝琛ㄦ槑褰撳墠娴佺▼鍗′笅鐨勬湁灞傜殑鐜荤拑鍧囨湭钀芥灦锛岀洿鎺ュ彲鍑哄綋鍓嶇幓鐠�
+                        log.info("");
+                        isBind = Boolean.FALSE;
+                        tempGlassId = item.getGlassId();
+                        break loop;
+                    }
+                    if (downGlassInfoDTO.getLayer().equals(downGlassInfoDTO.getLayer())) {
+                        log.info("褰撳墠鐜荤拑鐨勬祦绋嬪湪鏋跺瓙涓婅惤鏋舵渶澶�,鐩存帴鍑虹墖");
+                        //鏇存柊鐜荤拑鐘舵�侊紝鐢熸垚鍑虹墖浠诲姟
+                        tempGlassId = item.getGlassId();
+                        isBind = Boolean.FALSE;
+                        break loop;
+                    }
+                    Integer sequence = downGlassInfoService.queryMaxSequence(item.getFlowCardId(), item.getLayer());
+                    log.info("鑾峰彇褰撳墠鐜荤拑闇�瑕佹斁鐨勬搴忥細绗煎唴鍚屾祦绋� 鍚屽眰鏁扮殑閫氳揪娆″簭+1:{}", sequence);
+                    DownGlassInfo downGlassInfo = downGlassInfoService.getOne(new LambdaQueryWrapper<DownGlassInfo>()
+                            .eq(DownGlassInfo::getFlowCardId, downGlassInfoDTO.getFlowCardId())
+                            .eq(DownGlassInfo::getLayer, downGlassInfoDTO.getLayer()).eq(DownGlassInfo::getSequence, sequence));
+                    if (null != downGlassInfoDTO && downGlassInfo.getWidth() == item.getWidth() && downGlassInfo.getHeight() == item.getHeight()) {
+                        log.info("鐩稿悓娆″簭鐜荤拑瀵瑰簲涓婏紝鍙墽琛岃繘鐗囦换鍔�");
+                        //鏇存柊鐜荤拑鐘舵�侊紝鐢熸垚鍑虹墖浠诲姟
+                        tempGlassId = item.getGlassId();
+                        isBind = Boolean.FALSE;
+                        break loop;
+                    }
+                }
+            }
+
+            Map<String, List<DownStorageCageDetails>> singleLayerMap = list.stream().filter(item -> item.getTotalLayer() == 1)
+                    .collect(Collectors.groupingBy(item -> item.getFlowCardId() + item.getLayer(), Collectors.toList()));
+            if (tempGlassId == null) {
+                if (CollectionUtils.isNotEmpty(singleLayerMap)) {
+                    //鑾峰彇宸茶惤鏋舵祦绋嬪崱淇℃伅锛屾寜钀芥灦鏁伴噺鎺掑簭
+                    for (DownGlassInfoDTO e : downGlassInfoDTOList) {
+                        List<DownStorageCageDetails> downStorageCageDetails = singleLayerMap.get(e.getFlowCardId() + e.getLayer());
+                        if (CollectionUtils.isNotEmpty(downStorageCageDetails)) {
+                            tempGlassId = downStorageCageDetails.get(0).getGlassId();
+                            isBind = Boolean.FALSE;
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+        if (tempGlassId == null) {
+            log.info("娌℃湁鎵惧埌鍙互涓嬬墖鐨勭殑鐜荤拑锛岀粨鏉熶换鍔�");
+            return Boolean.FALSE;
+        } else {
+            //鎸夌収鍑虹墖鐨勭幓鐠僫d鏇存柊绗煎唴鐨勭幓鐠冪姸鎬佷负宸插嚭鐗�
+            return generateDownGlassOutTask(tempGlassId, Const.GLASS_CACHE_TYPE_OUT, isBind, cageDetails);
+        }
+    }
+
+    public Boolean generateDownGlassOutTask(String glassId, Integer taskType, Boolean isBind, DownStorageCageDetails cageDetails) {
+        //鎸夌幓鐠僫d鑾峰彇鐜荤拑淇℃伅
+        DownStorageCageDetails downStorageCageDetails = null;
+        if (glassId.equals(cageDetails.getGlassId())) {
+            downStorageCageDetails = cageDetails;
+            taskType = 3;
+        } else {
+            downStorageCageDetails = downStorageCageDetailsService.getOne(new LambdaQueryWrapper<DownStorageCageDetails>()
+                    .eq(DownStorageCageDetails::getGlassId, glassId));
+        }
+
+        Integer endCell = null;
+        if (isBind) {
+            //鑾峰彇绌烘灦瀛愪俊鎭紝灏嗙┖鏋跺瓙淇℃伅缁戝畾娴佺▼鍗�
+            DownWorkstation emptyDownWorkstation = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>()
+                    .isNull(DownWorkstation::getFlowCardId).orderByDesc(DownWorkstation::getWorkstationId).last("limit 1"));
+            if (null != emptyDownWorkstation) {
+                log.info("鑾峰彇鍒扮┖鏋跺瓙淇℃伅锛岀粦瀹氭祦绋嬪崱");
+                emptyDownWorkstation.setFlowCardId(downStorageCageDetails.getFlowCardId());
+                emptyDownWorkstation.setLayer(downStorageCageDetails.getLayer());
+                downWorkstationService.updateById(emptyDownWorkstation);
+                endCell = emptyDownWorkstation.getWorkstationId();
+            } else {
+                log.info("娌℃湁绌烘灦瀛愪俊鎭紝鏃犳硶缁戝畾娴佺▼鍗�");
+                return Boolean.FALSE;
+            }
+        } else {
+            DownWorkstation workstation = downWorkstationService.getOne(new LambdaUpdateWrapper<DownWorkstation>()
+                    .eq(DownWorkstation::getFlowCardId, downStorageCageDetails.getFlowCardId()).eq(DownWorkstation::getLayer, downStorageCageDetails.getLayer()));
+            endCell = workstation.getWorkstationId();
+        }
+        //鏇存柊璇︽儏琛ㄥ唴鐨勭姸鎬�
+        if (downStorageCageDetailsService.update(new LambdaUpdateWrapper<DownStorageCageDetails>()
+                .set(DownStorageCageDetails::getState, Const.GLASS_STATE_OUT).eq(DownStorageCageDetails::getGlassId, glassId))) {
+            log.info("鏇存柊璇︽儏琛ㄥ唴鐨勭姸鎬佹垚鍔�");
+        } else {
+            log.info("鏇存柊璇︽儏琛ㄥ唴鐨勭姸鎬佸け璐�");
+            return Boolean.FALSE;
+        }
+        //鏇存柊钀芥灦鐜荤拑鏁伴噺
+
+        //鐢熸垚浠诲姟淇℃伅
+        DownGlassInfo downGlassInfo = new DownGlassInfo();
+        BeanUtils.copyProperties(downStorageCageDetails, downGlassInfo);
+        downGlassInfoService.save(downGlassInfo);
+        //鐢熸垚浠诲姟淇℃伅
+        GlassInfo glassInfo = new GlassInfo();
+        BeanUtils.copyProperties(downStorageCageDetails, glassInfo);
+        return initDownGlassTask(glassInfo, downStorageCageDetails.getSlot(), endCell, taskType);
+    }
+
+    public Boolean initDownGlassTask(GlassInfo glassInfo, Integer startCell, Integer endCell, Integer taskType) {
+        log.info("鐜荤拑{}鐢熸垚杩涚墖浠诲姟", glassInfo.getGlassId());
+        DownGlassTask downGlassTask = new DownGlassTask();
+        downGlassTask.setStartCell(startCell);
+        downGlassTask.setGlassId(glassInfo.getGlassId());
+        downGlassTask.setEndCell(endCell);
+        downGlassTask.setTaskType(taskType + "");
+        downGlassTask.setWidth((int) glassInfo.getWidth());
+        downGlassTask.setHeight((int) glassInfo.getHeight());
+        downGlassTask.setFlowCardId(glassInfo.getFlowCardId());
+        downGlassTask.setLayer(glassInfo.getLayer());
+        downGlassTask.setTaskStauts(0);
+        downGlassTask.setCreateTime(new Date());
+        downGlassTaskService.save(downGlassTask);
+        //鍚憄lc鍙戦�佸懡浠�
+        return sendMessageToPlc((int) glassInfo.getWidth(), (int) glassInfo.getHeight(), (int) glassInfo.getThickness(),
+                startCell, endCell, taskType);
+    }
+
+    private Boolean sendMessageToPlc(int width, int height, int thickness, int startCell, int endCell, int taskType) {
+        S7control s7control = S7object.getinstance().plccontrol;
+        PlcParameterObject plcMesObject = S7object.getinstance().PlcMesObject;
+        s7control.writeWord(plcMesObject.getPlcParameter("Glass_width").getAddress(), width);
+        s7control.writeWord(plcMesObject.getPlcParameter("Glass_height").getAddress(), height);
+        s7control.writeWord(plcMesObject.getPlcParameter("Glass_thickness").getAddress(), thickness);
+        s7control.writeWord(plcMesObject.getPlcParameter("Start_cell").getAddress(), startCell);
+        s7control.writeWord(plcMesObject.getPlcParameter("End_cell").getAddress(), endCell);
+        s7control.writeWord(plcMesObject.getPlcParameter("task_type").getAddress(), taskType);
+        s7control.writeWord(plcMesObject.getPlcParameter("confirmationWord").getAddress(), 1);
+        return Boolean.TRUE;
+    }
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcdownGlass.json b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcdownGlass.json
index 3880ffc..ac8379f 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcdownGlass.json
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcdownGlass.json
@@ -1,362 +1,144 @@
 {
-  "plcAddressBegin": "DB100.0",
-  "plcAddressLenght": "142",
-  "dataType": "word",
-  "parameteInfor": [
-    {
-      "codeId": "RequestWord",
-      "addressIndex": "0",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G04ID",
-      "addressIndex": "2",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G06RobotTaskRequestWord",
-      "addressIndex": "4",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G06ID",
-      "addressIndex": "6",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G11RobotTaskRequestWord",
-      "addressIndex": "8",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G011ID",
-      "addressIndex": "10",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "12",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "14",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "16",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "18",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "MESSendingWord",
-      "addressIndex": "20",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InputGrid",
-      "addressIndex": "22",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "OutputGrid",
-      "addressIndex": "24",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "OutputID",
-      "addressIndex": "26",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "FrontOrRearLowerSlice",
-      "addressIndex": "28",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "30",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G06RobotTaskReply",
-      "addressIndex": "32",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G06Rack",
-      "addressIndex": "34",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G11RobotTaskReply",
-      "addressIndex": "36",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G11Rack",
-      "addressIndex": "38",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "40",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "42",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "44",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "46",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "48",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "50",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "52",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "54",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "MESTaskState",
-      "addressIndex": "56",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "58",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "AlarmState",
-      "addressIndex": "60",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "Alarm1",
-      "addressIndex": "62",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "Alarm2",
-      "addressIndex": "64",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "Alarm3",
-      "addressIndex": "66",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "Alarm4",
-      "addressIndex": "68",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "neirong",
-      "addressIndex": "70",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "device",
-      "addressIndex": "72",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "74",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "76",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut1",
-      "addressIndex": "78",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut2",
-      "addressIndex": "80",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut3",
-      "addressIndex": "82",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut4",
-      "addressIndex": "84",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut5",
-      "addressIndex": "86",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut6",
-      "addressIndex": "88",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "InOut7",
-      "addressIndex": "90",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "92",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "94",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "96",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "98",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "spare",
-      "addressIndex": "100",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G04ActionState",
-      "addressIndex": "102",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G05ActionState",
-      "addressIndex": "104",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G06ActionState",
-      "addressIndex": "106",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G07ActionState",
-      "addressIndex": "108",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G08ActionState",
-      "addressIndex": "110",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G09ActionState",
-      "addressIndex": "112",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G10ActionState",
-      "addressIndex": "114",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G11ActionState",
-      "addressIndex": "116",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G12ActionState",
-      "addressIndex": "118",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G13ActionState",
-      "addressIndex": "120",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G04IDS",
-      "addressIndex": "122",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G05IDS",
-      "addressIndex": "124",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G06IDS",
-      "addressIndex": "126",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G07IDS",
-      "addressIndex": "128",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G08IDS",
-      "addressIndex": "130",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G09IDS",
-      "addressIndex": "132",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G10IDS",
-      "addressIndex": "134",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G11IDS",
-      "addressIndex": "136",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G12IDS",
-      "addressIndex": "138",
-      "addressLenght": "2"
-    },
-    {
-      "codeId": "G13ID",
-      "addressIndex": "140",
-      "addressLenght": "2"
-    }
-  ]
+	"plcAddressBegin": "DB11.0",
+	"plcAddressLenght": "100",
+	"dataType": "word",
+	"parameteInfor": [
+
+		{
+			"codeId": "requestWord",
+			"addressIndex": "0",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "requestID",
+			"addressIndex": "2",
+			"addressLenght": "30"
+		},
+		{
+			"codeId": "currentCell",
+			"addressIndex": "32",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "glassStatus08",
+			"addressIndex": "36",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G06_glass_status",
+			"addressIndex": "40",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G11_glass_status",
+			"addressIndex": "42",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G13_glass_status",
+			"addressIndex": "44",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G04_error_status",
+			"addressIndex": "48",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G05_error_status",
+			"addressIndex": "50",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G06_error_status",
+			"addressIndex": "52",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "robot_error_status",
+			"addressIndex": "54",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G08_error_status",
+			"addressIndex": "56",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G09_error_status",
+			"addressIndex": "58",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G10_error_status",
+			"addressIndex": "60",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G11_error_status",
+			"addressIndex": "62",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "robot_error_status",
+			"addressIndex": "64",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G13_error_status",
+			"addressIndex": "66",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "confirmationWord",
+			"addressIndex": "72",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G06_prohibit_film_production",
+			"addressIndex": "74",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G11_prohibit_film_production",
+			"addressIndex": "76",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "G13_prohibit_film_production",
+			"addressIndex": "78",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "Glass_width",
+			"addressIndex": "82",
+			"addressLenght": "4"
+		},
+		{
+			"codeId": "Glass_height",
+			"addressIndex": "86",
+			"addressLenght": "4"
+		},
+		{
+			"codeId": "Glass_thickness",
+			"addressIndex": "90",
+			"addressLenght": "4"
+		},
+		{
+			"codeId": "Start_cell",
+			"addressIndex": "94",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "End_cell",
+			"addressIndex": "96",
+			"addressLenght": "2"
+		},
+		{
+			"codeId": "task_type",
+			"addressIndex": "98",
+			"addressLenght": "2"
+		}
+
+	]
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-cz.yml b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-cz.yml
index c4c456e..3149cc6 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-cz.yml
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-cz.yml
@@ -10,7 +10,7 @@
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
         salve_hangzhoumes:
-          url: jdbc:sqlserver://192.168.10.2:1433;databasename=hangzhoumes
+          url: jdbc:sqlserver://192.168.30.101:1433;databasename=hangzhoumes
           username: sa
           password: beibo.123/
           driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-prod.yml b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-prod.yml
index 2e6a12c..683a519 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-prod.yml
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-prod.yml
@@ -14,6 +14,11 @@
           username: sa
           password: beibo.123/
           driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+        pp:
+          url: jdbc:mysql://10.153.19.150:3306/pp?serverTimezone=GMT%2b8
+          username: root
+          password: beibo.123/
+          driver-class-name: com.mysql.cj.jdbc.Driver
   cloud:
     nacos:
       discovery:
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml
index 46db88a..b13162f 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml
@@ -3,7 +3,7 @@
 
 spring:
   profiles:
-    active: cz
+    active: dev
   application:
     name: unLoadGlass
 
@@ -12,3 +12,10 @@
   mapper-locations: classpath*:mapper/*.xml
   configuration:
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+
+mes:
+  maxWidth: 1000    #涓嬬墖鐨勬渶澶у搴�
+  maxHeight: 1000   #涓嬬墖鐨勬渶澶ч珮搴�
+  throughWidth: 3000
+  throughHeight: 3000
+  threshold: 5      #涓嬬墖鐨勬渶澶ч槇鍊�
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml
new file mode 100644
index 0000000..76a9216
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.mes.downglassinfo.mapper.DownGlassInfoMapper">
+
+    <resultMap id="downGlassInfoDTO" type="com.mes.downworkstation.entity.dto.DownGlassInfoDTO">
+        <result column="flow_card_id" property="flowCardId"/>
+        <result column="layer" property="layer"/>
+        <result column="count" property="count"/>
+    </resultMap>
+    <resultMap id="downGlassInfo" type="com.mes.downworkstation.entity.dto.DownGlassInfoDTO">
+        <result column="flow_card_id" property="flowCardId"/>
+        <result column="layer" property="layer"/>
+        <result column="count" property="count"/>
+        <collection property="glassInfoList" ofType="com.mes.glassinfo.entity.GlassInfo">
+            <id column="id" property="id"/>
+            <result column="flow_card_id" property="flowCardId"/>
+            <result column="glass_type" property="glassType"/>
+            <result column="width" property="width"/>
+            <result column="height" property="height"/>
+            <result column="thickness" property="thickness"/>
+            <result column="filmsid" property="filmsid"/>
+            <result column="total_layer" property="totalLayer"/>
+            <result column="layer" property="layer"/>
+        </collection>
+    </resultMap>
+
+    <select id="queryDownGlassMaxLayer" resultMap="downGlassInfoDTO">
+        SELECT flow_card_id,
+               layer,
+               COUNT(layer) AS count
+        FROM
+            down_glass_info
+        WHERE
+            flow_card_id = #{flowCardId}
+        GROUP BY
+            flow_card_id,
+            layer
+        order by count desc limit 1
+    </select>
+    <select id="queryMaxSequence" resultType="java.lang.Integer">
+        SELECT max(sequence) + 1 as sequence
+        FROM down_glass_info
+        WHERE flow_card_id = #{flowCardId}
+          AND layer = #{layer}
+    </select>
+
+    <select id="queryWorkStationIsIn" resultMap="downGlassInfo">
+        SELECT T.*
+        <if test="!isDownload">
+            ,T1.*
+        </if>
+        FROM (
+        SELECT T.FLOW_CARD_ID,
+        T.LAYER,
+        COUNT(T.LAYER) AS COUNT
+        FROM
+        DOWN_WORKSTATION T
+        LEFT JOIN DOWN_GLASS_INFO T1 ON T.FLOW_CARD_ID = T1.FLOW_CARD_ID
+        GROUP BY T.FLOW_CARD_ID,LAYER
+        HAVING T.FLOW_CARD_ID IS NOT NULL
+        ) T
+        INNER JOIN GLASS_INFO T1 ON T.FLOW_CARD_ID = T1.FLOW_CARD_ID
+        AND T.LAYER = T1.LAYER
+        LEFT JOIN DOWN_GLASS_INFO T2 ON T1.GLASS_ID = T2.GLASS_ID
+        <where>
+            <if test="isDownload">
+                AND T2.GLASS_ID IS NULL
+            </if>
+            <if test="!isDownload">
+                AND T2.GLASS_ID IS not NULL
+            </if>
+        </where>
+        order by t.count desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownStorageCageDetailsMapper.xml b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownStorageCageDetailsMapper.xml
new file mode 100644
index 0000000..c506462
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownStorageCageDetailsMapper.xml
@@ -0,0 +1,41 @@
+<?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.downstorage.mapper.DownStorageCageDetailsMapper">
+
+    <resultMap id="downStorageCageDetails" type="com.mes.downstorage.entity.DownStorageCageDetails">
+        <id column="id" property="id"/>
+        <result column="slot" property="slot"/>
+        <result column="glass_id" property="glassId"/>
+        <result column="sequence" property="sequence"/>
+        <result column="filmsid" property="filmsid"/>
+        <result column="flow_card_id" property="flowCardId"/>
+        <result column="glass_type" property="glassType"/>
+        <result column="width" property="width"/>
+        <result column="height" property="height"/>
+        <result column="thickness" property="thickness"/>
+        <result column="tempering_layout_id" property="temperingLayoutId"/>
+        <result column="tempering_feed_sequence" property="temperingFeedSequence"/>
+        <result column="state" property="state"/>
+        <result column="gap" property="gap"/>
+        <result column="total_layer" property="totalLayer"/>
+        <result column="layer" property="layer"/>
+    </resultMap>
+
+    <select id="getGlassInfoMaxCount" resultMap="downStorageCageDetails">
+        SELECT *
+        FROM DOWN_STORAGE_CAGE_DETAILS
+        WHERE (FLOW_CARD_ID, LAYER) = (SELECT FLOW_CARD_ID, LAYER
+                                       FROM DOWN_STORAGE_CAGE_DETAILS
+                                       WHERE STATE = 100
+                                       GROUP BY FLOW_CARD_ID, LAYER
+                                       ORDER BY COUNT(FLOW_CARD_ID) DESC
+            LIMIT 1 )
+          AND STATE = 100
+        ORDER BY
+            WIDTH DESC,
+            HEIGHT DESC
+            LIMIT 1
+    </select>
+
+
+</mapper>
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java
index e363838..7283d26 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java
@@ -1,6 +1,8 @@
 package mes;
 
 import com.mes.UnLoadGlassApplication;
+import com.mes.downglassinfo.service.DownGlassInfoService;
+import com.mes.downglassinfo.service.DownGlassTaskService;
 import com.mes.downglassinfo.service.impl.DownGlassInfoServiceImpl;
 import com.mes.downglassinfo.service.impl.DownGlassTaskServiceImpl;
 import com.mes.downstorage.entity.DownStorageCage;
@@ -36,7 +38,7 @@
  */
 @Slf4j
 @RunWith(SpringRunner.class)
-@SpringBootTest(classes = UnLoadGlassApplication.class)
+@SpringBootTest(classes = UnLoadGlassApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
 
 public class UnloadGlassModuleApplicationTest {
 
@@ -58,6 +60,10 @@
     DownWorkstationService downWorkstationService;
     @Autowired
     DownStorageCageService downStorageCageService;
+    @Autowired
+    DownGlassTaskService downGlassTaskService;
+    @Autowired
+    DownGlassInfoService downGlassInfoService;
 
 
 
@@ -150,7 +156,7 @@
     public void getMaxSequenceByFlowCardId() {
         log.info("鏈�澶у簭鍙�");
 
-        downGlassInfoServiceImpl.getMaxSequenceByFlowCardId("NG2023005");
+        downGlassInfoServiceImpl.getMaxSequenceByFlowCardId("NG2023005",1);
     }
 
     @Test
@@ -171,8 +177,16 @@
     @Test
     public void getFlowCardId() {
 
-
         glassInfoServiceImpl.getFlowCardId();
+
+    }
+
+    @Test
+    public void getUnloadingTaskState() {
+
+
+        downGlassInfoService.generateOutGlassTask("NG24031401A01-4-3-1-3");
+        //downGlassTaskService.getUnloadingTaskState();
     }
 
     @Test

--
Gitblit v1.8.0