From 4aaf4991f544da347574c1abb10c72762e60a9b1 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期六, 30 一月 2021 15:37:38 +0800
Subject: [PATCH] #磅秤

---
 src/main/java/com/zy/asrs/controller/ConsoleController.java |   19 ++++
 src/main/java/com/zy/asrs/domain/vo/ScaleDataVo.java        |   18 ++++
 src/main/webapp/views/console.html                          |   31 +++++++
 src/main/webapp/static/css/console.css                      |   15 +++
 src/main/java/com/zy/core/thread/ScaleThread.java           |  136 ++++++++++++++++++++++++++++++++++
 src/main/java/com/zy/core/ServerBootstrap.java              |    9 +
 6 files changed, 225 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/ConsoleController.java b/src/main/java/com/zy/asrs/controller/ConsoleController.java
index b4d1309..b5792d8 100644
--- a/src/main/java/com/zy/asrs/controller/ConsoleController.java
+++ b/src/main/java/com/zy/asrs/controller/ConsoleController.java
@@ -1,6 +1,7 @@
 package com.zy.asrs.controller;
 
 import com.core.annotations.ManagerAuth;
+import com.core.common.Arith;
 import com.core.common.Cools;
 import com.core.common.R;
 import com.zy.asrs.domain.enums.CrnStatusType;
@@ -25,6 +26,7 @@
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.properties.SystemProperties;
 import com.zy.core.thread.BarcodeThread;
+import com.zy.core.thread.ScaleThread;
 import com.zy.core.thread.SiemensCrnThread;
 import com.zy.core.DevpThread;
 import lombok.extern.slf4j.Slf4j;
@@ -166,6 +168,23 @@
         return R.ok().add(list);
     }
 
+    @PostMapping("/latest/data/scale")
+    @ManagerAuth(memo = "纾呯Г瀹炴椂鏁版嵁")
+    public R scaleLatestData(){
+        List<ScaleDataVo> list = new ArrayList<>();
+        for (Slave scale : slaveProperties.getScale()) {
+            ScaleThread scaleThread = (ScaleThread) SlaveConnection.get(SlaveType.Scale, scale.getId());
+            if (null == scaleThread) {
+                continue;
+            }
+            ScaleDataVo vo = new ScaleDataVo();
+            vo.setScaleId(scale.getId());
+            vo.setValue(String.valueOf(Arith.multiplys(1, scaleThread.getScale(), 1)));
+            list.add(vo);
+        }
+        return R.ok().add(list);
+    }
+
     /****************************************************************/
     /************************** 璇︽儏鎿嶄綔 ******************************/
     /****************************************************************/
diff --git a/src/main/java/com/zy/asrs/domain/vo/ScaleDataVo.java b/src/main/java/com/zy/asrs/domain/vo/ScaleDataVo.java
new file mode 100644
index 0000000..1b1aefb
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/vo/ScaleDataVo.java
@@ -0,0 +1,18 @@
+package com.zy.asrs.domain.vo;
+
+import lombok.Data;
+
+/**
+ * 纾呯Г瀹炴椂鏁版嵁瑙嗗浘瀵硅薄
+ * Created by vincent on 2020-06-03
+ */
+@Data
+public class ScaleDataVo {
+
+    // 纾呯Г缂栧彿
+    private Integer scaleId;
+
+    // 纾呯Г鍐呭
+    private String value;
+
+}
diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index 9e5e95d..26d14a9 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -78,7 +78,6 @@
             new Thread((Runnable) crnThread).start();
             SlaveConnection.put(SlaveType.Crn, crn.getId(), crnThread);
         }
-
         // 鍒濆鍖栬緭閫佺嚎绾跨▼
         log.info("鍒濆鍖栬緭閫佺嚎绾跨▼...................................................");
         for (DevpSlave devp : slaveProperties.getDevp()) {
@@ -86,7 +85,6 @@
             new Thread((Runnable) devpThread).start();
             SlaveConnection.put(SlaveType.Devp, devp.getId(), devpThread);
         }
-
         // 鍒濆鍖栨潯鐮佹壂鎻忎华绾跨▼
         log.info("鍒濆鍖栨潯鐮佹壂鎻忎华绾跨▼...................................................");
         for (Slave barcode : slaveProperties.getBarcode()) {
@@ -101,6 +99,13 @@
             new Thread(ledThread).start();
             SlaveConnection.put(SlaveType.Led, led.getId(), ledThread);
         }
+        // 鍒濆鍖栫绉ょ嚎绋�
+        log.info("鍒濆鍖栫绉ょ嚎绋�...................................................");
+        for (Slave scale : slaveProperties.getScale()) {
+            ScaleThread barcodeThread = new ScaleThread(scale);
+            new Thread(barcodeThread).start();
+            SlaveConnection.put(SlaveType.Scale, scale.getId(), barcodeThread);
+        }
     }
 
 
diff --git a/src/main/java/com/zy/core/thread/ScaleThread.java b/src/main/java/com/zy/core/thread/ScaleThread.java
new file mode 100644
index 0000000..c5a2d4b
--- /dev/null
+++ b/src/main/java/com/zy/core/thread/ScaleThread.java
@@ -0,0 +1,136 @@
+package com.zy.core.thread;
+
+import com.core.common.Cools;
+import com.zy.core.Slave;
+import com.zy.core.ThreadHandler;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.SocketAddress;
+import java.net.SocketTimeoutException;
+
+/**
+ * 纾呯Г绾跨▼
+ * Created by vincent on 2020/8/4
+ */
+@Data
+@Slf4j
+public class ScaleThread implements Runnable, ThreadHandler {
+
+    private Slave slave;
+    private Double scale = 0.0D;
+    private Socket socket;
+    private DataOutputStream dataOutputStream;
+    private DataInputStream dataInputStream;
+
+    public ScaleThread(Slave slave) {
+        this.slave = slave;
+    }
+
+    @Override
+    @SuppressWarnings("InfiniteLoopStatement")
+    public void run() {
+        connect();
+        while (true) {
+            try {
+                byte[] read = read(8, 100);
+                if (null != read) {
+                    String s = new String(read);
+                    if (!Cools.isEmpty(s) && s.startsWith("=")) {
+                        scale = Double.parseDouble(s.substring(1));
+                    }
+                }
+                Thread.sleep(100);
+            } catch (SocketTimeoutException ignore) {
+            } catch (Exception e) {
+//                e.printStackTrace();
+            }
+        }
+    }
+
+    @Override
+    public boolean connect() {
+        try {
+            close();  //1.涓诲姩閲婃斁杩炴帴 //2.鏌愪簺鏈嶅姟鍣ㄥ鎸囧畾ip鏈夐摼璺暟闄愬埗
+            socket = new Socket();
+            //socket.setKeepAlive(true);
+            SocketAddress socketAddress = new InetSocketAddress(slave.getIp(), slave.getPort());
+            socket.connect(socketAddress, 1000); //鏌愪簺鏈嶅姟鍣╬ing寤惰繜楂樻椂瑕佸鍔�,鍚﹀垯浼氭姤閿檆onnect timeout
+            dataOutputStream = new DataOutputStream(socket.getOutputStream());
+            dataInputStream = new DataInputStream(socket.getInputStream());
+//            log.info("鏉$爜鎵弿浠繛鎺ユ垚鍔� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+        } catch (Exception e) {
+            socket = null;
+            log.error("鏉$爜鎵弿浠繛鎺ュけ璐ワ紒锛侊紒 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public void close() {
+        try {
+            if (null != dataOutputStream) {
+            dataOutputStream.close();
+        }
+        if (null != dataInputStream) {
+            dataInputStream.close();
+        }
+//        if (null != socket && !socket.isClosed()) {
+//            socket.close();
+//        }
+        if (null != socket){
+            socket.close();
+        }
+        socket = null;
+        } catch (IOException e) {
+            log.error("SocketClient close Exception:" + e.getMessage());
+        }
+    }
+
+    public void write(byte[] msg, int len) throws IOException {
+        if (null != dataInputStream)
+        {
+            dataOutputStream.write(msg, 0, len);
+            dataOutputStream.flush();
+        }
+    }
+
+    public byte[] read(int bufferSize, int timeOut) throws IOException {
+//        if (socket == null) {
+//           connect();
+//        }
+        connect();
+        socket.setSoTimeout(timeOut);
+        byte[] bytes = new byte[bufferSize];
+        int len = dataInputStream.read(bytes);
+        byte[] tempBytes = null;
+        if (len > 0) {
+        tempBytes = new byte[len];
+        System.arraycopy(bytes, 0, tempBytes, 0, len);
+        }
+        return tempBytes;
+    }
+
+    public boolean valid() throws Exception {
+        if (null == socket || socket.isClosed() || socket.isInputShutdown() || socket.isOutputShutdown()) {
+            if (dataInputStream != null) {
+                dataInputStream.close();
+            }
+            if (dataOutputStream != null) {
+                dataOutputStream.close();
+            }
+            if (socket != null) {
+                socket.close();
+            }
+            return false;
+        }
+        return true;
+    }
+
+}
diff --git a/src/main/webapp/static/css/console.css b/src/main/webapp/static/css/console.css
index a8f9f6e..a43cfe5 100644
--- a/src/main/webapp/static/css/console.css
+++ b/src/main/webapp/static/css/console.css
@@ -465,6 +465,21 @@
     font-size: xx-small;
     margin-left: 35px;
 }
+/* 纾呯Г */
+.scale {
+    position: absolute;
+    width: 50px;
+    height: 20px;
+    /*background-image: url("../image/bscanner.png");*/
+    background-repeat: no-repeat;
+    background-size:100% 60%;
+    background-position: top center;
+}
+/* 纾呯Г1 */
+#scale-1 {
+    top: 290px;
+    left: 240px;
+}
 
 /* 寮圭獥 */
 form .form-item {
diff --git a/src/main/webapp/views/console.html b/src/main/webapp/views/console.html
index a2161f7..7c7048f 100644
--- a/src/main/webapp/views/console.html
+++ b/src/main/webapp/views/console.html
@@ -89,6 +89,10 @@
     <div id="code-decoder-2" class="code-decoder">
         <span id="code-decoder-data-2" class="code-decoder-data">0</span>
     </div>
+    <!--  纾呯Г  -->
+    <div class="scale" id="scale-1">
+        <button id="scale-data-1">纾呯Г</button>
+    </div>
 
 
     <!----------- 宸﹁緭閫佺嚎 ---------->
@@ -528,11 +532,13 @@
     getCrnInfo();
     getSystemRunningStatus();
     getBarcodeInfo();
+    getScaleInfo();
     // 瀹炴椂璁块棶
     setInterval(function () {
         getCrnInfo();
         getSystemRunningStatus();
-        getBarcodeInfo()
+        getBarcodeInfo();
+        getScaleInfo();
     }, 1000);
     setInterval(function () {
         getSitesInfo();
@@ -689,6 +695,29 @@
         });
     }
 
+    // 纾呯Г瀹炴椂鏁版嵁鑾峰彇
+    function getScaleInfo(){
+        $.ajax({
+            url: baseUrl+ "/console/latest/data/scale",
+            headers: {'token': localStorage.getItem('token')},
+            method: 'POST',
+            success: function (res) {
+
+                if (res.code === 200){
+                    var sclaes = res.data;
+                    for (var i = 0; i < sclaes.length; i++){
+                        console.log(sclaes[i].scaleId + ":" + sclaes[i].value)
+                        $("#scale-data-"+sclaes[i].scaleId).text(sclaes[i].value);
+                    }
+                } else if (res.code === 403){
+                    parent.location.href = baseUrl+"/login";
+                }  else {
+                    console.log(res.msg);
+                }
+            }
+        });
+    }
+
     // 鍫嗗灈鏈哄亸绉诲姩鐢�
     function crnAnimate(id, leftVal) {
         switch (id) {

--
Gitblit v1.9.1