From 225f8abb319ed527b90f50c678c38f6e7af68bdd Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期二, 18 六月 2024 16:34:00 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java |  374 +++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 360 insertions(+), 14 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
index 79077ae..6fc6529 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
@@ -2,16 +2,27 @@
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zy.asrs.common.utils.HttpHandler;
 import com.zy.asrs.framework.common.DateUtils;
+import com.zy.asrs.framework.common.SpringUtils;
 import com.zy.asrs.framework.exception.CoolException;
+import com.zy.asrs.wcs.common.ExecuteSupport;
+import com.zy.asrs.wcs.core.entity.BasLift;
+import com.zy.asrs.wcs.core.model.command.LiftCommand;
+import com.zy.asrs.wcs.core.model.enums.LiftCommandModeType;
+import com.zy.asrs.wcs.core.service.BasLiftService;
 import com.zy.asrs.wcs.rcs.News;
 import com.zy.asrs.wcs.rcs.cache.OutputQueue;
+import com.zy.asrs.wcs.rcs.entity.DeviceDataLog;
 import com.zy.asrs.wcs.rcs.model.enums.LiftProtocolStatusType;
 import com.zy.asrs.wcs.rcs.model.protocol.LiftProtocol;
+import com.zy.asrs.wcs.rcs.service.DeviceDataLogService;
 import com.zy.asrs.wcs.rcs.thread.LiftThread;
 import com.zy.asrs.wcs.core.utils.RedisUtil;
 import com.zy.asrs.wcs.rcs.entity.Device;
+import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 
 import java.text.MessageFormat;
@@ -52,18 +63,10 @@
         try {
             readStatus();
 
-//            //鎻愬崌鏈哄浜庤繍琛岀姸鎬侊紝灏嗘爣璁扮疆涓篺alse
-//            if (liftProtocol.getBusy()) {
-//                liftProtocol.setPakMk(false);
-//            }
-//
-//            //鎻愬崌鏈哄浜庢湭杩愯銆佸氨缁�佹爣璁皌rue銆佹湁浠诲姟鍙�
-//            if (!liftProtocol.getBusy()
-//                    && !liftProtocol.getPakMk()
-//                    && liftProtocol.getTaskNo() != 0) {
-//                //杩樻湁鏈畬鎴愮殑鍛戒护
-//                executeWork(liftProtocol.getTaskNo());
-//            }
+            //鎻愬崌鏈哄浜庤繍琛岀姸鎬侊紝灏嗘爣璁扮疆涓篺alse
+            if (liftProtocol.getRun()) {
+                liftProtocol.setPakMk(false);
+            }
         } catch (Exception e) {
             OutputQueue.LIFT.offer(MessageFormat.format("銆恵0}銆戣鍙栨彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort()));
         }
@@ -76,9 +79,13 @@
             if (data != null) {
                 if (null == liftProtocol) {
                     liftProtocol = new LiftProtocol();
-                    liftProtocol.setLiftNo(device.getDeviceNo());
+                    liftProtocol.setLiftNo(Integer.valueOf(device.getDeviceNo()));
                     liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE);
                     liftProtocol.setDevice(device);
+
+                    InnerLiftExtend innerLiftExtend = new InnerLiftExtend();
+                    innerLiftExtend.setLock(false);//榛樿鏈攣瀹�
+                    liftProtocol.setExtend(innerLiftExtend);
                 }
 
                 //----------璇诲彇鎻愬崌鏈虹姸鎬�-----------
@@ -96,6 +103,13 @@
                 liftProtocol.setErrorCode("");
                 //灞�
                 liftProtocol.setLev(data.getInteger("curFloor"));
+
+
+                //************琛ュ厖鎵╁睍瀛楁*************
+                InnerLiftExtend liftExtend = JSON.parseObject(JSON.toJSONString(liftProtocol.getExtend(), SerializerFeature.DisableCircularReferenceDetect), InnerLiftExtend.class);
+                liftExtend.setLock(data.getInteger("lockStatus") == 1 ? true : false);
+                liftProtocol.setExtend(liftExtend);
+
 //                //鍓嶈秴闄�
 //                liftProtocol.setFrontOverrun(status1[4]);
 //                //鍚庤秴闄�
@@ -121,6 +135,49 @@
 //                //宸插畬鎴愪换鍔″彿
 //                liftProtocol.setCompleteTaskNo(siemensS7Net.getByteTransform().TransInt16(result1.Content, 6));
 //                liftProtocol.setLev(lev);
+
+                if (System.currentTimeMillis() - liftProtocol.getDeviceDataLog() > 1000 * 5) {
+                    //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰�
+                    //淇濆瓨鏁版嵁璁板綍
+                    DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class);
+                    DeviceDataLog deviceDataLog = new DeviceDataLog();
+                    deviceDataLog.setOriginData(JSON.toJSONString(data));
+                    deviceDataLog.setWcsData(JSON.toJSONString(liftProtocol));
+                    deviceDataLog.setType("lift");
+                    deviceDataLog.setDeviceNo(String.valueOf(liftProtocol.getLiftNo()));
+                    deviceDataLog.setCreateTime(new Date());
+                    deviceDataLog.setHostId(device.getHostId());
+                    deviceDataLogService.save(deviceDataLog);
+
+                    //鏇存柊閲囬泦鏃堕棿
+                    liftProtocol.setDeviceDataLog(System.currentTimeMillis());
+                }
+
+                //灏嗘彁鍗囨満鐘舵�佷繚瀛樿嚦鏁版嵁搴�
+                BasLiftService basLiftService = SpringUtils.getBean(BasLiftService.class);
+                BasLift basLift = basLiftService.getOne(new LambdaQueryWrapper<BasLift>()
+                        .eq(BasLift::getLiftNo, device.getDeviceNo())
+                        .eq(BasLift::getHostId, device.getHostId()));
+                if (basLift == null) {
+                    basLift = new BasLift();
+                    //鎻愬崌鏈哄彿
+                    basLift.setLiftNo(Integer.valueOf(device.getDeviceNo()));
+                    basLift.setStatus(1);
+                    basLift.setDeleted(0);
+                    basLift.setHostId(device.getHostId());
+                    basLift.setDeviceId(device.getId());
+                    basLiftService.save(basLift);
+                }
+                //浠诲姟鍙�
+                basLift.setTaskNo(liftProtocol.getTaskNo().intValue());
+                //淇敼鏃堕棿
+                basLift.setUpdateTime(new Date());
+                //璁惧鐘舵��
+                basLift.setProtocol(JSON.toJSONString(liftProtocol));
+                if (basLiftService.updateById(basLift)) {
+                    OutputQueue.LIFT.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), device.getDeviceNo()));
+                }
+
             }else {
                 OutputQueue.LIFT.offer(MessageFormat.format("銆恵0}銆憑1}璇诲彇鎻愬崌鏈虹姸鎬佷俊鎭け璐�", DateUtils.convert(new Date()), device.getId()));
                 throw new CoolException(MessageFormat.format( "璇诲彇鎻愬崌鏈虹姸鎬佷俊鎭け璐� ===>> [id:{0}] [ip:{1}] [port:{2}]", device.getId(), device.getIp(), device.getPort()));
@@ -143,7 +200,178 @@
 
     @Override
     public LiftProtocol getStatus() {
-        return this.liftProtocol;
+        return this.liftProtocol.clone();
+    }
+
+    @Override
+    public Device getDevice() {
+        return this.device;
+    }
+
+    @Override
+    public synchronized boolean move(LiftCommand command) {
+        try {
+            String loginToken = requestLoginToken();
+            if (loginToken == null) {
+                return false;
+            }
+
+            HashMap<String, Object> headers = new HashMap<>();
+            headers.put("Authorization", "Bearer " + loginToken);
+
+            String response = new HttpHandler.Builder()
+                    .setUri(API_URL)
+                    .setPath("/RDS/lifterTask")
+                    .setHeaders(headers)
+                    .setJson(command.getBody())
+                    .build()
+                    .doPost();
+            JSONObject jsonObject = JSON.parseObject(response);
+            Integer code = jsonObject.getInteger("code");
+            if (code.equals(200)) {
+                return true;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return false;
+    }
+
+    @Override
+    public synchronized boolean palletInOut(LiftCommand command) {
+        try {
+            String loginToken = requestLoginToken();
+            if (loginToken == null) {
+                return false;
+            }
+
+            HashMap<String, Object> headers = new HashMap<>();
+            headers.put("Authorization", "Bearer " + loginToken);
+
+            String response = new HttpHandler.Builder()
+                    .setUri(API_URL)
+                    .setPath("/RDS/lifterTask")
+                    .setHeaders(headers)
+                    .setJson(command.getBody())
+                    .build()
+                    .doPost();
+            JSONObject jsonObject = JSON.parseObject(response);
+            Integer code = jsonObject.getInteger("code");
+            if (code.equals(200)) {
+                return true;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return false;
+    }
+
+    @Override
+    public synchronized boolean lock(LiftCommand command) {
+        try {
+            String loginToken = requestLoginToken();
+            if (loginToken == null) {
+                return false;
+            }
+
+            HashMap<String, Object> headers = new HashMap<>();
+            headers.put("Authorization", "Bearer " + loginToken);
+
+            String response = new HttpHandler.Builder()
+                    .setUri(API_URL)
+                    .setPath("/RDS/lifterOperation")
+                    .setHeaders(headers)
+                    .setJson(command.getBody())
+                    .build()
+                    .doPost();
+            JSONObject jsonObject = JSON.parseObject(response);
+            Integer code = jsonObject.getInteger("code");
+            if (code.equals(200)) {
+                return true;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return false;
+    }
+
+    @Override
+    public synchronized boolean unlock(LiftCommand command) {
+        try {
+            String loginToken = requestLoginToken();
+            if (loginToken == null) {
+                return false;
+            }
+
+            HashMap<String, Object> headers = new HashMap<>();
+            headers.put("Authorization", "Bearer " + loginToken);
+
+            String response = new HttpHandler.Builder()
+                    .setUri(API_URL)
+                    .setPath("/RDS/lifterOperation")
+                    .setHeaders(headers)
+                    .setJson(command.getBody())
+                    .build()
+                    .doPost();
+            JSONObject jsonObject = JSON.parseObject(response);
+            Integer code = jsonObject.getInteger("code");
+            if (code.equals(200)) {
+                return true;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return false;
+    }
+
+    @Override
+    public synchronized boolean reset(LiftCommand command) {
+        return false;
+    }
+
+    @Override
+    public boolean isIdle() {
+        return isIdle(null);
+    }
+
+    @Override
+    public boolean isIdle(ExecuteSupport support) {
+        if (null != support) {
+            if (!support.judgement()) {
+                return false;
+            }
+        }
+        InnerLiftExtend extend = (InnerLiftExtend) this.liftProtocol.getExtend();//鑾峰彇鎵╁睍瀛楁
+        // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佸氨缁�佺┖闂层�佹湭閿佸畾
+        if (this.liftProtocol.getModel()
+                && !this.liftProtocol.getRun()
+                && this.liftProtocol.getReady()
+                && this.liftProtocol.getPakMk()
+                && this.liftProtocol.getErrorCode().equals("0")
+                && this.liftProtocol.getProtocolStatus().equals(LiftProtocolStatusType.IDLE)
+                && !extend.getLock()
+        ) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean setProtocolStatus(LiftProtocolStatusType status) {
+        this.liftProtocol.setProtocolStatus(status);
+        return true;
+    }
+
+    @Override
+    public boolean setSyncTaskNo(Integer taskNo) {
+        this.liftProtocol.setTaskNo(taskNo);
+        return true;
+    }
+
+    @Override
+    public boolean isLock(ExecuteSupport support) {
+        InnerLiftExtend extend = (InnerLiftExtend) this.liftProtocol.getExtend();
+        return extend.getLock();
     }
 
     //***************璁惧灞傞�氳-涓嶅悓鍘傚晢璁惧閫氳鏂规涓嶄竴鑷�***************
@@ -207,4 +435,122 @@
 //        }
 //        return null;
     }
+
+    //绌鸿浇绉诲姩
+    @Override
+    public LiftCommand getMoveCommand(Integer taskNo, Integer sourceLev, Integer targetLev, LiftCommandModeType mode) {
+        int taskMode = 3;//绌鸿浇绉诲姩
+
+        HashMap<String, Object> body = new HashMap<>();
+        body.put("messageName", "lifterTask");
+        body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+        body.put("deviceNo", Integer.parseInt(this.device.getDeviceNo()));
+        body.put("taskId", taskNo);
+        body.put("startLayer", 0);
+        body.put("endLayer", targetLev);
+        body.put("model", taskMode);
+
+        LiftCommand command = new LiftCommand();
+        command.setLiftNo(Integer.valueOf(this.device.getDeviceNo()));
+        command.setBody(JSON.toJSONString(body));
+        command.setMode(LiftCommandModeType.MOVE.id);
+        command.setOriginLev(0);
+        command.setTargetLev(targetLev);
+        return command;
+    }
+
+    //杞借溅绉诲姩
+    @Override
+    public LiftCommand getMoveWithShuttleCommand(Integer taskNo, Integer sourceLev, Integer targetLev, LiftCommandModeType mode) {
+        HashMap<String, Object> body = new HashMap<>();
+        body.put("messageName", "lifterTask");
+        body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+        body.put("deviceNo", Integer.parseInt(this.device.getDeviceNo()));
+        body.put("taskId", taskNo);
+        body.put("startLayer", sourceLev);
+        body.put("endLayer", targetLev);
+        body.put("model", 2);//杞借溅绉诲姩
+
+        LiftCommand command = new LiftCommand();
+        command.setLiftNo(Integer.valueOf(this.device.getDeviceNo()));
+        command.setBody(JSON.toJSONString(body));
+        command.setMode(LiftCommandModeType.MOVE.id);
+        command.setOriginLev(sourceLev);
+        command.setTargetLev(targetLev);
+        return command;
+    }
+
+    //鎵樼洏鍑哄叆
+    @Override
+    public LiftCommand getPalletInOutCommand(Integer taskNo, Integer sourceLev, Integer targetLev, Integer originSta, Integer targetSta, LiftCommandModeType mode) {
+        HashMap<String, Object> body = new HashMap<>();
+        body.put("messageName", "lifterTask");
+        body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+        body.put("deviceNo", Integer.parseInt(this.device.getDeviceNo()));
+        body.put("taskId", taskNo);
+        body.put("startLayer", sourceLev);
+        body.put("endLayer", targetLev);
+        body.put("startLocation", originSta);
+        body.put("endLocation", targetSta);
+        body.put("model", 1);//鎵樼洏鍑哄叆
+
+        LiftCommand command = new LiftCommand();
+        command.setLiftNo(Integer.valueOf(this.device.getDeviceNo()));
+        command.setBody(JSON.toJSONString(body));
+        command.setMode(LiftCommandModeType.PALLET_INOUT.id);
+        command.setOriginLev(sourceLev);
+        command.setTargetLev(targetLev);
+        command.setOriginSta(originSta);
+        command.setTargetSta(targetSta);
+        return command;
+    }
+
+    //閿佸畾/瑙i攣鎻愬崌鏈�
+    @Override
+    public LiftCommand getLockCommand(Integer taskNo, Boolean lock) {
+        HashMap<String, Object> body = new HashMap<>();
+        body.put("messageName", "lifterOperation");
+        body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+        body.put("deviceNo", Integer.parseInt(this.device.getDeviceNo()));
+        body.put("taskId", taskNo);
+        body.put("operation", lock ? 6 : 7);
+        body.put("remark", taskNo);
+
+        LiftCommand command = new LiftCommand();
+        command.setLiftNo(Integer.valueOf(this.device.getDeviceNo()));
+        command.setBody(JSON.toJSONString(body));
+        command.setMode(lock ? LiftCommandModeType.LOCK.id : LiftCommandModeType.UNLOCK.id);
+        return command;
+    }
+
+    //灏忚溅宸插埌浣�/宸查┒绂讳俊鍙�
+    @Override
+    public LiftCommand getShuttleSignalCommand(Integer taskNo, Boolean signal) {
+        HashMap<String, Object> body = new HashMap<>();
+        body.put("messageName", "lifterOperation");
+        body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+        body.put("deviceNo", Integer.parseInt(this.device.getDeviceNo()));
+        body.put("taskId", taskNo);
+        body.put("operation", signal ? 4 : 5);
+
+        LiftCommand command = new LiftCommand();
+        command.setLiftNo(Integer.valueOf(this.device.getDeviceNo()));
+        command.setBody(JSON.toJSONString(body));
+        command.setMode(signal ? LiftCommandModeType.LOCK.id : LiftCommandModeType.UNLOCK.id);
+        return command;
+    }
+
+    /**
+     * 鎵╁睍瀛楁
+     */
+    @Data
+    private class InnerLiftExtend {
+
+        /**
+         * 鎻愬崌鏈洪攣瀹�
+         */
+        private Boolean lock = false;
+
+    }
+
 }

--
Gitblit v1.9.1