Browse Source

状态栏数据接入

xushining 3 years ago
parent
commit
278ec548be
2 changed files with 133 additions and 4 deletions
  1. 122 4
      src/assets/script/BackgroundData.js
  2. 11 0
      src/components/StatusBar.vue

+ 122 - 4
src/assets/script/BackgroundData.js

@@ -1,6 +1,7 @@
 import axios from 'axios';
 
 export default class BackgroundData {
+    /* 标题栏数据 */
     TopPoint = [
         {
             pointName: "TotalPower",// 实时总功率
@@ -24,27 +25,110 @@ export default class BackgroundData {
             value: 0
         },
     ];
+    /* 隐患数据 */
+    HiddenProblems = new Array();
+    /* 缺陷数据 */
+    Defects = new Array();
+    /* 故障数据 */
+    Failure = new Array();
+    /* 事故数据 */
+    Accidents = new Array();
     constructor() {
-        this.refreshData = this.refreshData.bind(this);
+        this.refreshTPData = this.refreshTPData.bind(this);
         this.onTPMessage = this.onTPMessage.bind(this);
+        this.refreshAlarmData = this.refreshAlarmData.bind(this);
+        this.onHiddenProblemsMessage = this.onHiddenProblemsMessage.bind(this);
+        this.formatDate = this.formatDate.bind(this);
+        this.onDefectsMessage = this.onDefectsMessage.bind(this);
+        this.onAccidentsMessage=this.onAccidentsMessage.bind(this);
+        this.isContains=this.isContains.bind(this);
 
-        this.refreshTimer = setInterval(this.refreshData, 3000);
+
+        this.refreshTPTimer = setInterval(this.refreshTPData, 3000);// 标题栏数据
+        this.refreshAlarmTimer = setInterval(this.refreshAlarmData, 10000);// 报警数据
     }
 
     /* 数据刷新 */
-    refreshData() {
+    refreshTPData() {
         // http://192.168.10.18:8011/ts
         var val = '';
         for (var v in this.TopPoint) {
             val += this.TopPoint[v].pointTag + ',';
         }
-        axios.get("http://192.168.10.18:8011/ts/latest" + "?keys=" + val)
+        axios.get(`http://192.168.10.18:8011/ts/latest?keys=${val}`)
             .then(this.onTPMessage)
             .catch(err =>
                 console.log(err)
             );
     }
 
+    /* 刷新报警信息 */
+    refreshAlarmData() {
+        // http://192.168.10.18:8075/alarm
+        // 1、读取一天内的所有open的4级custom报警,作为隐患数据ar
+        var enddt = new Date();
+        var tm = enddt.getTime();
+        enddt = new Date(tm + 900000);
+        var startdt = new Date(tm - 86400000);
+        axios.get(`http://192.168.10.18:8075/alarm/snap/page?pagenum=1&pagesize=500&category1=custom&rank=4&isopened=1&starttime=${this.formatDate(startdt)}&endtime=${this.formatDate(enddt)}`)
+            .then(this.onHiddenProblemsMessage)
+            .catch(err =>
+                console.log(err)
+            );
+        // 2、读取一天内所有的open的windturbine报警,以故障结尾的报警填充到故障,其他的填充到缺陷
+        axios.get(`http://192.168.10.18:8075/alarm/snap/page?pagenum=1&pagesize=500&category1=windturbine&isopened=1&starttime=${this.formatDate(startdt)}&endtime=${this.formatDate(enddt)}`)
+            .then(this.onDefectsMessage)
+            .catch(err =>
+                console.log(err)
+            );
+        // 3、读取一天内所有open的升压站(SYZ)报警,包含关键字“跳闸”,“开关”,“刀闸”,“断路器”字符的报警信息填充到事故列表
+        axios.get(`http://192.168.10.18:8075/alarm/snap/page?pagenum=1&pagesize=500&category1=SYZ&isopened=1&starttime=${this.formatDate(startdt)}&endtime=${this.formatDate(enddt)}`)
+            .then(this.onAccidentsMessage)
+            .catch(err =>
+                console.log(err)
+            );
+    }
+
+    /* 获得故障数据 */
+    onAccidentsMessage(msg){
+        if (!msg.data) return;
+        this.Accidents = new Array();
+        for(var v in msg.data.records){
+            var val = msg.data.records[v];
+            if(this.isContains(val.alertText,["跳闸","开关","刀闸","断路器","合位","分位"])){
+                this.Accidents.push(val);
+            }else{
+                if(val.rank=="5"){
+                    this.Failure.push(val);
+                }else{
+                    this.Defects.push(val);
+                }
+            }
+        }
+    }
+
+    /* 获得缺陷数据 */
+    onDefectsMessage(msg) {
+        if (!msg.data) return;
+        this.Defects = new Array();
+        this.Failure = new Array();
+        for (var v in msg.data.records) {
+            var val = msg.data.records[v];
+            if (val.alertText.indexOf("故障") > 0) {
+                this.Failure.push(val);
+            } else {
+                this.Defects.push(val);
+            }
+        }
+    }
+
+    /* 获得隐患数据 */
+    onHiddenProblemsMessage(msg) {
+        if (!msg.data) return;
+        this.HiddenProblems = msg.data.records;
+    }
+
+    /* 获得标题栏数据 */
     onTPMessage(msg) {
         if (!msg.data) return;
         for (var v in this.TopPoint) {
@@ -53,6 +137,40 @@ export default class BackgroundData {
         }
     }
 
+    /* 格式化时间 */
+    formatDate(time, format = 'YY-MM-DD hh:mm:ss') {
+        var date = new Date(time);
+
+        var year = date.getFullYear(),
+            month = date.getMonth() + 1,//月份是从0开始的
+            day = date.getDate(),
+            hour = date.getHours(),
+            min = date.getMinutes(),
+            sec = date.getSeconds();
+        var preArr = Array.apply(null, Array(10)).map(function (elem, index) {
+            return '0' + index;
+        });
+
+        var newTime = format.replace(/YY/g, year)
+            .replace(/MM/g, preArr[month] || month)
+            .replace(/DD/g, preArr[day] || day)
+            .replace(/hh/g, preArr[hour] || hour)
+            .replace(/mm/g, preArr[min] || min)
+            .replace(/ss/g, preArr[sec] || sec);
+
+        return newTime;
+    }
+
+    /* 判断一个字符串中是否包含第二个字符串列表中的字符 */
+    isContains(str,strs){
+        for(var v in strs){
+            if(str.indexOf(strs[v])>0){
+                return true;
+            }
+        }
+        return false;
+    }
+
     /* 单例 */
     static getInstance() {
         if (!BackgroundData.instance) {

+ 11 - 0
src/components/StatusBar.vue

@@ -203,6 +203,7 @@
 </template>
 
 <script>
+import BackgroundData from '../assets/script/BackgroundData'
 export default {
   data() {
     return {
@@ -257,6 +258,9 @@ export default {
     clearInterval(this.statusTimer);
     this.statusTimer = null;
   },
+  created() {
+    this.refreshTimer = setInterval(this.refreshData, 2000);
+  },
   methods: {
     appendZero(obj) {
       if (obj < 10) {
@@ -265,6 +269,13 @@ export default {
         return obj;
       }
     },
+    refreshData(){
+      var bd = BackgroundData.getInstance();
+      this.hiddenDangerNum = bd.HiddenProblems.length;
+      this.defectNum = bd.Defects.length;
+      this.malfunctionNum = bd.Failure.length;
+      this.accidentNum = bd.accidentNum.length;
+    }
   },
 };
 </script>