From 61e30cbd7d5548ba4c94e105319c8bff878f88db Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期四, 28 三月 2024 08:56:45 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/ShuttleCommandModeType.java   |   51 ++++++++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/DeviceTimer.java                    |   37 ++++++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java        |   16 ++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/command/ShuttleCommand.java         |   11 +
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/command/ShuttleRedisCommand.java    |   28 ++++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java                 |  181 ++++++++++++++++++++++++++++++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java |   11 +
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java        |   15 ++
 8 files changed, 340 insertions(+), 10 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java
new file mode 100644
index 0000000..873cb42
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java
@@ -0,0 +1,181 @@
+package com.zy.asrs.wcs.core.action;
+
+import com.alibaba.fastjson.JSON;
+import com.zy.asrs.wcs.core.model.NavigateNode;
+import com.zy.asrs.wcs.core.model.command.ShuttleAssignCommand;
+import com.zy.asrs.wcs.core.model.command.ShuttleCommand;
+import com.zy.asrs.wcs.core.model.command.ShuttleRedisCommand;
+import com.zy.asrs.wcs.core.model.enums.ShuttleCommandModeType;
+import com.zy.asrs.wcs.core.utils.NavigateMapUtils;
+import com.zy.asrs.wcs.core.utils.RedisUtil;
+import com.zy.asrs.wcs.core.utils.Utils;
+import com.zy.asrs.wcs.rcs.News;
+import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
+import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant;
+import com.zy.asrs.wcs.rcs.entity.Device;
+import com.zy.asrs.wcs.rcs.model.enums.ShuttleProtocolStatusType;
+import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
+import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
+import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+public class ShuttleAction {
+
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private NavigateMapUtils navigateMapUtils;
+
+    public synchronized boolean assignWork(Device device, ShuttleAssignCommand assignCommand) {
+        ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue());
+        if (shuttleThread == null) {
+            return false;
+        }
+
+        ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+        if (shuttleProtocol == null) {
+            return false;
+        }
+
+        ShuttleRedisCommand redisCommand = new ShuttleRedisCommand();
+
+        redisCommand.setShuttleNo(assignCommand.getShuttleNo());//鍥涘悜绌挎杞﹀彿
+        redisCommand.setWrkNo(assignCommand.getTaskNo());//宸ヤ綔鍙�
+        redisCommand.setCommandStep(0);//鍛戒护鎵ц姝ュ簭
+        redisCommand.setAssignCommand(assignCommand);//鍛戒护
+        //浠诲姟鏁版嵁淇濆瓨鍒皉edis
+        if (redisUtil.set(DeviceRedisConstant.SHUTTLE_WORK_FLAG + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand))) {
+            shuttleProtocol.setTaskNo(assignCommand.getTaskNo().intValue());
+            return true;
+        }
+        return false;
+    }
+
+    public synchronized boolean executeWork(Device device, Integer taskNo) {
+        Object obj = redisUtil.get(DeviceRedisConstant.SHUTTLE_WORK_FLAG + taskNo);
+        if (obj == null) {
+            return false;
+        }
+        ShuttleRedisCommand redisCommand = JSON.parseObject(obj.toString(), ShuttleRedisCommand.class);
+        if (redisCommand == null) {
+            return false;
+        }
+
+        ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue());
+        if (shuttleThread == null) {
+            return false;
+        }
+
+        ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+        if (shuttleProtocol == null) {
+            return false;
+        }
+
+        //鍥涘悜绌挎杞︾┖闂层�佹湁浠诲姟銆佹爣璁颁负true銆佸瓨鍦ㄤ换鍔℃寚浠わ紝闇�瑕佹墽琛屼换鍔$殑涓嬩竴鏉℃寚浠�
+        if (!shuttleProtocol.getIdle()
+                || shuttleProtocol.getTaskNo() == 0
+                || !shuttleProtocol.getPakMk()) {
+            return false;
+        }
+
+        List<ShuttleCommand> commands = redisCommand.getAssignCommand().getCommands();
+        if (commands.isEmpty()) {
+            return false;
+        }
+
+        ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand();
+        int commandStep = redisCommand.getCommandStep();
+
+        // 瀹岀粨涓婁竴鏉″懡浠�
+        if (commandStep != 0) {
+            ShuttleCommand command = commands.get(commandStep - 1);
+            if (command.getMode() == ShuttleCommandModeType.MOVE.id) {
+                // 姝e父绉诲姩
+                if (command.getTargetLocNo().equals(shuttleProtocol.getCurrentLocNo())) {
+                    command.setComplete(true);
+                    //瑙i攣閿佸畾璺緞锛屼笂涓�鏉¤矾寰�
+                    List<NavigateNode> nodes = JSON.parseArray(JSON.toJSONString(command.getNodes()), NavigateNode.class);//杩涜娣卞害copy
+                    if (nodes != null) {
+                        NavigateNode targetNode = assignCommand.getNodes().get(assignCommand.getNodes().size() - 1);//鏈�缁堣妭鐐�
+                        NavigateNode node = nodes.get(nodes.size() - 1);
+                        if (!(targetNode.getX() == node.getX() && targetNode.getY() == node.getY())) {
+                            nodes.remove(nodes.size() - 1);//鍓旈櫎灏捐妭鐐�
+                        }
+                        boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(shuttleProtocol.getCurrentLocNo()), shuttleProtocol.getShuttleNo(), nodes, false);//瑙i攣璺緞
+                        if (!result) {
+                            return false;//瑙i攣澶辫触
+                        }
+                    }
+                }
+            } else if (command.getMode() == ShuttleCommandModeType.PALLET_LIFT.id) {
+                // 鎵樼洏椤跺崌
+                //鍒ゆ柇鏄惁椤跺崌鍒颁綅
+                if (shuttleProtocol.getHasLift()) {
+                    //鍒ゆ柇鏄惁鏈夌墿
+                    if (shuttleProtocol.getHasPallet()) {
+                        command.setComplete(true);
+                    }
+                }
+            } else if (command.getMode() == ShuttleCommandModeType.PALLET_DOWN.id) {
+                // 鎵樼洏涓嬮檷鍛戒护
+                // 鍒ゆ柇鏄惁涓嬮檷鍒颁綅
+                if (!shuttleProtocol.getHasLift()) {
+                    command.setComplete(true);
+                }
+            } else if (command.getMode() == ShuttleCommandModeType.CHARGE.id) {
+                // 鍏呯數寮�鍏�
+                //鍒ゆ柇灏忚溅鍏呯數鐘舵��
+                if (shuttleProtocol.getHasCharge()) {
+                    command.setComplete(true);
+                }
+            }else {
+                command.setComplete(true);//鍏朵粬鍛戒护榛樿璁や负瀹屾垚
+            }
+
+            // 鏇存柊redis鏁版嵁
+            redisUtil.set(DeviceRedisConstant.SHUTTLE_WORK_FLAG + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
+
+            if (!command.getComplete()) {
+                return false;
+            }
+
+            //鍒ゆ柇鏄惁涓烘渶鍚庝竴鏉″懡浠や笖鍛戒护鎵ц瀹屾垚锛屾姏鍑虹瓑寰呯‘璁ょ姸鎬�
+            ShuttleCommand endCommand = commands.get(commands.size() - 1);
+            if (endCommand.getComplete()) {
+                News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屼笅鍙戝畬鎴愮瓑寰呮墽琛岀粨鏉燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(commands));
+
+                // 绯荤粺浠诲姟
+                if (assignCommand.getAuto()) {
+                    if (!assignCommand.getCharge()) {
+                        //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting
+                        shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING);
+                    }else {
+                        shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING);
+                    }
+                    News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屼笅鍙戝畬鎴愮瓑寰呮墽琛岀粨鏉燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
+
+                    // 鎵嬪姩浠诲姟
+                } else {
+                    //鎵嬪姩妯″紡涓嶆姏鍑虹瓑寰呯姸鎬侊紝鐩存帴澶嶄綅绌洪棽鐘舵��
+                    shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
+                    //浠诲姟鍙锋竻闆�
+                    shuttleProtocol.setTaskNo(0);
+                    //鏍囪澶嶄綅
+                    shuttleProtocol.setPakMk(true);
+                    News.info("鍥涘悜绌挎杞︽墜鍔ㄤ换鍔℃墽琛屽畬鎴愶紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
+                }
+
+                //鍒犻櫎redis
+                redisUtil.del(DeviceRedisConstant.SHUTTLE_WORK_FLAG + redisCommand.getWrkNo());
+                return false;//绂佹鍐嶄笅鍙戝懡浠�
+            }
+        }
+
+        return true;
+    }
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
index beb76a3..4851e47 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zy.asrs.framework.common.Cools;
 import com.zy.asrs.framework.exception.CoolException;
+import com.zy.asrs.wcs.core.action.ShuttleAction;
 import com.zy.asrs.wcs.core.entity.Loc;
 import com.zy.asrs.wcs.core.model.NavigateNode;
 import com.zy.asrs.wcs.core.model.command.ShuttleAssignCommand;
@@ -50,6 +51,8 @@
     private LocService locService;
     @Autowired
     private NavigateMapUtils navigateMapUtils;
+    @Autowired
+    private ShuttleAction shuttleAction;
 
     // 璁$畻
     public Boolean accept(Motion motion) {
@@ -365,16 +368,14 @@
 
         if (motion.getOrigin() != null && motion.getTarget() != null) {
             //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
-            boolean lockResult = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(motion.getTarget()), Integer.parseInt(shuttleProtocol.getShuttleNo()), assignCommand.getNodes(), true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+            boolean lockResult = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(motion.getTarget()), shuttleProtocol.getShuttleNo(), assignCommand.getNodes(), true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
             if (!lockResult) {
                 return false;//閿佸畾澶辫触
             }
-//            shuttleThread.assignWork(assignCommand);
-        }else {
-//            shuttleThread.assignWork(assignCommand);
         }
 
-        return Boolean.TRUE;
+        boolean result = shuttleAction.assignWork(shuttleThread.getDevice(), assignCommand);
+        return result;
     }
 
     public Boolean finish(Motion motion) {
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/command/ShuttleCommand.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/command/ShuttleCommand.java
index fcd1325..c7a373d 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/command/ShuttleCommand.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/command/ShuttleCommand.java
@@ -1,6 +1,7 @@
 package com.zy.asrs.wcs.core.model.command;
 
 import com.zy.asrs.wcs.core.model.NavigateNode;
+import com.zy.asrs.wcs.core.model.enums.ShuttleCommandModeType;
 import lombok.Data;
 
 import java.util.List;
@@ -22,6 +23,16 @@
     private Integer taskNo = 0;
 
     /**
+     * 鍛戒护绫诲瀷
+     */
+    private Integer mode = ShuttleCommandModeType.NONE.id;
+
+    /**
+     * 鐩爣搴撲綅
+     */
+    private String targetLocNo;
+
+    /**
      * 鎶ユ枃鍐呭
      */
     private String body;
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/command/ShuttleRedisCommand.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/command/ShuttleRedisCommand.java
new file mode 100644
index 0000000..9e6455c
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/command/ShuttleRedisCommand.java
@@ -0,0 +1,28 @@
+package com.zy.asrs.wcs.core.model.command;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 鍥涘悜绌挎杞﹀懡浠�-瀛樺偍鍦╮edis
+ */
+@Data
+public class ShuttleRedisCommand implements Serializable {
+
+    //鍥涘悜绌挎杞﹀彿
+    private Short shuttleNo;
+
+    //宸ヤ綔鍙�
+    private Short wrkNo;
+
+    //鍛戒护鎵ц姝ュ簭
+    private Integer commandStep;
+
+    //鍛戒护
+    private ShuttleAssignCommand assignCommand;
+
+    //鎻愬崌鏈哄畨鍏ㄩ攣瀹氭爣璁�
+    private Boolean liftSecurityMk = false;
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/ShuttleCommandModeType.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/ShuttleCommandModeType.java
new file mode 100644
index 0000000..eb2defd
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/ShuttleCommandModeType.java
@@ -0,0 +1,51 @@
+package com.zy.asrs.wcs.core.model.enums;
+
+/**
+ * 鍥涘悜绌挎杞﹀懡浠ょ被鍨�
+ */
+public enum ShuttleCommandModeType {
+
+    NONE(-1, "鏈煡绫诲瀷"),
+    MOVE(1, "绉诲姩"),
+    IN_LIFT(2, "杩涙彁鍗囨満"),
+    OUT_LIFT(3, "鍑烘彁鍗囨満"),
+    CHARGE(4, "鍏呯數"),
+    PALLET_LIFT(5, "鎵樼洏椤跺崌"),
+    PALLET_DOWN(6, "鎵樼洏涓嬮檷"),
+    RESET(8, "澶嶄綅"),
+    ;
+
+    public Integer id;
+    public String desc;
+
+    ShuttleCommandModeType(Integer id, String desc) {
+        this.id = id;
+        this.desc = desc;
+    }
+
+    public static ShuttleCommandModeType get(Integer id) {
+        if (null == id) {
+            return null;
+        }
+        for (ShuttleCommandModeType type : ShuttleCommandModeType.values()) {
+            if (type.id.equals(id)) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public static ShuttleCommandModeType get(ShuttleCommandModeType type) {
+        if (null == type) {
+            return null;
+        }
+        for (ShuttleCommandModeType type1 : ShuttleCommandModeType.values()) {
+            if (type1 == type) {
+                return type1;
+            }
+        }
+        return null;
+    }
+
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/DeviceTimer.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/DeviceTimer.java
index 0518fca..04df88d 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/DeviceTimer.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/DeviceTimer.java
@@ -1,10 +1,20 @@
 package com.zy.asrs.wcs.core.timer;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.wcs.core.action.ShuttleAction;
 import com.zy.asrs.wcs.core.utils.RedisUtil;
+import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant;
+import com.zy.asrs.wcs.rcs.entity.Device;
+import com.zy.asrs.wcs.rcs.entity.DeviceType;
+import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
+import com.zy.asrs.wcs.rcs.service.DeviceService;
+import com.zy.asrs.wcs.rcs.service.DeviceTypeService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
+
+import java.util.List;
 
 @Slf4j
 @Component
@@ -12,10 +22,37 @@
 
     @Autowired
     private RedisUtil redisUtil;
+    @Autowired
+    private DeviceService deviceService;
+    @Autowired
+    private DeviceTypeService deviceTypeService;
+    @Autowired
+    private ShuttleAction shuttleAction;
 
     @Scheduled(cron = "0/1 * * * * ? ")
     public synchronized void executeShuttle() {
+        DeviceType deviceType = deviceTypeService.getOne(new LambdaQueryWrapper<DeviceType>()
+                .eq(DeviceType::getFlag, String.valueOf(SlaveType.Shuttle))
+                .eq(DeviceType::getStatus, 1));
+        if (deviceType == null) {
+            return;
+        }
 
+        List<Device> list = deviceService.list(new LambdaQueryWrapper<Device>()
+                .eq(Device::getStatus, 1)
+                .eq(Device::getDeviceType, deviceType.getId()));
+        for (Device device : list) {
+            Object object = redisUtil.get(DeviceRedisConstant.SHUTTLE_FLAG + device.getDeviceNo());
+            if (object == null) {
+                continue;
+            }
+
+            Integer taskNo = Integer.valueOf(String.valueOf(object));
+            if (taskNo != 0) {
+                //瀛樺湪浠诲姟闇�瑕佹墽琛�
+                shuttleAction.executeWork(device, taskNo);
+            }
+        }
     }
 
     @Scheduled(cron = "0/1 * * * * ? ")
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java
index ad5496b..0eb07b2 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java
@@ -29,7 +29,7 @@
     /**
      * 鍥涘悜绌挎杞﹀彿
      */
-    private String shuttleNo;
+    private Integer shuttleNo;
 
     /**
      * 浠诲姟鍙�
@@ -89,6 +89,11 @@
      * 鏄惁椤跺崌
      */
     private Boolean hasLift;
+
+    /**
+     * 鏄惁鏈夋墭鐩�
+     */
+    private Boolean hasPallet;
 
     /**
      * 琛岄┒鏂瑰悜
@@ -230,6 +235,14 @@
         return this.taskNo == null ? 0 : this.taskNo;
     }
 
+    public void setTaskNo(Integer taskNo) {
+        RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
+        if (null != redisUtil) {
+            redisUtil.set(DeviceRedisConstant.SHUTTLE_FLAG + this.shuttleNo, taskNo);
+            this.taskNo = taskNo;
+        }
+    }
+
     //閫氳繃褰撳墠浜岀淮鐮佽幏鍙栧綋鍓嶅簱浣嶅彿
     public String getCurrentLocNo() {
         LocService locService = SpringUtils.getBean(LocService.class);
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
index 1091fc4..0fb820e 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
@@ -9,6 +9,7 @@
 import com.zy.asrs.framework.exception.CoolException;
 import com.zy.asrs.wcs.core.entity.Loc;
 import com.zy.asrs.wcs.core.model.command.ShuttleCommand;
+import com.zy.asrs.wcs.core.model.enums.ShuttleCommandModeType;
 import com.zy.asrs.wcs.core.service.LocService;
 import com.zy.asrs.wcs.rcs.News;
 import com.zy.asrs.wcs.rcs.cache.OutputQueue;
@@ -81,24 +82,29 @@
             if (data != null) {
                 if (null == shuttleProtocol) {
                     shuttleProtocol = new ShuttleProtocol();
-                    shuttleProtocol.setShuttleNo(device.getDeviceNo());
+                    shuttleProtocol.setShuttleNo(Integer.valueOf(device.getDeviceNo()));
                     shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
                     shuttleProtocol.setDevice(device);
                 }
 
                 //----------璇诲彇鍥涘悜绌挎杞︾姸鎬�-----------
-                //灏忚溅蹇欑姸鎬佷綅
-                shuttleProtocol.setDeviceStatus(data.getInteger("deviceStatus"));
+                //灏忚溅璁惧鐘舵��
+                Integer deviceStatus = data.getInteger("deviceStatus");
+                shuttleProtocol.setDeviceStatus(deviceStatus);
                 //褰撳墠浜岀淮鐮�
-                shuttleProtocol.setCurrentCode(data.getString("deviceLocation") == null ? "0" : data.getString("deviceLocation"));
+                shuttleProtocol.setCurrentCode(data.getString("groundCode") == null ? "0" : data.getString("groundCode"));
                 //鐢垫睜鐢甸噺
                 shuttleProtocol.setBatteryPower(data.getString("battery") == null ? "0%" : data.getString("battery"));
 
 
                 //鏄惁椤跺崌
                 shuttleProtocol.setHasLift(data.getInteger("palletStatus") == 1 ? true : false);
+                //鏄惁鏈夋墭鐩�
+                shuttleProtocol.setHasPallet(data.getInteger("hasPallet") != 2 ? true : false);
                 //琛岄┒鏂瑰悜
                 shuttleProtocol.setRunDirection(data.getString("direction") == null ? "none" : data.getString("direction"));
+                //鏄惁涓哄厖鐢电姸鎬�
+                shuttleProtocol.setHasCharge((deviceStatus == 5 || deviceStatus == 13) ? true : false);
 
                 ///璇诲彇鍥涘悜绌挎杞︾姸鎬�-end
 
@@ -194,6 +200,8 @@
         ShuttleCommand command = new ShuttleCommand();
         command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo()));
         command.setBody(JSON.toJSONString(body));
+        command.setMode(ShuttleCommandModeType.MOVE.id);
+        command.setTargetLocNo(loc.getLocNo());
         return command;
     }
 

--
Gitblit v1.9.1