From 2a35d8deefb89c4b463fdbafe79f2c7bd294621d Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期四, 23 五月 2024 12:56:13 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/model/protocol/StaProtocol.java |    3 
 src/main/java/com/zy/core/thread/SiemensCrnThread.java    |    1 
 src/main/webapp/static/wcs/css/rgv.css                    |  252 +++++++++++++
 src/main/webapp/views/realtimeWatch/index2.html           |    1 
 src/main/webapp/static/wcs/js/console.map.js              |    8 
 src/main/webapp/views/realtimeWatch/console.html          |  149 +++++--
 src/main/webapp/views/realtimeWatch/rgv.html              |  652 ++++++++++++++++++++++++++++++++++
 src/main/java/com/zy/asrs/domain/vo/SiteLatestDataVo.java |    2 
 src/main/java/com/zy/core/thread/SiemensRgvThread.java    |    6 
 src/main/java/com/zy/core/thread/SiemensDevpThread.java   |   37 +
 10 files changed, 1,061 insertions(+), 50 deletions(-)

diff --git a/src/main/java/com/zy/asrs/domain/vo/SiteLatestDataVo.java b/src/main/java/com/zy/asrs/domain/vo/SiteLatestDataVo.java
index 2677861..00b4ddc 100644
--- a/src/main/java/com/zy/asrs/domain/vo/SiteLatestDataVo.java
+++ b/src/main/java/com/zy/asrs/domain/vo/SiteLatestDataVo.java
@@ -20,7 +20,7 @@
     private SiteStatusType siteStatus;
 
     // 闅斿绔欑偣锛堝彴杞︾壒鎬э級
-    private String nearbySta;
+    private short nearbySta;
 
     public String getSiteStatus() {
         return siteStatus.toString().toLowerCase().replaceAll("_", "-");
diff --git a/src/main/java/com/zy/core/model/protocol/StaProtocol.java b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
index a7a3460..04c2f06 100644
--- a/src/main/java/com/zy/core/model/protocol/StaProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -60,7 +60,7 @@
     private Short inQty;
 
     // 闅斿绔欑偣锛堝彴杞︿綅缃級
-    private String nearbySta;
+    private short nearbySta;
 
     //鎸囦护ID
     private Integer commandId;
@@ -109,6 +109,7 @@
     private Boolean upcontactErr = false; //椤跺崌鐢垫満鎺ヨЕ鍣ㄦ晠闅�
 
     private List<Integer> alarm;
+    private Short realTimeLocation;
 
 
     public List<Integer> getAlarm(){
diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
index 6e4e9b4..4c0cd05 100644
--- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -14,6 +14,7 @@
 import com.zy.asrs.entity.param.TaskOverToWms;
 import com.zy.asrs.service.*;
 import com.zy.common.utils.HttpHandler;
+import com.zy.common.utils.News;
 import com.zy.core.CrnThread;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.OutputQueue;
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index 01ae79e..3f59baa 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -47,6 +47,7 @@
     private SiemensS7Net siemensS7Net;
     private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>();
     private short heartBeatVal = 1;
+    private Integer rgvCount = 4;
     public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
         add(100);add(101);add(102);add(103);add(104);add(105);add(106);add(107);add(108);add(109);add(110);add(111);
         add(112);add(113);add(114);add(115);add(116);add(117);add(118);add(119);add(120);add(121);add(122);add(123);
@@ -168,6 +169,19 @@
                 staProtocol.setPakMk(true);
             }
         }
+        if (slave.getId() == 2){
+            for (int i = 1;i<5;i++){
+                StaProtocol staProtocol = station.get(i);
+                if (null == staProtocol) {
+                    staProtocol = new StaProtocol();
+                    staProtocol.setSiteId(i);
+                    station.put(i, staProtocol);
+                }
+                staProtocol.setWorkNo((short) 0);
+                staProtocol.setNearbySta((short) 3);
+                staProtocol.setLoading(false);
+            }
+        }
     }
 
     @Override
@@ -238,6 +252,29 @@
             }
         }
 
+        if (slave.getId() == 2){
+
+            OperateResultExOne<byte[]> resultRgvWrkNo = siemensS7Net.Read("DB55.222", (short) 98);
+            OperateResultExOne<byte[]> resultRgvLocation = siemensS7Net.Read("DB43.0", (short) 8);
+            OperateResultExOne<byte[]> resultRgvload = siemensS7Net.Read("DB192.0", (short) 8);
+            if (resultRgvWrkNo.IsSuccess && resultRgvLocation.IsSuccess && resultRgvload.IsSuccess){
+                for (int i = 1;i<5;i++){
+                    short wrkNo = siemensS7Net.getByteTransform().TransInt16(resultRgvWrkNo.Content, i * 32);
+                    short location = siemensS7Net.getByteTransform().TransInt16(resultRgvLocation.Content, i * 2);
+                    boolean[] status = siemensS7Net.getByteTransform().TransBool(resultRgvload.Content, i*2, 1);
+                    StaProtocol staProtocol = station.get(i);
+                    if (null == staProtocol) {
+                        staProtocol = new StaProtocol();
+                        staProtocol.setSiteId(i);
+                        station.put(i, staProtocol);
+                    }
+                    staProtocol.setWorkNo(wrkNo);
+                    staProtocol.setNearbySta(location);
+                    staProtocol.setLoading(status[0]);
+                }
+            }
+        }
+
 
         if (slave.getId() == 1){
             //鏉$爜
diff --git a/src/main/java/com/zy/core/thread/SiemensRgvThread.java b/src/main/java/com/zy/core/thread/SiemensRgvThread.java
index 618325f..cfc074b 100644
--- a/src/main/java/com/zy/core/thread/SiemensRgvThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensRgvThread.java
@@ -191,15 +191,15 @@
                 rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 10));
                 rgvProtocol.setSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 12));
                 rgvProtocol.setRgvPos(siemensNet.getByteTransform().TransInt32(result.Content, 14));
-                rgvProtocol.setLoaded1(siemensNet.getByteTransform().TransBool(result.Content,18));
+//                rgvProtocol.setLoaded1(siemensNet.getByteTransform().TransBool(result.Content,18));
 
 
                 OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛", DateUtils.convert(new Date()), slave.getId()));
                 if (rgvProtocol.getAlarm() > 0 ){
                     BasRgvErrService basRgvErrService = SpringUtils.getBean(BasRgvErrService.class);
-                    News.error("RGV 寮傚父 ===>> [id:{}] [ip:{}],鎶ヨ浠g爜:{},鎶ヨ鏂囨湰",slave.getId(), slave.getIp(),rgvProtocol.getAlarm(),basRgvErrService.selectById(rgvProtocol.getAlarm()));
+                    News.error("RGV 寮傚父 ===>> [id:{}] [ip:{}],鎶ヨ浠g爜:{},鎶ヨ鏂囨湰:{}",slave.getId(), slave.getIp(),rgvProtocol.getAlarm(),basRgvErrService.selectById(rgvProtocol.getAlarm()).getErrName());
                 }else {
-                    News.info("姝e父");
+                    News.info("RGV鐘舵�佹甯�==>[id:{}]",slave.getId());
                 }
 
                 // 宸ヤ綅1澶嶄綅淇″彿
diff --git a/src/main/webapp/static/wcs/css/rgv.css b/src/main/webapp/static/wcs/css/rgv.css
new file mode 100644
index 0000000..bd49d5b
--- /dev/null
+++ b/src/main/webapp/static/wcs/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/wcs/js/console.map.js b/src/main/webapp/static/wcs/js/console.map.js
index 5308003..3840f2c 100644
--- a/src/main/webapp/static/wcs/js/console.map.js
+++ b/src/main/webapp/static/wcs/js/console.map.js
@@ -966,7 +966,7 @@
                 "type": "stn",
                 "id": "site-407",
                 "text": "407",
-                "top": 770,
+                "top": 795,
                 "left": 1437,
                 "width": 49,
                 "height": 20
@@ -974,7 +974,7 @@
                 "type": "stn",
                 "id": "site-406",
                 "text": "406",
-                "top": 795,
+                "top": 770,
                 "left": 1437,
                 "width": 49,
                 "height": 20
@@ -982,7 +982,7 @@
                 "type": "stn",
                 "id": "site-307",
                 "text": "307",
-                "top": 700,
+                "top": 725,
                 "left": 1437,
                 "width": 49,
                 "height": 20
@@ -990,7 +990,7 @@
                 "type": "stn",
                 "id": "site-306",
                 "text": "306",
-                "top": 725,
+                "top": 700,
                 "left": 1437,
                 "width": 49,
                 "height": 20
diff --git a/src/main/webapp/views/realtimeWatch/console.html b/src/main/webapp/views/realtimeWatch/console.html
index fe263a9..a320e8b 100644
--- a/src/main/webapp/views/realtimeWatch/console.html
+++ b/src/main/webapp/views/realtimeWatch/console.html
@@ -636,7 +636,7 @@
                             siteEl.html(sites[i].siteId);
                         }
                         // RGV浣嶇疆
-                        if(sites[i].siteId === '112' || sites[i].siteId === '212'){
+                        if(sites[i].siteId === '1' || sites[i].siteId === '2'|| sites[i].siteId === '3' || sites[i].siteId === '4'){
                             carAnimate(Number(sites[i].siteId), Number(sites[i].nearbySta));
                         }
                     }
@@ -763,54 +763,121 @@
     // 灏忚溅鍋忕Щ鍔ㄧ敾
     function carAnimate(id, target) {
         var targetTop = 0;
-        if (id === 112) {
+        var targetLeft = 1489;
+        console.log(id+" ....>>>"+target)
             switch (target) {
-                case 1:
-                    targetTop += 313;
-                    break;
-                case 2:
-                    targetTop += 313;
-                    break;
                 case 3:
-                    targetTop += 256;
+                    targetTop += 67;
                     break;
-                case 4:
-                    targetTop += 226;
+                case 9:
+                    targetTop += 92;
                     break;
-                case 5:
-                    targetTop += 168;
-                case 6:
-                    targetTop += 168;
+                case 14:
+                    targetTop += 115;
+                    break;
+                case 19:
+                    targetTop += 140;
+                    break;
+                case 26:
+                    targetTop += 160;
+                    break;
+                case 31:
+                    targetTop += 183;
+                    break;
+                case 37:
+                    targetTop += 208;
+                    break;
+                case 42:
+                    targetTop += 231;
+                    break;
+                case 49:
+                    targetTop += 252;
+                    break;
+                case 54:
+                    targetTop += 275;
+                    break;
+                case 60:
+                    targetTop += 300;
+                    break;
+                case 65:
+                    targetTop += 330;
+                    break;
+                case 72:
+                    targetTop += 366;
+                    break;
+                case 77:
+                    targetTop += 389;
+                    break;
+                case 83:
+                    targetTop += 414;
+                    break;
+                case 88:
+                    targetTop += 445;
+                    break;
+                case 95:
+                    targetTop += 480;
+                    break;
+                case 100:
+                    targetTop += 503;
+                    break;
+                case 107:
+                    targetTop += 528;
+                    break;
+                case 110:
+                    targetTop += 570;
+                    break;
+                case 118:
+                    targetTop += 594;
+                    break;
+                case 123:
+                    targetTop += 617;
+                    break;
+                case 130:
+                    targetTop += 642;
+                    break;
+                case 156:
+                    targetTop += 700;
+                    break;
+                case 161:
+                    targetTop += 712;
+                    break;
+                case 168:
+                    targetTop += 725;
+                    break;
+                case 186:
+                    targetTop += 770;
+                    break;
+                case 191:
+                    targetTop += 782;
+                    break;
+                case 197:
+                    targetTop += 795;
                     break;
                 default:
-                    return;
+                   break;
             }
-        } else if (id === 212) {
-            switch (target) {
-                case 1:
-                    targetTop += 313;
-                    break;
-                case 2:
-                    targetTop += 313;
-                    break;
-                case 3:
-                    targetTop += 256;
-                    break;
-                case 4:
-                    targetTop += 226;
-                    break;
-                case 5:
-                    targetTop += 168;
-                case 6:
-                    targetTop += 168;
-                    break;
-                default:
-                    return;
+            if (target === 200){
+                targetTop += 830;
+                targetLeft += 26;
             }
-        } else {
-            return;
-        }
-        $("#site-" + id).animate({top: targetTop + 'px'}, 1000);
+            if (target === 300){
+                targetTop += 41;
+                targetLeft += 26;
+            }
+            if (target > 0 && target<200 && targetTop === 0){
+                var location =  100 - (target/2);
+                var px = 830-41;
+                targetTop += 41 + (px - px* (location/100));
+            }
+            if (target > 200 && target<300){
+                targetLeft += 45;
+                 var location =  300 - target;
+                 var px = 830-41;
+                targetTop += 41 + px* (location/100);
+            }
+
+
+        $("#site-" + id).animate({top: targetTop + 'px',left:targetLeft+'px'}, 1000);
     }
 
     //涓嬪彂杈撻�佺嚎鍛戒护
diff --git a/src/main/webapp/views/realtimeWatch/index2.html b/src/main/webapp/views/realtimeWatch/index2.html
index 8cf9d9b..75299f4 100644
--- a/src/main/webapp/views/realtimeWatch/index2.html
+++ b/src/main/webapp/views/realtimeWatch/index2.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/realtimeWatch/rgv.html b/src/main/webapp/views/realtimeWatch/rgv.html
new file mode 100644
index 0000000..d6bd155
--- /dev/null
+++ b/src/main/webapp/views/realtimeWatch/rgv.html
@@ -0,0 +1,652 @@
+<!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/wcs/css/normalize.css">
+    <link rel="stylesheet" type="text/css" href="../../static/wcs/css/common.css">
+    <link rel="stylesheet" type="text/css" href="../../static/wcs/css/crn.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/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" style="overflow: auto;">-->
+            <!--        <h3>鎵ц涓殑鍛戒护</h3>-->
+            <!--        <div class="crn-command-item">-->
+            <!--          <label>1#</label>-->
+            <!--&lt;!&ndash;          <button id="demoBtn-1" class="demoBtn" onclick="demoSwitch(this.id)"> - </button>&ndash;&gt;-->
+            <!--          &lt;!&ndash;            <span>&nbsp;</span>&ndash;&gt;-->
+            <!--          <input id="crn1" disabled="disabled">-->
+            <!--        </div>-->
+            <!--        <div class="crn-command-item">-->
+            <!--          <label>2#</label>-->
+            <!--&lt;!&ndash;          <button id="demoBtn-2" class="demoBtn" onclick="demoSwitch(this.id)"> - </button>&ndash;&gt;-->
+            <!--          &lt;!&ndash;            <span>&nbsp;</span>&ndash;&gt;-->
+            <!--          <input id="crn2" disabled="disabled">-->
+            <!--        </div>-->
+            <!--        <div class="crn-command-item">-->
+            <!--          <label>3#</label>-->
+            <!--&lt;!&ndash;          <button id="demoBtn-3" class="demoBtn" onclick="demoSwitch(this.id)"> - </button>&ndash;&gt;-->
+            <!--          &lt;!&ndash;            <span>&nbsp;</span>&ndash;&gt;-->
+            <!--          <input id="crn3" disabled="disabled">-->
+            <!--        </div>-->
+            <!--        <div class="crn-command-item">-->
+            <!--          <label>4#</label>-->
+            <!--&lt;!&ndash;          <button id="demoBtn-4" class="demoBtn" onclick="demoSwitch(this.id)"> - </button>&ndash;&gt;-->
+            <!--          &lt;!&ndash;            <span>&nbsp;</span>&ndash;&gt;-->
+            <!--          <input id="crn4" disabled="disabled">-->
+            <!--        </div>-->
+            <!--        <div class="crn-command-item">-->
+            <!--          <label>5#</label>-->
+            <!--&lt;!&ndash;          <button id="demoBtn-5" class="demoBtn" onclick="demoSwitch(this.id)"> - </button>&ndash;&gt;-->
+            <!--          &lt;!&ndash;            <span>&nbsp;</span>&ndash;&gt;-->
+            <!--          <input id="crn5" disabled="disabled">-->
+            <!--        </div>-->
+            <!--        <div class="crn-command-item">-->
+            <!--          <label>6#</label>-->
+            <!--&lt;!&ndash;          <button id="demoBtn-6" class="demoBtn" onclick="demoSwitch(this.id)"> - </button>&ndash;&gt;-->
+            <!--          &lt;!&ndash;            <span>&nbsp;</span>&ndash;&gt;-->
+            <!--          <input id="crn6" disabled="disabled">-->
+            <!--        </div>-->
+            <!--      </div>-->
+            <!-- RGV鐘舵�佷綅淇℃伅 -->
+            <div class="crn-state">
+                <table id="crn-state-table">
+                    <thead>
+                    <tr>
+                        <th>RGV</th>
+                        <th>妯″紡</th>
+                        <th>鐘舵��</th>
+<!--                        <th>鎵ц鐘舵��</th>-->
+<!--                        <th>褰撳墠閫熷害</th>-->
+                        <th>褰撳墠浣嶇疆</th>
+                        <th>鎶ヨ鐘舵��</th>
+                        <th>鏁呴殰鎻忚堪</th>
+<!--                        <th>鏈夌墿</th>-->
+<!--                        <th>鍒�</th>-->
+<!--                        <th>灞�</th>-->
+<!--                        <th>璐у弶瀹氫綅</th>-->
+<!--                        <th>杞借揣鍙板畾浣�</th>-->
+<!--                        <th>璧拌鍦ㄥ畾浣�</th>-->
+<!--                        <th>鏁呴殰浠g爜</th>-->
+<!--                        <th>鏁呴殰鎻忚堪</th>-->
+                    </tr>
+                    </thead>
+                    <tbody>
+                    </tbody>
+                </table>
+            </div>
+        </div>
+        <!-- RGV鐘舵�� -->
+        <div class="crn-msg">
+            <table id="crn-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="crn-operation">
+
+            <!-- 閬僵灞� -->
+            <!--      <div class="crn-operation-shade">-->
+            <!--        <span class="crn-operation-shade-span">-->
+            <!--            WCS 绯荤粺杩愯涓紝璇峰仠姝㈠悗鎿嶄綔-->
+            <!--        </span>-->
+            <!--      </div>-->
+
+            <!-- 璁惧浠诲姟閫夋嫨 -->
+            <div class="task-select">
+                <!-- RGV閫夋嫨 -->
+                <!--        <div id="crn-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="crnSelect" value="1" checked>&nbsp;1鍙稲GV</label>-->
+                <!--            <label><input type="radio" name="crnSelect" value="2">&nbsp;2鍙稲GV</label>-->
+                <!--            <label><input type="radio" name="crnSelect" value="3">&nbsp;3鍙稲GV</label>-->
+                <!--            <label><input type="radio" name="crnSelect" value="4">&nbsp;4鍙稲GV</label>-->
+                <!--            <label><input type="radio" name="crnSelect" value="5">&nbsp;5鍙稲GV</label>-->
+                <!--            <label><input type="radio" name="crnSelect" value="6">&nbsp;6鍙稲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>绔�</span>-->
+                <!--              <label><input id="sourceStaNo" type="number" name="points" min="0" /></label>-->
+                <!--            </div>-->
+                <!--            <div class="select-container-item">-->
+                <!--              <span>鎺�</span>-->
+                <!--              <label><input id="sourceRow" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label>-->
+                <!--            </div>-->
+                <!--            <div class="select-container-item">-->
+                <!--              <span>鍒�</span>-->
+                <!--              <label><input id="sourceBay" type="number" name="points" min="0" style="background-color: #a9eeff" value="0" /></label>-->
+                <!--            </div>-->
+                <!--            <div class="select-container-item">-->
+                <!--              <span>灞�</span>-->
+                <!--              <label><input id="sourceLev" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label>-->
+                <!--            </div>-->
+                <!--          </div>-->
+                <!--        </div>-->
+                <!--        &lt;!&ndash; 鐩爣绔�/鐩爣搴撲綅 閫夋嫨 &ndash;&gt;-->
+                <!--        <div id="target-select" class="operator-item">-->
+                <!--          <span class="select-title">鐩爣绔�/鐩爣搴撲綅</span>-->
+                <!--          <div class="select-container">-->
+                <!--            <div class="select-container-item">-->
+                <!--              <span>绔�</span>-->
+                <!--              <label><input id="staNo" type="number" name="points" min="0" /></label>-->
+                <!--            </div>-->
+                <!--            <div class="select-container-item">-->
+                <!--              <span>鎺�</span>-->
+                <!--              <label><input id="row" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label>-->
+                <!--            </div>-->
+                <!--            <div class="select-container-item">-->
+                <!--              <span>鍒�</span>-->
+                <!--              <label><input id="bay" type="number" name="points" min="0" style="background-color: #a9eeff" value="0" /></label>-->
+                <!--            </div>-->
+                <!--            <div class="select-container-item">-->
+                <!--              <span>灞�</span>-->
+                <!--              <label><input id="lev" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label>-->
+                <!--            </div>-->
+                <!--          </div>-->
+                <!--        </div>-->
+            </div>
+
+            <!--      &lt;!&ndash; 璁惧浠诲姟鎿嶄綔 &ndash;&gt;-->
+            <!--      <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>-->
+            <!--            &lt;!&ndash;                <button class="item" onclick="bacOrigin()">鍥炲師鐐�</button>&ndash;&gt;-->
+            <!--            &lt;!&ndash;                <button class="item" onclick="reverseOrigin()">鍙嶅師鐐�</button>&ndash;&gt;-->
+            <!--            <button class="item" onclick="coorMove()">鍧愭爣绉昏</button>-->
+            <!--            <button class="item" onclick="taskComplete()">浠诲姟瀹屾垚</button>-->
+            <!--            &lt;!&ndash;                <button class="item" onclick="pause()">鏆傚仠</button>&ndash;&gt;-->
+            <!--            &lt;!&ndash;                <button class="item" onclick="boot()">鍚姩</button>&ndash;&gt;-->
+            <!--            <button class="item" onclick="clearCommand()">娓呴櫎鍛戒护</button>-->
+            <!--            <button class="item" onclick="handleReset()">澶嶄綅</button>-->
+            <!--          </div>-->
+            <!--        </fieldset>-->
+            <!--      </div>-->
+
+        </div>
+        <!-- RGV鏃ュ織杈撳嚭 -->
+        <div class="crn-output-board">
+            <textarea id="crn-output"></textarea>
+        </div>
+    </div>
+</div>
+</body>
+<script>
+    // 绌虹櫧琛屾暟
+    var crnStateTableBlankRows = 0;
+    var crnMsgTableBlankRows = 0;
+    // 瀹為檯琛屾暟
+    var crnStateTableFullRows = 0;
+    var crnMsgTableFullRows = 0;
+    // 鍒濆鍖�
+    var crnOutputDom = document.getElementById("crn-output");
+    $(document).ready(function() {
+        getCommandLog();
+        initCrnStateTable();
+        getCrnStateInfo();
+        initCrnMsgTable();
+        getCrnMsgInfo();
+        operatorBlockShow();
+    });
+    // 鏁版嵁鏇存柊
+    setInterval(function () {
+        getCrnStateInfo();
+        getCrnMsgInfo();
+        getCommandLog();
+    },1000);
+    setInterval(function () {
+        getCrnOutput();
+        operatorBlockShow();
+        initDemo();
+    },500);
+
+    // 鍒ゆ柇鎵嬪姩鎿嶄綔妯″潡鏄惁鍙敤
+    function operatorBlockShow() {
+        if (parent.systemRunning) {
+            $('.crn-operation').css("opacity", "0.5");
+            $('.crn-operation-shade').show();
+            $('.crn-operation-shade-span').show();
+        }  else {
+            $('.crn-operation').css("opacity", "1");
+            $('.crn-operation-shade').hide();
+            $('.crn-operation-shade-span').hide();
+        }
+    }
+
+    // 鑾峰彇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++){
+                        $("#crn"+commands[i].rgvNo).val(commands[i].command);
+                    }
+                } else if (res.code === 403) {
+                    window.location.href = baseUrl + "/login";
+                } else {
+                    console.log(res.msg);
+                }
+            }
+        })
+    }
+
+    // RGV淇℃伅琛ㄨ幏鍙� ---- 琛ㄤ竴
+    function getCrnStateInfo() {
+        var tableEl = $('#crn-state-table');
+        $.ajax({
+            url: baseUrl+ "/rgv/table/rgv/state",
+            headers: {'token': localStorage.getItem('token')},
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    var table = res.data;
+                    if (table.length > crnStateTableBlankRows && table.length !== crnStateTableFullRows) {
+                        initCrnStateTable(table.length-crnStateTableBlankRows);
+                        crnStateTableFullRows = table.length;
+                    }
+                    for (var i=1;i<=table.length;i++){
+                        var tr = tableEl.find("tr").eq(i);
+                        setVal(tr.children("td").eq(0), table[i-1].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].rgvPos);
+                        setVal(tr.children("td").eq(4), table[i-1].walkPos);
+                        setVal(tr.children("td").eq(5), table[i-1].alarm);
+
+                    }
+                } else if (res.code === 403){
+                    window.location.href = baseUrl+"/login";
+                }  else {
+                    console.log(res.msg);
+                }
+            }
+        });
+    }
+
+    // RGV鏁版嵁琛ㄨ幏鍙� ---- 琛ㄤ簩
+    function getCrnMsgInfo() {
+        var tableEl = $('#crn-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 > crnStateTableBlankRows && table.length !== crnMsgTableFullRows) {
+                        initCrnStateTable(table.length-crnStateTableBlankRows);
+                        crnMsgTableFullRows = table.length;
+                    }
+                    for (var i=1;i<=table.length;i++){
+                        var tr = tableEl.find("tr").eq(i);
+                        setVal(tr.children("td").eq(0), table[i-1].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);
+                }
+            }
+        });
+    }
+
+    // RGV鎵嬪姩鎿嶄綔鍖� -----------------------------------------------------------------------
+
+    function getReqParam() {
+        var rgvNo = $('input[name="crnSelect"]:checked').val();
+        var sourceStaNo = $('#sourceStaNo').val();
+        var sourceRow = $('#sourceRow').val();
+        var sourceBay = $('#sourceBay').val();
+        var sourceLev = $('#sourceLev').val();
+        var staNo = $('#staNo').val();
+        var row = $('#row').val();
+        var bay = $('#bay').val();
+        var lev = $('#lev').val();
+        return {
+            rgvNo: rgvNo,
+            sourceStaNo: sourceStaNo,
+            sourceRow: sourceRow,
+            sourceBay: sourceBay,
+            sourceLev: sourceLev,
+            staNo: staNo,
+            row: row,
+            bay: bay,
+            lev: lev
+        };
+    }
+
+    // 鍏ュ簱
+    function put() {
+        http.post(baseUrl+"/crn/operator/put", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鍑哄簱
+    function take() {
+        http.post(baseUrl+"/crn/operator/take", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 搴撲綅杞Щ
+    function stockMove() {
+        http.post(baseUrl+"/crn/operator/stockMove", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 绔欏埌绔�
+    function siteMove() {
+        http.post(baseUrl+"/crn/operator/siteMove", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鍧愭爣绉诲姩
+    function coorMove() {
+        http.post(baseUrl+"/crn/operator/coorMove", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鍥炲師鐐�
+    function bacOrigin() {
+        http.post(baseUrl+"/crn/operator/bacOrigin", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鍥炲師鐐�
+    function reverseOrigin() {
+        http.post(baseUrl+"/crn/operator/reverseOrigin", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 浠诲姟瀹屾垚
+    function taskComplete() {
+        http.post(baseUrl+"/crn/operator/taskComplete", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鏆傚仠
+    function pause() {
+        http.post(baseUrl+"/crn/operator/pause", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鍚姩
+    function boot() {
+        http.post(baseUrl+"/crn/operator/boot", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 娓呴櫎鍛戒护
+    function clearCommand() {
+        http.post(baseUrl+"/crn/operator/clearCommand", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 鎵嬪姩澶嶄綅
+    function handleReset() {
+        http.post(baseUrl+"/crn/operator/handleReset", getReqParam(), function (res) {
+            layer.msg(res.msg);
+        });
+    }
+
+    // 杈撻�佽澶囨棩蹇楄緭鍑� -----------------------------------------------------------------------
+    function getCrnOutput() {
+        $.ajax({
+            url: baseUrl + "/rgv/output/site",
+            headers: {'token': localStorage.getItem('token')},
+            method: 'POST',
+            success: function (res) {
+                console.log(res)
+                if (res.code === 200) {
+                    crnOutput(res.data);
+                } else if (res.code === 403) {
+                    window.location.href = baseUrl + "/login";
+                } else {
+                    console.log(res.msg);
+                }
+            }
+        })
+    }
+
+    // ------------------------------------------------------------------------------------------------
+
+    // RGV淇℃伅琛ㄨ幏鍙�  ----- 琛ㄤ竴
+    function initCrnStateTable(row) {
+        var line;
+        if (row === undefined){
+            var one = $('#crn-state-table thead').height();
+            var total = $('.crn-state').height();
+            var count = total / one;
+            count = parseInt(count) - 1;
+            crnStateTableBlankRows = count;
+            line = count;
+        } else {
+            line = row;
+        }
+        var html = "";
+        for (var i = 0; i < line; i ++){
+            html += " <tr>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "     </tr>\n";
+        }
+        $('#crn-state-table tbody').after(html);
+    }
+
+    // RGV鏁版嵁琛ㄨ幏鍙�  ----- 琛ㄤ簩
+    function initCrnMsgTable(row) {
+        var line;
+        if (row === undefined){
+            var one = $('#crn-msg-table thead').height();
+            var total = $('.crn-msg').height();
+            var count = total / one;
+            count = parseInt(count) - 1;
+            crnMsgTableBlankRows = count;
+            line = count;
+        } else {
+            line = row;
+        }
+        var html = "";
+        for (var i = 0; i < line; i ++){
+            html += " <tr>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "     </tr>\n";
+        }
+        $('#crn-msg-table tbody').after(html);
+    }
+
+    // 鏃ュ織杈撳嚭妗�
+    function crnOutput(content){
+        crnOutputDom.value += content;
+        crnOutputDom.scrollTop = crnOutputDom.scrollHeight;
+    }
+
+
+    var crnDemoData;
+    function initDemo() {
+        $.ajax({
+            url: baseUrl+"/crn/demo/status",
+            async: false,
+            method: 'GET',
+            success: function (res) {
+                if (res.code === 200) {
+                    crnDemoData = res.data;
+                    crnDemoData.forEach(function (e) {
+                        $("#demoBtn-"+e.rgvNo).html(e.demo?'鍋滄':'婕旂ず');
+                    })
+                } else if (res.code === 403){
+                    parent.location.href = baseUrl+"/login";
+                }  else {
+                    layer.msg(res.msg, {icon: 2});
+                }
+            }
+        })
+    }
+
+    function demoSwitch(el) {
+        var crnId = el.split("-")[1];
+        var opt;
+        if (crnDemoData == null) {
+            initDemo();
+        }
+        for (var i = 0; i<crnDemoData.length; i++) {
+            if (Number(crnDemoData[i].rgvNo) === Number(crnId)) {
+                opt = !crnDemoData[i].demo;
+            }
+        }
+        layer.confirm(crnId + ' 鍙稲GV纭畾'+ (opt?'寮�濮�':'鍋滄') + '婕旂ず鍚楋紵', function(){
+            doDemo(crnId, 'root', opt); // 鍋滄wcs绯荤粺
+        });
+    }
+
+    function doDemo(crnId, password, opt) {
+        // 鍔犺浇tips
+        var index = layer.load(1, {
+            shade: [0.1,'#fff']
+        });
+        $.ajax({
+            url: baseUrl+ "/crn/demo/switch",
+            headers: {'token': localStorage.getItem('token')},
+            // async: false,
+            data: {
+                crnId: Number(crnId),
+                password: password,
+                opt: opt
+            },
+            method: 'POST',
+            success: function (res) {
+                layer.close(index);
+                if (res.code === 200){
+                    layer.msg(res.msg, {icon: 1});
+                } else if (res.code === 403){
+                    window.location.href = baseUrl+"/login";
+                }  else {
+                    layer.msg(res.msg, {icon: 2});
+                }
+            }
+        });
+
+    }
+
+</script>
+</html>

--
Gitblit v1.9.1