From f68d3c71819feb59e7a227a5d992b059b900916c Mon Sep 17 00:00:00 2001
From: ZengTao <2773468879@qq.com>
Date: 星期五, 28 三月 2025 08:28:26 +0800
Subject: [PATCH] 修改报表,界面添加查询流程卡个数,调整推送数据到前端的间隔

---
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java |  369 +++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 279 insertions(+), 90 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 0211d1e..66371a9 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,8 +5,11 @@
 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.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.edgstoragecage.entity.EdgStorageCage;
 import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
 import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
@@ -26,6 +29,8 @@
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -37,10 +42,24 @@
 @Slf4j
 public class OpcCacheGlassTask {
 
+    private static final String EDG_STORAGE_DEVICE_ONE_TASK = "edg_storage_device_one_task";
+
+    private static final String EDG_STORAGE_DEVICE_TWO_TASK = "edg_storage_device_two_task";
+
     @Autowired(required = false)
     MiloService miloService;
+
+
+//    @Resource(name = "cacheGlassStartCallback")
+//    SubscriptionCallback cacheGlassStartCallback;
+//
+//    @Resource(name = "cacheGlassTestCallback")
+//    SubscriptionCallback cacheGlassTestCallback;
+
     @Resource
     EdgStorageDeviceTaskService edgStorageDeviceTaskService;
+    @Resource
+    EdgGlassTaskQueueInfoService edgGlassTaskQueueInfoService;
     @Resource
     GlassInfoService glassInfoService;
     @Resource
@@ -52,78 +71,130 @@
 
     @Value("${mes.glassGap}")
     private int glassGap;
+    @Value("${mes.threshold}")
+    private int threshold;
     @Value("${mes.cellLength}")
     private int cellLength;
 
-    @Value("${mes.threshold}")
-    private int threshold;
-//    @Autowired
-//    MPJBaseService edgStorageDeviceTaskService;
-//
-//    @Autowired
-//    SubscriptionCallback cacheGlassSubscriptionCallback;
+    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 startOpcTask() throws Exception {
-//        miloService.subscriptionFromOpcUa(Arrays.asList("my.device.x1", "my.device.x2"), cacheGlassSubscriptionCallback);
+//    public void startTwoOpcTask() throws Exception {
+//        miloService.subscriptionFromOpcUa(Arrays.asList("mes.WL2.edg_storage_device_two_task[1].task_state"), cacheGlassStartCallback);
 //    }
 
-    @Scheduled(fixedDelay = 1000)
-    public void startOpcTask() throws Exception {
-        int request = 1;
-//        鑾峰彇绗煎唴鐜荤拑淇℃伅
-        taskByDevice();
+//    @Scheduled(fixedDelay = 1000)
+    public void startOneOpcTask() {
+        startOneOpcTaskChild(EDG_STORAGE_DEVICE_ONE_TASK, 1);
     }
 
-    @Scheduled(fixedDelay = 1000)
-    public void finishOpcTask() throws Exception {
-        EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage("edg_storage_device_one_task");
-        if (task == null) {
-            log.info("浠诲姟琛ㄥ熀纭�鏁版嵁褰曞叆澶辫触锛岃妫�鏌ユ暟鎹槸鍚﹀綍鍏ユ垚鍔�");
-            return;
-        }
-        if (task.getTaskState() <= 3) {
-            log.info("涓嶅瓨鍦ㄦ湭瀹屾垚鐨勪换鍔�");
-            return;
-        }
-        Integer cell = task.getStartCell();
-        Integer state = task.getTaskState();
-        task.setTaskRunning(Const.GLASS_CACHE_TYPE_EMPTY);
-        task.setTaskState(Const.GLASS_CACHE_TYPE_EMPTY);
-        task.setStartCell(-1);
-        edgStorageDeviceTaskService.updateTaskMessage("edg_storage_device_one_task", task);
-        edgStorageDeviceTaskHistoryService.update(new LambdaUpdateWrapper<EdgStorageDeviceTaskHistory>()
-                .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW)
-                .set(EdgStorageDeviceTaskHistory::getTaskState,
-                        Const.GLASS_CACHE_TYPE_RUNNING.equals(state) ? Const.RAW_GLASS_TASK_SUCCESS : Const.RAW_GLASS_TASK_FAILURE)
-        );
-        updateCellRemainWidth(cell);
+//    @Scheduled(fixedDelay = 1000)
+    public void startTwoOpcTask() {
+        startOneOpcTaskChild(EDG_STORAGE_DEVICE_TWO_TASK, 2);
     }
 
-    private void taskByDevice() throws Exception {
-        EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage("edg_storage_device_one_task");
-        if (task == null) {
-            log.info("浠诲姟琛ㄥ熀纭�鏁版嵁褰曞叆澶辫触锛岃妫�鏌ユ暟鎹槸鍚﹀綍鍏ユ垚鍔�");
+    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);
+        }
+    }
+
+
+//    @Scheduled(fixedDelay = 1000)
+    public void edgOneOpcTask() throws Exception {
+        EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(EDG_STORAGE_DEVICE_ONE_TASK);
+        String glassId = task.getGlassId();
+        if (StringUtils.isBlank(glassId) || glassId.equals(glassIdOne)) {
+            log.info("{}鍙风嚎纾ㄨ竟鍓嶇幓鐠冩湭灏变綅锛岀粨鏉熸湰娆′换鍔�", 1);
             return;
         }
-        int request = task.getTaskState();
-        if (request == 0) {
-            log.info("鏈敹鍒颁换鍔¤姹傦紝缁撴潫鏈浠诲姟");
-        } else if (request == 1) {
-            //杩涚墖浠诲姟
-            intoTask(task);
-        } else if (request == 2) {
-            //鍑虹墖浠诲姟
-            outTask(task);
-        } else if (request == 3) {
-            //todo:鐩撮�氫换鍔�
+        edgTaskChild(glassId, 1);
+    }
 
+//    @Scheduled(fixedDelay = 1000)
+    public void edgTwoOpcTask() throws Exception {
+        EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(EDG_STORAGE_DEVICE_TWO_TASK);
+        String glassId = task.getGlassId();
+        if (StringUtils.isBlank(glassId) || glassId.equals(glassIdTwo)) {
+            log.info("{}鍙风嚎纾ㄨ竟鍓嶇幓鐠冩湭灏变綅锛岀粨鏉熸湰娆′换鍔�", 2);
+            return;
+        }
+        edgTaskChild(glassId, 2);
+    }
+
+    private void edgTaskChild(String glassId, int cell) throws Exception {
+        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId).last("limit 1"));
+        if (glassInfo == null) {
+            log.info("瀵瑰垪琛ㄤ腑鐨勭幓鐠僫d閿欒锛岃妫�鏌ユ暟鎹紝鐜荤拑id锛歿}", glassId);
+            return;
+        }
+        String toEndingId = glassInfo.getTemperingLayoutId() + "" + glassInfo.getTemperingFeedSequence();
+        List<ReadWriteEntity> list = new ArrayList<>();
+//        list.add(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".mesControl", true));
+        list.add(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".glassId", Integer.parseInt(toEndingId)));
+        list.add(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".toEdingId", Integer.parseInt(toEndingId)));
+        list.add(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".width", (int) Math.max(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10)));
+        list.add(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".height", (int) Math.min(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10)));
+
+        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));
+        if (cell == 1) {
+            glassIdOne = glassId;
         } else {
-            log.info("寮傚父鏁版嵁锛岀粨鏉熸湰娆′换鍔�");
+            glassIdTwo = glassId;
         }
+
     }
 
-    private boolean intoTask(EdgStorageDeviceTask task) {
+    private boolean intoTask(EdgStorageDeviceTask task, String tableName, int deviceId) {
         //鑾峰彇鐜荤拑鐨勫熀鏈俊鎭�
         GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn()));
         if (null == glassInfo) {
@@ -131,15 +202,14 @@
             return Boolean.FALSE;
         }
         //鑾峰彇褰撳墠杩涚墖鐜荤拑id鍜岃繘鐗囨牸瀛�  鐩稿悓灏哄鍙互鏀句笅鐨勬牸瀛�
-//        select * from edg_storage_cage t left join edg_storage_cage_details t1 on t.slot = t1.slot
-//        where t.device_id =1 and t1.state = 100 and t.remain_width >= 827 and t1.width = 827 and t1.height = 1124 order by abs(t.slot - 10)
-        EdgStorageCage edgStorageCage = edgStorageCageService.getEdgStorageCageBySize(1, glassInfo.getWidth(), glassInfo.getHeight(), task.getCurrentCell());
+        EdgStorageCage edgStorageCage = edgStorageCageService.getEdgStorageCageBySize(deviceId, glassInfo.getWidth(), glassInfo.getHeight(), task.getCurrentCell());
         if (edgStorageCage == null) {
             log.info("鐩稿悓灏哄鍙互鏀句笅鐨勬牸瀛愭湭鎵惧埌锛屾牸瀛恑d:{}", task.getCurrentCell());
 //            SELECT * from edg_storage_cage where device_id = 1 and remain_width > 1000 order by abs(slot - 10)
-            List<EdgStorageCage> storageCageList = edgStorageCageService.list(new LambdaQueryWrapper<EdgStorageCage>().eq(EdgStorageCage::getDeviceId, 1)
+            List<EdgStorageCage> storageCageList = edgStorageCageService.list(new LambdaQueryWrapper<EdgStorageCage>()
+                    .eq(EdgStorageCage::getDeviceId, deviceId)
                     .eq(EdgStorageCage::getEnableState, Const.SLOT_ON)
-                    .ge(EdgStorageCage::getRemainWidth, glassInfo.getWidth()).last("order by abs(slot - " + task.getCurrentCell() + ")"));
+                    .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);
@@ -160,13 +230,13 @@
 
         //鏇存柊浠诲姟淇℃伅
         task.setStartCell(edgStorageCage.getSlot());
-        task.setTaskRunning(task.getTaskState());
-        edgStorageDeviceTaskService.updateTaskMessage("edg_storage_device_one_task", task);
+        task.setTaskRunning(Const.GLASS_CACHE_TYPE_IN);
+        edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
         saveHistoryTask(task);
         return Boolean.TRUE;
     }
 
-    private boolean outTask(EdgStorageDeviceTask task) {
+    private boolean outTask(EdgStorageDeviceTask task, String tableName, int deviceId) {
         EdgStorageCageDetails edgStorageCageDetails = null;
         //绗煎唴鏄増鍥剧浉宸槸鍚﹁秴杩囬槇鍊�
         boolean flag = queryMaxMinDiff(threshold);
@@ -174,6 +244,7 @@
             EdgStorageCageDetails minEdgDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
                     .inSql(EdgStorageCageDetails::getSlot, "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON)
                     .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                    .eq(EdgStorageCageDetails::getDeviceId, deviceId)
                     .orderByAsc(EdgStorageCageDetails::getTemperingLayoutId)
                     .orderBy(Boolean.TRUE, Boolean.TRUE, EdgStorageCageDetails::getTemperingFeedSequence)
                     .last("limit 1"));
@@ -181,12 +252,25 @@
             edgStorageCageDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
                     .eq(EdgStorageCageDetails::getWidth, minEdgDetails.getWidth())
                     .eq(EdgStorageCageDetails::getHeight, minEdgDetails.getHeight())
-                    .inSql(EdgStorageCageDetails::getId, "select min(id ) from edg_storage_cage_details where state = 100 group by slot ")
-                    .last("order by abs(t.slot - " + task.getCurrentCell() + ")  asc limit 1")
+                    .eq(EdgStorageCageDetails::getDeviceId, deviceId)
+                    .inSql(EdgStorageCageDetails::getId, "select min(id) from edg_storage_cage_details where state = 100 group by slot ")
+                    .last("order by abs(slot - " + task.getCurrentCell() + ")  asc limit 1")
             );
+            //缁欑洿閫氫换鍔�
+            if (null == edgStorageCageDetails && StringUtils.isNotBlank(task.getGlassIdIn())) {
+                GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
+                        .eq(GlassInfo::getGlassId, task.getGlassIdIn())
+                        .eq(GlassInfo::getWidth, minEdgDetails.getWidth())
+                        .eq(GlassInfo::getHeight, minEdgDetails.getHeight()));
+                if (null != glassInInfo) {
+                    edgStorageCageDetails = new EdgStorageCageDetails();
+                    BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails);
+                }
+            }
             if (null == edgStorageCageDetails) {
                 edgStorageCageDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
                         .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                        .eq(EdgStorageCageDetails::getDeviceId, deviceId)
                         .eq(EdgStorageCageDetails::getSlot, minEdgDetails.getSlot())
                         .orderByAsc(EdgStorageCageDetails::getId)
                         .last("limit 1")
@@ -197,51 +281,135 @@
             //        鑾峰彇涓婃浠诲姟
 //        鑾峰彇鍘嗗彶琛ㄤ腑涓婃浠诲姟鏈�鍚庝竴鐗囧昂瀵�
             EdgStorageDeviceTaskHistory edgeData = edgStorageDeviceTaskHistoryService.getOne(new LambdaQueryWrapper<EdgStorageDeviceTaskHistory>()
-                    .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_SUCCESS).
-                            orderByDesc(EdgStorageDeviceTaskHistory::getId).last("limit 1"));
-            GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, edgeData.getGlassIdOut()));
-            //绗煎唴鐨勭幓鐠冪殑灏哄鏄惁鍜屼笂涓�娆′换鍔′竴鑷�
-            edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(one.getWidth(), one.getHeight());
+                    .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_SUCCESS)
+                    .in(EdgStorageDeviceTaskHistory::getTaskType, Const.GLASS_CACHE_TYPE_OUT, Const.GLASS_CACHE_TYPE_THROUGH)
+                    .orderByDesc(EdgStorageDeviceTaskHistory::getId).last("limit 1"));
+            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());
+                if (null == edgStorageCageDetails && StringUtils.isNotBlank(task.getGlassIdIn())) {
+                    GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
+                            .eq(GlassInfo::getGlassId, task.getGlassIdIn())
+                            .eq(GlassInfo::getWidth, glassOutInfo.getWidth())
+                            .eq(GlassInfo::getHeight, glassOutInfo.getHeight()));
+                    if (null != glassInInfo) {
+                        edgStorageCageDetails = new EdgStorageCageDetails();
+                        BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails);
+                    }
+                }
+            }
         }
         if (null == edgStorageCageDetails) {
-            edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(0, 0);
+            edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), 0, 0);
+        }
+        if (edgStorageCageDetails == null && StringUtils.isNotBlank(task.getGlassIdIn())) {
+            //鍜屼笂娆′换鍔′笉瀛樺湪鐩稿悓灏哄
+            GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn()));
+            edgStorageCageDetails = new EdgStorageCageDetails();
+            BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails);
         }
         if (edgStorageCageDetails == null) {
             //鍜屼笂娆′换鍔′笉瀛樺湪鐩稿悓灏哄
             log.info("绗煎唴娌℃湁鐜荤拑浜�");
             return Boolean.FALSE;
         }
-        //鐜荤拑淇℃伅鏇挎崲
-        String glassIdChange = queryAndChangeGlass(edgStorageCageDetails.getGlassId());
-        //澶勭悊鍦ㄥ崸鐞嗗唴鐨勭幓鐠冧俊鎭細绗煎唴鐨勬暟鎹鐞�
-        queryEdgAndChangeGlass(edgStorageCageDetails.getGlassId(), glassIdChange);
+        int taskType = Const.GLASS_CACHE_TYPE_OUT;
+        String glassId = edgStorageCageDetails.getGlassId();
+        if (glassId.equals(task.getGlassIdIn())) {
+            if (3 != task.getTaskState()) {
+                return Boolean.FALSE;
+            }
+            log.info("5銆佺洿閫氫换鍔�,灏嗙幓鐠冧俊鎭彃鍏ュ崸寮忕悊鐗囩,褰撳墠鐜荤拑淇℃伅:{}", edgStorageCageDetails);
+            //鐜荤拑淇℃伅鏇挎崲
+            String glassIdChange = queryAndChangeGlass(glassId);
+            //澶勭悊鍦ㄥ崸鐞嗗唴鐨勭幓鐠冧俊鎭細绗煎唴鐨勬暟鎹鐞�
+            queryEdgAndChangeGlass(edgStorageCageDetails.getGlassId(), glassIdChange);
+            if (StringUtils.isNotBlank(glassIdChange)) {
+                edgStorageCageDetails = new EdgStorageCageDetails();
+                GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
+                BeanUtils.copyProperties(one, edgStorageCageDetails);
+            }
+            EdgStorageCage storageCage = edgStorageCageService.getOne(new LambdaQueryWrapper<EdgStorageCage>()
+                    .eq(EdgStorageCage::getDeviceId, deviceId)
+                    .eq(EdgStorageCage::getEnableState, Const.SLOT_ON)
+                    .ge(EdgStorageCage::getRemainWidth, cellLength)
+                    .last("order by abs(slot - " + task.getCurrentCell() + ") limit 1"));
+            Assert.isTrue(null != storageCage, "鏍煎瓙宸叉弧,鏃犳硶鎵ц鐩撮�氫换鍔�");
+            log.info("3銆佹煡璇㈠崸寮忕悊鐗囩閲岄潰鐨勭┖鏍�:{}", storageCage);
+            edgStorageCageDetails.setSlot(storageCage.getSlot());
+            edgStorageCageDetails.setDeviceId(storageCage.getDeviceId());
+            edgStorageCageDetails.setState(Const.GLASS_STATE_OUT);
+            edgStorageCageDetailsService.save(edgStorageCageDetails);
+            taskType = Const.GLASS_CACHE_TYPE_THROUGH;
+        } else {
+            log.info("5銆侀潪鐩撮�氫换鍔�,灏嗙幓鐠冧俊鎭彃鍏ュ崸寮忕悊鐗囩,褰撳墠鐜荤拑淇℃伅:{}", edgStorageCageDetails);
+            if (!edgStorageCageDetails.getSlot().equals(task.getCurrentCell())) {
+                EdgStorageCageDetails currentGlass = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
+                        .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                        .eq(EdgStorageCageDetails::getDeviceId, deviceId)
+                        .eq(EdgStorageCageDetails::getSlot, task.getCurrentCell()).eq(EdgStorageCageDetails::getWidth, edgStorageCageDetails.getWidth())
+                        .eq(EdgStorageCageDetails::getHeight, edgStorageCageDetails.getHeight()).eq(EdgStorageCageDetails::getThickness, edgStorageCageDetails.getThickness())
+                        .orderByAsc(EdgStorageCageDetails::getId).last("limit 1")
+                );
+                if (null != currentGlass) {
+                    edgStorageCageDetails = currentGlass;
+                }
+            }
+            //鐜荤拑淇℃伅鏇挎崲
+            String glassIdChange = queryAndChangeGlass(edgStorageCageDetails.getGlassId());
+            //澶勭悊鍦ㄥ崸鐞嗗唴鐨勭幓鐠冧俊鎭細绗煎唴鐨勬暟鎹鐞�
+            queryEdgAndChangeGlass(edgStorageCageDetails.getGlassId(), glassIdChange);
+            LambdaUpdateWrapper<EdgStorageCageDetails> wrapper = new LambdaUpdateWrapper<>();
+            wrapper.eq(EdgStorageCageDetails::getGlassId, edgStorageCageDetails.getGlassId()).set(EdgStorageCageDetails::getState, Const.GLASS_STATE_OUT);
+            edgStorageCageDetailsService.update(wrapper);
+            log.info("5銆佹洿鏂板嚭鐗囩幓鐠冪殑鐘舵�佷负{}", Const.GLASS_STATE_OUT);
+        }
         //鐢熸垚鍑虹墖浠诲姟
         task.setGlassIdOut(edgStorageCageDetails.getGlassId());
-        task.setCurrentCell(edgStorageCageDetails.getSlot());
-        task.setTaskRunning(Const.GLASS_CACHE_TYPE_OUT);
-        edgStorageDeviceTaskService.updateTaskMessage("edg_storage_device_one_task", task);
+        task.setStartCell(edgStorageCageDetails.getSlot());
+        task.setTaskRunning(taskType);
+
+        edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
         saveHistoryTask(task);
         //鏇存柊璇︽儏琛ㄤ换鍔″嚭鐗囦腑
         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);
         return Boolean.TRUE;
     }
 
-    private boolean updateCellRemainWidth(int slot) {
-        List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(new LambdaQueryWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getSlot, slot)
-                .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN));
-        if (CollectionUtil.isEmpty(list)) {
-            log.info("鏍煎瓙{}鍐呮棤鐜荤拑锛屾棤娉曟洿鏂�", slot);
+    private boolean finishTask(EdgStorageDeviceTask task, String tableName) {
+        log.info("褰撳墠浠诲姟淇℃伅涓猴細{}", task);
+        if (task.getTaskState() <= 4 && task.getTaskRunning() == 0) {
+            log.info("鏈夋鍦ㄦ墽琛岀殑浠诲姟鎴栬繖浠诲姟宸叉墽琛屼换鍔$姸鎬亄}锛屼换鍔″惎鍔ㄦ儏鍐祘}锛岀粨鏉�", task.getTaskState(), task.getTaskRunning());
             return Boolean.FALSE;
         }
-        int widthTotal = (int) list.stream().map(e -> e.getWidth() + glassGap).mapToDouble(Double::intValue).sum();
-        int remainWidth = cellLength - widthTotal >= 0 ? cellLength - widthTotal : 0;
-        edgStorageCageService.update(new LambdaUpdateWrapper<EdgStorageCage>().
-                set(EdgStorageCage::getRemainWidth, remainWidth).eq(EdgStorageCage::getSlot, slot));
-        return Boolean.FALSE;
+        Integer cell = task.getStartCell();
+        Integer state = task.getTaskState();
+        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);
+        return Boolean.TRUE;
     }
-
 
     /**
      * 鏌ヨ鐜荤拑骞惰繘琛屼氦鎹�
@@ -348,10 +516,31 @@
     public boolean saveHistoryTask(EdgStorageDeviceTask task) {
         EdgStorageDeviceTaskHistory taskHistory = new EdgStorageDeviceTaskHistory();
         BeanUtils.copyProperties(task, taskHistory);
-        task.setTaskType(task.getTaskRunning());
-        task.setTaskState(Const.RAW_GLASS_TASK_NEW);
+        taskHistory.setTaskType(task.getTaskRunning());
+        taskHistory.setCreateTime(new Date());
+        taskHistory.setTaskState(Const.RAW_GLASS_TASK_NEW);
         edgStorageDeviceTaskHistoryService.save(taskHistory);
         return Boolean.TRUE;
     }
 
+    private boolean updateCellRemainWidth(int slot, int device) {
+        List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(new LambdaQueryWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getSlot, slot)
+                .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN));
+        int remainWidth = cellLength;
+        if (CollectionUtil.isNotEmpty(list)) {
+            int widthTotal = (int) list.stream().map(e -> Math.max(e.getWidth(), e.getHeight()) + glassGap).mapToDouble(Double::intValue).sum();
+            remainWidth = cellLength - widthTotal >= 0 ? cellLength - widthTotal : 0;
+        }
+        edgStorageCageService.update(new LambdaUpdateWrapper<EdgStorageCage>().
+                set(EdgStorageCage::getRemainWidth, remainWidth).eq(EdgStorageCage::getSlot, slot).eq(EdgStorageCage::getDeviceId, device));
+        return Boolean.TRUE;
+    }
+
+    private ReadWriteEntity generateReadWriteEntity(String identifier, Object value) {
+        return ReadWriteEntity.builder()
+                .identifier(identifier)
+                //Kep涓槸Long绫诲瀷锛屽嵆锛欼nt32锛孞ava涓殑int绫诲瀷
+                .value(value)
+                .build();
+    }
 }

--
Gitblit v1.8.0