From d99be76cce060b7400329ec312bd8e32fac08476 Mon Sep 17 00:00:00 2001
From: tqs <56479841@qq.com>
Date: 星期六, 03 十二月 2022 11:07:50 +0800
Subject: [PATCH] #

---
 src/main/resources/mapper/BasRgvErrMapper.xml                    |   16 
 src/main/java/com/zy/asrs/controller/RgvController.java          |  336 ++++++++++++++
 src/main/java/com/zy/asrs/domain/vo/RgvStateTableVo.java         |   50 ++
 src/main/java/com/zy/asrs/service/BasRgvErrService.java          |    8 
 src/main/java/com/zy/asrs/service/impl/BasRgvErrServiceImpl.java |   12 
 src/main/java/com/zy/asrs/domain/vo/RgvMsgTableVo.java           |   62 ++
 src/main/webapp/views/rgv.html                                   |  644 ++++++++++++++++++++++++++++
 src/main/java/com/zy/asrs/domain/enums/RgvStatusType.java        |   43 +
 src/main/java/com/zy/asrs/mapper/BasRgvErrMapper.java            |   12 
 src/main/java/com/zy/common/CodeBuilder.java                     |    2 
 src/main/java/com/zy/asrs/domain/param/RgvOperatorParam.java     |   25 +
 src/main/webapp/views/index.html                                 |    1 
 src/main/java/com/zy/asrs/entity/BasRgvErr.java                  |  127 +++++
 src/main/java/com/zy/core/enums/RgvTaskModeType.java             |    2 
 14 files changed, 1,338 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/RgvController.java b/src/main/java/com/zy/asrs/controller/RgvController.java
new file mode 100644
index 0000000..e50d1dc
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/RgvController.java
@@ -0,0 +1,336 @@
+package com.zy.asrs.controller;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.annotations.ManagerAuth;
+import com.core.common.R;
+import com.core.exception.CoolException;
+import com.zy.asrs.domain.enums.RgvStatusType;
+import com.zy.asrs.domain.param.RgvOperatorParam;
+import com.zy.asrs.domain.vo.*;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.mapper.BasRgvErrMapper;
+import com.zy.asrs.service.BasRgvService;
+import com.zy.asrs.service.LocMastService;
+import com.zy.asrs.service.WrkMastService;
+import com.zy.asrs.service.impl.MainServiceImpl;
+import com.zy.asrs.utils.VersionUtils;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.OutputQueue;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.RgvModeType;
+import com.zy.core.enums.RgvTaskModeType;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.RgvSlave;
+import com.zy.core.model.Task;
+import com.zy.core.model.command.RgvCommand;
+import com.zy.core.model.protocol.RgvProtocol;
+import com.zy.core.properties.SlaveProperties;
+import com.zy.core.thread.RgvThread;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * RGV鎺ュ彛
+ * Created by vincent on 2020-06-01
+ */
+@Slf4j
+@RestController
+@RequestMapping("/rgv")
+public class RgvController {
+
+    @Autowired
+    private SlaveProperties slaveProperties;
+    @Autowired
+    private WrkMastService wrkMastService;
+    @Autowired
+    private BasRgvErrMapper basRgvErrMapper;
+    @Autowired
+    private BasRgvService basRgvService;
+    @Autowired
+    private MainServiceImpl mainService;
+    @Autowired
+    private LocMastService locMastService;
+
+    @PostMapping("/table/rgv/state")
+    @ManagerAuth(memo = "RGV淇℃伅琛�")
+    public R rgvStateTable(){
+        List<RgvStateTableVo> list = new ArrayList<>();
+        List<BasRgv> rgvs = basRgvService.selectList(new EntityWrapper<BasRgv>().orderBy("rgv_no"));
+        for (BasRgv basRgv : rgvs) {
+            // 琛ㄦ牸琛�
+            RgvStateTableVo vo = new RgvStateTableVo();
+            vo.setRgvNo(basRgv.getRgvNo());   //  RGV鍙�
+            list.add(vo);
+            // 鑾峰彇RGV淇℃伅
+            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basRgv.getRgvNo());
+            if (rgvThread == null) {
+                continue;
+            }
+            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+            if (rgvProtocol == null) {
+                continue;
+            }
+            vo.setStatusType(rgvProtocol.modeType.desc);   //  妯″紡鐘舵��
+            vo.setStatus(rgvProtocol.getStatusType().desc);     //  鐘舵��
+            vo.setWorkNo1(rgvProtocol.getTaskNo1());  //  宸ヤ綅1浠诲姟鍙�
+            vo.setStatus1(rgvProtocol.getStatusType1().desc);  // 宸ヤ綅1鐘舵��
+            vo.setLoading1(rgvProtocol.getLoaded1()==1?"鏈夌墿":"鏃犵墿");  // 宸ヤ綅1鏈夌墿
+            vo.setRgvPos(rgvProtocol.getRgvPos());
+            vo.setWalkPos(rgvProtocol.getWalkPos()==1?"涓嶅湪瀹氫綅":"鍦ㄥ畾浣�");
+            vo.setWorkNo2(rgvProtocol.getTaskNo2());  //  宸ヤ綅2浠诲姟鍙�
+            vo.setStatus2(rgvProtocol.getStatusType2().desc);  // 宸ヤ綅2鐘舵��
+            vo.setLoading2(rgvProtocol.getLoaded2()==1?"鏈夌墿":"鏃犵墿");  // 宸ヤ綅2鏈夌墿
+
+            vo.setWarnCode(String.valueOf(rgvProtocol.getAlarm()));
+            if (rgvProtocol.getAlarm() > 0) {
+                BasRgvErr rgvErr = basRgvErrMapper.selectById(rgvProtocol.getAlarm());
+                vo.setAlarm(rgvErr==null?"鏈煡寮傚父":rgvErr.getErrName());
+            }
+        }
+        return R.ok().add(list);
+    }
+
+    @PostMapping("/table/rgv/msg")
+    @ManagerAuth(memo = "RGV鏁版嵁琛�")
+    public R rgvMsgTable(){
+        List<RgvMsgTableVo> list = new ArrayList<>();
+        List<BasRgv> rgvs = basRgvService.selectList(new EntityWrapper<BasRgv>().orderBy("rgv_no"));
+        for (BasRgv basRgv : rgvs) {
+            // 琛ㄦ牸琛�
+            RgvMsgTableVo vo = new RgvMsgTableVo();
+            vo.setRgvNo(basRgv.getRgvNo());   //  RGV鍙�
+            list.add(vo);
+            // 鑾峰彇RGV淇℃伅
+            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Crn, basRgv.getRgvNo());
+            if (rgvThread == null) {
+                continue;
+            }
+            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+            if (rgvProtocol == null) {
+                continue;
+            }
+
+            vo.setWorkNo1(rgvProtocol.getTaskNo1());  //  浠诲姟鍙�
+            if (rgvProtocol.getTaskNo1()>0) {
+                WrkMast wrkMast = wrkMastService.selectById(rgvProtocol.getTaskNo1());
+                if (wrkMast != null) {
+                    vo.setStatus(RgvStatusType.process(wrkMast.getIoType()).getDesc());   //  妯″紡鐘舵��
+                    vo.setSourceStaNo(wrkMast.getSourceStaNo$());    //  婧愮珯
+                    vo.setStaNo(wrkMast.getStaNo$());   //  鐩爣绔�
+                    vo.setSourceLocNo(wrkMast.getSourceLocNo());    //  婧愬簱浣�
+                    vo.setLocNo(wrkMast.getLocNo());    //  鐩爣搴撲綅
+                }
+            } else {
+                vo.setStatus(rgvProtocol.modeType.equals(RgvModeType.AUTO)? rgvProtocol.modeType.desc: RgvModeType.HAND.desc);   //  妯″紡鐘舵��
+            }
+            vo.setXspeed(rgvProtocol.getXSpeed());  //  璧拌閫熷害锛坢/min)
+            vo.setXdistance(rgvProtocol.getXDistance());  //  璧拌璺濈(Km)
+            vo.setXduration(rgvProtocol.getXDuration());    //  璧拌鏃堕暱(H)
+        }
+        return R.ok().add(list);
+    }
+
+    @PostMapping("/output/site")
+    @ManagerAuth(memo = "RGV鎶ユ枃鏃ュ織杈撳嚭")
+    public R rgvOutput(){
+        StringBuilder str = new StringBuilder();
+        String s;
+        int i = 0;
+        while((s = OutputQueue.CRN.poll()) != null && i <=10) {
+            str.append("\n").append(s);
+            i++;
+        }
+        return R.ok().add(str.toString());
+    }
+
+    @GetMapping("/demo/status")
+    public R demoStatus(){
+        List<Map<String, Object>> res = new ArrayList<>();
+        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("rgvNo", rgvSlave.getId());
+            map.put("demo", rgvSlave.getDemo());
+            res.add(map);
+        }
+        return R.ok().add(res);
+    }
+
+    /****************************************************************/
+    /************************** 鎵嬪姩鎿嶄綔 ******************************/
+    /****************************************************************/
+
+    @ManagerAuth(memo = "鍙栨斁璐�")
+    @PostMapping("/operator/put")
+    public R rgvFetchPut(RgvOperatorParam param){
+        RgvCommand command = new RgvCommand();
+        command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
+        command.setAckFinish1((short) 0);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+        command.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
+        command.setSourceStaNo1(param.getSourceStaNo1()); // 婧愮珯
+        command.setDestinationStaNo1(param.getStaNo1());  // 鐩爣绔�
+        command.setAckFinish2((short) 0);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
+        command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
+        command.setSourceStaNo2(param.getSourceStaNo2()); // 婧愮珯
+        command.setDestinationStaNo2(param.getStaNo2());  // 鐩爣绔�
+        command.setCommand((short) 0);
+
+        return rgvControl(command)?R.ok():R.error();
+    }
+
+    @ManagerAuth(memo = "鍙栬揣")
+    @PostMapping("/operator/take")
+    public R rgvFetch(RgvOperatorParam param){
+        RgvCommand command = new RgvCommand();
+        command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
+        command.setAckFinish1((short) 0);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+        command.setTaskMode1(RgvTaskModeType.FETCH); // 浠诲姟妯″紡: 鍙栬揣
+        command.setSourceStaNo1(param.getSourceStaNo1()); // 婧愮珯
+        command.setDestinationStaNo1(param.getStaNo1());  // 鐩爣绔�
+        command.setAckFinish2((short) 0);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
+        command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
+        command.setSourceStaNo2(param.getSourceStaNo2()); // 婧愮珯
+        command.setDestinationStaNo2(param.getStaNo2());  // 鐩爣绔�
+        command.setCommand((short) 0);
+
+        return rgvControl(command)?R.ok():R.error();
+    }
+
+    @ManagerAuth(memo = "鏀捐揣")
+    @PostMapping("/operator/stockMove")
+    public R rgvPut(RgvOperatorParam param){
+        RgvCommand command = new RgvCommand();
+        command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
+        command.setAckFinish1((short) 0);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+        command.setTaskMode1(RgvTaskModeType.PUT); // 浠诲姟妯″紡: 鏀捐揣
+        command.setSourceStaNo1(param.getSourceStaNo1()); // 婧愮珯
+        command.setDestinationStaNo1(param.getStaNo1());  // 鐩爣绔�
+        command.setAckFinish2((short) 0);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
+        command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
+        command.setSourceStaNo2(param.getSourceStaNo2()); // 婧愮珯
+        command.setDestinationStaNo2(param.getStaNo2());  // 鐩爣绔�
+        command.setCommand((short) 0);
+
+        return rgvControl(command)?R.ok():R.error();
+    }
+
+    @ManagerAuth(memo = "浠诲姟瀹屾垚")
+    @PostMapping("/operator/taskComplete")
+    public R rgvTaskComplete(RgvOperatorParam param){
+        RgvCommand command = new RgvCommand();
+        command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
+        command.setAckFinish1((short) 1);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+        command.setTaskMode1(RgvTaskModeType.NONE); // 浠诲姟妯″紡
+        command.setSourceStaNo1((short) 0); // 婧愮珯
+        command.setDestinationStaNo1((short) 0);  // 鐩爣绔�
+        command.setAckFinish2((short) 1);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
+        command.setTaskMode2(RgvTaskModeType.NONE); // 浠诲姟妯″紡
+        command.setSourceStaNo2((short) 0); // 婧愮珯
+        command.setDestinationStaNo2((short) 0);  // 鐩爣绔�
+        command.setCommand((short) 0);
+
+        return rgvControl(command)?R.ok():R.error();
+    }
+
+    @ManagerAuth(memo = "娓呴櫎鍛戒护")
+    @PostMapping("/operator/clearCommand")
+    public R rgvClearCommand(RgvOperatorParam param){
+        if (param.getRgvNo() == null) {
+            throw new CoolException("璇烽�夋嫨RGV鍙�");
+        }
+        RgvCommand command = new RgvCommand();
+        command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
+        command.setAckFinish1((short) 0);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+        command.setTaskMode1(RgvTaskModeType.NONE); // 浠诲姟妯″紡
+        command.setSourceStaNo1((short) 0); // 婧愮珯
+        command.setDestinationStaNo1((short) 0);  // 鐩爣绔�
+        command.setAckFinish2((short) 0);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
+        command.setTaskMode2(RgvTaskModeType.NONE); // 浠诲姟妯″紡
+        command.setSourceStaNo2((short) 0); // 婧愮珯
+        command.setDestinationStaNo2((short) 0);  // 鐩爣绔�
+        command.setCommand((short) 0);
+
+        return rgvControl(command)?R.ok():R.error();
+    }
+
+    @ManagerAuth(memo = "鎵嬪姩澶嶄綅")
+    @PostMapping("/operator/handleReset")
+    public R handleReset(RgvOperatorParam param) throws Exception {
+        if (param.getRgvNo() == null) {
+            throw new CoolException("璇烽�夋嫨RGV");
+        }
+        // 鑾峰彇RGV缂撳瓨
+        for (RgvSlave rgv : slaveProperties.getRgv()) {
+            // 鑾峰彇RGV淇℃伅
+            if (param.getRgvNo().equals(rgv.getId())) {
+                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
+                if (rgvThread == null) {
+                    throw new CoolException("RGV涓嶅湪绾�");
+                }
+                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+                if (rgvProtocol == null) {
+                    throw new CoolException("RGV涓嶅湪绾�");
+                }
+                RgvCommand Command = new RgvCommand();
+                Command.setRgvNo(rgv.getId()); // RGV缂栧彿
+                Command.setTaskMode1(RgvTaskModeType.NONE);
+                Command.setAckFinish1((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                Command.setAckFinish2((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                Command.setCommand((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                // 寤舵椂鍙戦��
+                Thread.sleep(1000L);
+                if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(2, Command))) {
+                    return R.ok();
+                } else {
+                    throw new CoolException("鍛戒护涓嬪彂澶辫触");
+                }
+
+            }
+        }
+        return R.error();
+    }
+
+    private boolean rgvControl(RgvCommand command){
+        if (command.getRgvNo() == null) {
+            throw new CoolException("璇烽�夋嫨RGV");
+        }
+        for (RgvSlave rgv : slaveProperties.getRgv()) {
+            // 鑾峰彇RGV淇℃伅
+            if (command.getRgvNo().equals(rgv.getId())) {
+                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
+                if (rgvThread == null) {
+                    throw new CoolException("RGV涓嶅湪绾�");
+                }
+                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+                if (rgvProtocol == null) {
+                    throw new CoolException("RGV涓嶅湪绾�");
+                }
+                if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(2, command))) {
+                    return true;
+                } else {
+                    throw new CoolException("鍛戒护涓嬪彂澶辫触");
+                }
+            }
+        }
+        return false;
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/zy/asrs/domain/enums/RgvStatusType.java b/src/main/java/com/zy/asrs/domain/enums/RgvStatusType.java
new file mode 100644
index 0000000..ee4e2ce
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/enums/RgvStatusType.java
@@ -0,0 +1,43 @@
+package com.zy.asrs.domain.enums;
+
+/**
+ * RGV鐘舵�佹灇涓�
+ */
+public enum RgvStatusType {
+
+    // 鍏ュ簱
+    MACHINE_PAKIN("鍏ュ簱"),
+    // 鍑哄簱
+    MACHINE_PAKOUT("鍑哄簱"),
+    // 寮傚父
+    MACHINE_ERROR("寮傚父"),
+    // 鑷姩
+    MACHINE_AUTO("鑷姩"),
+    // 闈炶嚜鍔�/鎵嬪姩
+    MACHINE_UN_AUTO("闈炶嚜鍔�"),
+    ;
+
+    private String desc;
+    RgvStatusType(String desc){
+        this.desc = desc;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        this.desc = desc;
+    }
+
+    public static RgvStatusType process(Integer ioType){
+        if (ioType>100) {
+            return MACHINE_PAKOUT;
+        } else if (ioType < 100 && ioType!=3 && ioType!=6 && ioType!=11) {
+            return MACHINE_PAKIN;
+        } else {
+            return MACHINE_ERROR;
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/domain/param/RgvOperatorParam.java b/src/main/java/com/zy/asrs/domain/param/RgvOperatorParam.java
new file mode 100644
index 0000000..3b0881f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/param/RgvOperatorParam.java
@@ -0,0 +1,25 @@
+package com.zy.asrs.domain.param;
+
+import lombok.Data;
+
+/**
+ * Created by vincent on 2020-06-02
+ */
+@Data
+public class RgvOperatorParam {
+
+    // RGV鍙�
+    private Integer rgvNo;
+
+    // 宸ヤ綅1婧愮珯
+    private Short sourceStaNo1;
+
+    // 宸ヤ綅1鐩爣绔�
+    private Short staNo1;
+
+    // 宸ヤ綅2婧愮珯
+    private Short sourceStaNo2;
+
+    // 宸ヤ綅2鐩爣绔�
+    private Short staNo2;
+}
diff --git a/src/main/java/com/zy/asrs/domain/vo/RgvMsgTableVo.java b/src/main/java/com/zy/asrs/domain/vo/RgvMsgTableVo.java
new file mode 100644
index 0000000..36c298d
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/vo/RgvMsgTableVo.java
@@ -0,0 +1,62 @@
+package com.zy.asrs.domain.vo;
+
+import com.zy.asrs.utils.Utils;
+import lombok.Data;
+
+/**
+ * Created by vincent on 2020-06-02
+ */
+@Data
+public class RgvMsgTableVo {
+
+        // RGV鍙�
+    private Integer rgvNo;
+
+    // 宸ヤ綔鍙�
+    private Short workNo1 = 0;
+
+    // 鐘舵��
+    private String status = "-";
+
+    // 婧愮珯
+    private String sourceStaNo = "-";
+
+    // 鐩爣绔�
+    private String staNo = "-";
+
+    // 婧愬簱浣�
+    private String sourceLocNo = "-";
+
+    // 鐩爣搴撲綅
+    private String locNo = "-";
+
+    // 寮傚父
+    private String error = "";
+
+    // 鍘熺偣
+    private String origin = "";
+
+    // 鍛戒护
+    private String command = "";
+
+    // 璧拌閫熷害锛坢/min)
+    private Float xspeed = 0.0F;
+
+    // 璧拌璺濈(Km)
+    private Float xdistance = 0.0F;
+
+    // 璧拌鏃堕暱(H)
+    private Float xduration = 0.0F;
+
+    public void setXspeed(Float xspeed) {
+        this.xspeed = Utils.scale(xspeed);
+    }
+
+    public void setXdistance(Float xdistance) {
+        this.xdistance = Utils.scale(xdistance);
+    }
+
+    public void setXduration(Float xduration) {
+        this.xduration = Utils.scale(xduration);
+    }
+}
diff --git a/src/main/java/com/zy/asrs/domain/vo/RgvStateTableVo.java b/src/main/java/com/zy/asrs/domain/vo/RgvStateTableVo.java
new file mode 100644
index 0000000..6329714
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/vo/RgvStateTableVo.java
@@ -0,0 +1,50 @@
+package com.zy.asrs.domain.vo;
+
+import lombok.Data;
+
+/**
+ * Created by vincent on 2020-06-02
+ */
+@Data
+public class RgvStateTableVo {
+
+    // RGV鍙�
+    private Integer RgvNo;
+
+    // 妯″紡
+    private String statusType = "-";
+
+    // 鐘舵��
+    private String status = "-";
+
+    // 浠诲姟鍙�
+    private Short workNo1 = 0;
+
+    // 鐘舵��
+    private String status1 = "-";
+
+    // 鏈夌墿
+    private String loading1 = "-";
+
+    // RGV浣嶇疆
+    private Short RgvPos = 0;
+
+    // 璧拌瀹氫綅
+    private String walkPos = "-";
+
+    // 浠诲姟鍙�
+    private Short workNo2 = 0;
+
+    // 鐘舵��
+    private String status2 = "-";
+
+    // 鏈夌墿
+    private String loading2 = "-";
+
+    //寮傚父
+    private String warnCode;
+
+    // 寮傚父鐮佹弿杩�
+    private String alarm = "-";
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/BasRgvErr.java b/src/main/java/com/zy/asrs/entity/BasRgvErr.java
new file mode 100644
index 0000000..d9558ea
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/BasRgvErr.java
@@ -0,0 +1,127 @@
+package com.zy.asrs.entity;
+
+import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.core.common.SpringUtils;
+import com.zy.system.service.UserService;
+import com.zy.system.entity.User;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import org.springframework.format.annotation.DateTimeFormat;
+import com.core.common.SpringUtils;
+import com.zy.system.service.UserService;
+import com.zy.system.entity.User;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@Data
+@TableName("asr_bas_rgv_err")
+public class BasRgvErr implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 寮傚父鐮�
+     */
+    @ApiModelProperty(value= "寮傚父鐮�")
+    @TableId(value = "error_code", type = IdType.INPUT)
+    @TableField("error_code")
+    private Long errorCode;
+
+    /**
+     * 寮傚父
+     */
+    @ApiModelProperty(value= "寮傚父")
+    @TableField("err_name")
+    private String errName;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    @TableField("modi_user")
+    private Long modiUser;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("modi_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date modiTime;
+
+    /**
+     * 娣诲姞浜哄憳
+     */
+    @ApiModelProperty(value= "娣诲姞浜哄憳")
+    @TableField("appe_user")
+    private Long appeUser;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @TableField("appe_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date appeTime;
+
+    public BasRgvErr() {}
+
+    public BasRgvErr(Long errorCode,String errName,Long modiUser,Date modiTime,Long appeUser,Date appeTime) {
+        this.errorCode = errorCode;
+        this.errName = errName;
+        this.modiUser = modiUser;
+        this.modiTime = modiTime;
+        this.appeUser = appeUser;
+        this.appeTime = appeTime;
+    }
+
+//    BasRgvErr basRgvErr = new BasRgvErr(
+//            null,    // 寮傚父鐮乕闈炵┖]
+//            null,    // 寮傚父
+//            null,    // 淇敼浜哄憳
+//            null,    // 淇敼鏃堕棿
+//            null,    // 娣诲姞浜哄憳
+//            null    // 娣诲姞鏃堕棿
+//    );
+
+    public String getModiUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.modiUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+    public String getModiTime$(){
+        if (Cools.isEmpty(this.modiTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime);
+    }
+
+    public String getAppeUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.appeUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+    public String getAppeTime$(){
+        if (Cools.isEmpty(this.appeTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/BasRgvErrMapper.java b/src/main/java/com/zy/asrs/mapper/BasRgvErrMapper.java
new file mode 100644
index 0000000..4b3a44e
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/BasRgvErrMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.BasRgvErr;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface BasRgvErrMapper extends BaseMapper<BasRgvErr> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/BasRgvErrService.java b/src/main/java/com/zy/asrs/service/BasRgvErrService.java
new file mode 100644
index 0000000..754bb63
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/BasRgvErrService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.BasRgvErr;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface BasRgvErrService extends IService<BasRgvErr> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/BasRgvErrServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasRgvErrServiceImpl.java
new file mode 100644
index 0000000..dcf62fd
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/BasRgvErrServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.zy.asrs.mapper.BasRgvErrMapper;
+import com.zy.asrs.entity.BasRgvErr;
+import com.zy.asrs.service.BasRgvErrService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("basRgvErrService")
+public class BasRgvErrServiceImpl extends ServiceImpl<BasRgvErrMapper, BasRgvErr> implements BasRgvErrService {
+
+}
diff --git a/src/main/java/com/zy/common/CodeBuilder.java b/src/main/java/com/zy/common/CodeBuilder.java
index 4de55a1..d0c963a 100644
--- a/src/main/java/com/zy/common/CodeBuilder.java
+++ b/src/main/java/com/zy/common/CodeBuilder.java
@@ -20,7 +20,7 @@
         generator.url="localhost:1433;databasename=xjhsasrs";
         generator.username="sa";
         generator.password="sa@123";
-        generator.table="asr_bas_rgv_opt";
+        generator.table="asr_bas_rgv_err";
         generator.packagePath="com.zy.asrs";
 
         generator.controller = false;
diff --git a/src/main/java/com/zy/core/enums/RgvTaskModeType.java b/src/main/java/com/zy/core/enums/RgvTaskModeType.java
index d5975d0..e5d2748 100644
--- a/src/main/java/com/zy/core/enums/RgvTaskModeType.java
+++ b/src/main/java/com/zy/core/enums/RgvTaskModeType.java
@@ -5,7 +5,7 @@
     NONE(0),    // 鏃�
     FETCH(1),    // 鍙栬揣
     PUT(2),    // 鏀捐揣
-    FETCH_PUT(3),    // 搴撲綅绉昏浆
+    FETCH_PUT(3),    // 鍙栨斁璐�
 //    X_MOVE(4),    // 绔欎綅绉昏浆
 //    Y_MOVE(5),    // 绔欎綅绉昏浆
 //    XY_MOVE(6),    // 绔欎綅绉昏浆
diff --git a/src/main/resources/mapper/BasRgvErrMapper.xml b/src/main/resources/mapper/BasRgvErrMapper.xml
new file mode 100644
index 0000000..c3eb284
--- /dev/null
+++ b/src/main/resources/mapper/BasRgvErrMapper.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.BasRgvErrMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasRgvErr">
+        <result column="error_code" property="errorCode" />
+        <result column="err_name" property="errName" />
+        <result column="modi_user" property="modiUser" />
+        <result column="modi_time" property="modiTime" />
+        <result column="appe_user" property="appeUser" />
+        <result column="appe_time" property="appeTime" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/webapp/views/index.html b/src/main/webapp/views/index.html
index 2d8640c..0af4762 100644
--- a/src/main/webapp/views/index.html
+++ b/src/main/webapp/views/index.html
@@ -17,6 +17,7 @@
             <li><a id="console" onclick="nav(this.id)" class="nav-select" href="#">涓绘帶鍥�</a></li>
             <li><a id="pipeline" onclick="nav(this.id)" class="nav-unselect" href="#">杈撻�佽澶�</a></li>
             <li><a id="crn" onclick="nav(this.id)" class="nav-unselect" href="#">鍫嗗灈鏈�</a></li>
+            <li><a id="rgv" onclick="nav(this.id)" class="nav-unselect" href="#">RGV</a></li>
         </ul>
     </div>
 </div>
diff --git a/src/main/webapp/views/rgv.html b/src/main/webapp/views/rgv.html
new file mode 100644
index 0000000..f5e66e6
--- /dev/null
+++ b/src/main/webapp/views/rgv.html
@@ -0,0 +1,644 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>鍫嗗灈鏈虹洃鎺х鐞�</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" type="text/css" href="../static/css/normalize.css">
+    <link rel="stylesheet" type="text/css" href="../static/css/common.css">
+    <link rel="stylesheet" type="text/css" href="../static/css/crn.css">
+    <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>
+    <script type="text/javascript" src="../static/js/common.js"></script>
+    <script type="text/javascript" src="../static/js/layer/layer.js"></script>
+    <style>
+        .demoBtn {
+            vertical-align: middle;
+            width: 20%;
+            height: 25px;
+            left: 0;
+            top: 0;
+            text-shadow: inherit;
+            font-size: 15px;
+            margin-left: 5px;
+            margin-right: 5px;
+            display: inline-block;
+            background-color: #FF5722;
+            border: none;
+            color: #FFF;
+            box-shadow: 1px 1px 5px #B6B6B6;
+            border-radius: 3px;
+            cursor: pointer;
+        }
+
+        .demoBtn:hover {
+            opacity: 0.8
+        }
+        .demoBtn:focus {
+            outline: 0;
+        }
+    </style>
+</head>
+<body>
+<div style="padding: 10px;height: 100%;float: left;width: 6%">
+    <div class="button-window"></div>
+</div>
+<div style="height: 100%;padding-left: 6%">
+    <div style="padding: 10px;height: 100%">
+        <!-- 鏃ュ織鐩戞帶鏉� -->
+        <div class="log-board">
+            <!-- 鎵ц鍛戒护 -->
+
+            <!-- 鎵ц鍛戒护 -->
+            <div class="command-log">
+                <h3>鎵ц涓殑鍛戒护</h3>
+                <div class="crn-command-item">
+                    <label>1#</label>
+                    <button id="demoBtn-1" class="demoBtn" onclick="demoSwitch(this.id)"> - </button>
+                    <!--            <span>&nbsp;</span>-->
+                    <input id="crn1" disabled="disabled">
+                </div>
+                <div class="crn-command-item">
+                    <label>2#</label>
+                    <button id="demoBtn-2" class="demoBtn" onclick="demoSwitch(this.id)"> - </button>
+                    <!--            <span>&nbsp;</span>-->
+                    <input id="crn2" disabled="disabled">
+                </div>
+                <div class="crn-command-item">
+                    <label>3#</label>
+                    <button id="demoBtn-3" class="demoBtn" onclick="demoSwitch(this.id)"> - </button>
+                    <!--            <span>&nbsp;</span>-->
+                    <input id="crn3" disabled="disabled">
+                </div>
+                <div class="crn-command-item">
+                    <label>4#</label>
+                    <button id="demoBtn-4" class="demoBtn" onclick="demoSwitch(this.id)"> - </button>
+                    <!--            <span>&nbsp;</span>-->
+                    <input id="crn4" disabled="disabled">
+                </div>
+                <div class="crn-command-item">
+                    <label>5#</label>
+                    <button id="demoBtn-5" class="demoBtn" onclick="demoSwitch(this.id)"> - </button>
+                    <!--            <span>&nbsp;</span>-->
+                    <input id="crn5" disabled="disabled">
+                </div>
+            </div>
+            <!-- 鍫嗗灈鏈虹姸鎬佷綅淇℃伅 -->
+            <div class="crn-state">
+                <table id="crn-state-table">
+                    <thead>
+                    <tr>
+                        <th>鍫嗗灈鏈�</th>
+                        <th>妯″紡</th>
+                        <th>鐘舵��</th>
+                        <th>鏈夌墿</th>
+                        <th>鍒�</th>
+                        <th>灞�</th>
+                        <th>璐у弶瀹氫綅</th>
+                        <th>杞借揣鍙板畾浣�</th>
+                        <th>璧拌鍦ㄥ畾浣�</th>
+                        <th>鏁呴殰浠g爜</th>
+                        <th>鏁呴殰鎻忚堪</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    </tbody>
+                </table>
+            </div>
+        </div>
+        <!-- 鍫嗗灈鏈虹姸鎬� -->
+        <div class="crn-msg">
+            <table id="crn-msg-table">
+                <thead>
+                <tr>
+                    <th>鍫嗗灈鏈�</th>
+                    <th>宸ヤ綔鍙�</th>
+                    <th>鐘舵��</th>
+                    <th>婧愮珯</th>
+                    <th>鐩爣绔�</th>
+                    <th>婧愬簱浣�</th>
+                    <th>鐩爣搴撲綅</th>
+<!--                    <th>璧拌閫熷害锛坢/min)</th>-->
+<!--                    <th>鍗囬檷閫熷害锛坢/min)</th>-->
+<!--                    <th>鍙夌墮閫熷害锛坢/min)</th>-->
+<!--                    <th>璧拌璺濈(Km)</th>-->
+<!--                    <th>鍗囬檷璺濈(Km)</th>-->
+<!--                    <th>璧拌鏃堕暱(H)</th>-->
+<!--                    <th>鍗囬檷鏃堕暱(H)</th>-->
+                </tr>
+                </thead>
+                <tbody>
+                </tbody>
+            </table>
+        </div>
+        <!-- 鎵嬪姩鎿嶄綔 -->
+        <div class="crn-operation">
+
+            <!-- 閬僵灞� -->
+            <div class="crn-operation-shade">
+        <span class="crn-operation-shade-span">
+            WCS 绯荤粺杩愯涓紝璇峰仠姝㈠悗鎿嶄綔
+        </span>
+            </div>
+
+            <!-- 璁惧浠诲姟閫夋嫨 -->
+            <div class="task-select">
+                <!-- 鍫嗗灈鏈洪�夋嫨 -->
+                <div id="crn-select" class="operator-item" style="width: 55%">
+                    <span class="select-title">鍫嗗灈鏈哄彿</span>
+                    <div class="select-container" style="padding: 20px 0;">
+                        <label><input type="radio" name="crnSelect" value="1" checked>&nbsp;1鍙峰爢鍨涙満</label>
+                        <label><input type="radio" name="crnSelect" value="2">&nbsp;2鍙峰爢鍨涙満</label>
+                        <label><input type="radio" name="crnSelect" value="3">&nbsp;3鍙峰爢鍨涙満</label>
+                        <label><input type="radio" name="crnSelect" value="4">&nbsp;4鍙峰爢鍨涙満</label>
+                        <label><input type="radio" name="crnSelect" value="5">&nbsp;5鍙峰爢鍨涙満</label>
+                    </div>
+                </div>
+                <!-- 婧愮珯/婧愬簱浣� 閫夋嫨 -->
+                <div id="source-select" class="operator-item">
+                    <span class="select-title">婧愮珯/婧愬簱浣�</span>
+                    <div class="select-container">
+                        <div class="select-container-item">
+                            <span>绔�</span>
+                            <label><input id="sourceStaNo" type="number" name="points" min="0" /></label>
+                        </div>
+                        <div class="select-container-item">
+                            <span>鎺�</span>
+                            <label><input id="sourceRow" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label>
+                        </div>
+                        <div class="select-container-item">
+                            <span>鍒�</span>
+                            <label><input id="sourceBay" type="number" name="points" min="0" style="background-color: #a9eeff" value="0" /></label>
+                        </div>
+                        <div class="select-container-item">
+                            <span>灞�</span>
+                            <label><input id="sourceLev" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label>
+                        </div>
+                    </div>
+                </div>
+                <!-- 鐩爣绔�/鐩爣搴撲綅 閫夋嫨 -->
+                <div id="target-select" class="operator-item">
+                    <span class="select-title">鐩爣绔�/鐩爣搴撲綅</span>
+                    <div class="select-container">
+                        <div class="select-container-item">
+                            <span>绔�</span>
+                            <label><input id="staNo" type="number" name="points" min="0" /></label>
+                        </div>
+                        <div class="select-container-item">
+                            <span>鎺�</span>
+                            <label><input id="row" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label>
+                        </div>
+                        <div class="select-container-item">
+                            <span>鍒�</span>
+                            <label><input id="bay" type="number" name="points" min="0" style="background-color: #a9eeff" value="0" /></label>
+                        </div>
+                        <div class="select-container-item">
+                            <span>灞�</span>
+                            <label><input id="lev" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <!-- 璁惧浠诲姟鎿嶄綔 -->
+            <div class="task-operator">
+                <fieldset>
+                    <legend>鎵嬪姩鎿嶄綔</legend>
+                    <div class="button-group">
+                        <button class="item" onclick="put()">鍏ュ簱</button>
+                        <button class="item" onclick="take()">鍑哄簱</button>
+                        <button class="item" onclick="stockMove()">搴撲綅杞Щ</button>
+                        <button class="item" onclick="siteMove()">绔欏埌绔�</button>
+                        <!--                <button class="item" onclick="bacOrigin()">鍥炲師鐐�</button>-->
+                        <!--                <button class="item" onclick="reverseOrigin()">鍙嶅師鐐�</button>-->
+                        <!--                <button class="item" onclick="coorMove()">鍧愭爣绉昏</button>-->
+                        <button class="item" onclick="taskComplete()">浠诲姟瀹屾垚</button>
+                        <!--                <button class="item" onclick="pause()">鏆傚仠</button>-->
+                        <!--                <button class="item" onclick="boot()">鍚姩</button>-->
+                        <button class="item" onclick="clearCommand()">娓呴櫎鍛戒护</button>
+                        <button class="item" onclick="handleReset()">澶嶄綅</button>
+                    </div>
+                </fieldset>
+            </div>
+
+        </div>
+        <!-- 鍫嗗灈鏈烘棩蹇楄緭鍑� -->
+        <div class="crn-output-board">
+            <textarea id="crn-output"></textarea>
+        </div>
+    </div>
+</div>
+</body>
+<script>
+    // 绌虹櫧琛屾暟
+    var crnStateTableBlankRows = 0;
+    var crnMsgTableBlankRows = 0;
+    // 瀹為檯琛屾暟
+    var crnStateTableFullRows = 0;
+    var crnMsgTableFullRows = 0;
+    // 鍒濆鍖�
+    var crnOutputDom = document.getElementById("crn-output");
+    $(document).ready(function() {
+        getCommandLog();
+        initCrnStateTable();
+        getCrnStateInfo();
+        initCrnMsgTable();
+        getCrnMsgInfo();
+        operatorBlockShow();
+    });
+    // 鏁版嵁鏇存柊
+    setInterval(function () {
+        getCrnStateInfo();
+        getCrnMsgInfo();
+        getCommandLog();
+    },1000);
+    setInterval(function () {
+        getCrnOutput();
+        operatorBlockShow();
+        initDemo();
+    },500);
+
+    // 鍒ゆ柇鎵嬪姩鎿嶄綔妯″潡鏄惁鍙敤
+    function operatorBlockShow() {
+        if (parent.systemRunning) {
+            $('.crn-operation').css("opacity", "0.5");
+            $('.crn-operation-shade').show();
+            $('.crn-operation-shade-span').show();
+        }  else {
+            $('.crn-operation').css("opacity", "1");
+            $('.crn-operation-shade').hide();
+            $('.crn-operation-shade-span').hide();
+        }
+    }
+
+    // 鑾峰彇鍫嗗灈鏈烘墽琛屼腑鐨勫懡浠�
+    function getCommandLog() {
+        $.ajax({
+            url: baseUrl + "/crn/command/ongoing",
+            headers: {'token': localStorage.getItem('token')},
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200) {
+                    var commands = res.data;
+                    for (var i=0; i<commands.length;i++){
+                        $("#crn"+commands[i].crnNo).val(commands[i].command);
+                    }
+                } else if (res.code === 403) {
+                    window.location.href = baseUrl + "/login";
+                } else {
+                    console.log(res.msg);
+                }
+            }
+        })
+    }
+
+    // 鍫嗗灈鏈轰俊鎭〃鑾峰彇 ---- 琛ㄤ竴
+    function getCrnStateInfo() {
+        var tableEl = $('#crn-state-table');
+        $.ajax({
+            url: baseUrl+ "/crn/table/crn/state",
+            headers: {'token': localStorage.getItem('token')},
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    var table = res.data;
+                    if (table.length > crnStateTableBlankRows && table.length !== crnStateTableFullRows) {
+                        initCrnStateTable(table.length-crnStateTableBlankRows);
+                        crnStateTableFullRows = table.length;
+                    }
+                    for (var i=1;i<=table.length;i++){
+                        var tr = tableEl.find("tr").eq(i);
+                        setVal(tr.children("td").eq(0), table[i-1].crnNo);
+                        setVal(tr.children("td").eq(1), table[i-1].statusType);
+                        setVal(tr.children("td").eq(2), table[i-1].status);
+                        setVal(tr.children("td").eq(3), table[i-1].loading);
+                        setVal(tr.children("td").eq(4), table[i-1].bay);
+                        setVal(tr.children("td").eq(5), table[i-1].lev);
+                        setVal(tr.children("td").eq(6), table[i-1].forkOffset);
+                        setVal(tr.children("td").eq(7), table[i-1].liftPos);
+                        setVal(tr.children("td").eq(8), table[i-1].walkPos);
+                        setVal(tr.children("td").eq(9), table[i-1].warnCode);
+                        setVal(tr.children("td").eq(10), table[i-1].alarm);
+                    }
+                } else if (res.code === 403){
+                    window.location.href = baseUrl+"/login";
+                }  else {
+                    console.log(res.msg);
+                }
+            }
+        });
+    }
+
+    // 鍫嗗灈鏈烘暟鎹〃鑾峰彇 ---- 琛ㄤ簩
+    function getCrnMsgInfo() {
+        var tableEl = $('#crn-msg-table');
+        $.ajax({
+            url: baseUrl+ "/crn/table/crn/msg",
+            headers: {'token': localStorage.getItem('token')},
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    var table = res.data;
+                    if (table.length > crnStateTableBlankRows && table.length !== crnMsgTableFullRows) {
+                        initCrnStateTable(table.length-crnStateTableBlankRows);
+                        crnMsgTableFullRows = table.length;
+                    }
+                    for (var i=1;i<=table.length;i++){
+                        var tr = tableEl.find("tr").eq(i);
+                        setVal(tr.children("td").eq(0), table[i-1].crnNo);
+                        setVal(tr.children("td").eq(1), table[i-1].workNo);
+                        setVal(tr.children("td").eq(2), table[i-1].status);
+                        setVal(tr.children("td").eq(3), table[i-1].sourceStaNo);
+                        setVal(tr.children("td").eq(4), table[i-1].staNo);
+                        setVal(tr.children("td").eq(5), table[i-1].sourceLocNo);
+                        setVal(tr.children("td").eq(6), table[i-1].locNo);
+                        // setVal(tr.children("td").eq(7), table[i-1].xspeed);
+                        // setVal(tr.children("td").eq(8), table[i-1].yspeed);
+                        // setVal(tr.children("td").eq(9), table[i-1].zspeed);
+                        // setVal(tr.children("td").eq(10), table[i-1].xdistance);
+                        // setVal(tr.children("td").eq(11), table[i-1].ydistance);
+                        // setVal(tr.children("td").eq(12), table[i-1].xduration);
+                        // setVal(tr.children("td").eq(13), table[i-1].yduration);
+                    }
+                } else if (res.code === 403){
+                    window.location.href = baseUrl+"/login";
+                }  else {
+                    console.log(res.msg);
+                }
+            }
+        });
+    }
+
+    // 鍫嗗灈鏈烘墜鍔ㄦ搷浣滃尯 -----------------------------------------------------------------------
+
+    function getReqParam() {
+        var crnNo = $('input[name="crnSelect"]:checked').val();
+        var sourceStaNo = $('#sourceStaNo').val();
+        var sourceRow = $('#sourceRow').val();
+        var sourceBay = $('#sourceBay').val();
+        var sourceLev = $('#sourceLev').val();
+        var staNo = $('#staNo').val();
+        var row = $('#row').val();
+        var bay = $('#bay').val();
+        var lev = $('#lev').val();
+        return {
+            crnNo: crnNo,
+            sourceStaNo: sourceStaNo,
+            sourceRow: sourceRow,
+            sourceBay: sourceBay,
+            sourceLev: sourceLev,
+            staNo: staNo,
+            row: row,
+            bay: bay,
+            lev: lev
+        };
+    }
+
+    // 鍏ュ簱
+    function put() {
+        http.post(baseUrl+"/crn/operator/put", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鍑哄簱
+    function take() {
+        http.post(baseUrl+"/crn/operator/take", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 搴撲綅杞Щ
+    function stockMove() {
+        http.post(baseUrl+"/crn/operator/stockMove", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 绔欏埌绔�
+    function siteMove() {
+        http.post(baseUrl+"/crn/operator/siteMove", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鍧愭爣绉诲姩
+    function coorMove() {
+        http.post(baseUrl+"/crn/operator/coorMove", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鍥炲師鐐�
+    function bacOrigin() {
+        http.post(baseUrl+"/crn/operator/bacOrigin", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鍥炲師鐐�
+    function reverseOrigin() {
+        http.post(baseUrl+"/crn/operator/reverseOrigin", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 浠诲姟瀹屾垚
+    function taskComplete() {
+        http.post(baseUrl+"/crn/operator/taskComplete", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鏆傚仠
+    function pause() {
+        http.post(baseUrl+"/crn/operator/pause", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鍚姩
+    function boot() {
+        http.post(baseUrl+"/crn/operator/boot", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 娓呴櫎鍛戒护
+    function clearCommand() {
+        http.post(baseUrl+"/crn/operator/clearCommand", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鎵嬪姩澶嶄綅
+    function handleReset() {
+        http.post(baseUrl+"/crn/operator/handleReset", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 杈撻�佽澶囨棩蹇楄緭鍑� -----------------------------------------------------------------------
+    function getCrnOutput() {
+        $.ajax({
+            url: baseUrl + "/crn/output/site",
+            headers: {'token': localStorage.getItem('token')},
+            method: 'POST',
+            success: function (res) {
+                console.log(res)
+                if (res.code === 200) {
+                    crnOutput(res.data);
+                } else if (res.code === 403) {
+                    window.location.href = baseUrl + "/login";
+                } else {
+                    console.log(res.msg);
+                }
+            }
+        })
+    }
+
+    // ------------------------------------------------------------------------------------------------
+
+    // 鍫嗗灈鏈轰俊鎭〃鑾峰彇  ----- 琛ㄤ竴
+    function initCrnStateTable(row) {
+        var line;
+        if (row === undefined){
+            var one = $('#crn-state-table thead').height();
+            var total = $('.crn-state').height();
+            var count = total / one;
+            count = parseInt(count) - 1;
+            crnStateTableBlankRows = count;
+            line = count;
+        } else {
+            line = row;
+        }
+        var html = "";
+        for (var i = 0; i < line; i ++){
+            html += " <tr>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "     </tr>\n";
+        }
+        $('#crn-state-table tbody').after(html);
+    }
+
+    // 鍫嗗灈鏈烘暟鎹〃鑾峰彇  ----- 琛ㄤ簩
+    function initCrnMsgTable(row) {
+        var line;
+        if (row === undefined){
+            var one = $('#crn-msg-table thead').height();
+            var total = $('.crn-msg').height();
+            var count = total / one;
+            count = parseInt(count) - 1;
+            crnMsgTableBlankRows = count;
+            line = count;
+        } else {
+            line = row;
+        }
+        var html = "";
+        for (var i = 0; i < line; i ++){
+            html += " <tr>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "     </tr>\n";
+        }
+        $('#crn-msg-table tbody').after(html);
+    }
+
+    // 鏃ュ織杈撳嚭妗�
+    function crnOutput(content){
+        crnOutputDom.value += content;
+        crnOutputDom.scrollTop = crnOutputDom.scrollHeight;
+    }
+
+
+    var crnDemoData;
+    function initDemo() {
+        $.ajax({
+            url: baseUrl+"/crn/demo/status",
+            async: false,
+            method: 'GET',
+            success: function (res) {
+                if (res.code === 200) {
+                    crnDemoData = res.data;
+                    crnDemoData.forEach(function (e) {
+                        $("#demoBtn-"+e.crnNo).html(e.demo?'鍋滄':'婕旂ず');
+                    })
+                } else if (res.code === 403){
+                    parent.location.href = baseUrl+"/login";
+                }  else {
+                    layer.msg(res.msg, {icon: 2});
+                }
+            }
+        })
+    }
+
+    function demoSwitch(el) {
+        var crnId = el.split("-")[1];
+        var opt;
+        if (crnDemoData == null) {
+            initDemo();
+        }
+        for (var i = 0; i<crnDemoData.length; i++) {
+            if (Number(crnDemoData[i].crnNo) === Number(crnId)) {
+                opt = !crnDemoData[i].demo;
+            }
+        }
+        layer.confirm(crnId + ' 鍙峰爢鍨涙満纭畾'+ (opt?'寮�濮�':'鍋滄') + '婕旂ず鍚楋紵', function(){
+            doDemo(crnId, 'root', opt); // 鍋滄wcs绯荤粺
+        });
+    }
+
+    function doDemo(crnId, password, opt) {
+        // 鍔犺浇tips
+        var index = layer.load(1, {
+            shade: [0.1,'#fff']
+        });
+        $.ajax({
+            url: baseUrl+ "/crn/demo/switch",
+            headers: {'token': localStorage.getItem('token')},
+            // async: false,
+            data: {
+                crnId: Number(crnId),
+                password: password,
+                opt: opt
+            },
+            method: 'POST',
+            success: function (res) {
+                layer.close(index);
+                if (res.code === 200){
+                    layer.msg(res.msg, {icon: 1});
+                } else if (res.code === 403){
+                    window.location.href = baseUrl+"/login";
+                }  else {
+                    layer.msg(res.msg, {icon: 2});
+                }
+            }
+        });
+
+    }
+
+</script>
+</html>

--
Gitblit v1.9.1