From 4e3b8155722b66e25df3c6fd42cc586b68dea391 Mon Sep 17 00:00:00 2001
From: zhoushihao <zsh19950802@163.com>
Date: 星期五, 06 六月 2025 13:55:39 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java |  403 +++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 289 insertions(+), 114 deletions(-)

diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java
index 0f4e52a..8cba008 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java
@@ -5,11 +5,13 @@
 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.conditions.update.UpdateWrapper;
 import com.kangaroohy.milo.model.ReadWriteEntity;
 import com.kangaroohy.milo.service.MiloService;
 import com.mes.common.config.Const;
-import com.mes.edgglasstaskqueueinfo.entity.EdgGlassTaskQueueInfo;
-import com.mes.edgglasstaskqueueinfo.service.EdgGlassTaskQueueInfoService;
+import com.mes.damage.service.DamageService;
+import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
+import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
 import com.mes.edgstoragecage.entity.EdgStorageCage;
 import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
 import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
@@ -24,15 +26,12 @@
 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 javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * @Author : zhoush
@@ -50,17 +49,10 @@
     @Autowired(required = false)
     MiloService miloService;
 
-
-//    @Resource(name = "cacheGlassStartCallback")
-//    SubscriptionCallback cacheGlassStartCallback;
-//
-//    @Resource(name = "cacheGlassTestCallback")
-//    SubscriptionCallback cacheGlassTestCallback;
-
     @Resource
     EdgStorageDeviceTaskService edgStorageDeviceTaskService;
-    @Resource
-    EdgGlassTaskQueueInfoService edgGlassTaskQueueInfoService;
+    @Autowired
+    EdgGlassTaskInfoService edgGlassTaskInfoService;
     @Resource
     GlassInfoService glassInfoService;
     @Resource
@@ -69,81 +61,98 @@
     EdgStorageCageService edgStorageCageService;
     @Resource
     EdgStorageDeviceTaskHistoryService edgStorageDeviceTaskHistoryService;
+    @Resource
+    DamageService damageService;
 
-    @Value("${mes.glassGap}")
+//    @Value("${mes.glassGap}")
     private int glassGap;
-    @Value("${mes.threshold}")
+    //    @Value("${mes.threshold}")
     private int threshold;
-    @Value("${mes.cellLength}")
+    //    @Value("${mes.cellLength}")
     private int cellLength;
+    //    @Value("${mes.ratio}")
+    private int ratio;
 
+    //    @Value("${mes.min.one.firstLength}")
+    private int minOneFirstLength;
+
+    //    @Value("${mes.min.one.secondLength}")
+    private int minOneSecondLength;
+
+    //    @Value("${mes.min.two.firstLength}")
+    private int minTwoFirstLength;
+
+    //    @Value("${mes.min.two.secondLength}")
+    private int minTwoSecondLength;
+
+    private String glassInIdOne = "";
+    private String glassInIdTwo = "";
     private String glassIdOne = "";
     private String glassIdTwo = "";
 
-//    @Scheduled(fixedDelay = Long.MAX_VALUE)
-//    public void startOneOpcTask() throws Exception {
-//        miloService.subscriptionFromOpcUa(Arrays.asList("mes.WL1.edg_storage_device_one_task[1].task_state"), cacheGlassStartCallback);
-//    }
-//
-//    @Scheduled(fixedDelay = Long.MAX_VALUE)
-//    public void startTwoOpcTask() throws Exception {
-//        miloService.subscriptionFromOpcUa(Arrays.asList("mes.WL2.edg_storage_device_two_task[1].task_state"), cacheGlassStartCallback);
-//    }
-
-    @Scheduled(fixedDelay = 1000)
+//    @Scheduled(fixedDelay = 1000)
     public void startOneOpcTask() {
         startOneOpcTaskChild(EDG_STORAGE_DEVICE_ONE_TASK, 1);
     }
 
-    @Scheduled(fixedDelay = 1000)
+    //    @Scheduled(fixedDelay = 1000)
     public void startTwoOpcTask() {
         startOneOpcTaskChild(EDG_STORAGE_DEVICE_TWO_TASK, 2);
     }
 
     private void startOneOpcTaskChild(String tableName, int device) {
         EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(tableName);
-        try {
-            if (task == null) {
-                log.info("浠诲姟琛ㄥ熀纭�鏁版嵁褰曞叆澶辫触锛岃妫�鏌ユ暟鎹槸鍚﹀綍鍏ユ垚鍔�");
-                return;
-            }
-            if (task.getTaskState() == 2) {
-                //闃叉鍑虹墖浠诲姟涓旂鍓嶆湁鐜荤拑鐨勬儏鍐碉紝灏嗚繘鐗噄d缃┖锛屽嵆鍑虹墖浠呰�冭檻绗煎唴鐨勭幓鐠�
-                task.setGlassIdIn("");
-            }
-            int request = task.getTaskState();
-            log.info("寮�濮嬫墽琛屼换鍔★紝浠诲姟璇蜂俊鎭负{}", task);
-            if (request == 0) {
-                log.info("鏈敹鍒颁换鍔¤姹傦紝缁撴潫鏈浠诲姟");
-            } else if (request == 1) {
-                //杩涚墖浠诲姟
-                log.info("杩涚墖浠诲姟锛氳繘鐗囩幓鐠僫d涓猴細{}", task.getGlassIdIn());
-                intoTask(task, tableName, device);
-            } else if (request == 2) {
-                //鍑虹墖浠诲姟
-                outTask(task, tableName, device);
-            } else if (request == 3) {
-                //鐩撮�氫换鍔�
-                if (!outTask(task, tableName, device)) {
-                    intoTask(task, tableName, device);
-                }
-            } else if (request == 4) {
-                log.info("灏嗗惎鍔ㄥ瓙鏀逛负0");
-                task.setTaskRunning(Const.GLASS_CACHE_TYPE_RUNNING);
-                edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
-            } else {
-                finishTask(task, tableName);
-            }
-        } catch (Exception e) {
-            log.info("鎵ц浠诲姟杩囩▼涓彂鐢熷紓甯革紝浠诲姟瀛梴}锛寋}", task.getTaskState(), e.getMessage());
-            log.info("灏嗗惎鍔ㄥ瓙鏀逛负0");
-            task.setTaskState(Const.GLASS_CACHE_TYPE_EMPTY);
-            edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
+//        try {
+        if (task == null) {
+            log.info("浠诲姟琛ㄥ熀纭�鏁版嵁褰曞叆澶辫触锛岃妫�鏌ユ暟鎹槸鍚﹀綍鍏ユ垚鍔�");
+            return;
         }
+        if (task.getTaskState() == 2) {
+            //闃叉鍑虹墖浠诲姟涓旂鍓嶆湁鐜荤拑鐨勬儏鍐碉紝灏嗚繘鐗噄d缃┖锛屽嵆鍑虹墖浠呰�冭檻绗煎唴鐨勭幓鐠�
+            task.setGlassIdIn("");
+        }
+        int request = task.getTaskState();
+        int taskRunning = task.getTaskRunning();
+        log.info("寮�濮嬫墽琛屼换鍔★紝浠诲姟璇蜂俊鎭负{}", task);
+        if (request == 0) {
+            log.info("璁惧锛歿}鐘舵�侊細{}", device, request);
+            log.info("鏈敹鍒颁换鍔¤姹傦紝缁撴潫鏈浠诲姟");
+        } else if (request == 1 && taskRunning == 0) {
+            //杩涚墖浠诲姟
+            log.info("璁惧锛歿}鐘舵�侊細{}", device, request);
+            log.info("杩涚墖浠诲姟锛氳繘鐗囩幓鐠僫d涓猴細{}", task.getGlassIdIn());
+            intoTask(task, tableName, device);
+        } else if (request == 2 && taskRunning == 0) {
+            //鍑虹墖浠诲姟
+            outTask(task, tableName, device);
+        } else if (request == 3 && taskRunning == 0) {
+            //鐩撮�氫换鍔�
+            log.info("璁惧锛歿}鐘舵�侊細{}", device, request);
+            if (!outTask(task, tableName, device)) {
+                intoTask(task, tableName, device);
+            }
+        } else if (request == 4) {
+            log.info("璁惧锛歿}鐘舵�侊細{}", device, request);
+            log.info("灏嗗惎鍔ㄥ瓙鏀逛负4");
+            task.setTaskRunning(Const.GLASS_CACHE_TYPE_RUNNING);
+            edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
+        } else if (request == 5) {
+            log.info("璁惧锛歿}鐘舵�侊細{}", device, request);
+            finishTask(task, tableName);
+        } else {
+            log.info("鐜荤拑寮傚父澶勭悊");
+            damageTask(task, tableName);
+        }
+//        } catch (Exception e) {
+//            log.info("鎵ц浠诲姟杩囩▼涓彂鐢熷紓甯革紝浠诲姟瀛梴}锛寋}", task.getTaskState(), e.getMessage());
+//            log.info("灏嗗惎鍔ㄥ瓧鏀逛负0");
+//            task.setTaskRunning(Const.GLASS_CACHE_TYPE_EMPTY);
+//            edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
+//        }
     }
 
 
-    @Scheduled(fixedDelay = 1000)
+    //    @Scheduled(fixedDelay = 1000)
     public void edgOneOpcTask() throws Exception {
         EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(EDG_STORAGE_DEVICE_ONE_TASK);
         String glassId = task.getGlassId();
@@ -154,7 +163,7 @@
         edgTaskChild(glassId, 1);
     }
 
-    @Scheduled(fixedDelay = 1000)
+    //    @Scheduled(fixedDelay = 1000)
     public void edgTwoOpcTask() throws Exception {
         EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(EDG_STORAGE_DEVICE_TWO_TASK);
         String glassId = task.getGlassId();
@@ -182,11 +191,12 @@
         miloService.writeToOpcUa(list);
         miloService.writeToOpcWord(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".thickness", (int) glassInfo.getThickness() * 10));
         //淇敼纾ㄨ竟瀵瑰垪涓殑纾ㄨ竟绾胯矾鍙婄姸鎬�
-        edgGlassTaskQueueInfoService.update(new LambdaUpdateWrapper<EdgGlassTaskQueueInfo>()
-                .set(EdgGlassTaskQueueInfo::getLine, cell)
-                .set(EdgGlassTaskQueueInfo::getState, Const.EDG_GLASS_START)
-                .eq(EdgGlassTaskQueueInfo::getGlassId, glassId)
-                .eq(EdgGlassTaskQueueInfo::getState, Const.EDG_GLASS_BEFORE));
+        edgGlassTaskInfoService.update(new LambdaUpdateWrapper<EdgGlassTaskInfo>()
+                .set(EdgGlassTaskInfo::getLine, cell)
+                .set(EdgGlassTaskInfo::getState, Const.EDG_GLASS_START)
+                .set(EdgGlassTaskInfo::getUpdateTime, new Date())
+                .eq(EdgGlassTaskInfo::getGlassId, glassId)
+                .eq(EdgGlassTaskInfo::getState, Const.EDG_GLASS_BEFORE));
         if (cell == 1) {
             glassIdOne = glassId;
         } else {
@@ -196,10 +206,33 @@
     }
 
     private boolean intoTask(EdgStorageDeviceTask task, String tableName, int deviceId) {
+        Date startDate = new Date();
+        log.info("寮�濮嬫墽琛岃繘鐗囦换鍔★紝浠诲姟淇℃伅涓猴細{},琛ㄥ悕涓猴細{},璁惧id:{},寮�濮嬫椂闂达細{}", task, tableName, deviceId, startDate);
         //鑾峰彇鐜荤拑鐨勫熀鏈俊鎭�
         GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn()));
         if (null == glassInfo) {
             log.info("杩涚墖鐜荤拑淇℃伅涓嶅瓨鍦紝鐜荤拑id:{}", task.getGlassIdIn());
+            Date endDate = new Date();
+            log.info("缁撴潫杩涚墖浠诲姟璁惧涓簕}锛岀粨鏉熸椂闂翠负锛歿}锛屽叡鑰楁椂锛歿}ms", deviceId, endDate, endDate.getTime() - startDate.getTime());
+            return Boolean.FALSE;
+        }
+        if (glassInIdOne.equals(task.getGlassIdIn()) || glassInIdTwo.equals(task.getGlassIdIn())) {
+            log.info("鐜荤拑id涓庝笂娆$浉鍚岋紝绂佹杩涚墖");
+            Date endDate = new Date();
+            log.info("缁撴潫杩涚墖浠诲姟璁惧涓簕}锛岀粨鏉熸椂闂翠负锛歿}锛屽叡鑰楁椂锛歿}ms", deviceId, endDate, endDate.getTime() - startDate.getTime());
+
+            return Boolean.FALSE;
+        }
+        int firstLength = minTwoFirstLength;
+        int secondLength = minTwoSecondLength;
+        if (deviceId == 1) {
+            firstLength = minOneFirstLength;
+            secondLength = minOneSecondLength;
+        }
+        if (Math.max(glassInfo.getWidth(), glassInfo.getHeight()) < firstLength || Math.min(glassInfo.getWidth(), glassInfo.getHeight()) < secondLength) {
+            log.info("杩涚墖鐜荤拑灏哄灏忎簬{}*{}锛岀姝㈣繘绗肩幓鐠僫d:{}锛屽昂瀵镐负{}銆亄}", firstLength, secondLength, task.getGlassIdIn(), glassInfo.getWidth(), glassInfo.getHeight());
+            Date endDate = new Date();
+            log.info("缁撴潫杩涚墖浠诲姟璁惧涓簕}锛岀粨鏉熸椂闂翠负锛歿}锛屽叡鑰楁椂锛歿}ms", deviceId, endDate, endDate.getTime() - startDate.getTime());
             return Boolean.FALSE;
         }
         //鑾峰彇褰撳墠杩涚墖鐜荤拑id鍜岃繘鐗囨牸瀛�  鐩稿悓灏哄鍙互鏀句笅鐨勬牸瀛�
@@ -211,12 +244,10 @@
                     .eq(EdgStorageCage::getDeviceId, deviceId)
                     .eq(EdgStorageCage::getEnableState, Const.SLOT_ON)
                     .ge(EdgStorageCage::getRemainWidth, Math.max(glassInfo.getWidth(), glassInfo.getHeight())).last("order by abs(slot - " + task.getCurrentCell() + ")"));
-//            //鐩撮�氫换鍔�
-//            if (flag && CollectionUtil.isNotEmpty(emptyList)) {
-//                return emptyList.get(0);
-//            }
             if (CollectionUtil.isEmpty(storageCageList) || storageCageList.size() == 1) {
                 log.info("娌℃湁澶氫綑鐨勭┖鏍煎瓙");
+                Date endDate = new Date();
+                log.info("缁撴潫杩涚墖浠诲姟璁惧涓簕}锛岀粨鏉熸椂闂翠负锛歿}锛屽叡鑰楁椂锛歿}ms", deviceId, endDate, endDate.getTime() - startDate.getTime());
                 return Boolean.FALSE;
             }
             edgStorageCage = storageCageList.get(0);
@@ -233,14 +264,27 @@
         task.setStartCell(edgStorageCage.getSlot());
         task.setTaskRunning(Const.GLASS_CACHE_TYPE_IN);
         edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
-        saveHistoryTask(task);
+        saveHistoryTask(task, deviceId);
+        //璁板綍杩涚墖浠诲姟鐨勭幓鐠僫d鐢ㄤ簬涓嬫浠诲姟鐨勬瘮杈冿紝闃叉鍚屼竴鍧楃幓鐠冮噸澶嶆墽琛�
+        if (deviceId == 1) {
+            glassInIdOne = task.getGlassIdIn();
+        } else {
+            glassInIdTwo = task.getGlassIdIn();
+        }
+        edgStorageCageService.update(new UpdateWrapper<EdgStorageCage>()
+                .setSql("remain_width = remain_width -" + (glassGap + Math.max(details.getWidth(), details.getHeight()))).eq("device_id", deviceId)
+                .eq("slot", task.getStartCell()));
+        Date endDate = new Date();
+        log.info("缁撴潫杩涚墖浠诲姟璁惧涓簕}锛岀粨鏉熸椂闂翠负锛歿}锛屽叡鑰楁椂锛歿}ms", deviceId, endDate, endDate.getTime() - startDate.getTime());
         return Boolean.TRUE;
     }
 
     private boolean outTask(EdgStorageDeviceTask task, String tableName, int deviceId) {
+        Date startDate = new Date();
+        log.info("寮�濮嬫墽琛屽嚭鐗�/鐩撮�氫换鍔★紝浠诲姟淇℃伅涓猴細{},琛ㄥ悕涓猴細{},璁惧id:{},寮�濮嬫椂闂达細{}", task, tableName, deviceId, startDate);
         EdgStorageCageDetails edgStorageCageDetails = null;
         //绗煎唴鏄増鍥剧浉宸槸鍚﹁秴杩囬槇鍊�
-        boolean flag = queryMaxMinDiff(threshold);
+        boolean flag = queryMaxMinDiffByDevice(threshold, deviceId);
         if (flag) {
             EdgStorageCageDetails minEdgDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
                     .inSql(EdgStorageCageDetails::getSlot, "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON)
@@ -288,7 +332,7 @@
             if (null != edgeData) {
                 GlassInfo glassOutInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, edgeData.getGlassIdOut()));
                 //绗煎唴鐨勭幓鐠冪殑灏哄鏄惁鍜屼笂涓�娆′换鍔′竴鑷�
-                edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), glassOutInfo.getWidth(), glassOutInfo.getHeight());
+                edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), glassOutInfo.getWidth(), glassOutInfo.getHeight(), 0, 0);
                 if (null == edgStorageCageDetails && StringUtils.isNotBlank(task.getGlassIdIn())) {
                     GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
                             .eq(GlassInfo::getGlassId, task.getGlassIdIn())
@@ -302,11 +346,21 @@
             }
         }
         if (null == edgStorageCageDetails) {
-            edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), 0, 0);
+            edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), 0, 0, 0, 0);
         }
         if (edgStorageCageDetails == null && StringUtils.isNotBlank(task.getGlassIdIn())) {
             //鍜屼笂娆′换鍔′笉瀛樺湪鐩稿悓灏哄
+            int firstLength = minTwoFirstLength;
+            int secondLength = minTwoSecondLength;
+            if (deviceId == 1) {
+                firstLength = minOneFirstLength;
+                secondLength = minOneSecondLength;
+            }
             GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn()));
+            if (Math.max(glassInInfo.getWidth(), glassInInfo.getHeight()) < firstLength || Math.min(glassInInfo.getWidth(), glassInInfo.getHeight()) < secondLength) {
+                log.info("鐩撮�氫换鍔¤繘鐗囩幓鐠冨昂瀵稿皬浜巤}*{}", firstLength, secondLength);
+                return Boolean.FALSE;
+            }
             edgStorageCageDetails = new EdgStorageCageDetails();
             BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails);
         }
@@ -322,6 +376,10 @@
                 return Boolean.FALSE;
             }
             log.info("5銆佺洿閫氫换鍔�,灏嗙幓鐠冧俊鎭彃鍏ュ崸寮忕悊鐗囩,褰撳墠鐜荤拑淇℃伅:{}", edgStorageCageDetails);
+            if (glassInIdOne.equals(task.getGlassIdIn()) || glassInIdTwo.equals(task.getGlassIdIn())) {
+                log.info("鐜荤拑id涓庝笂娆$浉鍚岋紝绂佹杩涚墖");
+                return Boolean.FALSE;
+            }
             //鐜荤拑淇℃伅鏇挎崲
             String glassIdChange = queryAndChangeGlass(glassId);
             //澶勭悊鍦ㄥ崸鐞嗗唴鐨勭幓鐠冧俊鎭細绗煎唴鐨勬暟鎹鐞�
@@ -372,44 +430,107 @@
         task.setTaskRunning(taskType);
 
         edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
-        saveHistoryTask(task);
+        saveHistoryTask(task, deviceId);
+        //璁板綍鐩撮�氫换鍔$殑鐜荤拑id鐢ㄤ簬涓嬫浠诲姟鐨勬瘮杈冿紝闃叉鍚屼竴鍧楃幓鐠冮噸澶嶆墽琛�
+        if (3 == task.getTaskState()) {
+            if (deviceId == 1) {
+                glassInIdOne = edgStorageCageDetails.getGlassId();
+            } else {
+                glassInIdTwo = edgStorageCageDetails.getGlassId();
+            }
+        }
         //鏇存柊璇︽儏琛ㄤ换鍔″嚭鐗囦腑
         edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>()
                 .set(EdgStorageCageDetails::getState, Const.GLASS_STATE_OUT)
                 .eq(EdgStorageCageDetails::getGlassId, edgStorageCageDetails.getGlassId()));
         //纾ㄨ竟瀵瑰垪琛ㄦ柊澧炰竴鏉℃暟鎹�
-        EdgGlassTaskQueueInfo edgInfo = new EdgGlassTaskQueueInfo();
-        BeanUtils.copyProperties(task, edgInfo);
-        edgInfo.setGlassId(edgStorageCageDetails.getGlassId());
-        edgInfo.setCreateTime(new Date());
-        edgInfo.setWidth((int) edgStorageCageDetails.getWidth());
-        edgInfo.setHeight((int) edgStorageCageDetails.getHeight());
-        edgInfo.setThickness((int) edgStorageCageDetails.getThickness());
-        edgInfo.setState(Const.EDG_GLASS_BEFORE);
-        edgGlassTaskQueueInfoService.save(edgInfo);
+        saveGlassSize(edgStorageCageDetails);
+//        edgStorageCageService.update(new UpdateWrapper<EdgStorageCage>()
+//                .setSql("remain_width = remain_width +" + Math.max(edgStorageCageDetails.getWidth(), edgStorageCageDetails.getHeight()))
+//                .eq("device_id", deviceId)
+//                .eq("slot", task.getStartCell()));
+        Date endDate = new Date();
+        log.info("缁撴潫鍑虹墖/鐩撮�氫换鍔¤澶囦负{}锛岀粨鏉熸椂闂翠负锛歿}锛屽叡鑰楁椂锛歿}ms", deviceId, endDate, endDate.getTime() - startDate.getTime());
         return Boolean.TRUE;
     }
 
     private boolean finishTask(EdgStorageDeviceTask task, String tableName) {
-        log.info("褰撳墠浠诲姟淇℃伅涓猴細{}", task);
-        if (task.getTaskState() <= 4 && task.getTaskRunning() == 0) {
+        if (task.getTaskState() <= 4) {
             log.info("鏈夋鍦ㄦ墽琛岀殑浠诲姟鎴栬繖浠诲姟宸叉墽琛屼换鍔$姸鎬亄}锛屼换鍔″惎鍔ㄦ儏鍐祘}锛岀粨鏉�", task.getTaskState(), task.getTaskRunning());
             return Boolean.FALSE;
         }
+        Date startDate = new Date();
+        log.info("寮�濮嬫墽琛屽畬鎴愪换鍔″悗娓呴櫎鍔ㄤ綔锛屼换鍔′俊鎭负锛歿},琛ㄥ悕涓猴細{},寮�濮嬫椂闂达細{}", task, tableName, startDate);
         Integer cell = task.getStartCell();
-        Integer state = task.getTaskState();
+        task.setTaskRunning(Const.GLASS_CACHE_TYPE_EMPTY);
+        task.setGlassIdOut("");
+        task.setStartCell(0);
+        int device = tableName.equals("edg_storage_device_one_task") ? 1 : 2;
+        EdgStorageDeviceTaskHistory taskHistory = edgStorageDeviceTaskHistoryService.getOne(new LambdaQueryWrapper<EdgStorageDeviceTaskHistory>()
+                .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW)
+                .eq(EdgStorageDeviceTaskHistory::getDeviceId, device)
+                .orderByDesc(EdgStorageDeviceTaskHistory::getCreateTime).last("limit 1"));
+        //濡傛灉浠诲姟绫诲瀷涓�1锛�3锛屽皢鍒囧壊瀹屾垚鐨勭幓鐠冭嚜鍔ㄦ姤宸�
+        if (Const.GLASS_CACHE_TYPE_IN_ALL.contains(taskHistory.getTaskType())) {
+            damageService.autoSubmitReport(taskHistory.getGlassIdIn(), taskHistory.getDeviceId(), "鍒囧壊", "杩涘崸鐞�", 1);
+        }
+        updateCellRemainWidth(cell, device, taskHistory);
+        edgStorageDeviceTaskHistoryService.update(new LambdaUpdateWrapper<EdgStorageDeviceTaskHistory>()
+                .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW)
+                .eq(EdgStorageDeviceTaskHistory::getDeviceId, device)
+                .set(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_SUCCESS)
+        );
+        //鏈�鍚庢洿鏂颁换鍔★紝淇濊瘉浠诲姟鍓嶇殑鍔ㄤ綔閮藉仛瀹�
+        edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
+        Date endDate = new Date();
+        log.info("缁撴潫瀹屾垚浠诲姟鍚庢竻闄ゅ姩浣滐紝琛ㄥ悕涓猴細{},缁撴潫鏃堕棿涓猴細{}锛屽叡鑰楁椂锛歿}ms", tableName, endDate, endDate.getTime() - startDate.getTime());
+        return Boolean.TRUE;
+    }
+
+    private boolean damageTask(EdgStorageDeviceTask task, String tableName) {
+        if (task.getTaskState() <= 5) {
+            log.info("浠诲姟鏈彂鐢熷紓甯告竻绌猴紝浠诲姟缁撴潫锛岀數姘旂姸鎬亄},mes鐘舵�亄}", task.getTaskState(), task.getTaskRunning());
+            return Boolean.FALSE;
+        }
+        Date startDate = new Date();
+        log.info("寮�濮嬫墽琛屽紓甯稿鐞嗕换鍔″悗娓呴櫎鍔ㄤ綔锛屼换鍔′俊鎭负锛歿},琛ㄥ悕涓猴細{},寮�濮嬫椂闂达細{}", task, tableName, startDate);
+        int device = tableName.equals("edg_storage_device_one_task") ? 1 : 2;
+        EdgStorageDeviceTaskHistory taskHistory = edgStorageDeviceTaskHistoryService.getOne(new LambdaQueryWrapper<EdgStorageDeviceTaskHistory>()
+                .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW)
+                .eq(EdgStorageDeviceTaskHistory::getDeviceId, device)
+                .orderByDesc(EdgStorageDeviceTaskHistory::getCreateTime).last("limit 1"));
+        Integer cell = taskHistory.getStartCell();
+        Integer taskType = taskHistory.getTaskType();
+        if (Const.GLASS_CACHE_TYPE_IN_ALL.contains(taskType)) {
+            String glassId = taskHistory.getGlassIdIn();
+            edgStorageCageDetailsService.remove(new LambdaQueryWrapper<EdgStorageCageDetails>()
+                    .eq(EdgStorageCageDetails::getDeviceId, device)
+                    .eq(EdgStorageCageDetails::getSlot, cell)
+                    .eq(EdgStorageCageDetails::getGlassId, glassId));
+        } else {
+            String glassId = taskHistory.getGlassIdOut();
+            edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>()
+                    .set(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                    .eq(EdgStorageCageDetails::getDeviceId, device)
+                    .eq(EdgStorageCageDetails::getSlot, cell)
+                    .eq(EdgStorageCageDetails::getGlassId, glassId));
+        }
+
+        updateCellRemainWidth(cell, device, taskHistory);
+        edgStorageDeviceTaskHistoryService.update(new LambdaUpdateWrapper<EdgStorageDeviceTaskHistory>()
+                .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW)
+                .eq(EdgStorageDeviceTaskHistory::getDeviceId, device)
+                .set(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_FAILURE)
+        );
+        //鏈�鍚庢洿鏂颁换鍔★紝淇濊瘉浠诲姟鍓嶇殑鍔ㄤ綔閮藉仛瀹�
         task.setTaskRunning(Const.GLASS_CACHE_TYPE_EMPTY);
         task.setGlassIdOut("");
         task.setStartCell(0);
         edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
-        edgStorageDeviceTaskHistoryService.update(new LambdaUpdateWrapper<EdgStorageDeviceTaskHistory>()
-                .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW)
-                .set(EdgStorageDeviceTaskHistory::getTaskState,
-                        Const.GLASS_CACHE_TYPE_FINISH.equals(state) ? Const.RAW_GLASS_TASK_SUCCESS : Const.RAW_GLASS_TASK_FAILURE)
-        );
-        int device = tableName.equals("edg_storage_device_one_task") ? 1 : 2;
-        updateCellRemainWidth(cell, device);
+        Date endDate = new Date();
+        log.info("瀹屾垚鎵ц寮傚父澶勭悊浠诲姟鍚庢竻闄ゅ姩浣滐紝琛ㄥ悕涓猴細{},缁撴潫鏃堕棿涓猴細{}锛屽叡鑰楁椂锛歿}ms", tableName, endDate, endDate.getTime() - startDate.getTime());
         return Boolean.TRUE;
+
     }
 
     /**
@@ -435,17 +556,47 @@
                         "where engineer_id = '" + glassInfo.getEngineerId() + "' and width = " + glassInfo.getWidth() + " and height = " + glassInfo.getHeight()
                         + " and state != 100")
                 .orderByAsc(GlassInfo::getTemperingLayoutId)
-                .orderBy(Boolean.TRUE, Boolean.TRUE, GlassInfo::getTemperingFeedSequence)
+                .orderByAsc(GlassInfo::getTemperingFeedSequence)
                 .last("Limit 1");
         GlassInfo swapGlassInfo = glassInfoService.getOne(queryWrapper);
         if (swapGlassInfo != null && !glassInfo.getGlassId().equals(swapGlassInfo.getGlassId())) {
-            String swapGlassId = swapGlassInfo.getGlassId();
-            log.info("灏嗙幓鐠儃}鍜岀幓鐠儃}锛屼俊鎭簰鎹�,杩涚幓鐠� {}", glassInfo, swapGlassInfo, swapGlassInfo);
-            swapGlassInfo.setGlassId(glassId);
-            glassInfo.setGlassId(swapGlassId);
+            //寰呮浛鎹㈢殑鐜荤拑淇℃伅
+            Integer ishorizontal = glassInfo.getIshorizontal();
+            Integer temperingLayoutId = glassInfo.getTemperingLayoutId();
+            Integer temperingFeedSequence = glassInfo.getTemperingFeedSequence();
+            Integer xCoordinate = glassInfo.getXCoordinate();
+            Integer yCoordinate = glassInfo.getYCoordinate();
+            double angle = glassInfo.getAngle();
+            Integer ruleId = glassInfo.getRuleId();
+            //鏇挎崲鍚庣殑鐜荤拑淇℃伅
+            Integer swapIshorizontal = swapGlassInfo.getIshorizontal();
+            Integer swapTemperingLayoutId = swapGlassInfo.getTemperingLayoutId();
+            Integer swapTemperingFeedSequence = swapGlassInfo.getTemperingFeedSequence();
+            Integer swapXCoordinate = swapGlassInfo.getXCoordinate();
+            Integer swapYCoordinate = swapGlassInfo.getYCoordinate();
+            double swapAngle = swapGlassInfo.getAngle();
+            Integer swapRuleId = swapGlassInfo.getRuleId();
+            //鏇挎崲鐜荤拑淇℃伅
+            glassInfo.setIshorizontal(swapIshorizontal);
+            glassInfo.setTemperingLayoutId(swapTemperingLayoutId);
+            glassInfo.setTemperingFeedSequence(swapTemperingFeedSequence);
+            glassInfo.setXCoordinate(swapXCoordinate);
+            glassInfo.setYCoordinate(swapYCoordinate);
+            glassInfo.setAngle(swapAngle);
+            glassInfo.setRuleId(swapRuleId);
+
+            swapGlassInfo.setIshorizontal(ishorizontal);
+            swapGlassInfo.setTemperingLayoutId(temperingLayoutId);
+            swapGlassInfo.setTemperingFeedSequence(temperingFeedSequence);
+            swapGlassInfo.setXCoordinate(xCoordinate);
+            swapGlassInfo.setYCoordinate(yCoordinate);
+            swapGlassInfo.setAngle(angle);
+            swapGlassInfo.setRuleId(ruleId);
+
+            log.info("灏嗙幓鐠儃}鍜岀幓鐠儃}锛屼俊鎭簰鎹�(鍘熺墖搴忓彿鍙婂潗鏍囬櫎澶�),杩涚幓鐠� {}", glassInfo, swapGlassInfo, swapGlassInfo);
             glassInfoService.updateById(swapGlassInfo);
             glassInfoService.updateById(glassInfo);
-            return swapGlassId;
+            return swapGlassInfo.getGlassId();
         }
         return "";
     }
@@ -498,11 +649,12 @@
      *
      * @return
      */
-    public boolean queryMaxMinDiff(int threshold) {
+    public boolean queryMaxMinDiffByDevice(int threshold, int deviceId) {
         //鑾峰彇绗煎瓙鍐呮渶澶х増鍥緄d鍜屾渶灏忕増鍥緄d鎻掑�硷紝鍒ゆ柇鏄惁澶т簬闃堝�硷紝澶т簬闃堝�肩洿鎺ュ嚭鏈�灏忕増鍥剧幓鐠�
         QueryWrapper<EdgStorageCageDetails> queryWrapper = new QueryWrapper<>();
         queryWrapper.select("max(tempering_layout_id)-min(tempering_layout_id) as diff")
                 .eq("state", Const.GLASS_STATE_IN)
+                .eq("device_id", deviceId)
                 .inSql("slot", "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON);
         List<Object> list = edgStorageCageDetailsService.listObjs(queryWrapper);
         //鑾峰彇绗煎唴鐜荤拑鐗堝浘宸�兼槸鍚﹀ぇ浜庨槇鍊�
@@ -514,29 +666,52 @@
         }
     }
 
-    public boolean saveHistoryTask(EdgStorageDeviceTask task) {
+    public boolean saveHistoryTask(EdgStorageDeviceTask task, int deviceId) {
         EdgStorageDeviceTaskHistory taskHistory = new EdgStorageDeviceTaskHistory();
         BeanUtils.copyProperties(task, taskHistory);
         taskHistory.setTaskType(task.getTaskRunning());
         taskHistory.setCreateTime(new Date());
         taskHistory.setTaskState(Const.RAW_GLASS_TASK_NEW);
+        taskHistory.setDeviceId(deviceId);
         edgStorageDeviceTaskHistoryService.save(taskHistory);
         return Boolean.TRUE;
     }
 
-    private boolean updateCellRemainWidth(int slot, int device) {
+    public boolean updateCellRemainWidth(int slot, int device, EdgStorageDeviceTaskHistory taskHistory) {
         List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(new LambdaQueryWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getSlot, slot)
                 .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN));
-        List<Integer> slotList = new ArrayList<>();
+        int remainWidth = cellLength;
         if (CollectionUtil.isNotEmpty(list)) {
-            slotList = list.stream().map(EdgStorageCageDetails::getSlot).distinct().collect(Collectors.toList());
+            if (2 == taskHistory.getTaskType()) {
+                remainWidth = 0;
+            } else {
+                for (EdgStorageCageDetails item : list) {
+                    remainWidth = remainWidth - glassGap - (int) Math.max(item.getWidth(), item.getHeight());
+                }
+                if (remainWidth <= 0) {
+                    remainWidth = 0;
+                }
+            }
         }
-        list.removeAll(slotList);
         edgStorageCageService.update(new LambdaUpdateWrapper<EdgStorageCage>().
-                set(EdgStorageCage::getRemainWidth, cellLength).eq(EdgStorageCage::getSlot, slot).eq(EdgStorageCage::getDeviceId, device));
+                set(EdgStorageCage::getRemainWidth, remainWidth).eq(EdgStorageCage::getSlot, slot).eq(EdgStorageCage::getDeviceId, device));
         return Boolean.TRUE;
     }
 
+    private boolean saveGlassSize(EdgStorageCageDetails glassInfo) {
+        EdgGlassTaskInfo edgGlassTaskInfo = new EdgGlassTaskInfo();
+        BeanUtils.copyProperties(glassInfo, edgGlassTaskInfo);
+        edgGlassTaskInfo.setHeight((int) (glassInfo.getHeight() * ratio));
+        edgGlassTaskInfo.setWidth((int) (glassInfo.getWidth() * ratio));
+        edgGlassTaskInfo.setThickness((int) (glassInfo.getThickness() * ratio));
+        edgGlassTaskInfo.setState(Const.EDG_GLASS_BEFORE);
+        edgGlassTaskInfo.setCreateTime(new Date());
+        edgGlassTaskInfo.setUpdateTime(new Date());
+        //鍏堝皢鍘嗗彶瀵瑰垪琛ㄤ腑鏈幓鐠冪殑鏁版嵁鍒犻櫎锛岄噸鏂版柊澧炰竴浠芥渶鏂扮殑鏁版嵁
+        edgGlassTaskInfoService.remove(new LambdaQueryWrapper<EdgGlassTaskInfo>().eq(EdgGlassTaskInfo::getGlassId, glassInfo.getGlassId()));
+        return edgGlassTaskInfoService.save(edgGlassTaskInfo);
+    }
+
     private ReadWriteEntity generateReadWriteEntity(String identifier, Object value) {
         return ReadWriteEntity.builder()
                 .identifier(identifier)

--
Gitblit v1.8.0