From 6278a504fb7d4f3dfb1f6d5d2890304ab784d139 Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期一, 09 六月 2025 17:08:47 +0800
Subject: [PATCH] #

---
 src/main/resources/mapper/WrkMastLogMapper.xml                    |   69 
 src/main/java/com/zy/core/enums/RgvModeType.java                  |   43 
 src/main/java/com/zy/asrs/service/BasRgvErrService.java           |    8 
 src/main/resources/mapper/BasRgvOptMapper.xml                     |   28 
 src/main/java/com/zy/asrs/service/BasRgvService.java              |    8 
 src/main/java/com/zy/asrs/mapper/BasRgvErrMapper.java             |   12 
 src/main/java/com/zy/asrs/service/WrkMastLogService.java          |   10 
 src/main/webapp/static/css/rgv.css                                |  252 ++
 src/main/java/com/zy/core/model/command/RgvCommand.java           |   60 
 src/main/java/com/zy/asrs/entity/BasRgvErr.java                   |  127 +
 src/main/java/com/zy/asrs/service/BasRgvOptService.java           |    8 
 src/main/java/com/zy/asrs/domain/vo/RgvStateTableVo.java          |   53 
 src/main/java/com/zy/asrs/service/impl/BasRgvErrServiceImpl.java  |   12 
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java       |  322 ++-
 src/main/java/com/zy/asrs/mapper/BasRgvMapper.java                |   12 
 src/main/java/com/zy/core/cache/MessageQueue.java                 |   14 
 src/main/java/com/zy/asrs/domain/vo/RgvMsgTableVo.java            |   62 
 src/main/java/com/zy/asrs/entity/WrkMastLog.java                  |  618 ++++++
 src/main/webapp/views/rgv.html                                    |  589 ++++++
 src/main/java/com/zy/common/CodeBuilder.java                      |    6 
 src/main/java/com/zy/core/ServerBootstrap.java                    |   12 
 src/main/webapp/static/js/basRgvErr/basRgvErr.js                  |  260 ++
 src/main/java/com/zy/asrs/mapper/BasRgvOptMapper.java             |   12 
 src/main/java/com/zy/asrs/mapper/WrkMastLogMapper.java            |   16 
 src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java |   17 
 src/main/webapp/static/js/basRgvOpt/basRgvOpt.js                  |  272 +++
 src/main/java/com/zy/core/model/protocol/RgvProtocol.java         |  228 ++
 src/main/java/com/zy/asrs/entity/BasRgv.java                      |  209 ++
 src/main/resources/mapper/BasRgvErrMapper.xml                     |   16 
 src/main/java/com/zy/asrs/domain/enums/RgvStatusType.java         |   43 
 src/main/java/com/zy/asrs/domain/param/RgvOperatorParam.java      |   19 
 src/main/java/com/zy/core/model/RgvSlave.java                     |   57 
 src/main/webapp/static/js/wrkMastLog/wrkMastLog.js                |  363 ++++
 src/main/webapp/views/index.html                                  |    1 
 src/main/java/com/zy/core/enums/SlaveType.java                    |    1 
 src/main/java/com/zy/core/cache/OutputQueue.java                  |    2 
 src/main/java/com/zy/core/MainProcess.java                        |   17 
 src/main/java/com/zy/core/RgvThread2.java                         |    6 
 src/main/java/com/zy/core/enums/RgvStatusType.java                |   46 
 src/main/java/com/zy/asrs/controller/RgvController.java           |  295 +++
 src/main/java/com/zy/asrs/service/impl/BasRgvServiceImpl.java     |   12 
 src/main/java/com/zy/core/properties/SlaveProperties.java         |    3 
 src/main/java/com/zy/core/thread/RgvThread.java                   |  465 +++++
 src/main/java/com/zy/core/thread/SiemensCrnThread.java            |    2 
 src/main/resources/mapper/BasRgvMapper.xml                        |   24 
 src/main/webapp/static/js/basRgv/basRgv.js                        |  268 +++
 src/main/java/com/zy/asrs/entity/BasRgvOpt.java                   |  239 ++
 src/main/resources/application.yml                                |    8 
 src/main/java/com/zy/asrs/service/impl/BasRgvOptServiceImpl.java  |   12 
 src/main/java/com/zy/core/enums/RgvTaskModeType.java              |   47 
 50 files changed, 5,139 insertions(+), 146 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..9203d31
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/RgvController.java
@@ -0,0 +1,295 @@
+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.RgvMsgTableVo;
+import com.zy.asrs.domain.vo.RgvStateTableVo;
+import com.zy.asrs.entity.BasRgv;
+import com.zy.asrs.entity.BasRgvErr;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.mapper.BasRgvErrMapper;
+import com.zy.asrs.service.BasRgvService;
+import com.zy.asrs.service.WrkMastService;
+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.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 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;
+
+    @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.setRgvPos1(rgvProtocol.getRgvPosI());
+            vo.setWalkPos(rgvProtocol.getWalkPos()==1?"鍦ㄥ畾浣�":"涓嶅湪瀹氫綅");
+            vo.setPakMk(rgvThread.isPakMk()?"鏃犻攣":"閿佸畾");
+//            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.Rgv, basRgv.getRgvNo());
+            if (rgvThread == null) {
+                continue;
+            }
+            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+            if (rgvProtocol == null) {
+                continue;
+            }
+
+            vo.setWorkNo(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.RGV.poll()) != null && i <=10) {
+            str.append("\n").append(s);
+            i++;
+        }
+        return R.ok().add(str.toString());
+    }
+
+    /****************************************************************/
+    /************************** 鎵嬪姩鎿嶄綔 ******************************/
+    /****************************************************************/
+
+    @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.getSourceStaNo()); // 婧愮珯
+        command.setDestinationStaNo1(param.getStaNo());  // 鐩爣绔�
+        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.getSourceStaNo()); // 婧愮珯
+        command.setDestinationStaNo1(param.getStaNo());  // 鐩爣绔�
+        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.getSourceStaNo()); // 婧愮珯
+        command.setDestinationStaNo1(param.getStaNo());  // 鐩爣绔�
+        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.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.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.setCommand((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                // 寤舵椂鍙戦��
+                Thread.sleep(1000L);
+                if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(4, 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(4, 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..5bf8d9a
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/param/RgvOperatorParam.java
@@ -0,0 +1,19 @@
+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 sourceStaNo;
+
+    // 宸ヤ綅1鐩爣绔�
+    private Short staNo;
+}
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..10191ba
--- /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 workNo = 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..a205d5d
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/vo/RgvStateTableVo.java
@@ -0,0 +1,53 @@
+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 = "-";
+    private Integer RgvPos1 = 0;
+
+    private String pakMk="-";
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/BasRgv.java b/src/main/java/com/zy/asrs/entity/BasRgv.java
new file mode 100644
index 0000000..79e6b56
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/BasRgv.java
@@ -0,0 +1,209 @@
+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")
+public class BasRgv implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * RGV缂栧彿
+     */
+    @ApiModelProperty(value= "RGV缂栧彿")
+    @TableId(value = "rgv_no", type = IdType.INPUT)
+    @TableField("rgv_no")
+    private Integer rgvNo;
+
+    /**
+     * 鍙叆
+     */
+    @ApiModelProperty(value= "鍙叆")
+    @TableField("in_enable")
+    private Integer inEnable;
+
+    /**
+     * 鍙嚭
+     */
+    @ApiModelProperty(value= "鍙嚭")
+    @TableField("out_enable")
+    private Integer outEnable;
+
+    /**
+     * 浣滀笟鎬�
+     */
+    @ApiModelProperty(value= "浣滀笟鎬�")
+    @TableField("rgv_sts")
+    private Integer rgvSts;
+
+    /**
+     * 浠诲姟鍙�
+     */
+    @ApiModelProperty(value= "浠诲姟鍙�")
+    @TableField("wrk_no1")
+    private Integer wrkNo1;
+
+    /**
+     * 鍫嗗灈鏈哄彿
+     */
+    @ApiModelProperty(value= "鍫嗗灈鏈哄彿")
+    @TableField("wrk_no2")
+    private Integer wrkNo2;
+
+    /**
+     * 閿欒鐮�
+     */
+    @ApiModelProperty(value= "閿欒鐮�")
+    @TableField("rgv_err")
+    private Long rgvErr;
+
+    /**
+     * 鏍囪
+     */
+    @ApiModelProperty(value= "鏍囪")
+    @TableField("pak_mk")
+    private String pakMk;
+
+    /**
+     * 鐘舵�� 1: 姝e父  0: 绂佺敤  
+     */
+    @ApiModelProperty(value= "鐘舵�� 1: 姝e父  0: 绂佺敤  ")
+    private Integer status;
+
+    /**
+     * 娣诲姞浜哄憳
+     */
+    @ApiModelProperty(value= "娣诲姞浜哄憳")
+    @TableField("create_by")
+    private Long createBy;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @TableField("create_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    @TableField("update_by")
+    private Long updateBy;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("update_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    public BasRgv() {}
+
+    public BasRgv(Integer rgvNo,Integer inEnable,Integer outEnable,Integer rgvSts,Integer wrkNo1,Integer wrkNo2,Long rgvErr,String pakMk,Integer status,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
+        this.rgvNo = rgvNo;
+        this.inEnable = inEnable;
+        this.outEnable = outEnable;
+        this.rgvSts = rgvSts;
+        this.wrkNo1 = wrkNo1;
+        this.wrkNo2 = wrkNo2;
+        this.rgvErr = rgvErr;
+        this.pakMk = pakMk;
+        this.status = status;
+        this.createBy = createBy;
+        this.createTime = createTime;
+        this.updateBy = updateBy;
+        this.updateTime = updateTime;
+        this.memo = memo;
+    }
+
+//    BasRgv basRgv = new BasRgv(
+//            null,    // RGV缂栧彿[闈炵┖]
+//            null,    // 鍙叆
+//            null,    // 鍙嚭
+//            null,    // 浣滀笟鎬�
+//            null,    // 浠诲姟鍙�
+//            null,    // 鍫嗗灈鏈哄彿
+//            null,    // 閿欒鐮�
+//            null,    // 鏍囪
+//            null,    // 鐘舵��
+//            null,    // 娣诲姞浜哄憳
+//            null,    // 娣诲姞鏃堕棿
+//            null,    // 淇敼浜哄憳
+//            null,    // 淇敼鏃堕棿
+//            null    // 澶囨敞
+//    );
+
+    public String getStatus$(){
+        if (null == this.status){ return null; }
+        switch (this.status){
+            case 1:
+                return "姝e父";
+            case 0:
+                return "绂佺敤";
+            default:
+                return String.valueOf(this.status);
+        }
+    }
+
+    public String getCreateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.createBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getUpdateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.updateBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+
+}
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..4641344
--- /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.getUsername());
+        }
+        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.getUsername());
+        }
+        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/entity/BasRgvOpt.java b/src/main/java/com/zy/asrs/entity/BasRgvOpt.java
new file mode 100644
index 0000000..0ef3272
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/BasRgvOpt.java
@@ -0,0 +1,239 @@
+package com.zy.asrs.entity;
+
+import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableField;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import com.core.common.SpringUtils;
+import com.zy.system.service.UserService;
+import com.zy.system.entity.User;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@Data
+@TableName("asr_bas_rgv_opt")
+public class BasRgvOpt implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 浠诲姟鍙�
+     */
+    @ApiModelProperty(value= "浠诲姟鍙�")
+    @TableField("wrk_no1")
+    private Integer wrkNo1;
+
+    @ApiModelProperty(value= "")
+    @TableField("wrk_no2")
+    private Integer wrkNo2;
+
+    /**
+     * 绌挎杞�
+     */
+    @ApiModelProperty(value= "绌挎杞�")
+    @TableField("rgv_no")
+    private Integer rgvNo;
+
+    /**
+     * 涓嬪彂鏃堕棿
+     */
+    @ApiModelProperty(value= "涓嬪彂鏃堕棿")
+    @TableField("send_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date sendTime;
+
+    /**
+     * 浣滀笟
+     */
+    @ApiModelProperty(value= "浣滀笟")
+    private String mode;
+
+    /**
+     * 婧愭帓
+     */
+    @ApiModelProperty(value= "婧愭帓")
+    @TableField("source_row")
+    private Integer sourceRow;
+
+    /**
+     * 婧愬垪
+     */
+    @ApiModelProperty(value= "婧愬垪")
+    @TableField("source_bay")
+    private Integer sourceBay;
+
+    /**
+     * 婧愬眰
+     */
+    @ApiModelProperty(value= "婧愬眰")
+    @TableField("source_lev")
+    private Integer sourceLev;
+
+    /**
+     * 婧愮珯
+     */
+    @ApiModelProperty(value= "婧愮珯")
+    @TableField("source_sta")
+    private Integer sourceSta;
+
+    /**
+     * 鐩爣鎺�
+     */
+    @ApiModelProperty(value= "鐩爣鎺�")
+    @TableField("pos_row")
+    private Integer posRow;
+
+    /**
+     * 鐩爣鍒�
+     */
+    @ApiModelProperty(value= "鐩爣鍒�")
+    @TableField("pos_bay")
+    private Integer posBay;
+
+    /**
+     * 鐩爣灞�
+     */
+    @ApiModelProperty(value= "鐩爣灞�")
+    @TableField("pos_lev")
+    private Integer posLev;
+
+    /**
+     * 鐩爣绔�
+     */
+    @ApiModelProperty(value= "鐩爣绔�")
+    @TableField("pos_sta")
+    private Integer posSta;
+
+    /**
+     * 鍝嶅簲缁撴灉 1: 姝e父  0: 澶辫触  
+     */
+    @ApiModelProperty(value= "鍝嶅簲缁撴灉 1: 姝e父  0: 澶辫触  ")
+    private Integer response;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("update_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    @TableField("update_by")
+    private Long updateBy;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    @ApiModelProperty(value= "")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    public BasRgvOpt() {}
+
+    public BasRgvOpt(Integer wrkNo1,Integer wrkNo2,Integer rgvNo,Date sendTime,String mode,Integer sourceRow,Integer sourceBay,Integer sourceLev,Integer sourceSta,Integer posRow,Integer posBay,Integer posLev,Integer posSta,Integer response,Date updateTime,Long updateBy,String memo) {
+        this.wrkNo1 = wrkNo1;
+        this.wrkNo2 = wrkNo2;
+        this.rgvNo = rgvNo;
+        this.sendTime = sendTime;
+        this.mode = mode;
+        this.sourceRow = sourceRow;
+        this.sourceBay = sourceBay;
+        this.sourceLev = sourceLev;
+        this.sourceSta = sourceSta;
+        this.posRow = posRow;
+        this.posBay = posBay;
+        this.posLev = posLev;
+        this.posSta = posSta;
+        this.response = response;
+        this.updateTime = updateTime;
+        this.updateBy = updateBy;
+        this.memo = memo;
+    }
+
+    public BasRgvOpt(Integer wrkNo1, Integer wrkNo2, Integer rgvNo, Date sendTime, String mode, Integer sourceSta, Integer posSta, Integer sourceRow, Integer posRow, Integer response, Date updateTime, Long updateBy) {
+        this.wrkNo1 = wrkNo1;
+        this.wrkNo2 = wrkNo2;
+        this.rgvNo = rgvNo;
+        this.sendTime = sendTime;
+        this.mode = mode;
+        this.sourceSta = sourceSta;
+        this.posSta = posSta;
+        this.sourceRow = sourceRow;
+        this.posRow = posRow;
+        this.response = response;
+        this.updateTime = updateTime;
+        this.updateBy = updateBy;
+    }
+
+//    BasRgvOpt basRgvOpt = new BasRgvOpt(
+//            null,    // 浠诲姟鍙�
+//            null,    // 
+//            null,    // 绌挎杞�
+//            null,    // 涓嬪彂鏃堕棿
+//            null,    // 浣滀笟
+//            null,    // 婧愭帓
+//            null,    // 婧愬垪
+//            null,    // 婧愬眰
+//            null,    // 婧愮珯
+//            null,    // 鐩爣鎺�
+//            null,    // 鐩爣鍒�
+//            null,    // 鐩爣灞�
+//            null,    // 鐩爣绔�
+//            null,    // 鍝嶅簲缁撴灉
+//            null,    // 淇敼鏃堕棿
+//            null,    // 淇敼浜哄憳
+//            null,    // 澶囨敞
+
+//    );
+
+    public String getSendTime$(){
+        if (Cools.isEmpty(this.sendTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.sendTime);
+    }
+
+    public String getResponse$(){
+        if (null == this.response){ return null; }
+        switch (this.response){
+            case 1:
+                return "姝e父";
+            case 0:
+                return "澶辫触";
+            default:
+                return String.valueOf(this.response);
+        }
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+    public String getUpdateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.updateBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/WrkMastLog.java b/src/main/java/com/zy/asrs/entity/WrkMastLog.java
new file mode 100644
index 0000000..3af66ed
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/WrkMastLog.java
@@ -0,0 +1,618 @@
+package com.zy.asrs.entity;
+
+import com.core.common.Cools;
+import com.core.common.SpringUtils;
+import com.zy.asrs.service.WrkMastService;
+import com.baomidou.mybatisplus.annotations.TableField;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import org.springframework.format.annotation.DateTimeFormat;
+import com.zy.asrs.service.BasCrnpService;
+import com.zy.asrs.service.LocMastService;
+import com.zy.asrs.service.BasDevpService;
+import com.zy.system.service.UserService;
+import com.zy.system.entity.User;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@Data
+@TableName("asr_wrk_mast_log")
+public class WrkMastLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 缂栧彿
+     */
+    @ApiModelProperty(value= "缂栧彿")
+    private Long id;
+
+    /**
+     * 宸ヤ綔鍙�
+     */
+    @ApiModelProperty(value= "宸ヤ綔鍙�")
+    @TableField("wrk_no")
+    private Integer wrkNo;
+
+    @ApiModelProperty(value= "")
+    @TableField("inv_wh")
+    private String invWh;
+
+    @ApiModelProperty(value= "")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date ymd;
+
+    @ApiModelProperty(value= "")
+    private String mk;
+
+    @ApiModelProperty(value= "")
+    @TableField("whs_type")
+    private Integer whsType;
+
+    /**
+     * 宸ヤ綔鐘舵��
+     */
+    @ApiModelProperty(value= "宸ヤ綔鐘舵��")
+    @TableField("wrk_sts")
+    private Integer wrkSts;
+
+    /**
+     * 鍏ュ嚭搴撶被鍨�
+     */
+    @ApiModelProperty(value= "鍏ュ嚭搴撶被鍨�")
+    @TableField("io_type")
+    private Integer ioType;
+
+    /**
+     * 鍫嗗灈鏈哄彿
+     */
+    @ApiModelProperty(value= "鍫嗗灈鏈哄彿")
+    @TableField("crn_no")
+    private Integer crnNo;
+
+    @ApiModelProperty(value= "")
+    @TableField("sheet_no")
+    private String sheetNo;
+
+    /**
+     * 浼樺厛绾�
+     */
+    @ApiModelProperty(value= "浼樺厛绾�")
+    @TableField("io_pri")
+    private Double ioPri;
+
+    @ApiModelProperty(value= "")
+    @TableField("wrk_date")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date wrkDate;
+
+    /**
+     * 鐩爣搴撲綅
+     */
+    @ApiModelProperty(value= "鐩爣搴撲綅")
+    @TableField("loc_no")
+    private String locNo;
+
+    /**
+     * 鐩爣绔�
+     */
+    @ApiModelProperty(value= "鐩爣绔�")
+    @TableField("sta_no")
+    private Integer staNo;
+
+    /**
+     * 婧愮珯
+     */
+    @ApiModelProperty(value= "婧愮珯")
+    @TableField("source_sta_no")
+    private Integer sourceStaNo;
+
+    /**
+     * 婧愬簱浣�
+     */
+    @ApiModelProperty(value= "婧愬簱浣�")
+    @TableField("source_loc_no")
+    private String sourceLocNo;
+
+    @ApiModelProperty(value= "")
+    @TableField("loc_sts")
+    private String locSts;
+
+    /**
+     * 鎷f枡(checkBox)
+     */
+    @ApiModelProperty(value= "鎷f枡(checkBox)")
+    private String picking;
+
+    @ApiModelProperty(value= "")
+    @TableField("link_mis")
+    private String linkMis;
+
+    @ApiModelProperty(value= "")
+    @TableField("online_yn")
+    private String onlineYn;
+
+    @ApiModelProperty(value= "")
+    @TableField("upd_mk")
+    private String updMk;
+
+    /**
+     * 閫�鍑�(checkBox)
+     */
+    @ApiModelProperty(value= "閫�鍑�(checkBox)")
+    @TableField("exit_mk")
+    private String exitMk;
+
+    @ApiModelProperty(value= "")
+    @TableField("plt_type")
+    private Integer pltType;
+
+    /**
+     * 绌烘澘(checkBox)
+     */
+    @ApiModelProperty(value= "绌烘澘(checkBox)")
+    @TableField("empty_mk")
+    private String emptyMk;
+
+    /**
+     * 宸ヤ綔鏃堕棿
+     */
+    @ApiModelProperty(value= "宸ヤ綔鏃堕棿")
+    @TableField("io_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date ioTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("ctn_type")
+    private Integer ctnType;
+
+    @ApiModelProperty(value= "")
+    private String packed;
+
+    @ApiModelProperty(value= "")
+    @TableField("ove_mk")
+    private String oveMk;
+
+    @ApiModelProperty(value= "")
+    @TableField("mtn_type")
+    private Double mtnType;
+
+    @ApiModelProperty(value= "")
+    @TableField("user_no")
+    private String userNo;
+
+    /**
+     * 鍫嗗灈鏈哄惎鍔ㄦ椂闂�
+     */
+    @ApiModelProperty(value= "鍫嗗灈鏈哄惎鍔ㄦ椂闂�")
+    @TableField("crn_str_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date crnStrTime;
+
+    /**
+     * 鍫嗗灈鏈哄仠姝㈡椂闂�
+     */
+    @ApiModelProperty(value= "鍫嗗灈鏈哄仠姝㈡椂闂�")
+    @TableField("crn_end_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date crnEndTime;
+
+    /**
+     * 鎷f枡鏃堕棿
+     */
+    @ApiModelProperty(value= "鎷f枡鏃堕棿")
+    @TableField("plc_str_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date plcStrTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("crn_pos_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date crnPosTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("load_time")
+    private Double loadTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("exp_time")
+    private Double expTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("ref_wrkno")
+    private Double refWrkno;
+
+    @ApiModelProperty(value= "")
+    @TableField("ref_iotime")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date refIotime;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @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;
+
+    @ApiModelProperty(value= "")
+    @TableField("pause_mk")
+    private String pauseMk;
+
+    @ApiModelProperty(value= "")
+    @TableField("error_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date errorTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("error_memo")
+    private String errorMemo;
+
+    @ApiModelProperty(value= "")
+    @TableField("ctn_kind")
+    private Integer ctnKind;
+
+    @ApiModelProperty(value= "")
+    @TableField("manu_type")
+    private String manuType;
+
+    @ApiModelProperty(value= "")
+    @TableField("memo_m")
+    private String memoM;
+
+    @ApiModelProperty(value= "")
+    @TableField("sc_weight")
+    private Double scWeight;
+
+    @ApiModelProperty(value= "")
+    @TableField("log_mk")
+    private String logMk;
+
+    @ApiModelProperty(value= "")
+    @TableField("log_err_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date logErrTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("log_err_memo")
+    private String logErrMemo;
+
+    /**
+     * 鏉$爜
+     */
+    @ApiModelProperty(value= "鏉$爜")
+    private String barcode;
+
+    @ApiModelProperty(value= "")
+    @TableField("Pdc_type")
+    private String PdcType;
+
+    @ApiModelProperty(value= "")
+    @TableField("ctn_no")
+    private String ctnNo;
+
+    /**
+     * 婊℃澘(checkBox)
+     */
+    @ApiModelProperty(value= "婊℃澘(checkBox)")
+    @TableField("full_plt")
+    private String fullPlt;
+
+    @ApiModelProperty(value= "")
+    @TableField("pre_have")
+    private String preHave;
+
+    @ApiModelProperty(value= "")
+    @TableField("take_none")
+    private String takeNone;
+
+    @ApiModelProperty(value= "")
+    @TableField("line_number")
+    private Long lineNumber;
+
+    public WrkMastLog() {}
+
+    public WrkMastLog(Integer wrkNo,String invWh,Date ymd,String mk,Integer whsType,Integer wrkSts,Integer ioType,Integer crnNo,String sheetNo,Double ioPri,Date wrkDate,String locNo,Integer staNo,Integer sourceStaNo,String sourceLocNo,String locSts,String picking,String linkMis,String onlineYn,String updMk,String exitMk,Integer pltType,String emptyMk,Date ioTime,Integer ctnType,String packed,String oveMk,Double mtnType,String userNo,Date crnStrTime,Date crnEndTime,Date plcStrTime,Date crnPosTime,Double loadTime,Double expTime,Double refWrkno,Date refIotime,Long modiUser,Date modiTime,Long appeUser,Date appeTime,String pauseMk,Date errorTime,String errorMemo,Integer ctnKind,String manuType,String memoM,Double scWeight,String logMk,Date logErrTime,String logErrMemo,String barcode,String PdcType,String ctnNo,String fullPlt,String preHave,String takeNone,Long lineNumber) {
+        this.wrkNo = wrkNo;
+        this.invWh = invWh;
+        this.ymd = ymd;
+        this.mk = mk;
+        this.whsType = whsType;
+        this.wrkSts = wrkSts;
+        this.ioType = ioType;
+        this.crnNo = crnNo;
+        this.sheetNo = sheetNo;
+        this.ioPri = ioPri;
+        this.wrkDate = wrkDate;
+        this.locNo = locNo;
+        this.staNo = staNo;
+        this.sourceStaNo = sourceStaNo;
+        this.sourceLocNo = sourceLocNo;
+        this.locSts = locSts;
+        this.picking = picking;
+        this.linkMis = linkMis;
+        this.onlineYn = onlineYn;
+        this.updMk = updMk;
+        this.exitMk = exitMk;
+        this.pltType = pltType;
+        this.emptyMk = emptyMk;
+        this.ioTime = ioTime;
+        this.ctnType = ctnType;
+        this.packed = packed;
+        this.oveMk = oveMk;
+        this.mtnType = mtnType;
+        this.userNo = userNo;
+        this.crnStrTime = crnStrTime;
+        this.crnEndTime = crnEndTime;
+        this.plcStrTime = plcStrTime;
+        this.crnPosTime = crnPosTime;
+        this.loadTime = loadTime;
+        this.expTime = expTime;
+        this.refWrkno = refWrkno;
+        this.refIotime = refIotime;
+        this.modiUser = modiUser;
+        this.modiTime = modiTime;
+        this.appeUser = appeUser;
+        this.appeTime = appeTime;
+        this.pauseMk = pauseMk;
+        this.errorTime = errorTime;
+        this.errorMemo = errorMemo;
+        this.ctnKind = ctnKind;
+        this.manuType = manuType;
+        this.memoM = memoM;
+        this.scWeight = scWeight;
+        this.logMk = logMk;
+        this.logErrTime = logErrTime;
+        this.logErrMemo = logErrMemo;
+        this.barcode = barcode;
+        this.PdcType = PdcType;
+        this.ctnNo = ctnNo;
+        this.fullPlt = fullPlt;
+        this.preHave = preHave;
+        this.takeNone = takeNone;
+        this.lineNumber = lineNumber;
+    }
+
+//    WrkMastLog wrkMastLog = new WrkMastLog(
+//            null,    // 宸ヤ綔鍙穂闈炵┖]
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 宸ヤ綔鐘舵��
+//            null,    // 鍏ュ嚭搴撶被鍨�
+//            null,    // 鍫嗗灈鏈哄彿
+//            null,    // 
+//            null,    // 浼樺厛绾�
+//            null,    // 
+//            null,    // 鐩爣搴撲綅
+//            null,    // 鐩爣绔�
+//            null,    // 婧愮珯
+//            null,    // 婧愬簱浣�
+//            null,    // 
+//            null,    // 鎷f枡(checkBox)
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 閫�鍑�(checkBox)
+//            null,    // 
+//            null,    // 绌烘澘(checkBox)
+//            null,    // 宸ヤ綔鏃堕棿
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 鍫嗗灈鏈哄惎鍔ㄦ椂闂�
+//            null,    // 鍫嗗灈鏈哄仠姝㈡椂闂�
+//            null,    // 鎷f枡鏃堕棿
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 淇敼浜哄憳
+//            null,    // 淇敼鏃堕棿
+//            null,    // 鍒涘缓鑰�
+//            null,    // 娣诲姞鏃堕棿
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 鏉$爜
+//            null,    // 
+//            null,    // 
+//            null,    // 婊℃澘(checkBox)
+//            null,    // 
+//            null,    // 
+//            null    // 
+//    );
+
+    public String getWrkNo$(){
+        WrkMastService service = SpringUtils.getBean(WrkMastService.class);
+        WrkMast wrkMast = service.selectById(this.wrkNo);
+        if (!Cools.isEmpty(wrkMast)){
+            return String.valueOf(wrkMast.getWrkNo());
+        }
+        return null;
+    }
+
+    public String getYmd$(){
+        if (Cools.isEmpty(this.ymd)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ymd);
+    }
+
+    public String getCrnNo$(){
+        BasCrnpService service = SpringUtils.getBean(BasCrnpService.class);
+        BasCrnp basCrnp = service.selectById(this.crnNo);
+        if (!Cools.isEmpty(basCrnp)){
+            return String.valueOf(basCrnp.getCrnNo());
+        }
+        return null;
+    }
+
+    public String getWrkDate$(){
+        if (Cools.isEmpty(this.wrkDate)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.wrkDate);
+    }
+
+    public String getLocNo$(){
+        LocMastService service = SpringUtils.getBean(LocMastService.class);
+        LocMast locMast = service.selectById(this.locNo);
+        if (!Cools.isEmpty(locMast)){
+            return String.valueOf(locMast.getLocNo());
+        }
+        return null;
+    }
+
+    public String getStaNo$(){
+        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
+        BasDevp basDevp = service.selectById(this.staNo);
+        if (!Cools.isEmpty(basDevp)){
+            return String.valueOf(basDevp.getDevNo());
+        }
+        return null;
+    }
+
+    public String getSourceStaNo$(){
+        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
+        BasDevp basDevp = service.selectById(this.sourceStaNo);
+        if (!Cools.isEmpty(basDevp)){
+            return String.valueOf(basDevp.getDevNo());
+        }
+        return null;
+    }
+
+    public String getSourceLocNo$(){
+        LocMastService service = SpringUtils.getBean(LocMastService.class);
+        LocMast locMast = service.selectById(this.sourceLocNo);
+        if (!Cools.isEmpty(locMast)){
+            return String.valueOf(locMast.getLocNo());
+        }
+        return null;
+    }
+
+    public String getIoTime$(){
+        if (Cools.isEmpty(this.ioTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ioTime);
+    }
+
+    public String getCrnStrTime$(){
+        if (Cools.isEmpty(this.crnStrTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnStrTime);
+    }
+
+    public String getCrnEndTime$(){
+        if (Cools.isEmpty(this.crnEndTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnEndTime);
+    }
+
+    public String getPlcStrTime$(){
+        if (Cools.isEmpty(this.plcStrTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.plcStrTime);
+    }
+
+    public String getCrnPosTime$(){
+        if (Cools.isEmpty(this.crnPosTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnPosTime);
+    }
+
+    public String getRefIotime$(){
+        if (Cools.isEmpty(this.refIotime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.refIotime);
+    }
+
+    public String getModiUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.modiUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        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.getUsername());
+        }
+        return null;
+    }
+
+    public String getAppeTime$(){
+        if (Cools.isEmpty(this.appeTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
+    }
+
+    public String getErrorTime$(){
+        if (Cools.isEmpty(this.errorTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.errorTime);
+    }
+
+    public String getLogErrTime$(){
+        if (Cools.isEmpty(this.logErrTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.logErrTime);
+    }
+
+
+}
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/mapper/BasRgvMapper.java b/src/main/java/com/zy/asrs/mapper/BasRgvMapper.java
new file mode 100644
index 0000000..cb45640
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/BasRgvMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.BasRgv;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface BasRgvMapper extends BaseMapper<BasRgv> {
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/BasRgvOptMapper.java b/src/main/java/com/zy/asrs/mapper/BasRgvOptMapper.java
new file mode 100644
index 0000000..b8622e4
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/BasRgvOptMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.BasRgvOpt;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface BasRgvOptMapper extends BaseMapper<BasRgvOpt> {
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastLogMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastLogMapper.java
new file mode 100644
index 0000000..78225b2
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastLogMapper.java
@@ -0,0 +1,16 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.WrkMastLog;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface WrkMastLogMapper extends BaseMapper<WrkMastLog> {
+
+    @Insert("insert into asr_wrk_mast_log select * from asr_wrk_mast where wrk_no=#{workNo}")
+    int save(Integer workNo);
+
+}
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/BasRgvOptService.java b/src/main/java/com/zy/asrs/service/BasRgvOptService.java
new file mode 100644
index 0000000..cd3edcb
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/BasRgvOptService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.BasRgvOpt;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface BasRgvOptService extends IService<BasRgvOpt> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/BasRgvService.java b/src/main/java/com/zy/asrs/service/BasRgvService.java
new file mode 100644
index 0000000..12d4aba
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/BasRgvService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.BasRgv;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface BasRgvService extends IService<BasRgv> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/WrkMastLogService.java b/src/main/java/com/zy/asrs/service/WrkMastLogService.java
new file mode 100644
index 0000000..88fee55
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/WrkMastLogService.java
@@ -0,0 +1,10 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.WrkMastLog;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface WrkMastLogService extends IService<WrkMastLog> {
+
+    boolean save(Integer workNo);
+
+}
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/asrs/service/impl/BasRgvOptServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasRgvOptServiceImpl.java
new file mode 100644
index 0000000..3d6d2a8
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/BasRgvOptServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.zy.asrs.mapper.BasRgvOptMapper;
+import com.zy.asrs.entity.BasRgvOpt;
+import com.zy.asrs.service.BasRgvOptService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("basRgvOptService")
+public class BasRgvOptServiceImpl extends ServiceImpl<BasRgvOptMapper, BasRgvOpt> implements BasRgvOptService {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/BasRgvServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasRgvServiceImpl.java
new file mode 100644
index 0000000..36c7bb0
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/BasRgvServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.zy.asrs.mapper.BasRgvMapper;
+import com.zy.asrs.entity.BasRgv;
+import com.zy.asrs.service.BasRgvService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("basRgvService")
+public class BasRgvServiceImpl extends ServiceImpl<BasRgvMapper, BasRgv> implements BasRgvService {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 404181e..3598430 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -27,17 +27,17 @@
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.SlaveConnection;
 import com.zy.core.enums.*;
-import com.zy.core.model.CrnSlave;
-import com.zy.core.model.DevpSlave;
-import com.zy.core.model.LedSlave;
-import com.zy.core.model.Task;
+import com.zy.core.model.*;
 import com.zy.core.model.command.CrnCommand;
 import com.zy.core.model.command.LedCommand;
+import com.zy.core.model.command.RgvCommand;
 import com.zy.core.model.protocol.CrnProtocol;
+import com.zy.core.model.protocol.RgvProtocol;
 import com.zy.core.model.protocol.StaProtocol;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.BarcodeThread;
 import com.zy.core.thread.LedThread;
+import com.zy.core.thread.RgvThread;
 import com.zy.core.thread.SiemensDevpThread;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -89,6 +89,8 @@
     private BasCrnErrorMapper basCrnErrorMapper;
     @Autowired
     private WrkMastService wrkMastService;
+    @Autowired
+    private WrkMastLogService wrkMastLogService;
 
     @Value("${wms.url}")
     private String wmsUrl;
@@ -188,6 +190,18 @@
                             MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg));
                         }
                         continue;
+                    }
+
+                    if (inSta.getStaNo() == 1005) {
+                        //妫�娴嬫槸鍚︽湁鍑哄簱浠诲姟
+                        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+                                .in("io_type", 101, 103, 107)
+                                .in("sta_no", 1003, 1007)
+                        );
+                        if (!wrkMasts.isEmpty()) {
+                            News.error(""+mark+" - 4"+" - 1003绔欏叆搴擄紝妫�娴嬪瓨鍦ㄥ嚭搴撲换鍔★紝绛夊緟鍑哄簱浠诲姟鎵ц瀹屾垚,鎵樼洏鐮�={}", barcode);
+                            continue;
+                        }
                     }
 
                     try {
@@ -863,6 +877,18 @@
                     staProtocol = staProtocol.clone();
                 }
 
+                if (wrkMast.getStaNo() == 1003 || wrkMast.getStaNo() == 1007) {
+                    //妫�娴嬫槸鍚︽湁鍏ュ簱浠诲姟
+                    List<WrkMast> inWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+                            .in("io_type", 1, 53, 57)
+                            .in("source_sta_no", 1005)
+                    );
+                    if (!inWrkMasts.isEmpty()) {
+                        News.error("" + mark + " - 2" + " - 妫�娴嬪瓨鍦ㄥ叆搴撲换鍔★紝绛夊緟鍏ュ簱浠诲姟鎵ц瀹屾垚鍐嶅嚭搴擄紝宸ヤ綔鍙�={}" + wrkMast.getWrkNo());
+                        continue;
+                    }
+                }
+
 //            // 鍏ュ嚭搴撴ā寮忓垽鏂�
 //            if (devpThread.ioMode != IoModeType.PAKOUT_MODE) { continue; }
 //                if (wrkMast.getStaNo() == 204 && devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) {
@@ -1272,7 +1298,6 @@
      * 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
      */
     public synchronized void storeFinished(Integer mark) {
-
         for (CrnSlave crn : slaveProperties.getCrn()) {
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
@@ -2107,143 +2132,184 @@
         }
     }
 
-    /**
-     * 鍏ュ嚭搴撴ā寮忓垏鎹㈠嚱鏁�
-     */
-    public synchronized void ioConvert() {
-        try {
-            // 鏍规嵁杈撻�佺嚎plc閬嶅巻
-            for (DevpSlave devp : slaveProperties.getDevp()) {
-                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+    // RGV  ===>> 鎵ц瀵筊GV鎿嶄綔
+    public synchronized void rgvExecute(Integer mark) {
+        ArrayList<Integer> list = new ArrayList<Integer>(){{add(1090);add(1091);}};
+        for (Integer staNo : list) {
+            Integer devpId = null;
+            Integer rgvStaNo = null;
+            if (staNo == 1090) {
+                devpId = 1;
+                rgvStaNo = 1091;
+            }else {
+                devpId = 2;
+                rgvStaNo = 1090;
+            }
 
-                for (DevpSlave.Sta inSta : devp.getInSta()) {
-                    if (inSta.getStaNo() == 2) {
-                        continue;
-                    }
-                    WrkMast pakout = wrkMastMapper.selectWorkingPakout(inSta.getStaNo());
-                    switch (inSta.getStaNo()) {
-                        case 101://1F
-                            if (pakout != null) {
-                                if (devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) {
-                                    // 鍑哄簱鍒囨崲涓�
-                                    devpThread.ioModeOf2F = IoModeType.PAKOUT_BOOTING;
-                                    WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo());
-                                    if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading()
-                                            && !devpThread.getStation().get(inSta.getStaNo() + 1).isLoading()
-                                            && devpThread.getStation().get(inSta.getStaNo() + 1).getWorkNo() == 0) {
-                                        // 鍑哄簱妯″紡
-                                        devpThread.ioModeOf2F = IoModeType.PAKOUT_MODE;
-                                    }
-                                }
-                            } else {
-                                // 鍏ュ簱妯″紡
-                                devpThread.ioModeOf2F = IoModeType.PAKIN_MODE;
-                            }
-                            break;
-                    }
+            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devpId);
+            if (devpThread == null) {
+                continue;
+            }
+            StaProtocol staProtocol = devpThread.getStation().get(staNo);
+            if (staProtocol == null) {
+                continue;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+
+            if (staProtocol.isAutoing()
+                    && staProtocol.isLoading()
+                    && staProtocol.isInEnable()
+                    && staProtocol.getWorkNo() > 0
+            ) {
+                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
+                        .eq("wrk_no", staProtocol.getWorkNo()));
+                if (wrkMast.getWrkSts() == 201) {
+                    continue;
                 }
 
-            }
+                RgvCommand command = new RgvCommand();
+                command.setRgvNo(1); // RGV缂栧彿
+                command.setAckFinish1((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                command.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+                command.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
+                command.setSourceStaNo1(staNo.shortValue()); // 婧愮珯
+                command.setDestinationStaNo1(rgvStaNo.shortValue());  // 鐩爣绔�
+                command.setCommand((short) 0);
 
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-
-    }
-
-    public synchronized void outOfDevp(Integer mark) {
-
-        List<WrkMast> wrkMasts = wrkMastMapper.selectPick();
-        if (wrkMasts.size()!=0){
-            News.warnNoLog(""+mark+" - 0"+" - 寮�濮嬫墽琛宱utOfDevp");
-        }
-        for (WrkMast wrkMast : wrkMasts) {
-            if (basDevpService.selectCount(new EntityWrapper<BasDevp>().eq("wrk_no", wrkMast.getWrkNo())) == 0) {
-                wrkMast.setCtnNo("Y");
-                if (wrkMastMapper.updateById(wrkMast) == 0) {
-                    News.error(""+mark+" - 1"+" - 淇敼{}宸ヤ綔妗eけ璐ワ紝ctn_no", wrkMast.getWrkNo());
+                boolean result = MessageQueue.offer(SlaveType.Rgv, 1, new Task(4, command));
+                if (!result) {
+                    throw new CoolException("RGV鎸囦护涓嬪彂澶辫触");
                 }
+
+                wrkMast.setWrkSts(201L);//201.RGV鎼繍涓�
+                wrkMast.setModiTime(new Date());
+                wrkMastService.updateById(wrkMast);
             }
         }
-        News.infoNoLog(""+mark+" - 0"+" - outOfDevp鎵ц瀹屾垚");
     }
 
-
-    public synchronized void autoEmptyOut() {
-        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
-        Integer autoOutSite = 12;
-        //濡傛灉绔欑偣鍙嚭绂佺敤锛屽垯涓嶇敓鎴愮┖鐩樺嚭搴撲换鍔�
-        StaProtocol staProtocol = devpThread.getStation().get(autoOutSite);
-        if (staProtocol == null) {
-            return;
-        } else {
-            staProtocol = staProtocol.clone();
-        }
-        if (staProtocol.isAutoing()  //鑷姩
-                && !staProtocol.isLoading()  //鏃犵墿
-                && staProtocol.isOutEnable()  //鍙嚭淇″彿
-                && staProtocol.getWorkNo() == 0
-        ) {
-            WrkMast pakoutEmpty = wrkMastMapper.selectPakoutEmpty(autoOutSite);
-            if (null != pakoutEmpty) {
-                return;
+    // RGV  ===>> 鎵ц瀵筊GV宸ヤ綔妗g殑瀹屾垚鎿嶄綔
+    public synchronized void rgvFinished(Integer mark) {
+        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
+            // 鑾峰彇RGV淇℃伅
+            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+            if (rgvThread == null) {
+                continue;
             }
-            try {
-                String response = new HttpHandler.Builder()
-                        .setUri(wmsUrl)
-                        .setPath("/rpc/auto/emptyOut/v1")
-                        .build()
-                        .doPost();
-                JSONObject jsonObject = JSON.parseObject(response);
-                if (jsonObject.getInteger("code").equals(200)) {
-                    JSONObject data = (JSONObject) jsonObject.get("data");
-                    News.info((String) data.get("msg"));
+
+            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+            if (rgvProtocol == null) {
+                continue;
+            }
+
+            //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
+            if (rgvProtocol.statusType == RgvStatusType.WAITING && rgvProtocol.getTaskNo1() != 0) {
+                News.warnNoLog(""+mark+" - 0"+" - 寮�濮嬫墽琛屽RGV宸ヤ綔妗g殑瀹屾垚鎿嶄綔");
+                // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
+                WrkMast wrkMast = wrkMastMapper.selectPakInStep3(rgvProtocol.getTaskNo1().intValue());
+                if (wrkMast == null) {
+                    News.error(""+mark+" - 1"+" - RGV澶勪簬绛夊緟纭涓斾换鍔″畬鎴愮姸鎬侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�俁GV鍙�={}锛屽伐浣滃彿={}", rgvSlave.getId(), rgvProtocol.getTaskNo1());
+                    continue;
+                }
+
+                if (Cools.isEmpty(wrkMast.getMemo())) {
+                    News.error(""+mark+" - 1"+" - RGV澶勪簬绛夊緟纭涓斾换鍔″畬鎴愮姸鎬侊紝浣嗗伐浣滄。鏁版嵁寮傚父銆俁GV鍙�={}锛屽伐浣滃彿={}", rgvSlave.getId(), rgvProtocol.getTaskNo1());
+                    continue;
+                }
+
+                Integer devpId = null;
+                Integer devpStaNo = null;
+                String locNo = null;
+                if (wrkMast.getIoType() < 100) {
+                    //鍏ュ簱
+                    wrkMast.setWrkSts(2L);
+                    devpId = 1;
+                    devpStaNo = 1090;
+                    locNo = wrkMast.getLocNo();
+                }else {
+                    //鍑哄簱
+                    wrkMast.setWrkSts(15L);
+                    devpId = 2;
+                    devpStaNo = 1091;
+                    locNo = wrkMast.getSourceLocNo();
+                }
+
+                // 鑾峰彇鍏ュ簱绔欎俊鎭�
+                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devpId);
+                StaProtocol staProtocol = devpThread.getStation().get(devpStaNo);
+                if (staProtocol == null) {
+                    continue;
                 } else {
-                    News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/auto/emptyOut/v1","", response);
+                    staProtocol = staProtocol.clone();
                 }
-            } catch (Exception e) {
-                e.printStackTrace();
-                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+
+                if (staProtocol.isAutoing()
+                        && staProtocol.isLoading()
+                        && staProtocol.getWorkNo() == 0
+                ) {
+                    LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
+                            .eq("loc_no", locNo));
+                    staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
+                    staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+                    staProtocol.setPalletSize(locMast.getLocType2());
+                    devpThread.setPakMk(staProtocol.getSiteId(), false);
+                    boolean result = MessageQueue.offer(SlaveType.Devp, devpId, new Task(2, staProtocol));
+                    if (!result) {
+                        throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+                    }
+
+                    Date now = new Date();
+                    wrkMast.setModiTime(now);
+                    wrkMastMapper.updateById(wrkMast);
+                }
             }
         }
+        News.infoNoLog(""+mark+" - 0"+" - 瀵瑰伐浣滄。鐨勫畬鎴愭搷浣滄墽琛屽畬鎴�");
     }
 
-    public synchronized void autoEmptyIn() {
-        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
-        Integer autoInSite = 12;
-        StaProtocol staProtocol = devpThread.getStation().get(autoInSite);
-        if (staProtocol == null) {
-            return;
-        } else {
-            staProtocol = staProtocol.clone();
-        }
-        if (staProtocol.isAutoing()  //鑷姩
-                && staProtocol.isLoading()  //鏈夌墿
-                && staProtocol.isInEnable()  //鍙叆淇″彿
-                && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990) //宸ヤ綔鍙蜂负0鎴栬�呭伐浣滃彿鏄�9991~9999锛堣緭閫佹満鐣欑敤锛�
-        ) {
-
-            try {
-                LocTypeDto locTypeDto = new LocTypeDto((short) 1, (short) 1, (short) 1);
-
-
-                String response = new HttpHandler.Builder()
-                        .setUri(wmsUrl)
-                        .setPath("/rpc/auto/emptyIn/v1")
-                        .setJson(JSON.toJSONString(locTypeDto))
-                        .build()
-                        .doPost();
-                JSONObject jsonObject = JSON.parseObject(response);
-                if (jsonObject.getInteger("code").equals(200)) {
-                    News.info((String) jsonObject.get("msg"));
-                } else {
-                    News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/auto/emptyIn/v1", JSON.toJSONString(locTypeDto), response);
-                }
-            } catch (Exception e) {
-                e.printStackTrace();
-                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-            }
-        }
-    }
+//    /**
+//     * 鍏ュ嚭搴撴ā寮忓垏鎹㈠嚱鏁�
+//     */
+//    public synchronized void ioConvert() {
+//        try {
+//            // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+//            for (DevpSlave devp : slaveProperties.getDevp()) {
+//                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+//
+//                for (DevpSlave.Sta inSta : devp.getInSta()) {
+//                    if (inSta.getStaNo() == 2) {
+//                        continue;
+//                    }
+//                    WrkMast pakout = wrkMastMapper.selectWorkingPakout(inSta.getStaNo());
+//                    switch (inSta.getStaNo()) {
+//                        case 101://1F
+//                            if (pakout != null) {
+//                                if (devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) {
+//                                    // 鍑哄簱鍒囨崲涓�
+//                                    devpThread.ioModeOf2F = IoModeType.PAKOUT_BOOTING;
+//                                    WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo());
+//                                    if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading()
+//                                            && !devpThread.getStation().get(inSta.getStaNo() + 1).isLoading()
+//                                            && devpThread.getStation().get(inSta.getStaNo() + 1).getWorkNo() == 0) {
+//                                        // 鍑哄簱妯″紡
+//                                        devpThread.ioModeOf2F = IoModeType.PAKOUT_MODE;
+//                                    }
+//                                }
+//                            } else {
+//                                // 鍏ュ簱妯″紡
+//                                devpThread.ioModeOf2F = IoModeType.PAKIN_MODE;
+//                            }
+//                            break;
+//                    }
+//                }
+//
+//            }
+//
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//
+//
+//    }
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java
new file mode 100644
index 0000000..5d9b9c3
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java
@@ -0,0 +1,17 @@
+package com.zy.asrs.service.impl;
+
+import com.zy.asrs.mapper.WrkMastLogMapper;
+import com.zy.asrs.entity.WrkMastLog;
+import com.zy.asrs.service.WrkMastLogService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("wrkMastLogService")
+public class WrkMastLogServiceImpl extends ServiceImpl<WrkMastLogMapper, WrkMastLog> implements WrkMastLogService {
+
+    @Override
+    public boolean save(Integer workNo) {
+        return this.baseMapper.save(workNo) > 0;
+    }
+
+}
diff --git a/src/main/java/com/zy/common/CodeBuilder.java b/src/main/java/com/zy/common/CodeBuilder.java
index d2c576a..fc76f0a 100644
--- a/src/main/java/com/zy/common/CodeBuilder.java
+++ b/src/main/java/com/zy/common/CodeBuilder.java
@@ -1,6 +1,7 @@
 package com.zy.common;
 
 import com.core.generators.CoolGenerator;
+import com.core.generators.constant.SqlOsType;
 
 /**
  * Created by vincent on 2019-06-04
@@ -15,10 +16,11 @@
 //        generator.password="xltys1995";
 //        generator.table="sys_host";
         // sqlserver
-        generator.url="192.168.3.208:1433;databasename=cool";
+        generator.url="127.0.0.1:1433;databasename=ytflasrs";
+        generator.sqlOsType = SqlOsType.SQL_SERVER;
         generator.username="sa";
         generator.password="sa@123";
-        generator.table="asr_wrk_detl";
+        generator.table="asr_wrk_mast_log";
         generator.packagePath="com.zy.asrs";
         generator.build();
     }
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 31836fd..5e631af 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -68,19 +68,10 @@
                     // 鍏朵粬  ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅
                     mainService.ledReset(10);
 
-                    mainService.outOfDevp(11);
-
-                    //绌烘墭鐩樿嚜鍔ㄥ嚭搴�
-//                    mainService.autoEmptyOut();
-//                    //绌烘墭鐩樿嚜鍔ㄥ叆搴�
-//                    mainService.autoEmptyIn();
-
-                    // 鍏朵粬  ===>> 鍏ュ嚭搴撴ā寮忓垏鎹�
-                    i++;
-                    if (i > 1) {
-                        mainService.ioConvert();
-                        i = 0;
-                    }
+                    // RGV  ===>> 鎵ц瀵筊GV鎿嶄綔
+                    mainService.rgvExecute(11);
+                    // RGV  ===>> 鎵ц瀵筊GV宸ヤ綔妗g殑瀹屾垚鎿嶄綔
+                    mainService.rgvFinished(12);
 
                 } catch (Exception e) {
                     e.printStackTrace();
diff --git a/src/main/java/com/zy/core/RgvThread2.java b/src/main/java/com/zy/core/RgvThread2.java
new file mode 100644
index 0000000..82ced52
--- /dev/null
+++ b/src/main/java/com/zy/core/RgvThread2.java
@@ -0,0 +1,6 @@
+package com.zy.core;
+
+public interface RgvThread2 extends ThreadHandler{
+
+    void setPakMk(boolean lock);
+}
diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index 9ae32c6..9b3b999 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -7,6 +7,7 @@
 import com.zy.core.model.CrnSlave;
 import com.zy.core.model.DevpSlave;
 import com.zy.core.model.LedSlave;
+import com.zy.core.model.RgvSlave;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.*;
 import lombok.extern.slf4j.Slf4j;
@@ -58,6 +59,10 @@
         for (Slave crn : slaveProperties.getCrn()) {
             MessageQueue.init(SlaveType.Crn, crn);
         }
+        // 鍒濆鍖朢gv灏忚溅mq
+        for (Slave rgv : slaveProperties.getRgv()) {
+            MessageQueue.init(SlaveType.Rgv, rgv);
+        }
         // 鍒濆鍖栬緭閫佺嚎mq
         for (Slave devp : slaveProperties.getDevp()) {
             MessageQueue.init(SlaveType.Devp, devp);
@@ -90,6 +95,13 @@
             map.put(crnThread, thread);
             SlaveConnection.put(SlaveType.Crn, crn.getId(), crnThread);
         }
+        // 鍒濆鍖朢GV绾跨▼
+        log.info("鍒濆鍖朢GV绾跨▼...................................................");
+        for (RgvSlave rgv : slaveProperties.getRgv()) {
+            RgvThread rgvThread = new RgvThread(rgv);
+            new Thread((Runnable) rgvThread).start();
+            SlaveConnection.put(SlaveType.Rgv, rgv.getId(), rgvThread);
+        }
         // 鍒濆鍖栬緭閫佺嚎绾跨▼
         News.info("鍒濆鍖栬緭閫佺嚎绾跨▼...................................................");
         for (DevpSlave devp : slaveProperties.getDevp()) {
diff --git a/src/main/java/com/zy/core/cache/MessageQueue.java b/src/main/java/com/zy/core/cache/MessageQueue.java
index 6a751f2..f63c210 100644
--- a/src/main/java/com/zy/core/cache/MessageQueue.java
+++ b/src/main/java/com/zy/core/cache/MessageQueue.java
@@ -27,6 +27,7 @@
     private static final Map<Integer, ConcurrentLinkedQueue<Task>> SCALE_EXCHANGE = new ConcurrentHashMap<>();
     // 鍙拌溅mq浜ゆ崲鏈�
     private static final Map<Integer, ConcurrentLinkedQueue<Task>> CAR_EXCHANGE = new ConcurrentHashMap<>();
+    private static final Map<Integer, LinkedBlockingQueue<Task>> RGV_EXCHANGE = new ConcurrentHashMap<>();
 
     /**
      * mq 浜ゆ崲鏈哄垵濮嬪寲
@@ -35,6 +36,9 @@
         switch (type) {
             case Crn:
                 CRN_EXCHANGE.put(slave.getId(), new LinkedBlockingQueue<>(1));
+                break;
+            case Rgv:
+                RGV_EXCHANGE.put(slave.getId(), new LinkedBlockingQueue<>(1));
                 break;
             case Devp:
                 DEVP_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
@@ -64,6 +68,8 @@
         switch (type) {
             case Crn:
                 return CRN_EXCHANGE.get(id).offer(task);
+            case Rgv:
+                return RGV_EXCHANGE.get(id).offer(task);
             case Devp:
                 return DEVP_EXCHANGE.get(id).offer(task);
             case Barcode:
@@ -87,6 +93,8 @@
         switch (type) {
             case Crn:
                 return CRN_EXCHANGE.get(id).poll();
+            case Rgv:
+                return RGV_EXCHANGE.get(id).poll();
             case Devp:
                 return DEVP_EXCHANGE.get(id).poll();
             case Barcode:
@@ -109,6 +117,8 @@
         switch (type) {
             case Crn:
                 return CRN_EXCHANGE.get(id).peek();
+            case Rgv:
+                return RGV_EXCHANGE.get(id).peek();
             case Devp:
                 return DEVP_EXCHANGE.get(id).peek();
             case Barcode:
@@ -127,9 +137,11 @@
     public static void clear(SlaveType type, Integer id){
         switch (type) {
             case Crn:
-                
                 CRN_EXCHANGE.get(id).clear();
                 break;
+            case Rgv:
+                RGV_EXCHANGE.get(id).clear();
+                break;
             case Devp:
                 DEVP_EXCHANGE.get(id).clear();
                 break;
diff --git a/src/main/java/com/zy/core/cache/OutputQueue.java b/src/main/java/com/zy/core/cache/OutputQueue.java
index 63205e7..65df862 100644
--- a/src/main/java/com/zy/core/cache/OutputQueue.java
+++ b/src/main/java/com/zy/core/cache/OutputQueue.java
@@ -15,4 +15,6 @@
     public static ArrayBlockingQueue<String> DEVP = new ArrayBlockingQueue<>(32);
     // 鏉$爜鍣ㄨ緭鍑烘棩蹇�
     public static ArrayBlockingQueue<JSONObject> BARCODE = new ArrayBlockingQueue<>(32);
+    // rgv杈撳嚭鏃ュ織
+    public static ArrayBlockingQueue<String> RGV = new ArrayBlockingQueue<>(32);
 }
diff --git a/src/main/java/com/zy/core/enums/RgvModeType.java b/src/main/java/com/zy/core/enums/RgvModeType.java
new file mode 100644
index 0000000..3a344bb
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/RgvModeType.java
@@ -0,0 +1,43 @@
+package com.zy.core.enums;
+
+public enum RgvModeType {
+
+    NONE(-1, "绂荤嚎"),
+    STOP(0, "鍏虫満"),
+    HAND(1, "鎵嬪姩"),
+    HALF_AUTO(2, "鍗婅嚜鍔�"),
+    AUTO(3, "鑷姩"),
+    AUTO2(100, "鍏跺畠"),
+    ;
+
+    public Integer id;
+    public String desc;
+    RgvModeType(Integer id, String desc) {
+        this.id = id;
+        this.desc = desc;
+    }
+
+    public static RgvModeType get(Short id) {
+        if (null == id) {
+            return null;
+        }
+        for (RgvModeType type : RgvModeType.values()) {
+            if (type.id.equals(id.intValue())) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public static RgvModeType get(RgvModeType type) {
+        if (null == type) {
+            return null;
+        }
+        for (RgvModeType rgvModeType : RgvModeType.values()) {
+            if (rgvModeType == type) {
+                return rgvModeType;
+            }
+        }
+        return null;
+    }
+}
diff --git a/src/main/java/com/zy/core/enums/RgvStatusType.java b/src/main/java/com/zy/core/enums/RgvStatusType.java
new file mode 100644
index 0000000..2b1abff
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/RgvStatusType.java
@@ -0,0 +1,46 @@
+package com.zy.core.enums;
+
+public enum RgvStatusType {
+
+    NONE(-1, "绂荤嚎"),
+    IDLE(0, "绌洪棽"),
+    WORKING(1, "浣滀笟涓�"),
+    SOS(2, "鎶ヨ"),
+    WORKING1(3, "浣滀笟涓�"),
+    FETCHING(11, "鍙栬揣涓�"),
+    PUTTING(12, "鏀捐揣涓�"),
+    WAITING(90, "浠诲姟瀹屾垚绛夊緟WCS纭"),
+    FETCHWAITING(91, "鍙栬揣浠诲姟瀹屾垚绛夊緟WCS纭"),
+    ;
+
+    public Integer id;
+    public String desc;
+    RgvStatusType(Integer id, String desc) {
+        this.id = id;
+        this.desc = desc;
+    }
+
+    public static RgvStatusType get(Short id) {
+        if (null == id) {
+            return null;
+        }
+        for (RgvStatusType type : RgvStatusType.values()) {
+            if (type.id.equals(id.intValue())) {
+                return type;
+            }
+        }
+        return NONE;
+    }
+
+    public static RgvStatusType get(RgvStatusType type) {
+        if (null == type) {
+            return null;
+        }
+        for (RgvStatusType rgvStatusType : RgvStatusType.values()) {
+            if (rgvStatusType == type) {
+                return rgvStatusType;
+            }
+        }
+        return null;
+    }
+}
diff --git a/src/main/java/com/zy/core/enums/RgvTaskModeType.java b/src/main/java/com/zy/core/enums/RgvTaskModeType.java
new file mode 100644
index 0000000..cd241f4
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/RgvTaskModeType.java
@@ -0,0 +1,47 @@
+package com.zy.core.enums;
+
+public enum RgvTaskModeType {
+
+    NONE(0),    // 鏃�
+    FETCH(1),    // 鍙栬揣
+    PUT(2),    // 鏀捐揣
+    FETCH_PUT(3),    // 鍙栨斁璐�
+    X_MOVE(4),    // 绔欎綅绉昏浆
+//    Y_MOVE(5),    // 绔欎綅绉昏浆
+//    XY_MOVE(6),    // 绔欎綅绉昏浆
+    GO_ORIGIN(7),    // 鍥炲師鐐�
+//    BACK_ORIGIN(8),      // 鍥炲弽鍘熺偣
+//    CLEAR(9),       // 娓呴敊
+    ;
+
+    public Integer id;
+    RgvTaskModeType(Integer id) {
+        this.id = id;
+    }
+
+
+    public static RgvTaskModeType get(Short id) {
+        if (null == id) {
+            return null;
+        }
+        for (RgvTaskModeType type : RgvTaskModeType.values()) {
+            if (type.id.equals(id.intValue())) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public static RgvTaskModeType get(RgvTaskModeType type) {
+        if (null == type) {
+            return null;
+        }
+        for (RgvTaskModeType rgvTaskModeType : RgvTaskModeType.values()) {
+            if (rgvTaskModeType == type) {
+                return rgvTaskModeType;
+            }
+        }
+        return null;
+    }
+
+}
diff --git a/src/main/java/com/zy/core/enums/SlaveType.java b/src/main/java/com/zy/core/enums/SlaveType.java
index 56330fe..7f64d13 100644
--- a/src/main/java/com/zy/core/enums/SlaveType.java
+++ b/src/main/java/com/zy/core/enums/SlaveType.java
@@ -8,6 +8,7 @@
     Led,
     Scale,
     Car,
+    Rgv
     ;
 
     public static SlaveType findInstance(String s){
diff --git a/src/main/java/com/zy/core/model/RgvSlave.java b/src/main/java/com/zy/core/model/RgvSlave.java
new file mode 100644
index 0000000..9139fe7
--- /dev/null
+++ b/src/main/java/com/zy/core/model/RgvSlave.java
@@ -0,0 +1,57 @@
+package com.zy.core.model;
+
+import com.zy.core.Slave;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class RgvSlave extends Slave {
+
+    private Integer rack;
+
+    private Integer slot;
+
+    private Integer offset;
+
+    private Boolean demo;
+
+    // RGV鍏ュ簱婧愮珯鐐�
+    private List<RgvStn> rgvInSStn = new ArrayList<>();
+
+    // RGV鍑哄簱婧愮珯鐐�
+    private List<RgvStn> rgvOutSStn = new ArrayList<>();
+
+    // RGV鍙犵洏
+    private List<RgvStn> rgvEmptyInSStn = new ArrayList<>();
+
+    // RGV绌烘澘鍏ュ簱
+    private List<RgvStn> rgvEmptyOutSStn = new ArrayList<>();
+
+    // RGV鍑哄簱鐩爣绔欑偣
+    private List<RgvStn> rgvDestStn = new ArrayList<>();
+
+    @Data
+    public static class RgvStn {
+
+        // 杈撻�佺嚎plc缂栧彿
+        private Integer devpPlcId;
+
+        // RGV绔欑偣缂栧彿
+        private Integer staNo;
+
+//        // 鎺�
+//        private Integer row;
+//
+//        // 鍒�
+//        private Integer bay;
+//
+//        // 灞�
+//        private Integer lev;
+
+    }
+
+}
diff --git a/src/main/java/com/zy/core/model/command/RgvCommand.java b/src/main/java/com/zy/core/model/command/RgvCommand.java
new file mode 100644
index 0000000..6b3a66d
--- /dev/null
+++ b/src/main/java/com/zy/core/model/command/RgvCommand.java
@@ -0,0 +1,60 @@
+package com.zy.core.model.command;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.zy.core.enums.RgvTaskModeType;
+import lombok.Data;
+
+/**
+ * RGV鍛戒护鎶ユ枃
+ */
+@Data
+public class RgvCommand {
+
+    // Rgv缂栧彿
+    private Integer rgvNo = 0;
+
+    // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+    private Short ackFinish1 = 0;
+
+    // 宸ヤ綅1浠诲姟鍙�
+    private Short taskNo1 = 0;
+
+    /**
+     * 浠诲姟妯″紡锛�
+     * 0 = 鏃�
+     * 1 = 鍙栬揣
+     * 2 = 鏀捐揣
+     * 3 = 鍙栨斁璐�
+     */
+    private Short taskMode1 = 0;
+
+    @JSONField(serialize = false)
+    private RgvTaskModeType taskModeType1;
+
+    /*
+    宸ヤ綅1婧愮珯
+     */
+    private Short sourceStaNo1 = 0;
+
+    /*
+    宸ヤ綅1鐩爣绔�
+     */
+    private Short destinationStaNo1 = 0;
+
+    /**
+     * 浠诲姟妯″紡锛�
+     * 0 = 鏈‘璁�
+     * 1 = 浠诲姟纭
+     */
+    private Short command = 0;
+
+    public void setTaskMode1(Short taskMode1){
+        this.taskMode1 = taskMode1;
+        this.taskModeType1 = RgvTaskModeType.get(taskModeType1);
+    }
+
+    public void setTaskMode1(RgvTaskModeType type1) {
+        this.taskModeType1 = type1;
+        this.taskMode1 = RgvTaskModeType.get(type1).id.shortValue();
+    }
+}
diff --git a/src/main/java/com/zy/core/model/protocol/RgvProtocol.java b/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
new file mode 100644
index 0000000..3c0ed08
--- /dev/null
+++ b/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -0,0 +1,228 @@
+package com.zy.core.model.protocol;
+
+import com.zy.asrs.entity.BasRgv;
+import com.zy.core.enums.RgvModeType;
+import com.zy.core.enums.RgvStatusType;
+import lombok.Data;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Data
+public class RgvProtocol implements Cloneable{
+
+    private Integer RgvNo;
+
+    /**
+     * 1 = 鎵嬪姩妯″紡
+     * 2 = 鑷姩妯″紡
+     * 3 = 鐢佃剳妯″紡
+     */
+    public Short mode;
+
+    public RgvModeType modeType;
+
+    /**
+     * RGV褰撳墠鐘舵��
+     * 0锛氱┖闂诧紝鏃犱换鍔�
+     * 1锛氫綔涓氫腑
+     * 2锛氭姤璀�
+     */
+    public Short status;
+
+    /**
+     * 鐘舵�佹灇涓�
+     */
+    public RgvStatusType statusType;
+
+    /**
+     * 宸ヤ綅1浠诲姟鍙�
+     */
+    public Short taskNo1 = 0;
+
+    /**
+     * RGV宸ヤ綅1褰撳墠鐘舵��
+     * 0锛氱┖闂诧紝鏃犱换鍔�
+     * 11锛氬彇璐т腑
+     * 12锛氭斁璐т腑
+     * 10锛氫换鍔″畬鎴愮瓑寰匴CS纭
+     */
+    public Short status1;
+
+    /**
+     * 鐘舵�佹灇涓�
+     */
+    public RgvStatusType statusType1;
+
+    /**
+     * 宸ヤ綅1鏈夌墿
+     */
+    public Short loaded1;
+
+    /**
+     * RGV褰撳墠浣嶇疆
+     */
+    public Short RgvPos;
+
+    /**
+     * 璧拌鍦ㄥ畾浣�
+     * 0 = 鍦ㄥ畾浣�
+     * 1 = 涓嶅湪瀹氫綅
+     */
+    public Short walkPos;
+
+    //////////////////////     宸ヤ綅2瀹氫箟   //////////////////////////////////////////////////
+//    /**
+//     * 宸ヤ綅2浠诲姟鍙�
+//     */
+//    public Short taskNo2 = 0;
+//
+//    /**
+//     * RGV宸ヤ綅2褰撳墠鐘舵��
+//     * 0锛氱┖闂诧紝鏃犱换鍔�
+//     * 11锛氬彇璐т腑
+//     * 12锛氭斁璐т腑
+//     * 10锛氫换鍔″畬鎴愮瓑寰匴CS纭
+//     */
+//    public Short status2;
+//
+//    /**
+//     * 鐘舵�佹灇涓�
+//     */
+//    public RgvStatusType statusType2;
+//
+//    /**
+//     * 宸ヤ綅2鏈夌墿
+//     */
+//    public Short loaded2;
+    ///////////////////////////////////////////////////////////////////////////////////////
+
+    /**
+     * 寮傚父鐮�
+     */
+    public Short alarm;
+
+    /**
+     * 蹇冭烦鎸囦护 1-2姣忕鍒囨崲涓�娆�
+     */
+    public Short heart;
+
+    private Short temp1;
+
+    private Short temp2;
+
+    private Short temp3;
+
+    private Short temp4;
+
+    private Short temp5;
+
+    /**
+     * X琛岃蛋琛岄�熷害m/min
+     */
+    private Float xSpeed;
+
+    /**
+     * 鍫嗗灈鏈虹疮璁¤蛋琛岃窛绂籯m
+     */
+    public Float xDistance;
+
+    /**
+     * 鍫嗗灈鏈虹疮璁¤蛋琛屾椂闀縣
+     */
+    public Float xDuration;
+
+    public void setMode(Short mode) {
+        this.mode = mode;
+        this.modeType = RgvModeType.get(mode);
+    }
+
+    public void setMode(RgvModeType type) {
+        this.modeType = type;
+        this.mode = RgvModeType.get(type).id.shortValue();
+    }
+
+    public void setStatus(Short status){
+        this.status = status;
+        this.statusType = RgvStatusType.get(status);
+    }
+
+    public void setStatus(RgvStatusType type){
+        this.statusType = type;
+        this.status = RgvStatusType.get(type).id.shortValue();
+    }
+
+    public void setStatus1(Short status1){
+        this.status1 = status1;
+        this.statusType1 = RgvStatusType.get(status1);
+    }
+
+    public void setStatus1(RgvStatusType type1){
+        this.statusType1 = type1;
+        this.status1 = RgvStatusType.get(type1).id.shortValue();
+    }
+
+//    public void setStatus2(Short status2){
+//        this.status2 = status2;
+//        this.statusType2 = RgvStatusType.get(status2);
+//    }
+//
+//    public void setStatus2(RgvStatusType type2){
+//        this.statusType2 = type2;
+//        this.status2 = RgvStatusType.get(type2).id.shortValue();
+//    }
+
+    /**
+     * 鏈�杩戜竴娆″叆鍑哄簱绫诲瀷
+     *       I:鍏ュ簱
+     *       O:鍑哄簱
+     */
+    private String lastIo = "I";
+
+
+    public BasRgv toSqlModel(BasRgv basRgv){
+        if (alarm!=null) {
+            basRgv.setRgvErr(alarm.longValue());
+        }
+        basRgv.setWrkNo1(taskNo1.intValue());
+//        basRgv.setWrkNo2(taskNo2.intValue());
+        return basRgv;
+    }
+
+    public void setxSpeed(Short xSpeed) {
+        this.xSpeed = Float.valueOf(xSpeed);
+    }
+
+    public void setxDistance(Short xDistance) {
+        this.xDistance = Float.valueOf(xDistance);
+    }
+
+    public void setxDuration(Short xDuration) {
+        this.xDuration = Float.valueOf(xDuration);
+    }
+
+    public Integer getRgvPosI(){
+        //闇�瑕佹牴鎹幇鍦烘敼閫�  鏍规嵁璇诲埌鐨勫�艰幏鍙栧搴旂珯鐐逛綅缃�
+        Map<Short,Integer> map = new HashMap<>();
+        map.put((short) 1,100);map.put((short) 2,101);
+        map.put((short) 3,106);map.put((short) 4,107);
+        map.put((short) 5,112);map.put((short) 6,113);
+       map.put((short) 7,124); map.put((short) 8,119);
+        map.put((short) 9,149);map.put((short) 10,153);
+        map.put((short) 11,157);map.put((short) 12,161);
+        if (RgvPos==null) return 0;
+
+        return map.get(RgvPos);
+    }
+
+    @Override
+    public RgvProtocol clone() {
+        try {
+            return (RgvProtocol) super.clone();
+        } catch (CloneNotSupportedException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+}
diff --git a/src/main/java/com/zy/core/properties/SlaveProperties.java b/src/main/java/com/zy/core/properties/SlaveProperties.java
index 7198dea..079a641 100644
--- a/src/main/java/com/zy/core/properties/SlaveProperties.java
+++ b/src/main/java/com/zy/core/properties/SlaveProperties.java
@@ -4,6 +4,7 @@
 import com.zy.core.model.CrnSlave;
 import com.zy.core.model.DevpSlave;
 import com.zy.core.model.LedSlave;
+import com.zy.core.model.RgvSlave;
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Configuration;
@@ -52,4 +53,6 @@
 
     private List<Slave> car = new ArrayList<>();
 
+    private List<RgvSlave> rgv = new ArrayList<>();
+
 }
diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java
new file mode 100644
index 0000000..dbfd0ab
--- /dev/null
+++ b/src/main/java/com/zy/core/thread/RgvThread.java
@@ -0,0 +1,465 @@
+package com.zy.core.thread;
+
+import HslCommunication.Core.Types.OperateResult;
+import HslCommunication.Core.Types.OperateResultExOne;
+import HslCommunication.Profinet.Siemens.SiemensPLCS;
+import HslCommunication.Profinet.Siemens.SiemensS7Net;
+import com.alibaba.fastjson.JSON;
+import com.core.common.DateUtils;
+import com.core.common.SpringUtils;
+import com.zy.asrs.entity.BasRgv;
+import com.zy.asrs.entity.BasRgvOpt;
+import com.zy.asrs.service.BasRgvOptService;
+import com.zy.asrs.service.BasRgvService;
+import com.zy.common.utils.News;
+import com.zy.core.RgvThread2;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.OutputQueue;
+import com.zy.core.enums.RgvStatusType;
+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 lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.MessageFormat;
+import java.util.Date;
+
+/**
+ * RGV绾跨▼
+ * Created by vincent on 2022/11/29
+ */
+@Data
+@Slf4j
+public class RgvThread implements Runnable, RgvThread2 {
+
+    private SiemensS7Net siemensNet;
+    private RgvSlave slave;
+    private RgvProtocol rgvProtocol;
+    /**
+     * 宸ヤ綅1澶嶄綅淇″彿
+     */
+    private boolean resetFlag1 = false;
+
+    //閿佸畾鏍囪
+    private boolean PakMk = true;
+
+    public RgvThread(RgvSlave slave) {
+        this.slave = slave;
+    }
+
+    @Override
+    @SuppressWarnings("InfiniteLoopStatement")
+    public void run() {
+        this.connect();
+        while (true) {
+            try {
+                int step = 1;
+                Task task = MessageQueue.poll(SlaveType.Rgv, slave.getId());
+                if (task != null) {
+                    step = task.getStep();
+                }
+                switch (step) {
+                    // 璇绘暟鎹�
+                    case 1:
+                        readStatus();
+                        break;
+                    //宸ヤ綅1鍐欏叆鏁版嵁
+                    case 4:
+                        write1((RgvCommand) task.getData());
+                        break;
+                    // 澶嶄綅
+                    case 3:
+                        RgvCommand command = (RgvCommand) task.getData();
+                        if (null == command) {
+                            command = new RgvCommand();
+                        }
+                        command.setRgvNo(slave.getId()); // RGV缂栧彿
+                        command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+                        command.setAckFinish1((short) 1);  // 浠诲姟瀹屾垚纭浣�
+                        command.setTaskMode1(RgvTaskModeType.NONE); // 浠诲姟妯″紡
+                        command.setSourceStaNo1((short)0);     // 婧愮珯
+                        command.setDestinationStaNo1((short)0);     // 鐩爣绔�
+                        command.setCommand((short)0);
+                        write1(command);
+                        break;
+                    default:
+                        break;
+                }
+                Thread.sleep(500);
+            } catch (Exception e) {
+//                e.printStackTrace();
+            }
+
+        }
+    }
+
+    /**
+     * 鍒濆鍖朢GV鐘舵��
+     */
+    private void initRgv() {
+        if (null == rgvProtocol) {
+            rgvProtocol = new RgvProtocol();
+        }
+        rgvProtocol.setMode((short) -1);
+        rgvProtocol.setStatus((short)-1);
+        rgvProtocol.setTaskNo1((short)0);
+        rgvProtocol.setStatus1((short)-1);
+        rgvProtocol.setLoaded1((short)0);
+        rgvProtocol.setWalkPos((short)0);
+        rgvProtocol.setRgvPos((short)0);
+        rgvProtocol.setAlarm((short)0);
+        rgvProtocol.setxSpeed((short) 0);
+        rgvProtocol.setxDistance((short) 0);
+        rgvProtocol.setxDuration((short) 0);
+    }
+
+    @Override
+    public boolean connect() {
+        boolean result = false;
+        siemensNet = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp());
+        siemensNet.setRack(slave.getRack().byteValue());
+        siemensNet.setSlot(slave.getSlot().byteValue());
+        OperateResult connect = siemensNet.ConnectServer();
+        if(connect.IsSuccess){
+            result = true;
+            OutputQueue.RGV.offer(MessageFormat.format( "銆恵0}銆慠GV plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+            log.info("RGV plc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+        } else {
+            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慠GV plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+            log.error("RGV plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+            initRgv();
+        }
+//        siemensNet.ConnectClose();
+        return result;
+    }
+
+    /**
+     * 璇诲彇鐘舵��
+     */
+    private void readStatus(){
+        try {
+            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 30);
+            if (result.IsSuccess) {
+                if (null == rgvProtocol || rgvProtocol.getRgvNo() == null) {
+                    rgvProtocol = new RgvProtocol();
+                    rgvProtocol.setRgvNo(slave.getId());
+                }
+                rgvProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 0));
+                rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 2));
+                rgvProtocol.setTaskNo1(siemensNet.getByteTransform().TransInt16(result.Content, 4));
+                rgvProtocol.setStatus1(siemensNet.getByteTransform().TransInt16(result.Content, 6));
+                rgvProtocol.setLoaded1(siemensNet.getByteTransform().TransInt16(result.Content, 8));
+                rgvProtocol.setRgvPos(siemensNet.getByteTransform().TransInt16(result.Content, 10));
+                rgvProtocol.setWalkPos(siemensNet.getByteTransform().TransInt16(result.Content, 12));
+                rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 14));
+//                rgvProtocol.setStatus2(siemensNet.getByteTransform().TransInt16(result.Content, 16));
+                rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 18));
+//                rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 20));
+                rgvProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 22));
+//                rgvProtocol.setTemp1(siemensNet.getByteTransform().TransInt16(result.Content, 24));
+                rgvProtocol.setTemp2(siemensNet.getByteTransform().TransInt16(result.Content, 26));
+//                rgvProtocol.setTemp3(siemensNet.getByteTransform().TransInt16(result.Content, 28));
+//                rgvProtocol.setTemp4(siemensNet.getByteTransform().TransInt16(result.Content, 30));
+//                rgvProtocol.setTemp5(siemensNet.getByteTransform().TransInt16(result.Content, 32));
+//                rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 28));
+//                rgvProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 40));
+//                rgvProtocol.setxDuration(siemensNet.getByteTransform().TransInt16(result.Content, 48));
+
+                OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛", DateUtils.convert(new Date()), slave.getId()));
+
+                // 宸ヤ綅1澶嶄綅淇″彿
+                if (rgvProtocol.getStatusType1().equals(RgvStatusType.WAITING)
+                        || rgvProtocol.getStatusType1().equals(RgvStatusType.FETCHWAITING)) {
+                    if (resetFlag1) {
+                        RgvCommand rgvCommand = new RgvCommand();
+                        rgvCommand.setAckFinish1((short)1);
+                        if (write(rgvCommand)) {
+                            resetFlag1 = false;
+                        }
+                    }
+                }
+
+                try {
+                    // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
+                    BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class);
+                    BasRgv basRgv = new BasRgv();
+                    basRgv.setRgvNo(slave.getId());
+                    basRgv.setRgvSts((int)rgvProtocol.getMode());
+                    if (!basRgvService.updateById(rgvProtocol.toSqlModel(basRgv))){
+                        log.error("RGV plc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+                    }
+                } catch (Exception ignore){
+                    System.out.println(ignore);
+                }
+
+            } else {
+                initRgv();
+                OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆戣鍙朢GV plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+//                log.error("璇诲彇RGV plc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆戣鍙朢GV plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+//            log.error("璇诲彇RGV plc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+            initRgv();
+        }
+    }
+
+    /**
+     * 宸ヤ綅1銆�2鍚屾椂鍐欏叆鏁版嵁
+     */
+    private boolean write(RgvCommand command) throws InterruptedException {
+        if (null == command) {
+            log.error("RGV鍐欏叆鍛戒护涓虹┖");
+            return false;
+        }
+//        convertRow(command);
+        command.setRgvNo(slave.getId());
+        short[] array = new short[11];
+        array[0] = command.getAckFinish1();
+        array[1] = command.getTaskNo1();
+        array[2] = command.getTaskMode1();
+        array[3] = command.getSourceStaNo1();
+        array[4] = command.getDestinationStaNo1();
+//        array[0] = command.getAckFinish1();
+//        array[1] = command.getTaskNo1();
+//        array[2] = command.getTaskMode1();
+//        array[3] = command.getSourceStaNo1();
+//        array[4] = command.getDestinationStaNo1();
+//        array[5] = command.getAckFinish2();
+//        array[6] = command.getTaskNo2();
+//        array[7] = command.getTaskMode2();
+//        array[8] = command.getSourceStaNo2();
+//        array[9] = command.getDestinationStaNo2();
+//        array[10] = command.getCommand();
+        OperateResult result = siemensNet.Write("DB100.0", array);
+
+//        if (command.getAckFinish1() == 0 && command.getAckFinish2() == 0) {
+//            short commandFinish = 3;  //宸ヤ綅1銆�2浠诲姟鍚屾椂鍐欏叆
+//            Thread.sleep(100L);
+//            result = siemensNet.Write("DB100.20", commandFinish);
+//        }
+
+        try {
+            // 鏃ュ織璁板綍
+            BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class);
+            BasRgvOpt basRgvOpt = new BasRgvOpt(
+                    command.getTaskNo1().intValue(),
+                    null,
+                    command.getRgvNo(),
+                    new Date(),
+                    command.getTaskModeType1().toString(),
+                    command.getSourceStaNo1().intValue(),
+                    command.getDestinationStaNo1().intValue(),
+                    null,
+                    null,
+                    null,
+                    new Date(),
+                    null
+            );
+            bean.insert(basRgvOpt);
+        } catch (Exception ignore) {}
+
+        if (result != null && result.IsSuccess) {
+            Thread.sleep(200);
+            this.readStatus();
+            log.info("RGV 鍛戒护涓嬪彂[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
+            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
+            return true;
+        } else {
+            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆戝啓鍏GV plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+            log.error("鍐欏叆RGV plc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+            return false;
+        }
+    }
+
+    /**
+     * 宸ヤ綅1鍐欏叆鏁版嵁
+     */
+    private boolean write1(RgvCommand command) throws InterruptedException {
+        if (null == command) {
+            log.error("RGV鍐欏叆鍛戒护涓虹┖");
+            return false;
+        }
+
+        OperateResultExOne<byte[]> result3 = siemensNet.Read("DB100.0", (short) 12);
+        OperateResultExOne<byte[]> result4 = siemensNet.Read("DB100.10", (short) 2);
+        if (result3.IsSuccess){
+            RgvCommand one = new RgvCommand();
+//                one.setAckFinish1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 0));
+            one.setTaskNo1(siemensNet.getByteTransform().TransInt16(result3.Content, 2));
+            one.setTaskMode1(siemensNet.getByteTransform().TransInt16(result3.Content, 4));
+            one.setSourceStaNo1(siemensNet.getByteTransform().TransInt16(result3.Content, 6));
+            one.setDestinationStaNo1(siemensNet.getByteTransform().TransInt16(result3.Content, 8));
+            one.setCommand(siemensNet.getByteTransform().TransInt16(result4.Content, 0));
+
+            News.error("RGV鍛戒护涓嬪彂鍓嶈鍙栫姸鎬乕id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+        }
+
+
+        OperateResult result8 = siemensNet.Write("DB100.10", (short) 0);
+        if (result8.IsSuccess){
+            News.error("涓嬪彂鍓嶆妸杞﹀瓙纭浣嶇疆涓�0");
+        }
+
+//        siemensNet.Write("DB100.20", command.getCommand());
+
+        command.setRgvNo(slave.getId());
+        short[] array = new short[5];
+        array[0] = command.getAckFinish1();
+        array[1] = command.getTaskNo1();
+        array[2] = command.getTaskMode1();
+        array[3] = command.getSourceStaNo1();
+        array[4] = command.getDestinationStaNo1();
+//        siemensNet.Write("DB100.10", command.getCommand());
+
+        OperateResult result = siemensNet.Write("DB100.0", array);
+
+        if (!result.IsSuccess){
+            News.error("鍐欏叆RGVplc鏁版嵁澶辫触锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪 ===> [id:{}],{}",slave.getId(),JSON.toJSON(command));
+            MessageQueue.offer(SlaveType.Rgv,slave.getId(),new Task(4,command));
+            Thread.sleep(100);
+            readStatus();
+            return false;
+        }
+
+        //RGV浠诲姟鍐欏叆鍚庯紝鍥炶涓�娆★紝鐪嬫槸鍚︽垚鍔�
+        Thread.sleep(400);
+        try {
+            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 12);
+            if (resultRead.IsSuccess){
+                RgvCommand one = new RgvCommand();
+//                one.setAckFinish1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 0));
+                one.setTaskNo1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 2));
+                one.setTaskMode1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 4));
+                one.setSourceStaNo1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 6));
+                one.setDestinationStaNo1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8));
+                if (
+                    !command.getTaskNo1().equals(one.getTaskNo1()) ||
+                        !command.getTaskMode1().equals(one.getTaskMode1()) ||
+                        !command.getSourceStaNo1().equals(one.getSourceStaNo1()) ||
+                        !command.getDestinationStaNo1().equals(one.getDestinationStaNo1())
+                ){
+                    try{
+                        News.error("RGV鍛戒护鍦板潃鍐欏叆鍚庡洖璇诲け璐id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+                    }catch (Exception e){
+                        try{
+                            News.error("鏃ュ織鎵撳嵃澶辫触锛�===>>鍙傛暟one鎶ラ敊 [id:{}],{}", slave.getId(), JSON.toJSON(command),JSON.toJSON(resultRead));
+                        }catch (Exception e1){
+                            News.error("鏃ュ織鎵撳嵃澶辫触锛�===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
+                        }
+                    }
+                    News.error("Rgv鍛戒护鍥炶澶辫触鍚庯紝閲嶆柊娣诲姞浠诲姟鍒伴槦鍒� ===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
+                    MessageQueue.offer(SlaveType.Rgv, slave.getId(), new Task(4, command));
+                    Thread.sleep(100);
+                    readStatus();
+                    return false;
+                }else {
+                    News.info("RGV鍛戒护鍦板潃鍐欏叆鍚庡洖璇绘垚鍔焄id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+                }
+            }
+        }catch (Exception e){
+            News.error("RGV鍛戒护鍦板潃鍐欏叆鍚庡洖璇诲嚭閿�");
+        }
+
+        if (command.getAckFinish1() == 0) {
+            if (result.IsSuccess) {
+                Thread.sleep(300);
+                //浠诲姟涓嬪彂娆℃暟
+                int writeCount2 = 0;
+
+                do {
+                    writeCount2++;
+                    short commandFinish = (short) 1;
+                    result = siemensNet.Write("DB100.10", commandFinish);
+                    if(result.IsSuccess){
+                        //RGV浠诲姟鍐欏叆鍚庯紝鍥炶涓�娆★紝鐪嬫槸鍚︽垚鍔�
+                        Thread.sleep(200);
+                        OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.10", (short) 2);
+                        if (resultRead.IsSuccess) {
+                            commandFinish=siemensNet.getByteTransform().TransInt16(resultRead.Content, 0);
+                            if (commandFinish != 1){
+                                News.error("RGV浠诲姟纭浣�"+commandFinish+"鍐欏叆鏁版嵁涓庡洖璇绘暟鎹笉涓�鑷达紒"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+                            }else{
+                                //浠诲姟鍛戒护鍐欏叆鎴愬姛
+                                News.info("RGV浠诲姟纭浣�"+commandFinish+"鍥炶鎴愬姛锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+                                break;
+                            }
+                        }else {
+                            News.error("RGV浠诲姟纭浣�"+commandFinish+"鍥炶澶辫触锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+                        }
+                    } else {
+                        News.error("RGV浠诲姟纭浣�"+commandFinish+"鍐欏叆澶辫触锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+                    }
+                }while (writeCount2<5);
+            }
+        }
+
+//        if (command.getAckFinish1() == 0) {
+//            short commandFinish = 1;  //宸ヤ綅1浠诲姟鍐欏叆
+//            Thread.sleep(200);
+//            result = siemensNet.Write("DB100.10", commandFinish);
+//        }
+
+        try {
+            // 鏃ュ織璁板綍
+            BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class);
+            BasRgvOpt basRgvOpt = new BasRgvOpt(
+                    command.getTaskNo1().intValue(),
+                    null,
+                    command.getRgvNo(),
+                    new Date(),
+                    command.getTaskModeType1().toString(),
+                    command.getSourceStaNo1().intValue(),
+                    command.getDestinationStaNo1().intValue(),
+                    null,
+                    null,
+                    null,
+                    new Date(),
+                    null
+            );
+            bean.insert(basRgvOpt);
+        } catch (Exception ignore) {
+            log.error(ignore.getMessage());
+        }
+
+        if (result != null && result.IsSuccess) {
+            Thread.sleep(200);
+            this.readStatus();
+            log.info("RGV 宸ヤ綅1鍛戒护涓嬪彂[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
+            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 宸ヤ綅1鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
+            return true;
+        } else {
+            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆戝啓鍏GV plc宸ヤ綅1鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+            log.error("鍐欏叆RGV plc宸ヤ綅1鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+            return false;
+        }
+    }
+
+    @Override
+    public void close() {
+        siemensNet.ConnectClose();
+    }
+
+    /******************************************************************************************/
+    /**************************************** 娴嬭瘯涓撶敤 *****************************************/
+    /*****************************************************************************************/
+    public static void main(String[] args) throws InterruptedException {
+        RgvSlave slave = new RgvSlave();
+        slave.setId(1);
+        slave.setIp("192.168.6.9");
+        slave.setRack(0);
+        slave.setSlot(0);
+        RgvThread rgvThread = new RgvThread(slave);
+        rgvThread.connect();
+        rgvThread.readStatus();
+        System.out.println(JSON.toJSONString(rgvThread.rgvProtocol));
+        Thread.sleep(3000L);
+
+    }
+
+}
diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
index cdc49e4..e1e7aa0 100644
--- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -154,7 +154,7 @@
      */
     private void readStatus(){
         try {
-            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 56);
+            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 58);
             if (result.IsSuccess) {
                 if (null == crnProtocol) {
                     crnProtocol = new CrnProtocol();
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 3e59121..c9a920b 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -8,7 +8,6 @@
     name: @pom.build.finalName@
   datasource:
     driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
-#    url: jdbc:sqlserver://127.0.0.1:1433;databasename=lfdasrsMem
     url: jdbc:sqlserver://127.0.0.1:1433;databasename=ytflasrs
     username: sa
     password: sa@123
@@ -204,6 +203,13 @@
       row: 25
       bay: 1
       lev: 1
+  # RGV绌挎杞�1
+  rgv[0]:
+    id: 1
+    ip: 172.17.60.82
+    port: 502
+    rack: 0
+    slot: 0
   # 杈撻�佺嚎1
   devp[0]:
     id: 1
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/resources/mapper/BasRgvMapper.xml b/src/main/resources/mapper/BasRgvMapper.xml
new file mode 100644
index 0000000..a826fab
--- /dev/null
+++ b/src/main/resources/mapper/BasRgvMapper.xml
@@ -0,0 +1,24 @@
+<?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.BasRgvMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasRgv">
+        <result column="rgv_no" property="rgvNo" />
+        <result column="in_enable" property="inEnable" />
+        <result column="out_enable" property="outEnable" />
+        <result column="rgv_sts" property="rgvSts" />
+        <result column="wrk_no1" property="wrkNo1" />
+        <result column="wrk_no2" property="wrkNo2" />
+        <result column="rgv_err" property="rgvErr" />
+        <result column="pak_mk" property="pakMk" />
+        <result column="status" property="status" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="memo" property="memo" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/BasRgvOptMapper.xml b/src/main/resources/mapper/BasRgvOptMapper.xml
new file mode 100644
index 0000000..a0039f0
--- /dev/null
+++ b/src/main/resources/mapper/BasRgvOptMapper.xml
@@ -0,0 +1,28 @@
+<?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.BasRgvOptMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasRgvOpt">
+        <id column="id" property="id" />
+        <result column="wrk_no1" property="wrkNo1" />
+        <result column="wrk_no2" property="wrkNo2" />
+        <result column="rgv_no" property="rgvNo" />
+        <result column="send_time" property="sendTime" />
+        <result column="mode" property="mode" />
+        <result column="source_row" property="sourceRow" />
+        <result column="source_bay" property="sourceBay" />
+        <result column="source_lev" property="sourceLev" />
+        <result column="source_sta" property="sourceSta" />
+        <result column="pos_row" property="posRow" />
+        <result column="pos_bay" property="posBay" />
+        <result column="pos_lev" property="posLev" />
+        <result column="pos_sta" property="posSta" />
+        <result column="response" property="response" />
+        <result column="update_time" property="updateTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="memo" property="memo" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/WrkMastLogMapper.xml b/src/main/resources/mapper/WrkMastLogMapper.xml
new file mode 100644
index 0000000..1457aea
--- /dev/null
+++ b/src/main/resources/mapper/WrkMastLogMapper.xml
@@ -0,0 +1,69 @@
+<?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.WrkMastLogMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.WrkMastLog">
+        <id column="id" property="id" />
+        <result column="wrk_no" property="wrkNo" />
+        <result column="inv_wh" property="invWh" />
+        <result column="ymd" property="ymd" />
+        <result column="mk" property="mk" />
+        <result column="whs_type" property="whsType" />
+        <result column="wrk_sts" property="wrkSts" />
+        <result column="io_type" property="ioType" />
+        <result column="crn_no" property="crnNo" />
+        <result column="sheet_no" property="sheetNo" />
+        <result column="io_pri" property="ioPri" />
+        <result column="wrk_date" property="wrkDate" />
+        <result column="loc_no" property="locNo" />
+        <result column="sta_no" property="staNo" />
+        <result column="source_sta_no" property="sourceStaNo" />
+        <result column="source_loc_no" property="sourceLocNo" />
+        <result column="loc_sts" property="locSts" />
+        <result column="picking" property="picking" />
+        <result column="link_mis" property="linkMis" />
+        <result column="online_yn" property="onlineYn" />
+        <result column="upd_mk" property="updMk" />
+        <result column="exit_mk" property="exitMk" />
+        <result column="plt_type" property="pltType" />
+        <result column="empty_mk" property="emptyMk" />
+        <result column="io_time" property="ioTime" />
+        <result column="ctn_type" property="ctnType" />
+        <result column="packed" property="packed" />
+        <result column="ove_mk" property="oveMk" />
+        <result column="mtn_type" property="mtnType" />
+        <result column="user_no" property="userNo" />
+        <result column="crn_str_time" property="crnStrTime" />
+        <result column="crn_end_time" property="crnEndTime" />
+        <result column="plc_str_time" property="plcStrTime" />
+        <result column="crn_pos_time" property="crnPosTime" />
+        <result column="load_time" property="loadTime" />
+        <result column="exp_time" property="expTime" />
+        <result column="ref_wrkno" property="refWrkno" />
+        <result column="ref_iotime" property="refIotime" />
+        <result column="modi_user" property="modiUser" />
+        <result column="modi_time" property="modiTime" />
+        <result column="appe_user" property="appeUser" />
+        <result column="appe_time" property="appeTime" />
+        <result column="pause_mk" property="pauseMk" />
+        <result column="error_time" property="errorTime" />
+        <result column="error_memo" property="errorMemo" />
+        <result column="ctn_kind" property="ctnKind" />
+        <result column="manu_type" property="manuType" />
+        <result column="memo_m" property="memoM" />
+        <result column="sc_weight" property="scWeight" />
+        <result column="log_mk" property="logMk" />
+        <result column="log_err_time" property="logErrTime" />
+        <result column="log_err_memo" property="logErrMemo" />
+        <result column="barcode" property="barcode" />
+        <result column="Pdc_type" property="PdcType" />
+        <result column="ctn_no" property="ctnNo" />
+        <result column="full_plt" property="fullPlt" />
+        <result column="pre_have" property="preHave" />
+        <result column="take_none" property="takeNone" />
+        <result column="line_number" property="lineNumber" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/webapp/static/css/rgv.css b/src/main/webapp/static/css/rgv.css
new file mode 100644
index 0000000..bd49d5b
--- /dev/null
+++ b/src/main/webapp/static/css/rgv.css
@@ -0,0 +1,252 @@
+body {
+    background-color: #6CA7A8;
+}
+.button-window {
+    float: left;
+    width: 100%;
+    height: 100%;
+    padding: 10px;
+    border-radius: 5px;
+    box-shadow: 0 0 3px rgba(0 0 0 .3);
+}
+/* -------------------- 绗竴妯″潡 -------------------- */
+.log-board {
+    background-color: #fff;
+    border-radius: 5px;
+    box-shadow: 0 0 3px rgba(0,0,0,.3);
+    height: 28%;
+}
+
+/* 宸� */
+.command-log {
+    float: left;
+    height: 100%;
+    width: 20%;
+    text-align: center;
+}
+.command-log h2 {
+    padding: 10px;
+}
+.rgv-command-item {
+    padding: 4px 0;
+}
+.rgv-command-item label {
+    font-size: 20px;
+    font-weight: bold;
+    vertical-align: middle;
+}
+.rgv-command-item span {
+    display: inline-block;
+    width: 20px;
+    height: 20px;
+    background-color: #2e9926;
+    border-radius: 5px;
+    vertical-align: middle;
+}
+.rgv-command-item input {
+    vertical-align: middle;
+    outline: none;
+    width: 60%;
+}
+
+/* 鍙� */
+.rgv-state {
+    float: left;
+    height: 100%;
+    width: 100%;
+    overflow: auto;
+}
+/* 鍫嗗灈鏈虹姸鎬佽〃 */
+#rgv-state-table {
+    font-size: 12px;
+    border-collapse: collapse;
+    margin: 0 auto;
+    text-align: center;
+}
+#rgv-state-table td, #rgv-state-table th {
+    border: 1px solid #cad9ea;
+    color: #666;
+    height: 25px;
+}
+#rgv-state-table thead th {
+    background-color: #CCE8EB;
+    width: 300px;
+}
+#rgv-state-table tr:nth-child(odd) {
+    background: #fff;
+}
+#rgv-state-table tr:nth-child(even) {
+    background: #F5FAFA;
+}
+
+/* -------------------- 绗簩妯″潡 -------------------- */
+.rgv-msg {
+    /*overflow: auto;*/
+    margin-top: 10px;
+    height: 23%;
+    background-color: #fff;
+    border-radius: 5px;
+    box-shadow: 0 0 3px rgba(0,0,0,.3);
+}
+/* 鍫嗗灈鏈虹姸鎬佷俊鎭〃 */
+#rgv-msg-table {
+    font-size: 12px;
+    border-collapse: collapse;
+    margin: 0 auto;
+    text-align: center;
+}
+#rgv-msg-table td, #rgv-msg-table th {
+    border: 1px solid #f1f1f1;
+    color: #666;
+    height: 30px;
+}
+#rgv-msg-table thead th {
+    background-color: #fff;
+    width: 400px;
+}
+#rgv-msg-table tr:nth-child(odd) {
+    background: #fff;
+}
+#rgv-msg-table tr:nth-child(even) {
+    background: #fff;
+}
+
+/* -------------------- 绗笁妯″潡 -------------------- */
+.rgv-operation {
+    position: relative;
+    margin-top: 10px;
+    height: 25%;
+    background-color: #fff;
+    border-radius: 5px;
+    box-shadow: 0 0 3px rgba(0,0,0,.3);
+}
+
+/* 浠诲姟璁惧閫夋嫨妗� */
+.task-select {
+    height: 50%;
+    overflow: hidden;
+    padding: 20px 0 10px 20px;
+}
+.operator-item {
+    display: inline-block;
+    height: 100%;
+    width: 20%;
+    text-align: center;
+    position: relative;
+    vertical-align: middle;
+    padding: 10px 0px 10px 50px;
+}
+.operator-item .select-title {
+    display: inline-block;
+    position: absolute;
+    top: -11px;
+    left: 50%;
+    transform: translate(-50%, 0);
+    background-color: #fff;
+    color: #2e95d3;
+    font-size: 12px;
+    border: 1px solid #8d8d8d;
+    border-radius: 5px;
+    padding: 5px;
+    z-index: 999;
+}
+.operator-item .select-container {
+    padding: 10px 0;
+    height: 100%;
+    border: 1px solid #8d8d8d;
+    border-radius: 5px;
+}
+#rgv-select .select-container label {
+    display: inline-block;
+    padding: 0 20px;
+    vertical-align: middle; margin-top:-2px; margin-bottom:1px;
+
+}
+.select-container input {
+    display: inline-block;
+    font-size: 12px;
+    vertical-align: middle; margin-top:-2px; margin-bottom:1px;
+}
+.select-container-item {
+    display: inline-block;
+    margin: 0px auto;
+    padding: 0;
+}
+.select-container-item input {
+    height: 20px;
+    border: 1px solid #8D8D8D;
+    border-radius: 3px;
+    width: 80px;
+    outline: none;
+}
+
+/* 浠诲姟浣滀笟閫夋嫨妗� */
+.task-operator {
+    height: 50%;
+    overflow: hidden;
+    padding: 0 20px 10px 20px;
+}
+.task-operator fieldset {
+    padding: 15px 20px 5px 50px;
+    border-width: 1px;
+    border-style: solid;
+    height: 100%;
+}
+.task-operator legend {
+    margin-left: 20px;
+    padding: 0 10px;
+    font-size: 16px;
+    font-weight: 300;
+}
+button.item {
+    border: 1px solid #333;
+    font-size: 13px;
+    padding: 1px 1px 1px 1px;
+    width: 100px;
+    height: 40px;
+    outline: none;
+    cursor: pointer;
+    color: #333;
+    background-color: transparent;
+    margin-right: 5px;
+    border-radius: 5px;
+}
+button.item:hover {
+    background-color: #333;
+    color: #fff;
+}
+
+/* 鎵嬪姩鎿嶄綔閬僵 */
+.rgv-operation-shade {
+    position: absolute;
+    height: 100%;
+    width: 100%;
+    z-index: 1000;
+    text-align: center;
+    padding: 80px 0;
+}
+.rgv-operation-shade-span {
+    font-size: xx-large;
+    font-weight: bold;
+    color: red;
+}
+
+/* -------------------- 绗洓妯″潡 -------------------- */
+.rgv-output-board {
+    margin-top: 10px;
+    height: 15%;
+    background-color: #fff;
+    border-radius: 5px;
+    box-shadow: 0 0 3px rgba(0,0,0,.3);
+}
+#rgv-output {
+    border-left: none;
+    border-right: none;
+    border-top: 1px solid #9d9d9d;
+    border-bottom: 1px solid #333;
+    width: 100%;
+    height: 100%;
+    overflow: auto;
+    resize:none;
+    color: #666;
+}
diff --git a/src/main/webapp/static/js/basRgv/basRgv.js b/src/main/webapp/static/js/basRgv/basRgv.js
new file mode 100644
index 0000000..ca7e6a2
--- /dev/null
+++ b/src/main/webapp/static/js/basRgv/basRgv.js
@@ -0,0 +1,268 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#basRgv',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/basRgv/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        cols: [[
+            {type: 'checkbox'}
+            ,{field: 'rgvNo', align: 'center',title: 'RGV缂栧彿'}
+            ,{field: 'inEnable', align: 'center',title: '鍙叆'}
+            ,{field: 'outEnable', align: 'center',title: '鍙嚭'}
+            ,{field: 'rgvSts', align: 'center',title: '浣滀笟鎬�'}
+            ,{field: 'wrkNo1', align: 'center',title: '浠诲姟鍙�'}
+            ,{field: 'wrkNo2', align: 'center',title: '鍫嗗灈鏈哄彿'}
+            ,{field: 'rgvErr', align: 'center',title: '閿欒鐮�'}
+            ,{field: 'pakMk', align: 'center',title: '鏍囪'}
+            ,{field: 'status$', align: 'center',title: '鐘舵��'}
+            ,{field: 'createBy$', align: 'center',title: '娣诲姞浜哄憳'}
+            ,{field: 'createTime$', align: 'center',title: '娣诲姞鏃堕棿'}
+            ,{field: 'updateBy$', align: 'center',title: '淇敼浜哄憳'}
+            ,{field: 'updateTime$', align: 'center',title: '淇敼鏃堕棿'}
+            ,{field: 'memo', align: 'center',title: '澶囨敞'}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(basRgv)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(basRgv)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               del(checkStatus.map(function (d) {
+                   return d.rgvNo;
+               }));
+               break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'basRgv': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/basRgv/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(basRgv)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.rgvNo]);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '璁㈠崟鐘舵��',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/basRgv/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/basRgv/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '.layui-laydate-range'
+                ,type: 'datetime'
+                ,range: true
+            });
+            layDate.render({
+                elem: '#createTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['createTime\\$']:null
+            });
+            layDate.render({
+                elem: '#updateTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['updateTime\\$']:null
+            });
+
+        }, 300);
+    }
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
diff --git a/src/main/webapp/static/js/basRgvErr/basRgvErr.js b/src/main/webapp/static/js/basRgvErr/basRgvErr.js
new file mode 100644
index 0000000..56d5820
--- /dev/null
+++ b/src/main/webapp/static/js/basRgvErr/basRgvErr.js
@@ -0,0 +1,260 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#basRgvErr',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/basRgvErr/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        cols: [[
+            {type: 'checkbox'}
+            ,{field: 'errorCode', align: 'center',title: '寮傚父鐮�'}
+            ,{field: 'errName', align: 'center',title: '寮傚父'}
+            ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳'}
+            ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'}
+            ,{field: 'appeUser$', align: 'center',title: '娣诲姞浜哄憳'}
+            ,{field: 'appeTime$', align: 'center',title: '娣诲姞鏃堕棿'}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(basRgvErr)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(basRgvErr)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               del(checkStatus.map(function (d) {
+                   return d.errorCode;
+               }));
+               break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'basRgvErr': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/basRgvErr/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(basRgvErr)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.errorCode]);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '璁㈠崟鐘舵��',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/basRgvErr/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/basRgvErr/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '.layui-laydate-range'
+                ,type: 'datetime'
+                ,range: true
+            });
+            layDate.render({
+                elem: '#modiTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['modiTime\\$']:null
+            });
+            layDate.render({
+                elem: '#appeTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['appeTime\\$']:null
+            });
+
+        }, 300);
+    }
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
diff --git a/src/main/webapp/static/js/basRgvOpt/basRgvOpt.js b/src/main/webapp/static/js/basRgvOpt/basRgvOpt.js
new file mode 100644
index 0000000..5384bf4
--- /dev/null
+++ b/src/main/webapp/static/js/basRgvOpt/basRgvOpt.js
@@ -0,0 +1,272 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#basRgvOpt',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/basRgvOpt/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        cols: [[
+            {type: 'checkbox'}
+            ,{field: 'wrkNo1', align: 'center',title: '浠诲姟鍙�'}
+            ,{field: 'wrkNo2', align: 'center',title: ''}
+            ,{field: 'rgvNo', align: 'center',title: '绌挎杞�'}
+            ,{field: 'sendTime$', align: 'center',title: '涓嬪彂鏃堕棿'}
+            ,{field: 'mode', align: 'center',title: '浣滀笟'}
+            ,{field: 'sourceRow', align: 'center',title: '婧愭帓'}
+            ,{field: 'sourceBay', align: 'center',title: '婧愬垪'}
+            ,{field: 'sourceLev', align: 'center',title: '婧愬眰'}
+            ,{field: 'sourceSta', align: 'center',title: '婧愮珯'}
+            ,{field: 'posRow', align: 'center',title: '鐩爣鎺�'}
+            ,{field: 'posBay', align: 'center',title: '鐩爣鍒�'}
+            ,{field: 'posLev', align: 'center',title: '鐩爣灞�'}
+            ,{field: 'posSta', align: 'center',title: '鐩爣绔�'}
+            ,{field: 'response$', align: 'center',title: '鍝嶅簲缁撴灉'}
+            ,{field: 'updateTime$', align: 'center',title: '淇敼鏃堕棿'}
+            ,{field: 'updateBy$', align: 'center',title: '淇敼浜哄憳'}
+            ,{field: 'memo', align: 'center',title: '澶囨敞'}
+            ,{field: 'id', align: 'center',title: ''}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(basRgvOpt)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(basRgvOpt)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               del(checkStatus.map(function (d) {
+                   return d.id;
+               }));
+               break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'basRgvOpt': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/basRgvOpt/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(basRgvOpt)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.id]);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '璁㈠崟鐘舵��',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/basRgvOpt/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/basRgvOpt/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '.layui-laydate-range'
+                ,type: 'datetime'
+                ,range: true
+            });
+            layDate.render({
+                elem: '#sendTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['sendTime\\$']:null
+            });
+            layDate.render({
+                elem: '#updateTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['updateTime\\$']:null
+            });
+
+        }, 300);
+    }
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
diff --git a/src/main/webapp/static/js/wrkMastLog/wrkMastLog.js b/src/main/webapp/static/js/wrkMastLog/wrkMastLog.js
new file mode 100644
index 0000000..2fcdea4
--- /dev/null
+++ b/src/main/webapp/static/js/wrkMastLog/wrkMastLog.js
@@ -0,0 +1,363 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#wrkMastLog',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/wrkMastLog/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        cols: [[
+            {type: 'checkbox'}
+            ,{field: 'id', align: 'center',title: '缂栧彿'}
+            ,{field: 'wrkNo$', align: 'center',title: '宸ヤ綔鍙�'}
+            ,{field: 'invWh', align: 'center',title: ''}
+            ,{field: 'ymd$', align: 'center',title: ''}
+            ,{field: 'mk', align: 'center',title: ''}
+            ,{field: 'whsType', align: 'center',title: ''}
+            ,{field: 'wrkSts$', align: 'center',title: '宸ヤ綔鐘舵��'}
+            ,{field: 'ioType$', align: 'center',title: '鍏ュ嚭搴撶被鍨�'}
+            ,{field: 'crnNo$', align: 'center',title: '鍫嗗灈鏈哄彿'}
+            ,{field: 'sheetNo', align: 'center',title: ''}
+            ,{field: 'ioPri', align: 'center',title: '浼樺厛绾�'}
+            ,{field: 'wrkDate$', align: 'center',title: ''}
+            ,{field: 'locNo$', align: 'center',title: '鐩爣搴撲綅'}
+            ,{field: 'staNo$', align: 'center',title: '鐩爣绔�'}
+            ,{field: 'sourceStaNo$', align: 'center',title: '婧愮珯'}
+            ,{field: 'sourceLocNo$', align: 'center',title: '婧愬簱浣�'}
+            ,{field: 'locSts', align: 'center',title: ''}
+            ,{field: 'picking', align: 'center',title: '鎷f枡(checkBox)'}
+            ,{field: 'linkMis', align: 'center',title: ''}
+            ,{field: 'onlineYn', align: 'center',title: ''}
+            ,{field: 'updMk', align: 'center',title: ''}
+            ,{field: 'exitMk', align: 'center',title: '閫�鍑�(checkBox)'}
+            ,{field: 'pltType', align: 'center',title: ''}
+            ,{field: 'emptyMk', align: 'center',title: '绌烘澘(checkBox)'}
+            ,{field: 'ioTime$', align: 'center',title: '宸ヤ綔鏃堕棿'}
+            ,{field: 'ctnType', align: 'center',title: ''}
+            ,{field: 'packed', align: 'center',title: ''}
+            ,{field: 'oveMk', align: 'center',title: ''}
+            ,{field: 'mtnType', align: 'center',title: ''}
+            ,{field: 'userNo', align: 'center',title: ''}
+            ,{field: 'crnStrTime$', align: 'center',title: '鍫嗗灈鏈哄惎鍔ㄦ椂闂�'}
+            ,{field: 'crnEndTime$', align: 'center',title: '鍫嗗灈鏈哄仠姝㈡椂闂�'}
+            ,{field: 'plcStrTime$', align: 'center',title: '鎷f枡鏃堕棿'}
+            ,{field: 'crnPosTime$', align: 'center',title: ''}
+            ,{field: 'loadTime', align: 'center',title: ''}
+            ,{field: 'expTime', align: 'center',title: ''}
+            ,{field: 'refWrkno', align: 'center',title: ''}
+            ,{field: 'refIotime$', align: 'center',title: ''}
+            ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳'}
+            ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'}
+            ,{field: 'appeUser$', align: 'center',title: '鍒涘缓鑰�'}
+            ,{field: 'appeTime$', align: 'center',title: '娣诲姞鏃堕棿'}
+            ,{field: 'pauseMk', align: 'center',title: ''}
+            ,{field: 'errorTime$', align: 'center',title: ''}
+            ,{field: 'errorMemo', align: 'center',title: ''}
+            ,{field: 'ctnKind', align: 'center',title: ''}
+            ,{field: 'manuType', align: 'center',title: ''}
+            ,{field: 'memoM', align: 'center',title: ''}
+            ,{field: 'scWeight', align: 'center',title: ''}
+            ,{field: 'logMk', align: 'center',title: ''}
+            ,{field: 'logErrTime$', align: 'center',title: ''}
+            ,{field: 'logErrMemo', align: 'center',title: ''}
+            ,{field: 'barcode', align: 'center',title: '鏉$爜'}
+            ,{field: 'PdcType', align: 'center',title: ''}
+            ,{field: 'ctnNo', align: 'center',title: ''}
+            ,{field: 'fullPlt', align: 'center',title: '婊℃澘(checkBox)'}
+            ,{field: 'preHave', align: 'center',title: ''}
+            ,{field: 'takeNone', align: 'center',title: ''}
+            ,{field: 'lineNumber', align: 'center',title: ''}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(wrkMastLog)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(wrkMastLog)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               del(checkStatus.map(function (d) {
+                   return d.id;
+               }));
+               break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'wrkMastLog': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/wrkMastLog/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(wrkMastLog)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.id]);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '璁㈠崟鐘舵��',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/wrkMastLog/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/wrkMastLog/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '.layui-laydate-range'
+                ,type: 'datetime'
+                ,range: true
+            });
+            layDate.render({
+                elem: '#ymd\\$',
+                type: 'datetime',
+                value: data!==undefined?data['ymd\\$']:null
+            });
+            layDate.render({
+                elem: '#wrkDate\\$',
+                type: 'datetime',
+                value: data!==undefined?data['wrkDate\\$']:null
+            });
+            layDate.render({
+                elem: '#ioTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['ioTime\\$']:null
+            });
+            layDate.render({
+                elem: '#crnStrTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['crnStrTime\\$']:null
+            });
+            layDate.render({
+                elem: '#crnEndTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['crnEndTime\\$']:null
+            });
+            layDate.render({
+                elem: '#plcStrTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['plcStrTime\\$']:null
+            });
+            layDate.render({
+                elem: '#crnPosTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['crnPosTime\\$']:null
+            });
+            layDate.render({
+                elem: '#refIotime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['refIotime\\$']:null
+            });
+            layDate.render({
+                elem: '#modiTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['modiTime\\$']:null
+            });
+            layDate.render({
+                elem: '#appeTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['appeTime\\$']:null
+            });
+            layDate.render({
+                elem: '#errorTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['errorTime\\$']:null
+            });
+            layDate.render({
+                elem: '#logErrTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['logErrTime\\$']:null
+            });
+
+        }, 300);
+    }
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
diff --git a/src/main/webapp/views/index.html b/src/main/webapp/views/index.html
index e5fe9d1..beb9a59 100644
--- a/src/main/webapp/views/index.html
+++ b/src/main/webapp/views/index.html
@@ -24,6 +24,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..6dad87d
--- /dev/null
+++ b/src/main/webapp/views/rgv.html
@@ -0,0 +1,589 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>RGV鐩戞帶绠$悊</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/rgv.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>-->
+<!--                    &lt;!&ndash;            <span>&nbsp;</span>&ndash;&gt;-->
+<!--                    <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>-->
+<!--                    &lt;!&ndash;            <span>&nbsp;</span>&ndash;&gt;-->
+<!--                    <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>-->
+<!--                    &lt;!&ndash;            <span>&nbsp;</span>&ndash;&gt;-->
+<!--                    <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>-->
+<!--                    &lt;!&ndash;            <span>&nbsp;</span>&ndash;&gt;-->
+<!--                    <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>-->
+<!--                    &lt;!&ndash;            <span>&nbsp;</span>&ndash;&gt;-->
+<!--                    <input id="crn5" disabled="disabled">-->
+<!--                </div>-->
+<!--            </div>-->
+            <!-- RGV鐘舵�佷綅淇℃伅 -->
+            <div class="rgv-state">
+                <table id="rgv-state-table">
+                    <thead>
+                    <tr>
+                        <th>RGV</th>
+                        <th>褰撳墠妯″紡</th>
+                        <th>褰撳墠鐘舵��</th>
+                        <th>浠诲姟鍙�</th>
+                        <th>宸ヤ綔鐘舵��</th>
+                        <th>鏈夌墿</th>
+                        <th>RGV浣嶇疆</th>
+                        <th>璧拌瀹氫綅</th>
+<!--                        <th>浠诲姟鍙�2</th>-->
+<!--                        <th>鐘舵��2</th>-->
+<!--                        <th>鏈夌墿2</th>-->
+                        <th>鏁呴殰浠g爜</th>
+                        <th>鏁呴殰鎻忚堪</th>
+                        <th>閿佸畾鐘舵��</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    </tbody>
+                </table>
+            </div>
+        </div>
+        <!-- RGV鐘舵�� -->
+        <div class="rgv-msg">
+            <table id="rgv-msg-table">
+                <thead>
+                <tr>
+                    <th>RGV</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="rgv-operation">
+
+            <!-- 閬僵灞� -->
+            <div class="rgv-operation-shade">
+        <span class="rgv-operation-shade-span">
+            WCS 绯荤粺杩愯涓紝璇峰仠姝㈠悗鎿嶄綔
+        </span>
+            </div>
+
+            <!-- 璁惧浠诲姟閫夋嫨 -->
+            <div class="task-select">
+                <!-- 鍫嗗灈鏈洪�夋嫨 -->
+                <div id="rgv-select" class="operator-item" style="width: 55%">
+                    <span class="select-title">RGV鍙�</span>
+                    <div class="select-container" style="padding: 20px 0;">
+                        <label><input type="radio" name="rgvSelect" value="1" checked>&nbsp;1鍙稲GV</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>宸ヤ綅1婧愮珯</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>宸ヤ綅2婧愮珯</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>宸ヤ綅1鐩爣绔�</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>宸ヤ綅2鐩爣绔�</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="lock()">瑙i攣</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="rgv-output-board">
+            <textarea id="rgv-output"></textarea>
+        </div>
+    </div>
+</div>
+</body>
+<script>
+    // 绌虹櫧琛屾暟
+    var rgvStateTableBlankRows = 0;
+    var rgvMsgTableBlankRows = 0;
+    // 瀹為檯琛屾暟
+    var rgvStateTableFullRows = 0;
+    var rgvMsgTableFullRows = 0;
+    // 鍒濆鍖�
+    var rgvOutputDom = document.getElementById("rgv-output");
+    $(document).ready(function() {
+        // getCommandLog();
+        initRgvStateTable();
+        getRgvStateInfo();
+        initRgvMsgTable();
+        getRgvMsgInfo();
+        operatorBlockShow();
+    });
+    // 鏁版嵁鏇存柊
+    setInterval(function () {
+        getRgvStateInfo();
+        getRgvMsgInfo();
+        // getCommandLog();
+    },1000);
+    setInterval(function () {
+        getRgvOutput();
+        operatorBlockShow();
+        // initDemo();
+    },500);
+
+    // 鍒ゆ柇鎵嬪姩鎿嶄綔妯″潡鏄惁鍙敤
+    function operatorBlockShow() {
+        if (parent.systemRunning) {
+            $('.rgv-operation').css("opacity", "0.5");
+            $('.rgv-operation-shade').show();
+            $('.rgv-operation-shade-span').show();
+        }  else {
+            $('.rgv-operation').css("opacity", "1");
+            $('.rgv-operation-shade').hide();
+            $('.rgv-operation-shade-span').hide();
+        }
+    }
+
+    // 鑾峰彇RGV鎵ц涓殑鍛戒护
+    function getCommandLog() {
+        $.ajax({
+            url: baseUrl + "/rgv/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++){
+                        $("#rgv"+commands[i].rgvNo).val(commands[i].command);
+                    }
+                } else if (res.code === 403) {
+                    window.location.href = baseUrl + "/login";
+                } else {
+                    console.log(res.msg);
+                }
+            }
+        })
+    }
+
+    // 鍫嗗灈鏈轰俊鎭〃鑾峰彇 ---- 琛ㄤ竴
+    function getRgvStateInfo() {
+        var tableEl = $('#rgv-state-table');
+        $.ajax({
+            url: baseUrl+ "/rgv/table/rgv/state",
+            headers: {'token': localStorage.getItem('token')},
+            method: 'POST',
+            success: function (res) {
+                console.log(res)
+                if (res.code === 200){
+                    var table = res.data;
+                    if (table.length > rgvStateTableBlankRows && table.length !== rgvStateTableFullRows) {
+                        initRgvStateTable(table.length-rgvStateTableBlankRows);
+                        rgvStateTableFullRows = 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].rgvNo);
+                        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].workNo1);
+                        setVal(tr.children("td").eq(4), table[i-1].status1);
+                        setVal(tr.children("td").eq(5), table[i-1].loading1);
+                        setVal(tr.children("td").eq(6), table[i-1].rgvPos1);
+                        setVal(tr.children("td").eq(7), table[i-1].walkPos);
+                        // setVal(tr.children("td").eq(8), table[i-1].workNo2);
+                        // setVal(tr.children("td").eq(9), table[i-1].status2);
+                        // setVal(tr.children("td").eq(10), table[i-1].loading2);
+                        setVal(tr.children("td").eq(8), table[i-1].warnCode);
+                        setVal(tr.children("td").eq(9), table[i-1].alarm);
+                        setVal(tr.children("td").eq(10), table[i-1].pakMk);
+                    }
+                } else if (res.code === 403){
+                    window.location.href = baseUrl+"/login";
+                }  else {
+                    console.log(res.msg);
+                }
+            }
+        });
+    }
+
+    // 鍫嗗灈鏈烘暟鎹〃鑾峰彇 ---- 琛ㄤ簩
+    function getRgvMsgInfo() {
+        var tableEl = $('#rgv-msg-table');
+        $.ajax({
+            url: baseUrl+ "/rgv/table/rgv/msg",
+            headers: {'token': localStorage.getItem('token')},
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    var table = res.data;
+                    if (table.length > rgvStateTableBlankRows && table.length !== rgvMsgTableFullRows) {
+                        initRgvStateTable(table.length-rgvStateTableBlankRows);
+                        rgvMsgTableFullRows = 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].rgvNo);
+                        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 rgvNo = $('input[name="rgvSelect"]: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 {
+            rgvNo: rgvNo,
+            sourceStaNo: sourceStaNo,
+            sourceRow: sourceRow,
+            sourceBay: sourceBay,
+            sourceLev: sourceLev,
+            staNo: staNo,
+            row: row,
+            bay: bay,
+            lev: lev
+        };
+    }
+
+    // 鍏ュ簱
+    function put() {
+        http.post(baseUrl+"/rgv/operator/put", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鍑哄簱
+    function take() {
+        http.post(baseUrl+"/rgv/operator/take", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 搴撲綅杞Щ
+    function stockMove() {
+        http.post(baseUrl+"/rgv/operator/stockMove", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 绔欏埌绔�
+    function siteMove() {
+        http.post(baseUrl+"/rgv/operator/siteMove", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鍧愭爣绉诲姩
+    function coorMove() {
+        http.post(baseUrl+"/rgv/operator/coorMove", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鍥炲師鐐�
+    function bacOrigin() {
+        http.post(baseUrl+"/rgv/operator/bacOrigin", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鍥炲師鐐�
+    function reverseOrigin() {
+        http.post(baseUrl+"/rgv/operator/reverseOrigin", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 浠诲姟瀹屾垚
+    function taskComplete() {
+        http.post(baseUrl+"/rgv/operator/taskComplete", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    function lock() {
+        http.post(baseUrl+"/rgv/lock", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鏆傚仠
+    function pause() {
+        http.post(baseUrl+"/rgv/operator/pause", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鍚姩
+    function boot() {
+        http.post(baseUrl+"/rgv/operator/boot", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 娓呴櫎鍛戒护
+    function clearCommand() {
+        http.post(baseUrl+"/rgv/operator/clearCommand", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鎵嬪姩澶嶄綅
+    function handleReset() {
+        http.post(baseUrl+"/rgv/operator/handleReset", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 杈撻�佽澶囨棩蹇楄緭鍑� -----------------------------------------------------------------------
+    function getRgvOutput() {
+        $.ajax({
+            url: baseUrl + "/rgv/output/site",
+            headers: {'token': localStorage.getItem('token')},
+            method: 'POST',
+            success: function (res) {
+                console.log(res)
+                if (res.code === 200) {
+                    rgvOutput(res.data);
+                } else if (res.code === 403) {
+                    window.location.href = baseUrl + "/login";
+                } else {
+                    console.log(res.msg);
+                }
+            }
+        })
+    }
+
+    // ------------------------------------------------------------------------------------------------
+
+    // 鍫嗗灈鏈轰俊鎭〃鑾峰彇  ----- 琛ㄤ竴
+    function initRgvStateTable(row) {
+        var line;
+        if (row === undefined){
+            var one = $('#rgv-state-table thead').height();
+            var total = $('.rgv-state').height();
+            var count = total / one;
+            count = parseInt(count) - 1;
+            rgvStateTableBlankRows = 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" +
+                "     </tr>\n";
+        }
+        $('#rgv-state-table tbody').after(html);
+    }
+
+    // 鍫嗗灈鏈烘暟鎹〃鑾峰彇  ----- 琛ㄤ簩
+    function initRgvMsgTable(row) {
+        var line;
+        if (row === undefined){
+            var one = $('#rgv-msg-table thead').height();
+            var total = $('.rgv-msg').height();
+            var count = total / one;
+            count = parseInt(count) - 1;
+            rgvMsgTableBlankRows = 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";
+        }
+        $('#rgv-msg-table tbody').after(html);
+    }
+
+    // 鏃ュ織杈撳嚭妗�
+    function rgvOutput(content){
+        rgvOutputDom.value += content;
+        rgvOutputDom.scrollTop = rgvOutputDom.scrollHeight;
+    }
+
+</script>
+</html>

--
Gitblit v1.9.1