From 5327d8da2fbeda44417a09beba29e897cc7d8951 Mon Sep 17 00:00:00 2001
From: wangfei <3597712270@qq.com>
Date: 星期五, 02 八月 2024 14:08:10 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes

---
 UI-Project/src/views/UnLoadGlass/Landingindication.vue                                                                                       |    2 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java                                               |   61 ++++-
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java                                      |  139 ++++++++-------
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java                   |    2 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/impl/WorkAssignmentServiceImpl.java                       |    6 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java |    3 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java                                                 |    2 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java                                         |   21 ++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java                                           |   10 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java                      |   27 ++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java                                        |   73 +++----
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/TaskCacheMapper.java                                 |    3 
 UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue                                                                                    |    2 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/controller/WorkAssignmentController.java                          |    5 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java                               |    9 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java                                              |   29 +++
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java                                   |   84 ++++++++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/WorkAssignmentService.java                                |    4 
 18 files changed, 326 insertions(+), 156 deletions(-)

diff --git a/UI-Project/src/views/UnLoadGlass/Landingindication.vue b/UI-Project/src/views/UnLoadGlass/Landingindication.vue
index 6acb725..06aa4d0 100644
--- a/UI-Project/src/views/UnLoadGlass/Landingindication.vue
+++ b/UI-Project/src/views/UnLoadGlass/Landingindication.vue
@@ -39,7 +39,7 @@
   let language = ref(localStorage.getItem('lang') || 'zh')
 import Swal from 'sweetalert2'
 import request from "@/utils/request";
-import { initializeWebSocket } from '@/utils/WebSocketService';
+import { initializeWebSocket,closeWebSocket } from '@/utils/WebSocketService';
  import { WebSocketHost } from '@/utils/constants';
 const racks = ref([
   { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG123456',downGlassInfoList:"" } },
diff --git a/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue b/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
index d13a3f2..9d4fb7a 100644
--- a/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
+++ b/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
@@ -39,7 +39,7 @@
   let language = ref(localStorage.getItem('lang') || 'zh')
 import Swal from 'sweetalert2'
 import request from "@/utils/request";
-import { initializeWebSocket } from '@/utils/WebSocketService';
+import { initializeWebSocket,closeWebSocket } from '@/utils/WebSocketService';
 import { WebSocketHost ,host} from '@/utils/constants'
 const racks = ref([
   { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG123456' } },
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
index ea9bcb2..d096488 100644
--- 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
@@ -43,13 +43,9 @@
 
     @ApiOperation("鎶ュ伐")
     @PostMapping("/submitDamage")
-    public Result submitDamage(@RequestBody Map map) {
-        String startTime=map.get("startTime").toString();
-        String endTime=map.get("endTime").toString();
-        int type =Integer.parseInt(map.get("type").toString());
-        int status =Integer.parseInt(map.get("status").toString());
-        String workingProcedure =map.get("workingProcedure").toString();
-        damageService.submitDamage(startTime,endTime,type,status,workingProcedure);
+    public Result submitDamage(@RequestBody List<Damage> damageList) {
+        damageService.submitDamage(damageList);
+        damageService.updateBatchById(damageList);
         return Result.build(200,"鎶ュ伐鎴愬姛",1);
     }
 
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
index 1fba706..1b323f9 100644
--- 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
@@ -19,7 +19,7 @@
 
     List<Damage> selectDamage(String startTime, String endTime, int type, int status, String workingProcedure);
 
-    void submitDamage(String startTime, String endTime, int type, int status, String workingProcedure);
+    void submitDamage(List<Damage> damageList);
 
     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
index 1e52a35..dccec5e 100644
--- 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
@@ -1,15 +1,13 @@
 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.extension.service.impl.ServiceImpl;
 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.pp.entity.BasicDataProduce;
 import com.mes.pp.entity.ReportingWork;
 import com.mes.work_assignment.entity.WorkAssignment;
 import com.mes.work_assignment.mapper.WorkAssignmentMapper;
@@ -21,6 +19,7 @@
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
@@ -55,6 +54,11 @@
         if(!"0".equals(workingProcedure)){
             damageSelectWrapper.eq(Damage::getWorkingProcedure,workingProcedure);
         }
+        List<Damage> damageList = baseMapper.selectList(damageSelectWrapper);
+
+        for (Damage damage : damageList) {
+            damage.setStatus(2);
+        }
         return baseMapper.selectList(damageSelectWrapper);
     }
 
@@ -62,27 +66,7 @@
      * 鎻愪氦鎶ュ伐
      */
     @Override
-    public void submitDamage(String startTime, String endTime, int type, int status, String workingProcedures){
-        LambdaUpdateWrapper<Damage> damageUpdateWrapper=new LambdaUpdateWrapper<>();
-        LambdaQueryWrapper<Damage> damageLambdaQueryWrapper=new LambdaQueryWrapper<>()
-;       damageUpdateWrapper.between(Damage::getDamageTime,startTime,endTime);
-        damageLambdaQueryWrapper.between(Damage::getDamageTime,startTime,endTime);
-        if (type!=0){
-            damageUpdateWrapper.eq(Damage::getType,type);
-            damageLambdaQueryWrapper.eq(Damage::getType,type);
-        }
-        if (status!=0){
-            damageUpdateWrapper.eq(Damage::getStatus,status);
-            damageLambdaQueryWrapper.eq(Damage::getStatus,status);
-        }
-        if(!"0".equals(workingProcedures)){
-            damageUpdateWrapper.eq(Damage::getWorkingProcedure,workingProcedures);
-            damageLambdaQueryWrapper.eq(Damage::getWorkingProcedure,workingProcedures);
-        }
-//        Damage damage=new Damage();
-//        damage.setStatus(2);
-//        baseMapper.update(damage,damageUpdateWrapper);
-        List<Damage> damageList = baseMapper.selectList(damageLambdaQueryWrapper);
+    public void submitDamage(List<Damage> damageList){
         Map<String, Map<String, Map<String, Map<String, List<Damage>>>>> resultMap = damageList.stream()
                 .collect(Collectors.groupingBy(
                         Damage::getProcessId,
@@ -125,15 +109,23 @@
 
                         // 鑾峰彇 Damage 鍒楄〃
                         List<Damage> damageListForTeamsGroupsName = teamsGroupsNameEntry.getValue();
+                        //鎶ュ伐涓昏〃鏁版嵁
+                        ReportingWork reportingWork=new ReportingWork();
+                        reportingWork.setProcessId(processId);
+                        reportingWork.setThisProcess(workingProcedure);
+                        reportingWork.setDeviceName(deviceName);
+                        reportingWork.setTeamsGroupsName(teamsGroupsName);
 
-                        // 浣跨敤 stream 瀵� damageListForTeamsGroupsName 杩涜鍐嶆鍒嗙粍
                         Map<Integer, Map<Integer, Map<String, List<Damage>>>> groupedByOrderTechBreakage = damageListForTeamsGroupsName.stream()
+                                .map(damage -> Optional.ofNullable(damage)) // 浣跨敤Optional澶勭悊鍙兘涓簄ull鐨勫厓绱�
+                                .filter(Optional::isPresent) // 杩囨护鎺夌┖鐨凮ptional
+                                .map(Optional::get) // 鑾峰彇闈炵┖鐨凞amage瀵硅薄
                                 .collect(Collectors.groupingBy(
-                                        Damage::getOrderNumber,
+                                        damage -> Optional.ofNullable(damage.getOrderNumber()).orElse(0), // 浣跨敤orElse璁剧疆榛樿鍊硷紝浠ュ鐞唍ull鍊�
                                         Collectors.groupingBy(
-                                                Damage::getTechnologyNumber,
+                                                damage -> Optional.ofNullable(damage.getTechnologyNumber()).orElse(0), // 鍚屾牱澶勭悊technologyNumber鍙兘涓簄ull鐨勬儏鍐�
                                                 Collectors.groupingBy(
-                                                        Damage::getBreakageType,
+                                                        damage -> Optional.ofNullable(damage.getBreakageType()).orElse("Unknown"), // 澶勭悊breakageType鍙兘涓簄ull鐨勬儏鍐�
                                                         Collectors.toList()
                                                 )
                                         )
@@ -160,11 +152,7 @@
                                     String breakageType = breakageTypeEntry.getKey();
                                     System.out.println("            BreakageType: " + breakageType);
 
-                                    ReportingWork reportingWork=new ReportingWork();
-                                    reportingWork.setProcessId(processId);
-                                    reportingWork.setThisProcess(workingProcedure);
-                                    reportingWork.setDeviceName(deviceName);
-                                    reportingWork.setTeamsGroupsName(teamsGroupsName);
+
                                     // 鑾峰彇 Damage 鍒楄〃
                                     List<Damage> damageListForBreakageType = breakageTypeEntry.getValue();
                                     int completedQuantity=0;
@@ -207,14 +195,15 @@
                 .eq(WorkAssignment::getLine,damage.getLine())
                 .eq(WorkAssignment::getWorkProcesses,damage.getWorkingProcedure());
         WorkAssignment workAssignment=workAssignmentMapper.selectOne(workAssignmentSelectWrapper);
-
-        damage.setTeamsGroupsName(workAssignment.getTeamsGroupsName());
-        damage.setDeviceName(workAssignment.getDeviceName());
-        damage.setProcessId(glassInfo.getFlowCardId());
-        damage.setOrderNumber(glassInfo.getGlassType());
-        damage.setTechnologyNumber(glassInfo.getLayer());
-        damage.setDamageTime(Timestamp.valueOf(LocalDateTime.now()));
-        damage.setType(2);
-        baseMapper.insert(damage);
+        if(workAssignment!=null){
+            damage.setTeamsGroupsName(workAssignment.getTeamsGroupsName());
+            damage.setDeviceName(workAssignment.getDeviceName());
+            damage.setProcessId(glassInfo.getFlowCardId());
+            damage.setOrderNumber(glassInfo.getGlassType());
+            damage.setTechnologyNumber(glassInfo.getLayer());
+            damage.setDamageTime(Timestamp.valueOf(LocalDateTime.now()));
+            damage.setType(2);
+            baseMapper.insert(damage);
+        }
     }
 }
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
index 582dafe..7cc83b8 100644
--- 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
@@ -10,6 +10,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -28,7 +29,9 @@
     private WorkAssignmentService workAssignmentService;
     @ApiOperation("鍊肩彮鏁版嵁鏌ヨ")
     @PostMapping("/selectWorkAssignment")
-    public Result selectWorkAssignment(int line,String workingProcedure) {
+    public Result selectWorkAssignment(@RequestBody Map map) {
+        String line=map.get("line").toString();
+        String workingProcedure=map.get("workingProcedure").toString();
         return Result.build(200,"鏌ヨ鎴愬姛",workAssignmentService.selectWorkAssignment(line,workingProcedure));
     }
 
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
index 3571fe6..c4daba8 100644
--- 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
@@ -3,6 +3,8 @@
 import com.mes.work_assignment.entity.WorkAssignment;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * <p>
  *  鏈嶅姟绫�
@@ -13,5 +15,5 @@
  */
 public interface WorkAssignmentService extends IService<WorkAssignment> {
 
-    WorkAssignment selectWorkAssignment(int line, String workingProcedure);
+    List<WorkAssignment> selectWorkAssignment(String 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
index e80cce6..1bef12b 100644
--- 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
@@ -7,6 +7,8 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  *  鏈嶅姟瀹炵幇绫�
@@ -25,11 +27,11 @@
      * @return
      */
     @Override
-    public WorkAssignment selectWorkAssignment(int line, String workingProcedure){
+    public List<WorkAssignment> selectWorkAssignment(String line, String workingProcedure){
         LambdaQueryWrapper<WorkAssignment> workAssignmentSelectWrapper=new LambdaQueryWrapper<>();
         workAssignmentSelectWrapper
                 .eq(WorkAssignment::getLine,line)
                 .eq(WorkAssignment::getWorkProcesses,workingProcedure);
-        return baseMapper.selectOne(workAssignmentSelectWrapper);
+        return baseMapper.selectList(workAssignmentSelectWrapper);
     }
 }
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 772a88b..ddbc9a9 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
@@ -21,6 +21,7 @@
 import com.mes.glassinfo.service.GlassInfoService;
 import com.mes.taskcache.entity.TaskCache;
 import com.mes.taskcache.service.TaskCacheService;
+import com.mes.temperingglass.entity.TemperingGlassInfo;
 import com.mes.tools.WebSocketServer;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
@@ -74,11 +75,17 @@
     @Value("${mes.max.secondLength}")
     private String secondLength;
 
-    @Value("${mes.min.firstLength}")
-    private String minFirstLength;
+    @Value("${mes.min.one.firstLength}")
+    private String minOneFirstLength;
 
-    @Value("${mes.min.secondLength}")
-    private String minSecondLength;
+    @Value("${mes.min.one.secondLength}")
+    private String minOneSecondLength;
+
+    @Value("${mes.min.two.firstLength}")
+    private String minTwoFirstLength;
+
+    @Value("${mes.min.two.secondLength}")
+    private String minTwoSecondLength;
 
     @Scheduled(fixedDelay = 1000)
     public void plcHomeEdgTask() {
@@ -115,7 +122,7 @@
             inTo(glassIdeValue, confirmationWrodAddress, currentSlot);
         } else if ("2".equals(taskRequestTypeValue)) {
             //09绌洪棽 锛�1      10绌洪棽 锛�2        閮界┖闂诧細3    鍏朵粬0
-            log.info("2銆佸嚭鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛岃繘鐗囦换鍔�");
+            log.info("2銆佸嚭鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛屽嚭鐗囦换鍔�");
             outTo(Integer.parseInt(out08Glassstate),
                     Integer.parseInt(out10Glassstate), confirmationWrodAddress, "", 0);
         } else if ("3".equals(taskRequestTypeValue)) {
@@ -131,7 +138,23 @@
         Date endDate = new Date();
         log.info("鏈浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms", endDate, endDate.getTime() - startDate.getTime());
     }
-
+    @Scheduled(fixedDelay = 1000)
+    public void temperingIsRun(){
+        JSONObject jsonObject = new JSONObject();
+        //姝e湪杩涜鐨勪换鍔�
+        List<TaskCache>taskCaches=taskCacheService.selectTaskCacheIsRun();
+        jsonObject.append("taskCaches", taskCaches);
+        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("isRun");
+        if (sendwServer != null) {
+            for (WebSocketServer webserver : sendwServer) {
+                if (webserver != null) {
+                    webserver.sendMessage(jsonObject.toString());
+                } else {
+                    log.info("Home is closed");
+                }
+            }
+        }
+    }
     /**
      * 杩涚墖浠诲姟
      *
@@ -227,7 +250,7 @@
 //        2銆佸鏋滄病鏈夊巻鍙插嚭鐗囦换鍔�
 //        2.1銆佸嚭褰撳墠鐗堝浘id鏈�灏忕増搴忔渶灏忕殑鐜荤拑锛堥棶棰橈細涓ゆ潯绾块兘娌℃湁鍘嗗彶浠诲姟锛屽嚭鐗囨椂涓ゆ潯绾跨殑鐜荤拑灏哄鐩稿悓锛屾槸鍚︽壘灏哄涓嶅悓鐨勶級
         if ((out08Glassstate == 2 && out10Glassstate == 2) || (out08Glassstate == 0 && out10Glassstate == 0)) {
-            log.info("A09銆丄10涓簕},{}闈炶嚜鍔ㄧ姸鎬侊紝鏃犳硶鍑虹墖");
+            log.info("A09銆丄10涓簕},{}闈炶嚜鍔ㄧ姸鎬侊紝鏃犳硶鍑虹墖", out08Glassstate, out10Glassstate);
             return Boolean.FALSE;
         }
         log.info("0銆佸嚭鐗囦换鍔″嚭鐨勭姸鎬�:A09:銆恵}銆�;A10:銆恵}銆�)", out08Glassstate, out10Glassstate);
@@ -263,26 +286,27 @@
                     if (endcell == Const.A10_OUT_TARGET_POSITION) {
                         wrapper.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 edg_storage_cage_details) t1 " +
-                                "on t.glass_id = t1.glass_id and (t1.first_length <=" + firstLength + " and t1.second_length<=" + secondLength + ") ");
+                                "on t.glass_id = t1.glass_id and (t1.first_length between " + minTwoFirstLength + " and " + firstLength
+                                + " and t1.second_length between " + minTwoSecondLength + " and " + secondLength + ") ");
                     } else {
                         wrapper.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 edg_storage_cage_details) t1 " +
-                                "on t.glass_id = t1.glass_id and (t1.first_length >=" + minFirstLength + " and t1.second_length>=" + minSecondLength + ") ");
+                                "on t.glass_id = t1.glass_id and (t1.first_length >=" + minOneFirstLength + " and t1.second_length>=" + minOneSecondLength + ") ");
                     }
                     wrapper.last("order by count(t.glass_id) desc  limit 2");
                     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");
                         if (endcell == Const.A10_OUT_TARGET_POSITION) {
-                            wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
+                            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 edg_storage_cage_details) t1 " +
-                                    "on t.glass_id = t1.glass_id and (t1.first_length <=" + firstLength + " and t1.second_length<=" + secondLength + ") ");
+                                    "on t.glass_id = t1.glass_id and (t1.first_length between " + minTwoFirstLength + " and " + firstLength
+                                    + " and t1.second_length between " + minTwoSecondLength + " and " + secondLength + ") ");
                         } else {
-                            wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
+                            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 edg_storage_cage_details) t1 " +
-                                    "on t.glass_id = t1.glass_id and (t1.first_length >=" + minFirstLength + " and t1.second_length>=" + minSecondLength + ") ");
+                                    "on t.glass_id = t1.glass_id and (t1.first_length >=" + minOneFirstLength + " and t1.second_length>=" + minOneSecondLength + ") ");
                         }
                         GlassInfo one = glassInfoService.getOne(queryWrapper);
                         if (one != null) {
@@ -504,11 +528,12 @@
         if (endcell == Const.A10_OUT_TARGET_POSITION) {
             wrapper.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 edg_storage_cage_details) t1 " +
-                    "on t.glass_id = t1.glass_id and (t1.first_length <=" + firstLength + " and t1.second_length<=" + secondLength + ") ");
+                    "on t.glass_id = t1.glass_id and (t1.first_length between " + minTwoFirstLength + " and " + firstLength
+                    + " and t1.second_length between " + minTwoSecondLength + " and " + secondLength + ") ");
         } else {
             wrapper.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 edg_storage_cage_details) t1 " +
-                    "on t.glass_id = t1.glass_id and (t1.first_length >=" + minFirstLength + " and t1.second_length>=" + minSecondLength + ") ");
+                    "on t.glass_id = t1.glass_id and (t1.first_length >=" + minOneFirstLength + " and t1.second_length>=" + minOneSecondLength + ") ");
         }
         wrapper.last("order by count(t.glass_id) desc  limit 2");
         List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(wrapper);
@@ -546,7 +571,7 @@
                 return queryMinGlass(firstSize.getWidth(), firstSize.getHeight(), glassId);
             }
             EdgStorageCageDetails outGlassInfo = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
-                    .eq(EdgStorageCageDetails::getGlassId, taskCache.getGlassId()));
+                    .eq(EdgStorageCageDetails::getGlassId, taskCache.getGlassId()).last("limit 1"));
             log.info("{}绾挎湁鍑虹墖浠诲姟淇℃伅,浠诲姟淇℃伅涓簕}锛岀幓鐠冧俊鎭负{}", endcell, taskCache, outGlassInfo);
             if (outGlassInfo.getWidth() == firstWidth && outGlassInfo.getHeight() == firstHeight) {
                 log.info("鏁伴噺鏈�澶氱殑瀹絳}楂榹}鍜寋}绾夸换鍔$殑瀹絳}楂榹}鐩稿悓锛屽嚭鏁伴噺鎺掔浜岀殑鐜荤拑锛屽{}楂榹}",
@@ -641,6 +666,8 @@
         edgGlassTaskInfo.setStatus(Const.EDG_GLASS_BEFORE);
         edgGlassTaskInfo.setLine(endcell);
         edgGlassTaskInfo.setTime(new Date());
+        //鍏堝皢鍘嗗彶瀵瑰垪琛ㄤ腑鏈幓鐠冪殑鏁版嵁鍒犻櫎锛岄噸鏂版柊澧炰竴浠芥渶鏂扮殑鏁版嵁
+        edgGlassTaskInfoService.remove(new LambdaQueryWrapper<EdgGlassTaskInfo>().eq(EdgGlassTaskInfo::getGlassId, glassInfo.getGlassId()));
         return edgGlassTaskInfoService.save(edgGlassTaskInfo);
     }
 
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/TaskCacheMapper.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/TaskCacheMapper.java
index 6132c32..a99287d 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/TaskCacheMapper.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/TaskCacheMapper.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.taskcache.entity.TaskCache;
 import org.apache.ibatis.annotations.Param;
 
@@ -16,7 +17,7 @@
  * @since 2024-04-07
  */
 @DS("salve_hangzhoumes")
-public interface TaskCacheMapper extends BaseMapper<TaskCache> {
+public interface TaskCacheMapper extends MPJBaseMapper<TaskCache> {
 
     TaskCache queryGlassByTaskCache(@Param(value = "line") int line, @Param(value = "taskTypes") List<Integer> taskTypes);
 }
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java
index 239fabe..daaf6e3 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java
@@ -1,6 +1,7 @@
 package com.mes.taskcache.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.yulichang.base.MPJBaseService;
 import com.mes.taskcache.entity.TaskCache;
 
 import java.util.List;
@@ -14,7 +15,7 @@
  * @author zhoush
  * @since 2024-04-07
  */
-public interface TaskCacheService extends IService<TaskCache> {
+public interface TaskCacheService extends MPJBaseService<TaskCache> {
 
 
     boolean insertTaskCache(TaskCache taskCache);
@@ -72,5 +73,11 @@
      * @return
      */
     TaskCache selectLastOutCacheInfo(int line);
+    /**
+     * 鏌ヨ鍒ゆ柇纾ㄨ竟绾挎槸鍚︽湁鐜荤拑杩愯
+     * @param
+     * @return
+     */
+    List<TaskCache> selectTaskCacheIsRun();
 
 }
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
index 0287e4b..0e330b0 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.mes.common.config.Const;
 import com.mes.damage.entity.Damage;
@@ -18,10 +19,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * <p>
@@ -33,13 +31,15 @@
  */
 @Slf4j
 @Service
-public class TaskCacheServiceImpl extends ServiceImpl<TaskCacheMapper, TaskCache> implements TaskCacheService {
+public class TaskCacheServiceImpl extends MPJBaseServiceImpl<TaskCacheMapper, TaskCache> implements TaskCacheService {
 
     @Autowired
     EdgStorageCageDetailsMapper edgStorageCageDetailsMapper;
 
     @Autowired
     GlassInfoMapper glassInfoMapper;
+    @Autowired
+    private TaskCacheMapper taskCacheMapper;
 
 
     /**
@@ -169,7 +169,22 @@
     public TaskCache selectLastOutCacheInfo(int line){
         return baseMapper.selectOne(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getEndCell,line).eq(TaskCache::getTaskStatus,1).orderByDesc(TaskCache::getCreateTime));
     }
-
+    /**
+     * 鏌ヨ鍒ゆ柇纾ㄨ竟绾挎槸鍚︽湁鐜荤拑杩愯
+     * @param
+     * @return
+     */
+    @Override
+    public List<TaskCache> selectTaskCacheIsRun() {
+        List<TaskCache> taskCaches=null;
+        taskCaches=taskCacheMapper.selectJoinList(TaskCache.class, new MPJLambdaWrapper<TaskCache>()
+                .select("top 4   t.end_cell,ISNULL(b.glass_id, 0)as glass_id")
+                .leftJoin("big_storage_cage_feed_task as b on t.glass_id=b.glass_id ")
+                .groupBy("t.end_cell,b.glass_id,t.create_time")
+                .orderByDesc("t.create_time")
+        );
+        return taskCaches;
+    }
 
 
 }
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 588bc3e..a1f0079 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
@@ -266,6 +266,7 @@
                 .selectAll(BigStorageCage.class)
                 .leftJoin(BigStorageCageDetails.class, BigStorageCageDetails::getSlot, BigStorageCage::getSlot)
                 .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
+                .eq(BigStorageCageDetails::getEngineerId,glassInfo.getEngineerId())
                 .eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId())
                 .gt(BigStorageCage::getRemainWidth, Math.max(glassInfo.getWidth(), glassInfo.getHeight()))
                 .last("limit 1");
@@ -287,7 +288,7 @@
                 .eq(BigStorageCage::getRemainWidth, slotWidth)
                 .notInSql(BigStorageCage::getSlot, "select distinct slot from big_storage_cage_details where state = 0")
                 .inSql(BigStorageCage::getDeviceId,
-                        "select distinct device_id from big_storage_cage_details where tempering_layout_id = " + glassInfo.getTemperingLayoutId())
+                        "select distinct device_id from big_storage_cage_details where engineer_id = "+glassInfo.getEngineerId()+" and tempering_layout_id = " + glassInfo.getTemperingLayoutId())
                 .last("limit 1"));
         if (null != bigStorageCage) {
             bigStorageDTO = new BigStorageDTO();
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 c6587ca..8f7ba74 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
@@ -109,4 +109,25 @@
         }
     }
 
+    @Scheduled(fixedDelay = 1000)
+    public void temperingIsRun(){
+        JSONObject jsonObject = new JSONObject();
+        //杩涚墖浠诲姟鏁版嵁
+        List<BigStorageCageDetails> bigStorageCageDetailsFeedTask=bigStorageCageDetailsService.selectFeedTask();
+        jsonObject.append("bigStorageCageDetailsFeedTask", bigStorageCageDetailsFeedTask);
+        //鍑虹墖浠诲姟鏁版嵁
+        List<BigStorageCageDetails> bigStorageCageDetailsOutTask=bigStorageCageDetailsService.selectOutTask();
+        jsonObject.append("bigStorageCageDetailsOutTask", bigStorageCageDetailsOutTask);
+        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("isRun");
+        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/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
index 94d89f3..b1a5bf5 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
@@ -244,7 +244,7 @@
         log.info("澶х悊鐗囩绌鸿溅杩涚墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
     }
 
-    @Scheduled(fixedDelay = 2000)
+    @Scheduled(fixedDelay = 300)
     public void plcToHomeEdgOutTask() {
         Date startDate = new Date();
         log.info("澶х悊鐗囩绌鸿溅杩涚墖浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
@@ -484,6 +484,7 @@
             bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>()
                     .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW).in(BigStorageCageDetails::getGlassId, inDamageTaskInfoList.stream().map(BigStorageCageFeedTask::getGlassId).collect(Collectors.toList())));
             //灏嗙牬鎹熶俊鎭柊澧炲叆鐮存崯琛�
+            List<Integer> slotList = new ArrayList<>();
             for (BigStorageCageFeedTask bigStorageCageFeedTask : inDamageTaskInfoList) {
                 Damage damage = new Damage();
                 damage.setGlassId(bigStorageCageFeedTask.getGlassId());
@@ -492,7 +493,10 @@
                 damage.setRemark("杩涚鍓嶅崸杞珛");
                 damage.setStatus(2);
                 damageService.insertDamage(damage);
+                slotList.add(bigStorageCageFeedTask.getTargetSlot());
             }
+            //鏇存柊鏍煎瓙鍓╀綑瀹藉害
+            updateSlotRemainBySlots(slotList);
             log.info("杩涚墖浠诲姟鎵ц瀹屾垚");
         }
         //鑾峰彇鍑虹墖浠诲姟琛ㄤ腑鐘舵�佷负鐮存崯鐨勬暟鎹�
@@ -500,7 +504,7 @@
                 .eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_DAMAGE));
         if (CollectionUtils.isNotEmpty(outDamageTaskInfoList)) {
             log.info("鑾峰彇鍑虹墖浠诲姟琛ㄤ腑鐮存崯鐨勭幓鐠冧俊鎭瘂}", outDamageTaskInfoList);
-            bigStorageCageOutTaskService.remove(new LambdaQueryWrapper<BigStorageCageOutTask>().eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_IN_DAMAGE));
+            bigStorageCageOutTaskService.remove(new LambdaQueryWrapper<BigStorageCageOutTask>().eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_DAMAGE));
             List<String> glassIdList = outDamageTaskInfoList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
             //绉婚櫎閽㈠寲涓嬬墖琛ㄦ暟鎹�
             temperingGlassInfoService.remove(new LambdaQueryWrapper<TemperingGlassInfo>().in(TemperingGlassInfo::getGlassId, glassIdList));
@@ -508,6 +512,7 @@
             bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>().in(BigStorageCageDetails::getGlassId, glassIdList));
 
             //灏嗙牬鎹熶俊鎭柊澧炲叆鐮存崯琛�
+            List<Integer> slotList = new ArrayList<>();
             for (BigStorageCageOutTask bigStorageCageOutTask : outDamageTaskInfoList) {
                 Damage damage = new Damage();
                 damage.setGlassId(bigStorageCageOutTask.getGlassId());
@@ -516,7 +521,10 @@
                 damage.setRemark("鍑虹墖鍚庡崸杞珛");
                 damage.setStatus(2);
                 damageService.insertDamage(damage);
+                slotList.add(bigStorageCageOutTask.getStartSlot());
             }
+            //鏇存柊鏍煎瓙鍓╀綑瀹藉害
+            updateSlotRemainBySlots(slotList);
             log.info("鍑虹墖浠诲姟鎵ц瀹屾垚");
         }
         Date endDate = new Date();
@@ -704,7 +712,69 @@
         }
     }
 
+    /**
+     * 鍑虹墖涓�娆′粎鐢熸垚涓�杞︾幓鐠�
+     *
+     * @param list
+     * @param isTempering
+     * @param mesToPLCAddress
+     * @param <T>
+     * @return
+     */
     private <T extends BigStorageCageBaseInfo> Boolean computeOutGlassInfo(List<T> list, Boolean isTempering, String mesToPLCAddress) {
+        //浠诲姟鏁版嵁  鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲�  鐜荤拑闂撮殧
+        List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>();
+        //鎵撹溅鍓╀綑灏哄
+        Integer remainWidth = carWidth;
+        int maxX = 0;
+        for (T e : list) {
+            if (bigStorageCageOutTaskList.size() >= outCarMaxSize || e.getWidth() > remainWidth) {
+                break;
+            }
+            remainWidth = remainWidth - (int) e.getWidth() - glassGap;
+            if (isTempering) {
+                int minLength = Math.min((int) e.getWidth(), (int) e.getHeight());
+                if (maxX + minLength <= xMaxSize) {
+                    bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION,
+                            e.getWidth() * 10, e.getHeight() * 10, 0, 0, 1));
+                    maxX = Math.max(maxX, e.getXCoordinate());
+                } else {
+                    break;
+                }
+
+            } else {
+                bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
+                        e.getWidth() * 10, e.getHeight(), 0, 0, 1));
+            }
+        }
+        Assert.isFalse(CollectionUtils.isEmpty(bigStorageCageOutTaskList), "鏈幏鍙栧嚭鐗囨暟鎹紝缁撴潫鍑虹墖浠诲姟");
+        log.info("鑾峰彇鍑虹墖浠诲姟鏁版嵁{}鏉★紝鎵ц淇濆瓨", bigStorageCageOutTaskList.size());
+        bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
+        List<String> glassIds = bigStorageCageOutTaskList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
+        log.info("灏嗗嚭鐗囩幓鐠儃}鐜荤拑鐘舵�佹敼涓哄凡鍑虹墖", glassIds);
+        bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
+                .set(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING)
+                .in(BigStorageCageDetails::getGlassId, glassIds));
+        int returnData = 0;
+        int count = 1;
+        while (returnData == 0) {
+            S7object.getinstance().plccontrol.writeWord(mesToPLCAddress, 1);
+            returnData = S7object.getinstance().plccontrol.readWord(mesToPLCAddress, 1).get(0);
+            log.info("宸插悜plc绗瑊}娆″彂閫佸嚭鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{},鍐欏叆鐨勫唴瀹逛负{}", count++, mesToPLCAddress, returnData);
+        }
+        return Boolean.TRUE;
+    }
+
+    /**
+     * 鍑虹墖涓�娆$敓鎴愪竴鐐夌幓鐠�
+     *
+     * @param list
+     * @param isTempering
+     * @param mesToPLCAddress
+     * @param <T>
+     * @return
+     */
+    private <T extends BigStorageCageBaseInfo> Boolean computeOutMoreGlassInfo(List<T> list, Boolean isTempering, String mesToPLCAddress) {
         //浠诲姟鏁版嵁  鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲�  鐜荤拑闂撮殧
         List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>();
         //鎵撹溅鍓╀綑灏哄
@@ -714,12 +784,11 @@
         int maxX = 0;
         for (T e : list) {
             int maxLength = Math.max((int) e.getWidth(), (int) e.getHeight());
-            if (bigStorageCageOutTaskList.size() >= outCarMaxSize || maxLength > remainWidth) {
+            if (serialNumber > outCarMaxSize || maxLength > remainWidth) {
                 remainWidth = carWidth;
                 trainNumber = trainNumber + 1;
                 serialNumber = 1;
                 maxX = 0;
-                continue;
             }
             remainWidth = remainWidth - maxLength - glassGap;
             if (isTempering) {
@@ -729,11 +798,12 @@
                             e.getWidth() * 10, e.getHeight() * 10, trainNumber, serialNumber++, 1));
                     maxX = Math.max(maxX, e.getXCoordinate());
                 } else {
-                    remainWidth = carWidth;
+                    remainWidth = carWidth - maxLength - glassGap;
                     trainNumber = trainNumber + 1;
                     serialNumber = 1;
-                    maxX = 0;
-                    continue;
+                    maxX = e.getXCoordinate();
+                    bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
+                            e.getWidth() * 10, e.getHeight(), trainNumber, serialNumber++, 1));
                 }
             } else {
                 bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java
index d3c02f3..3b1819f 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java
@@ -99,7 +99,7 @@
         //鏌ヨ鏄惁鏈夊紑濮嬩笂鐗囩殑宸ョ▼浠诲姟
         QueryWrapper<Engineering> wrapper = new QueryWrapper<>();
             wrapper.eq("state", state);
-        return this.getOne(wrapper);
+        return engineeringMapper.selectOne(wrapper);
     }
 
     @Override
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java
index 5e73260..17b0050 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java
@@ -127,6 +127,13 @@
         //宸ヤ綅淇℃伅
         List<UpWorkstation> upWorkstations = upWorkstationService.list();
         jsonObject.append("list", upWorkstations);
+        //鏄惁寮�濮嬪伐绋�
+        Engineering engineering = engineeringService.selectInitiate(1);
+        if (engineering != null){
+            jsonObject.append("engineering", engineering);
+        }else {
+            jsonObject.append("engineering", "0");
+        }
         ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("loadGlass");
         if (sendwServer != null) {
             for (WebSocketServer webserver : sendwServer) {
@@ -149,7 +156,7 @@
         JSONObject jsonObject = new JSONObject();
         //姝e湪杩涜鐨勪换鍔�
         String inkageStatus =plcParameterObject.getPlcParameter("InkageStatus").getValue();
-//        String inkageStatus ="1";
+        //String inkageStatus ="1";
         jsonObject.append("InkageStatus", inkageStatus);
         ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("loadGlass");
         if (sendwServer != null) {
@@ -162,6 +169,26 @@
             }
         }
     }
+    @Scheduled(fixedDelay = 1000)
+    public void loadGlassIsRun() {
+        JSONObject jsonObject = new JSONObject();
+        Engineering engineering = engineeringService.selectInitiate(1);
+        if (engineering != null){
+            jsonObject.append("engineering", engineering);
+        }else {
+            jsonObject.append("engineering", "0");
+        }
+        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("IsRun");
+        if (sendwServer != null) {
+            for (WebSocketServer webserver : sendwServer) {
+                if (webserver != null) {
+                    webserver.sendMessage(jsonObject.toString());
+                } else {
+                    log.info("Home is closed");
+                }
+            }
+        }
+    }
 
     public void overTask(String loadStatus, int state) {
 
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
index 841570f..7e31c30 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
@@ -134,13 +134,15 @@
         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());
+        double glassWidth = Math.max(glassInfo.getWidth(), glassInfo.getHeight());
+        double glassHeight = Math.min(glassInfo.getWidth(), glassInfo.getHeight());
+        if ("1".equals(requestWord) && (glassWidth > throughWidth || glassHeight > throughHeight)) {
+            log.info("鐜荤拑褰撳墠灏哄瀹斤細{}锛岄珮锛歿}鍙兘鐩撮�氾紝褰撳墠杩涚墖浠诲姟闇�绛夊緟", glassWidth, glassHeight);
             return;
         }
         Boolean checkFlag = Boolean.FALSE;
         //鐜荤拑灏哄鏄惁璧颁汉宸ヤ笅鐗�
-        if (glassInfo.getWidth() > maxWidth || glassInfo.getHeight() > maxHeight || glassInfo.getWidth() < minWidth || glassInfo.getHeight() < minHeight) {
+        if (glassWidth > maxWidth || glassHeight > maxHeight || glassWidth < minWidth || glassHeight < minHeight) {
             log.info("璇ョ幓鐠冨昂瀵镐笉绗﹀悎瑕佹眰锛岄渶瑕佽蛋浜哄伐涓嬬墖鐩存帴杩涚墖");
         } else {
             log.info("璇ョ幓鐠冨昂瀵搁潪浜哄伐涓嬬墖");
@@ -148,6 +150,7 @@
             DownWorkstation one = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>()
                     .eq(DownWorkstation::getLayer, glassInfo.getLayer())
                     .eq(DownWorkstation::getFlowCardId, glassInfo.getFlowCardId()));
+            //鏄惁宸茬粡缁戝畾   true锛氬凡缁戝畾    false:鏈粦瀹�
             Boolean isBind = Boolean.FALSE;
             if (null != one) {
                 log.info("璇ユ祦绋嬪崱宸茬粦瀹氭灦瀛�");
@@ -157,7 +160,7 @@
             if (!checkFlag && !isBind) {
                 log.info("璇ョ幓鐠冪殑娴佺▼鍗℃湭缁戝畾鏋跺瓙锛岃幏鍙栨槸鍚︽湁绌烘灦瀛�");
                 List<DownWorkstation> list = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>()
-                        .isNull(DownWorkstation::getFlowCardId).orderByDesc(DownWorkstation::getWorkstationId));
+                        .and(on -> on.isNull(DownWorkstation::getFlowCardId).or().eq(DownWorkstation::getFlowCardId, "")).orderByDesc(DownWorkstation::getWorkstationId));
                 if (CollectionUtils.isNotEmpty(list)) {
                     log.info("鏈夌┖鏋跺瓙,灏嗘祦绋嬪崱涓庢灦瀛愬ソ缁戝畾锛屾墽琛岃繘鐗囦换鍔� 缁撴潫");
                     //缁戝畾娴佺▼鍗�
@@ -176,28 +179,31 @@
                     endLoop:
                     for (DownGlassInfoDTO e : downGlassInfoDTOList) {
                         List<GlassInfo> glassInfoList = e.getGlassInfoList();
-                        Optional<GlassInfo> glassInfoTempOptional = glassInfoList.stream().filter(item -> item.getWidth() == glassInfo.getWidth() && item.getHeight() == glassInfo.getHeight()
-                                && item.getThickness() == glassInfo.getThickness() && item.getFilmsid().equals(glassInfo.getFilmsid()))
-                                .findFirst();
-                        if (glassInfoTempOptional.isPresent()) {
-                            GlassInfo item = glassInfoTempOptional.get();
-                            //鐜荤拑鏄惁涓哄灞�
-                            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;
+                        List<GlassInfo> glassInfoTempList = glassInfoList.stream().filter(item -> item.getWidth() == glassInfo.getWidth() && item.getHeight() == glassInfo.getHeight()
+                                && item.getThickness() == glassInfo.getThickness() && item.getFilmsid().equals(glassInfo.getFilmsid())).collect(Collectors.toList());
+                        if (CollectionUtils.isNotEmpty(glassInfoTempList)) {
+                            for (GlassInfo item : glassInfoTempList) {
+                                //鐜荤拑鏄惁涓哄灞傦細1銆佸厛鑾峰彇褰撳墠娴佺▼鍗¤惤鏋舵渶澶氱殑灞傛暟锛屽鏋滀负绌猴紝琛ㄦ槑鏈粦瀹氭祦绋嬪崱锛屾湭钀芥灦锛岀劧鍚庢寜鐓ф槸鍚﹀彲缁戝畾鏋跺瓙鍐冲畾鏄惁鏇挎崲銆傦紙鍙拷鐣ヤ笉璁★紝鏈牎楠屼粎鍦ㄥ墠涓�娆¤皟鐢ㄨ捣浣滅敤锛�
+//                                          2銆佸垽鏂惤鏋舵渶澶氱殑灞傛暟鏄惁涓哄綋鍓嶆浛鎹㈢幓鐠冪殑灞傛暟锛屾槸  鍒欒蛋鏇挎崲閫昏緫杩斿洖true
+//                                          3銆佷笉鏄渶澶氱殑灞傛暟锛岃幏鍙栬惤鏋舵渶澶氬眰鏁扮殑鐩稿悓娆″簭鐨勭幓鐠冨昂瀵镐笌褰撳墠鏇挎崲鐜荤拑鐨勫昂瀵告瘮杈冿紝鐩稿悓璧版浛鎹紝鍚﹀垯缁х画寰幆
+//                                          4銆佸崟灞傜幓鐠冪洿鎺ヨ蛋鏇挎崲
+                                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;
+                                }
                             }
                         }
                     }
@@ -210,7 +216,6 @@
         downStorageCageDetails.setState(Const.GLASS_STATE_IN);
         downStorageCageDetails.setSlot(nearestEmpty.getSlot());
         downStorageCageDetailsService.save(downStorageCageDetails);
-
         //        鐢熸垚杩涚墖浠诲姟
         initDownGlassTask(glassInfo, 0, nearestEmpty.getSlot(), Const.GLASS_CACHE_TYPE_IN);
     }
@@ -221,9 +226,9 @@
             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));
+        log.info("鍑虹墖1銆佺鍐呯殑鐜荤拑淇℃伅鏈夛細{}", tempList);
         //鑾峰彇寰呰繘鐗囩幓鐠�
         DownStorageCageDetails cageDetails = new DownStorageCageDetails();
         if (StringUtils.isNotBlank(glassId)) {
@@ -234,12 +239,15 @@
             cageDetails.setSlot(empty.getSlot());
             tempList.add(cageDetails);
         }
-
-        log.info("绗煎唴鐜荤拑鐨勬暟鎹湁锛歿}", tempList);
+        log.info("鍑虹墖2锛氱鍐呯幓鐠冪殑鏁版嵁(鍖呮嫭寰呰繘鐗�)鏈夛細{}", tempList);
         if (CollectionUtils.isEmpty(tempList)) {
             log.info("绗煎唴娌℃湁鐜荤拑,鏃犳硶鎵ц鍑虹墖");
             return Boolean.FALSE;
         }
+        //浼樺厛璧�08鐗囧彴鐨勭幓鐠冿細璧颁汉宸ヤ笅鐗囨垨鑰�2鍙锋満姊拌噦
+        //1銆�08鍙板繖纰岋紝浠呰蛋1鍙锋満姊拌噦
+        //2銆�08鍙扮┖闂诧紝鍏堣蛋鎵斿伐涓嬬墖鎴�2鍙锋満姊拌噦锛屾棤鐜荤拑鍑虹墖 鍦ㄨ蛋1鍙锋満姊拌噦
+        //鏈烘鑷傝绂佺敤鐨勬儏鍐典笅涓嶈兘缁х画鍚戠鐢ㄧ殑鏈烘鑷傛斁鐜荤拑
         Boolean flag08 = "1".equals(out08Glassstate) ? Boolean.TRUE : Boolean.FALSE;
         if (!flag08) {
             generateTaskByShelf(glassStatus06, glassStatus11, flag08, glassStatus13, tempList, cageDetails, glassId);
@@ -248,7 +256,6 @@
                 return generateTaskByShelf(glassStatus06, glassStatus11, !flag08, glassStatus13, tempList, cageDetails, glassId);
             }
         }
-
         return Boolean.TRUE;
     }
 
@@ -264,7 +271,6 @@
                     log.info("鏋跺瓙宸茬粡鍗犳弧锛屽灞傜幓鐠冩棤娉曟壘鍒板搴旂殑鏍煎瓙锛岄渶鎵ц鏇挎崲鐜荤拑鐨勬搷浣�");
                     return Boolean.FALSE;
                 }
-
             }
             if (downGlassInfoDTO.getLayer().equals(glassInfo.getLayer())) {
                 log.info("褰撳墠鐜荤拑鐨勬祦绋嬪湪鏋跺瓙涓婅惤鏋舵渶澶� 鐩存帴杩涚墖");
@@ -293,7 +299,6 @@
             glassStatus13, List<DownStorageCageDetails> tempList, DownStorageCageDetails cageDetails, String glassId) {
         //鑾峰彇2涓満姊拌噦鑼冨洿鍐呯殑鏋跺瓙缁戝畾鐨勬祦绋嬪崱淇℃伅
         List<Integer> workList = new ArrayList();
-
         if (flag08) {
             if (!"2".equals(glassStatus11)) {
                 workList.addAll(Const.G11_WORK_STATION);
@@ -306,51 +311,59 @@
         List<Integer> workStationAll = Arrays.asList(1, 2, 3, 4, 5, 6);
         List<Integer> offWorkStationList = workStationAll.stream().filter(e -> !workList.contains(e)).collect(Collectors.toList());
         List<DownStorageCageDetails> list = new ArrayList();
+        //鏄惁鏈夌┖鏋跺瓙 true锛氭湁   false:鏃�
         Boolean isEmptyShelf = Boolean.FALSE;
         //瀵圭鍐呯幓鐠冭繘琛岃繃婊わ紝浠呭嚭绗﹀悎閫昏緫鐨勭幓鐠�
         if (CollectionUtils.isNotEmpty(workList)) {
             List<DownWorkstation> downWorkstationList = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>()
                     .eq(DownWorkstation::getEnableState, Const.SLOT_ON).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());
+                if (flag08 && !"2".equals(glassStatus13)) {
+                    list = tempList.stream().filter(item -> {
+                        double firstLength = Math.max(item.getWidth(), item.getHeight());
+                        double secondLength = Math.min(item.getWidth(), item.getHeight());
+                        return firstLength > maxWidth || secondLength > maxHeight;
+                    }).collect(Collectors.toList());
                 }
             } else {
                 //鑾峰彇鍙惤鏋剁殑鐨勬灦瀛愪俊鎭紙鍖呮嫭绌烘灦瀛愶級
-                List<DownWorkstation> workstationsIsNotBind = downWorkstationList.stream().filter(item -> null == (item.getFlowCardId())).collect(Collectors.toList());
-                //灏嗘灦瀛愮殑娴佺▼鍗″彿鍙婂眰鏁颁綔涓簁ey
+                //浠呰幏鍙栫┖鏋跺瓙淇℃伅
+                List<DownWorkstation> workstationsIsNotBind = downWorkstationList.stream().filter(item -> StringUtils.isBlank(item.getFlowCardId())).collect(Collectors.toList());
+                //灏嗘灦瀛愮殑娴佺▼鍗″彿鍙婂眰鏁颁綔涓簁ey  涓嶅瓨鍦ㄧ┖鏋跺瓙鐨勬儏鍐�
                 if (CollectionUtils.isEmpty(workstationsIsNotBind)) {
                     log.info("涓嶅瓨鍦ㄦ湭缁戝畾娴佺▼鍗℃灦瀛�");
                     //绛涢�夊嚭瀵瑰簲鏋跺瓙宸茬粦瀹氭祦绋嬪崱鍙笅鐗囩殑鐜荤拑
                     Map<String, List<DownWorkstation>> listMap = downWorkstationList.stream()
-                            .filter(item -> null != (item.getFlowCardId())).collect(Collectors.groupingBy(item -> item.getFlowCardId() + ":" + item.getLayer()));
+                            .filter(item -> StringUtils.isNotBlank(item.getFlowCardId())).collect(Collectors.groupingBy(item -> item.getFlowCardId() + ":" + item.getLayer()));
+                    //杩囨护绛涢�夎幏鍙栨灦瀛愪笂瀵瑰簲娴佺▼鍗�+灞傛暟鐨勭瀛愬唴鐨勭幓鐠冧俊鎭�
                     list = tempList.stream().filter(item -> listMap.containsKey(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList());
                 } else {
                     log.info("瀛樺湪鏈粦瀹氭祦绋嬪崱鏋跺瓙锛岀洿鎺ヨ幏鍙栫鍐呮墍鏈夌幓鐠�,涓旀湭缁戝畾鏋跺瓙鐨勭幓鐠冧俊鎭�");
-                    //鑾峰彇绂佺敤鏋跺瓙鐨勬祦绋嬪彿锛屽皢绗煎唴缁戝畾鏋跺瓙涓旀灦瀛愯绂佺敤鐨勬祦绋嬪崱淇℃伅
-
+                    //鑾峰彇绂佺敤鍙婇潪鏈満姊拌噦鐨勬灦瀛愮殑娴佺▼鍙峰強灞傛暟瀵瑰簲鐨勭幓鐠冧俊鎭�
                     List<DownWorkstation> downWorkstationOffList = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>()
                             .and(i -> i.in(DownWorkstation::getWorkstationId, offWorkStationList).or().eq(DownWorkstation::getEnableState, Const.SLOT_OFF)));
-                    //鑾峰彇琚鐢ㄧ殑娴佺▼鍗′俊鎭�
+                    //鑾峰彇琚鐢ㄧ殑娴佺▼鍗′俊鎭� 涓虹┖锛氬皢杩斿洖绗煎唴鐨勬墍鏈夌幓鐠冧俊鎭�
                     if (CollectionUtils.isEmpty(downWorkstationOffList)) {
                         list = tempList;
                     } else {
-                        Map<String, List<DownWorkstation>> listOffMap = downWorkstationOffList.stream().filter(item -> null != (item.getFlowCardId())).collect(Collectors.groupingBy(item -> item.getFlowCardId() + ":" + item.getLayer()));
+                        //绗煎唴瀛樺湪鏃犳硶鍑虹墖鐨勭幓鐠冧俊鎭紝杩囨护鏃犳硶鍑虹墖鐨勭幓鐠冧俊鎭紝浠呰幏鍙栧彲鍑虹墖鐨勭幓鐠冧俊鎭�   鏃犳硶鍑虹墖鐨勭幓鐠冧负锛氭湭缁戝畾鏋跺瓙銆佺粦瀹氭灦瀛愯绂佺敤銆侀潪鏈満姊拌噦瀵瑰簲鐨勬灦瀛�
+                        Map<String, List<DownWorkstation>> listOffMap = downWorkstationOffList.stream().filter(item -> StringUtils.isNotBlank(item.getFlowCardId())).collect(Collectors.groupingBy(item -> item.getFlowCardId() + ":" + item.getLayer()));
                         list = tempList.stream().filter(item -> !listOffMap.containsKey(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList());
                     }
+                    //绌烘灦瀛愯〃绀虹疆涓簍rue
                     isEmptyShelf = Boolean.TRUE;
-                    //todo:濡傛灉绂佺敤鏋跺瓙宸茬粦瀹氭祦绋嬪崱锛屽洜涓烘椂闂翠笉纭畾锛岀瀛愬唴鐨勭幓鐠冨彲閲嶆柊缁戝畾鏂版灦瀛�
-//                    list = tempList.stream().filter(item -> !listMap.containsKey(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList());
-
                 }
             }
         } else {
             if (flag08 && !"2".equals(glassStatus13)) {
                 //鐩存帴璧颁汉宸ヤ笅鐗�
-                list = tempList.stream().filter(item -> item.getWidth() > maxWidth || item.getHeight() > maxHeight).collect(Collectors.toList());
+                list = tempList.stream().filter(item -> {
+                    double firstLength = Math.max(item.getWidth(), item.getHeight());
+                    double secondLength = Math.min(item.getWidth(), item.getHeight());
+                    return firstLength > maxWidth || secondLength > maxHeight;
+                }).collect(Collectors.toList());
             }
         }
         if (CollectionUtils.isEmpty(list)) {
@@ -358,10 +371,12 @@
             return Boolean.FALSE;
         }
         String tempGlassId = null;
-        Boolean isBind = Boolean.FALSE;
+        Boolean isNeedBind = Boolean.FALSE;
 
         for (DownStorageCageDetails item : list) {
-            if (item.getWidth() > maxWidth || item.getHeight() > maxHeight) {
+            double firstLength = Math.max(item.getWidth(), item.getHeight());
+            double secondLength = Math.min(item.getWidth(), item.getHeight());
+            if (firstLength > maxWidth || secondLength > maxHeight) {
                 if (flag08 && !"2".equals(glassStatus13)) {
                     log.info("鐜荤拑瀹藉害鎴栭珮搴﹁秴鍑洪槇鍊硷紝鎵ц浜哄伐涓嬬墖");
                     tempGlassId = item.getGlassId();
@@ -378,7 +393,7 @@
                 //鏋跺瓙閮芥湭缁戝畾娴佺▼鍗★紝鍑虹鍐呭瓙鏁伴噺鏈�澶氬昂瀵告渶澶х殑鐜荤拑id,鏃�  鍒欒繑鍥炴壂鎻忔壂鍒扮殑鐜荤拑id杩涜鍑虹墖
                 tempGlassId = downStorageCageDetailsService.getGlassInfoMaxCount(glassId, offWorkStationList);
 
-                isBind = Boolean.TRUE;
+                isNeedBind = Boolean.TRUE;
                 break loop;
             }
             //灏嗙瀛愬唴鐨勭幓鐠冭繘琛岃繃婊わ紝浠呰幏鍙栨棤娉曡惤鏋剁殑娴佺▼鍗$幓鐠�
@@ -391,7 +406,7 @@
                 if (isEmptyShelf) {
                     //鏋跺瓙閮芥湭缁戝畾娴佺▼鍗★紝鍑虹鍐呭瓙鏁伴噺鏈�澶氬昂瀵告渶澶х殑鐜荤拑id,鏃�  鍒欒繑鍥炴壂鎻忔壂鍒扮殑鐜荤拑id杩涜鍑虹墖
                     tempGlassId = downStorageCageDetailsService.getGlassInfoMaxCount(glassId, offWorkStationList);
-                    isBind = Boolean.TRUE;
+                    isNeedBind = Boolean.TRUE;
                     break loop;
                 }
             }
@@ -409,16 +424,13 @@
                     DownGlassInfoDTO downGlassInfoDTO = downGlassInfoService.queryDownGlassMaxLayer(item.getFlowCardId());
                     if (null == downGlassInfoDTO) {
 //                    鍘嗗彶钀芥灦鐜荤拑鎸夌収鐩稿叧娴佺▼鍗″彇鏁版嵁搴撴湭鎵惧埌鏈�澶氱幓鐠冧俊鎭紝琛ㄦ槑褰撳墠娴佺▼鍗′笅鐨勬湁灞傜殑鐜荤拑鍧囨湭钀芥灦锛岀洿鎺ュ彲鍑哄綋鍓嶇幓鐠�
-                        log.info("");
-                        isBind = Boolean.FALSE;
                         tempGlassId = item.getGlassId();
+                        log.info("褰撳墠娴佺▼鍗′笉瀛樺湪钀芥灦鐨勭幓鐠冿紝鍙洿鎺ュ嚭鐗囪惤鏋讹紝鐜荤拑id:{}", tempGlassId);
                         break loop;
                     }
                     if (downGlassInfoDTO.getLayer().equals(downGlassInfoDTO.getLayer())) {
-                        log.info("褰撳墠鐜荤拑鐨勬祦绋嬪湪鏋跺瓙涓婅惤鏋舵渶澶�,鐩存帴鍑虹墖");
-                        //鏇存柊鐜荤拑鐘舵�侊紝鐢熸垚鍑虹墖浠诲姟
                         tempGlassId = item.getGlassId();
-                        isBind = Boolean.FALSE;
+                        log.info("褰撳墠鐜荤拑鐨勬祦绋嬪湪鏋跺瓙涓婅惤鏋舵渶澶�,鐩存帴鍑虹墖锛岀幓鐠僫d:{}", tempGlassId);
                         break loop;
                     }
                     Integer sequence = downGlassInfoService.queryMaxSequence(item.getFlowCardId(), item.getLayer());
@@ -427,10 +439,8 @@
                             .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;
+                        log.info("鐩稿悓娆″簭鐜荤拑瀵瑰簲涓婏紝鍙墽琛岃繘鐗囦换鍔★紝鐜荤拑id:{}", tempGlassId);
                         break loop;
                     }
                 }
@@ -445,7 +455,6 @@
                         List<DownStorageCageDetails> downStorageCageDetails = singleLayerMap.get(e.getFlowCardId() + e.getLayer());
                         if (CollectionUtils.isNotEmpty(downStorageCageDetails)) {
                             tempGlassId = downStorageCageDetails.get(0).getGlassId();
-                            isBind = Boolean.FALSE;
                             break;
                         }
                     }
@@ -457,12 +466,12 @@
             return Boolean.FALSE;
         } else {
             //鎸夌収鍑虹墖鐨勭幓鐠僫d鏇存柊绗煎唴鐨勭幓鐠冪姸鎬佷负宸插嚭鐗�
-            return generateDownGlassOutTask(tempGlassId, Const.GLASS_CACHE_TYPE_OUT, isBind, cageDetails, workList);
+            return generateDownGlassOutTask(tempGlassId, Const.GLASS_CACHE_TYPE_OUT, isNeedBind, cageDetails, workList);
         }
     }
 
     public Boolean generateDownGlassOutTask(String glassId, Integer taskType, Boolean
-            isBind, DownStorageCageDetails cageDetails, List<Integer> workList) {
+            isNeedBind, DownStorageCageDetails cageDetails, List<Integer> workList) {
         //鎸夌幓鐠僫d鑾峰彇鐜荤拑淇℃伅
         DownStorageCageDetails downStorageCageDetails = null;
         if (glassId.equals(cageDetails.getGlassId())) {
@@ -486,10 +495,10 @@
         }
 
         Integer endCell = null;
-        if (isBind) {
+        if (isNeedBind) {
             //鑾峰彇绌烘灦瀛愪俊鎭紝灏嗙┖鏋跺瓙淇℃伅缁戝畾娴佺▼鍗�
             DownWorkstation emptyDownWorkstation = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>()
-                    .isNull(DownWorkstation::getFlowCardId).in(DownWorkstation::getWorkstationId, workList).orderByDesc(DownWorkstation::getWorkstationId).last("limit 1"));
+                    .and(on -> on.isNull(DownWorkstation::getFlowCardId).or().eq(DownWorkstation::getFlowCardId, "")).in(DownWorkstation::getWorkstationId, workList).orderByDesc(DownWorkstation::getWorkstationId).last("limit 1"));
             if (null != emptyDownWorkstation) {
                 log.info("鑾峰彇鍒扮┖鏋跺瓙淇℃伅锛岀粦瀹氭祦绋嬪崱");
                 downWorkstationService.updateFlowCardIdAndCount(downStorageCageDetails.getFlowCardId(), emptyDownWorkstation.getWorkstationId(), downStorageCageDetails.getLayer());
@@ -515,7 +524,7 @@
         //鐢熸垚浠诲姟淇℃伅
         DownGlassInfo downGlassInfo = new DownGlassInfo();
         BeanUtils.copyProperties(downStorageCageDetails, downGlassInfo);
-        //todo锛氳惤鏋剁墖搴�
+        //钀芥灦鐗囧簭
         downGlassInfo.setSequence(downGlassInfoService.queryMaxSequence(downGlassInfo.getFlowCardId(), downGlassInfo.getLayer()));
         downGlassInfoService.save(downGlassInfo);
         //鐢熸垚浠诲姟淇℃伅

--
Gitblit v1.8.0