From 6cdbe1c3f2eda6bac4377fb679440ff2367c414c Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期四, 21 三月 2024 11:43:33 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/domain/param/RgvOperatorParam.java         |   25 +
 src/main/java/com/zy/asrs/controller/RgvController.java              |  325 ++++++++++++++++++++
 src/main/java/com/zy/asrs/domain/vo/RgvStateTableVo.java             |   53 +++
 src/main/java/com/zy/system/entity/license/CustomLicenseManager.java |   36 +-
 src/main/java/com/zy/asrs/domain/vo/RgvMsgTableVo.java               |   62 +++
 src/main/resources/application-prod.yml                              |   28 +
 src/main/java/com/zy/asrs/domain/enums/RgvStatusType.java            |   43 ++
 src/main/webapp/views/deviceOperate/rgvOperate.html                  |  340 +++++++++++++++++++++
 src/main/java/com/zy/asrs/entity/BasRgvErr.java                      |    4 
 9 files changed, 896 insertions(+), 20 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..5e1fc13
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/RgvController.java
@@ -0,0 +1,325 @@
+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.LocMastService;
+import com.zy.asrs.service.WrkMastService;
+import com.zy.asrs.service.impl.MainServiceImpl;
+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.SiemensRgvThread;
+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;
+    @Autowired
+    private MainServiceImpl mainService;
+    @Autowired
+    private LocMastService locMastService;
+
+    @PostMapping("/table/rgv/state")
+    @ManagerAuth(memo = "RGV淇℃伅琛�")
+    public R rgvStateTable(){
+        List<RgvStateTableVo> list = new ArrayList<>();
+        List<BasRgv> rgvs = basRgvService.selectList(new EntityWrapper<BasRgv>().orderBy("rgv_no"));
+        for (BasRgv basRgv : rgvs) {
+            // 琛ㄦ牸琛�
+            RgvStateTableVo vo = new RgvStateTableVo();
+            vo.setRgvNo(basRgv.getRgvNo());   //  RGV鍙�
+            list.add(vo);
+            // 鑾峰彇RGV淇℃伅
+            SiemensRgvThread rgvThread = (SiemensRgvThread) 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淇℃伅
+            SiemensRgvThread rgvThread = (SiemensRgvThread) 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.getSourceStaNo1()); // 婧愮珯
+        command.setDestinationStaNo1(param.getStaNo1());  // 鐩爣绔�
+//        command.setAckFinish2((short) 0);  // 浠诲姟瀹屾垚纭浣�
+//        command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
+//        command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
+//        command.setSourceStaNo2(param.getSourceStaNo2()); // 婧愮珯
+//        command.setDestinationStaNo2(param.getStaNo2());  // 鐩爣绔�
+        command.setCommand((short) 0);
+
+        return rgvControl(command)? R.ok(): R.error();
+    }
+
+    @ManagerAuth(memo = "鍙栬揣")
+    @PostMapping("/operator/take")
+    public R rgvFetch(RgvOperatorParam param){
+        RgvCommand command = new RgvCommand();
+        command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
+        command.setAckFinish1((short) 0);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+        command.setTaskMode1(RgvTaskModeType.FETCH); // 浠诲姟妯″紡: 鍙栬揣
+        command.setSourceStaNo1(param.getSourceStaNo1()); // 婧愮珯
+        command.setDestinationStaNo1(param.getStaNo1());  // 鐩爣绔�
+        command.setAckFinish2((short) 0);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
+        command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
+        command.setSourceStaNo2(param.getSourceStaNo2()); // 婧愮珯
+        command.setDestinationStaNo2(param.getStaNo2());  // 鐩爣绔�
+        command.setCommand((short) 0);
+
+        return rgvControl(command)? R.ok(): R.error();
+    }
+
+    @ManagerAuth(memo = "鏀捐揣")
+    @PostMapping("/operator/stockMove")
+    public R rgvPut(RgvOperatorParam param){
+        RgvCommand command = new RgvCommand();
+        command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
+        command.setAckFinish1((short) 0);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+        command.setTaskMode1(RgvTaskModeType.PUT); // 浠诲姟妯″紡: 鏀捐揣
+        command.setSourceStaNo1(param.getSourceStaNo1()); // 婧愮珯
+        command.setDestinationStaNo1(param.getStaNo1());  // 鐩爣绔�
+        command.setAckFinish2((short) 0);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
+        command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
+        command.setSourceStaNo2(param.getSourceStaNo2()); // 婧愮珯
+        command.setDestinationStaNo2(param.getStaNo2());  // 鐩爣绔�
+        command.setCommand((short) 0);
+
+        return rgvControl(command)? R.ok(): R.error();
+    }
+
+    @ManagerAuth(memo = "浠诲姟瀹屾垚")
+    @PostMapping("/operator/taskComplete")
+    public R rgvTaskComplete(RgvOperatorParam param){
+        RgvCommand command = new RgvCommand();
+        command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
+        command.setAckFinish1((short) 1);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+        command.setTaskMode1(RgvTaskModeType.NONE); // 浠诲姟妯″紡
+        command.setSourceStaNo1((short) 0); // 婧愮珯
+        command.setDestinationStaNo1((short) 0);  // 鐩爣绔�
+        command.setAckFinish2((short) 1);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
+        command.setTaskMode2(RgvTaskModeType.NONE); // 浠诲姟妯″紡
+        command.setSourceStaNo2((short) 0); // 婧愮珯
+        command.setDestinationStaNo2((short) 0);  // 鐩爣绔�
+        command.setCommand((short) 0);
+
+        return rgvControl(command)? R.ok(): R.error();
+    }
+
+    @ManagerAuth(memo = "娓呴櫎鍛戒护")
+    @PostMapping("/operator/clearCommand")
+    public R rgvClearCommand(RgvOperatorParam param){
+        if (param.getRgvNo() == null) {
+            throw new CoolException("璇烽�夋嫨RGV鍙�");
+        }
+        RgvCommand command = new RgvCommand();
+        command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
+        command.setAckFinish1((short) 0);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+        command.setTaskMode1(RgvTaskModeType.NONE); // 浠诲姟妯″紡
+        command.setSourceStaNo1((short) 0); // 婧愮珯
+        command.setDestinationStaNo1((short) 0);  // 鐩爣绔�
+        command.setAckFinish2((short) 0);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
+        command.setTaskMode2(RgvTaskModeType.NONE); // 浠诲姟妯″紡
+        command.setSourceStaNo2((short) 0); // 婧愮珯
+        command.setDestinationStaNo2((short) 0);  // 鐩爣绔�
+        command.setCommand((short) 0);
+
+        return rgvControl(command)? R.ok(): R.error();
+    }
+
+    @ManagerAuth(memo = "鎵嬪姩澶嶄綅")
+    @PostMapping("/operator/handleReset")
+    public R handleReset(RgvOperatorParam param) throws Exception {
+        if (param.getRgvNo() == null) {
+            throw new CoolException("璇烽�夋嫨RGV");
+        }
+        // 鑾峰彇RGV缂撳瓨
+        for (RgvSlave rgv : slaveProperties.getRgv()) {
+            // 鑾峰彇RGV淇℃伅
+            if (param.getRgvNo().equals(rgv.getId())) {
+                SiemensRgvThread rgvThread = (SiemensRgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
+                if (rgvThread == null) {
+                    throw new CoolException("RGV涓嶅湪绾�");
+                }
+                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+                if (rgvProtocol == null) {
+                    throw new CoolException("RGV涓嶅湪绾�");
+                }
+                RgvCommand Command = new RgvCommand();
+                Command.setRgvNo(rgv.getId()); // RGV缂栧彿
+                Command.setTaskMode1(RgvTaskModeType.NONE);
+                Command.setAckFinish1((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                Command.setAckFinish2((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                Command.setCommand((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                // 寤舵椂鍙戦��
+                Thread.sleep(1000L);
+                if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(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())) {
+                SiemensRgvThread rgvThread = (SiemensRgvThread) 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..3b0881f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/param/RgvOperatorParam.java
@@ -0,0 +1,25 @@
+package com.zy.asrs.domain.param;
+
+import lombok.Data;
+
+/**
+ * Created by vincent on 2020-06-02
+ */
+@Data
+public class RgvOperatorParam {
+
+    // RGV鍙�
+    private Integer rgvNo;
+
+    // 宸ヤ綅1婧愮珯
+    private Short sourceStaNo1;
+
+    // 宸ヤ綅1鐩爣绔�
+    private Short staNo1;
+
+    // 宸ヤ綅2婧愮珯
+    private Short sourceStaNo2;
+
+    // 宸ヤ綅2鐩爣绔�
+    private Short staNo2;
+}
diff --git a/src/main/java/com/zy/asrs/domain/vo/RgvMsgTableVo.java b/src/main/java/com/zy/asrs/domain/vo/RgvMsgTableVo.java
new file mode 100644
index 0000000..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/BasRgvErr.java b/src/main/java/com/zy/asrs/entity/BasRgvErr.java
index d9558ea..1ea7644 100644
--- a/src/main/java/com/zy/asrs/entity/BasRgvErr.java
+++ b/src/main/java/com/zy/asrs/entity/BasRgvErr.java
@@ -95,7 +95,7 @@
         UserService service = SpringUtils.getBean(UserService.class);
         User user = service.selectById(this.modiUser);
         if (!Cools.isEmpty(user)){
-            return String.valueOf(user.getNickname());
+            return String.valueOf(user.getId());
         }
         return null;
     }
@@ -111,7 +111,7 @@
         UserService service = SpringUtils.getBean(UserService.class);
         User user = service.selectById(this.appeUser);
         if (!Cools.isEmpty(user)){
-            return String.valueOf(user.getNickname());
+            return String.valueOf(user.getId());
         }
         return null;
     }
diff --git a/src/main/java/com/zy/system/entity/license/CustomLicenseManager.java b/src/main/java/com/zy/system/entity/license/CustomLicenseManager.java
index a0cd9e8..4dd31c4 100644
--- a/src/main/java/com/zy/system/entity/license/CustomLicenseManager.java
+++ b/src/main/java/com/zy/system/entity/license/CustomLicenseManager.java
@@ -128,24 +128,24 @@
 
         if(expectedCheckModel != null && serverCheckModel != null){
             //鏍¢獙IP鍦板潃
-            if(!checkIpAddress(expectedCheckModel.getIpAddress(),serverCheckModel.getIpAddress())){
-                //throw new LicenseContentException("褰撳墠鏈嶅姟鍣ㄧ殑IP娌″湪鎺堟潈鑼冨洿鍐�");
-            }
-
-            //鏍¢獙Mac鍦板潃
-            if(!checkIpAddress(expectedCheckModel.getMacAddress(),serverCheckModel.getMacAddress())){
-                //throw new LicenseContentException("褰撳墠鏈嶅姟鍣ㄧ殑Mac鍦板潃娌″湪鎺堟潈鑼冨洿鍐�");
-            }
-
-            //鏍¢獙涓绘澘搴忓垪鍙�
-            if(!checkSerial(expectedCheckModel.getMainBoardSerial(),serverCheckModel.getMainBoardSerial())){
-                throw new LicenseContentException("褰撳墠鏈嶅姟鍣ㄧ殑涓绘澘搴忓垪鍙锋病鍦ㄦ巿鏉冭寖鍥村唴");
-            }
-
-            //鏍¢獙CPU搴忓垪鍙�
-            if(!checkSerial(expectedCheckModel.getCpuSerial(),serverCheckModel.getCpuSerial())){
-                throw new LicenseContentException("褰撳墠鏈嶅姟鍣ㄧ殑CPU搴忓垪鍙锋病鍦ㄦ巿鏉冭寖鍥村唴");
-            }
+//            if(!checkIpAddress(expectedCheckModel.getIpAddress(),serverCheckModel.getIpAddress())){
+//                //throw new LicenseContentException("褰撳墠鏈嶅姟鍣ㄧ殑IP娌″湪鎺堟潈鑼冨洿鍐�");
+//            }
+//
+//            //鏍¢獙Mac鍦板潃
+//            if(!checkIpAddress(expectedCheckModel.getMacAddress(),serverCheckModel.getMacAddress())){
+//                //throw new LicenseContentException("褰撳墠鏈嶅姟鍣ㄧ殑Mac鍦板潃娌″湪鎺堟潈鑼冨洿鍐�");
+//            }
+//
+//            //鏍¢獙涓绘澘搴忓垪鍙�
+//            if(!checkSerial(expectedCheckModel.getMainBoardSerial(),serverCheckModel.getMainBoardSerial())){
+//                throw new LicenseContentException("褰撳墠鏈嶅姟鍣ㄧ殑涓绘澘搴忓垪鍙锋病鍦ㄦ巿鏉冭寖鍥村唴");
+//            }
+//
+//            //鏍¢獙CPU搴忓垪鍙�
+//            if(!checkSerial(expectedCheckModel.getCpuSerial(),serverCheckModel.getCpuSerial())){
+//                throw new LicenseContentException("褰撳墠鏈嶅姟鍣ㄧ殑CPU搴忓垪鍙锋病鍦ㄦ巿鏉冭寖鍥村唴");
+//            }
         }else{
             throw new LicenseContentException("涓嶈兘鑾峰彇鏈嶅姟鍣ㄧ‖浠朵俊鎭�");
         }
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 5cf7301..c41a55e 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -2,6 +2,34 @@
   doubleDeep: true #鍙屾繁
   doubleLocs: 1,4,7,10,11,14,15,18,19 #鍙屾繁搴撲綅鎺掑彿
   groupCount: 4 #涓�涓爢鍨涙満璐熻矗鐨勮揣鏋舵帓鏁�
+  # RGV绌挎杞�1
+  rgv[0]:
+    id: 1
+    ip: 172.17.91.54
+    port: 502
+    rack: 0
+    slot: 0
+  # RGV绌挎杞�1
+  rgv[1]:
+    id: 2
+    ip: 172.17.91.57
+    port: 502
+    rack: 0
+    slot: 0
+  # RGV绌挎杞�1
+  rgv[2]:
+    id: 3
+    ip: 172.17.91.60
+    port: 502
+    rack: 0
+    slot: 0
+  # RGV绌挎杞�1
+  rgv[3]:
+    id: 4
+    ip: 172.17.91.63
+    port: 502
+    rack: 0
+    slot: 0
   crn[0]: #鍫嗗灈鏈�1
     id: 1
     ip: 172.17.91.2
diff --git a/src/main/webapp/views/deviceOperate/rgvOperate.html b/src/main/webapp/views/deviceOperate/rgvOperate.html
new file mode 100644
index 0000000..fe7c1ac
--- /dev/null
+++ b/src/main/webapp/views/deviceOperate/rgvOperate.html
@@ -0,0 +1,340 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+	<meta charset="UTF-8">
+	<title>鍫嗗灈鏈鸿澶�</title>
+	<link rel="stylesheet" href="../../static/wcs/css/element.css">
+	<script type="text/javascript" src="../../static/wcs/js/jquery/jquery-3.3.1.min.js"></script>
+	<script type="text/javascript" src="../../static/wcs/js/common.js"></script>
+	<script type="text/javascript" src="../../static/wcs/js/vue.min.js"></script>
+	<script type="text/javascript" src="../../static/wcs/js/element.js"></script>
+</head>
+
+<body>
+	<div id="app" style="display: flex;justify-content: center;flex-wrap: wrap;">
+		<div style="width: 100%;">
+			<el-table border ref="singleTable" :data="tableData" highlight-current-row @row-click="handleRowClick"
+				max-height="350" style="width: 100%">
+				<el-table-column property="crnNo" label="鍫嗗灈鏈�">
+				</el-table-column>
+				<el-table-column property="workNo" label="宸ヤ綔鍙�">
+				</el-table-column>
+				<el-table-column property="statusType" label="妯″紡">
+				</el-table-column>
+				<el-table-column property="wrkStatus$" label="浠诲姟鐘舵��">
+				</el-table-column>
+				<el-table-column property="deviceStatus" label="璁惧鐘舵��">
+				</el-table-column>
+			</el-table>
+		</div>
+
+		<div style="width: 100%;display: flex;justify-content: center;margin-top: 10px;">
+			<div style="width: 55%;margin-right: 10px;">
+				<el-card class="box-card">
+					<div slot="header" class="clearfix">
+						<span>璁惧璋冭瘯</span>
+					</div>
+					<div>
+						<el-form :model="formParam" label-position="top" :inline="true" class="demo-form-inline">
+<!--							<el-form-item label="婧愮珯/婧愬簱浣�">-->
+<!--								<el-input v-model="formParam.sourceStaNo" placeholder="婧愮珯/婧愬簱浣�"></el-input>-->
+<!--							</el-form-item>-->
+							<el-form-item label="婧愭帓">
+								<el-input v-model="formParam.sourceRow" placeholder="鎺�"></el-input>
+							</el-form-item>
+							<el-form-item label="婧愬垪">
+								<el-input v-model="formParam.sourceBay" placeholder="鍒�"></el-input>
+							</el-form-item>
+							<el-form-item label="婧愬眰">
+								<el-input v-model="formParam.sourceLev" placeholder="灞�"></el-input>
+							</el-form-item>
+						</el-form>
+						<el-form :model="formParam" label-position="top" :inline="true" class="demo-form-inline">
+<!--							<el-form-item label="鐩爣绔�/鐩爣搴撲綅">-->
+<!--								<el-input v-model="formParam.staNo" placeholder="鐩爣绔�/鐩爣搴撲綅"></el-input>-->
+<!--							</el-form-item>-->
+							<el-form-item label="鐩爣鎺�">
+								<el-input v-model="formParam.row" placeholder="鎺�"></el-input>
+							</el-form-item>
+							<el-form-item label="鐩爣鍒�">
+								<el-input v-model="formParam.bay" placeholder="鍒�"></el-input>
+							</el-form-item>
+							<el-form-item label="鐩爣灞�">
+								<el-input v-model="formParam.lev" placeholder="灞�"></el-input>
+							</el-form-item>
+						</el-form>
+						<el-form :model="formParam" label-position="top" :inline="true" class="demo-form-inline">
+							<el-form-item label="鎵樼洏鐮�">
+								<el-input v-model="formParam.barcode" placeholder="鏉$爜"></el-input>
+							</el-form-item>
+							<el-form-item label="鎵樼洏绫诲瀷">
+								<el-input v-model="formParam.barcodeType" placeholder="绫诲瀷"></el-input>
+							</el-form-item>
+							<el-form-item label="绌烘墭鐩�">
+								<el-select v-model="formParam.emptyContainer" placeholder="鏄惁涓虹┖鎵樼洏">
+									<el-option
+											v-for="item in options"
+											:key="item.value"
+											:label="item.label"
+											:value="item.value">
+									</el-option>
+								</el-select>
+							</el-form-item>
+
+						</el-form>
+						<el-form label-position="top" :inline="true" class="demo-form-inline">
+							<el-form-item label="">
+								<el-checkbox @change="updateEnableInOut('in')" v-model="enableIn">鍙叆</el-checkbox>
+							</el-form-item>
+							<el-form-item label="">
+								<el-checkbox @change="updateEnableInOut('out')" v-model="enableOut">鍙嚭</el-checkbox>
+							</el-form-item>
+						</el-form>
+						<div>
+							<el-button @click="requestOperate('put')" type="primary">鍏ュ簱</el-button>
+							<el-button @click="requestOperate('take')" type="primary">鍑哄簱</el-button>
+							<el-button @click="requestOperate('stockMove')" type="primary">搴撲綅杞Щ</el-button>
+							<el-button @click="requestOperate('siteMove')" type="primary">绔欏埌绔�</el-button>
+							<el-button @click="requestOperate('taskComplete')" type="primary">浠诲姟瀹屾垚</el-button>
+							<el-button @click="requestOperate('clearCommand')" type="primary">娓呴櫎鍛戒护</el-button>
+							<el-button @click="requestOperate('reset')" type="primary">澶嶄綅</el-button>
+							<br/>
+							<br/>
+							<el-button @click="requestOperate('auto')" type="warning">鑱旀満</el-button>
+							<el-button @click="requestOperate('semiAutomatic')" type="warning">鍗婅嚜鍔�</el-button>
+							<el-button @click="requestOperate('hand')" type="warning">鎵嬪姩</el-button>
+							<el-button @click="requestOperate('onlineWrk4')" type="warning">鎭㈠鑱旀満浠诲姟</el-button>
+							<el-button @click="requestOperate('onlineWrk3')" type="warning">娓呴櫎鑱旀満浠诲姟</el-button>
+							<el-button @click="requestOperate('onlineWrk1')" type="warning">鐢宠瀹屾垚浠诲姟</el-button>
+							<br/>
+							<br/>
+							<el-button @click="requestOperate('onlineWrk2')" type="warning">鐢宠鍙栨秷浠诲姟</el-button>
+						</div>
+					</div>
+				</el-card>
+			</div>
+			<div style="width: 45%;">
+				<el-card class="box-card">
+					<div slot="header" class="clearfix">
+						<span>璁惧鐘舵��</span>
+					</div>
+					<div>
+						<div v-if="currentIndex == null">
+							<el-empty description="璇烽�夋嫨璁惧"></el-empty>
+						</div>
+						<div v-else>
+							<el-descriptions :title="currentTitle" direction="vertical" :column="4" border>
+								<el-descriptions-item label="鍫嗗灈鏈�">{{ tableData[currentIndex].crnNo }}
+								</el-descriptions-item>
+								<el-descriptions-item label="宸ヤ綔鍙�">
+									{{ tableData[currentIndex].workNo }}
+								</el-descriptions-item>
+								<el-descriptions-item label="妯″紡">
+									<el-tag>{{ tableData[currentIndex].statusType }}</el-tag>
+								</el-descriptions-item>
+								<el-descriptions-item label="浠诲姟鐘舵��">
+									<div v-if="tableData[currentIndex].wrkStatus == 0">
+										<el-tag>{{ tableData[currentIndex].wrkStatus$ }}</el-tag>
+									</div>
+									<div v-else>
+										<el-tag type="success">{{ tableData[currentIndex].wrkStatus$ }}</el-tag>
+									</div>
+								</el-descriptions-item>
+								<el-descriptions-item label="璁惧鐘舵��">
+									<el-tag>{{ tableData[currentIndex].deviceStatus }}</el-tag>
+								</el-descriptions-item>
+								<el-descriptions-item label="鏈夌墿">
+									<el-tag>{{ tableData[currentIndex].loading }}</el-tag>
+								</el-descriptions-item>
+								<el-descriptions-item label="鍒�">{{ tableData[currentIndex].bay }}
+								</el-descriptions-item>
+								<el-descriptions-item label="灞�">{{ tableData[currentIndex].lev }}
+								</el-descriptions-item>
+								<el-descriptions-item label="鏁呴殰浠g爜">{{ tableData[currentIndex].warnCode }}
+								</el-descriptions-item>
+								<el-descriptions-item label="鏁呴殰鎻忚堪">{{ tableData[currentIndex].lev }}
+								</el-descriptions-item>
+								<el-descriptions-item label="婧愮珯">{{ tableData[currentIndex].sourceStaNo }}
+								</el-descriptions-item>
+								<el-descriptions-item label="鐩爣绔�">{{ tableData[currentIndex].staNo }}
+								</el-descriptions-item>
+								<el-descriptions-item label="婧愬簱浣�">{{ tableData[currentIndex].sourceLocNo }}
+								</el-descriptions-item>
+								<el-descriptions-item label="鐩爣搴撲綅">{{ tableData[currentIndex].locNo }}
+								</el-descriptions-item>
+								<el-descriptions-item label="璐у弶瀹氫綅">{{ tableData[currentIndex].forkOffset }}
+								</el-descriptions-item>
+								<el-descriptions-item label="杞借揣鍙板畾浣�">{{ tableData[currentIndex].liftPos }}
+								</el-descriptions-item>
+								<el-descriptions-item label="璧拌鍦ㄥ畾浣�">{{ tableData[currentIndex].walkPos }}
+								</el-descriptions-item>
+								<el-descriptions-item label="璧拌閫熷害(m/min)">{{ tableData[currentIndex].xspeed }}
+								</el-descriptions-item>
+								<el-descriptions-item label="鍗囬檷閫熷害(m/min)">{{ tableData[currentIndex].yspeed }}
+								</el-descriptions-item>
+								<el-descriptions-item label="鍙夌墮閫熷害(m/min)">{{ tableData[currentIndex].zspeed }}
+								</el-descriptions-item>
+								<el-descriptions-item label="璧拌璺濈(Km)">{{ tableData[currentIndex].xdistance }}
+								</el-descriptions-item>
+								<el-descriptions-item label="鍗囬檷璺濈(Km)">{{ tableData[currentIndex].ydistance }}
+								</el-descriptions-item>
+								<el-descriptions-item label="璧拌鏃堕暱(H)">{{ tableData[currentIndex].xduration }}
+								</el-descriptions-item>
+								<el-descriptions-item label="鍗囬檷鏃堕暱(H)">{{ tableData[currentIndex].yduration }}
+								</el-descriptions-item>
+							</el-descriptions>
+						</div>
+					</div>
+				</el-card>
+			</div>
+		</div>
+	</div>
+	<script>
+		var app = new Vue({
+			el: '#app',
+			data: {
+				tableData: [],
+				currentRow: null,
+				currentTitle: "鏈�夋嫨璁惧",
+				currentIndex: null,
+				formParam: {
+					crnNo: null,
+					sourceStaNo: null,
+					sourceRow: 1,
+					sourceBay: 0,
+					sourceLev: 1,
+					staNo: null,
+					row: 1,
+					bay: 0,
+					lev: 1,
+					barcode:null,
+					barcodeType:null,
+					emptyContainer:null
+				},
+				enableIn: false,
+				enableOut: false,
+				options:[
+					{
+						value:'1',
+						label:'鏄�'
+					},
+					{
+						value:'0',
+						label:'鍚�'
+					}
+				]
+			},
+			created() {
+				this.init()
+			},
+			watch: {
+
+			},
+			methods: {
+				init() {
+					this.getTableData()
+
+					setInterval(() => {
+						this.getTableData()
+					}, 1000)
+				},
+				handleRowClick(row, col, event) {
+					const index = this.tableData.indexOf(row)
+					this.currentRow = row;
+					this.currentIndex = index
+					this.currentTitle = row.crnNo + "鍙峰爢鍨涙満"
+					this.formParam.crnNo = row.crnNo
+					this.enableIn = row.inEnable == "Y" ? true : false
+					this.enableOut = row.outEnable == "Y" ? true : false
+				},
+				getTableData() {
+					let that = this;
+					$.ajax({
+						url: baseUrl + "/rgv/table/rgv/state",
+						headers: {
+							'token': localStorage.getItem('token')
+						},
+						data: {},
+						dataType: 'json',
+						contentType: 'application/json;charset=UTF-8',
+						method: 'post',
+						success: function (res) {
+							that.tableData = res.data
+						}
+					});
+				},
+				requestOperate(method) {
+					let that = this
+					that.$confirm('姝ゆ搷浣滃瓨鍦ㄩ闄╋紝鏄惁缁х画','鎻愮ず',{
+						confirmButtonText: '纭畾',
+						cancelButtonText: '鍙栨秷',
+						type: 'warning'
+					}).then(()=>{
+						$.ajax({
+							url: baseUrl + "/crn/operator/" + method,
+							headers: {
+								'token': localStorage.getItem('token')
+							},
+							data: this.formParam,
+							method: 'POST',
+							success: function (res) {
+								if (res.code == 200) {
+									that.$message({
+										message: res.msg,
+										type: 'success'
+									});
+								} else {
+									that.$message({
+										message: res.msg,
+										type: 'error'
+									});
+								}
+							}
+						});
+					})
+
+				},
+				updateEnableInOut(type) {
+					let that = this
+					let param = {}
+					if (type == "in") {
+						param = {
+							inEnable: this.enableIn ? "Y" : "N",
+							crnNo: this.formParam.crnNo
+						}
+					} else {
+						param = {
+							outEnable: this.enableOut ? "Y" : "N",
+							crnNo: this.formParam.crnNo
+						}
+					}
+
+					$.ajax({
+						url: baseUrl + "/basCrnp/update/auth",
+						headers: {
+							'token': localStorage.getItem('token')
+						},
+						data: param,
+						method: 'POST',
+						success: function (res) {
+							if (res.code == 200) {
+								that.$message({
+									message: res.msg,
+									type: 'success'
+								});
+							} else {
+								that.$message({
+									message: res.msg,
+									type: 'error'
+								});
+							}
+						}
+					});
+				}
+			}
+		})
+	</script>
+</body>
+
+</html>
\ No newline at end of file

--
Gitblit v1.9.1