From 8fbd26ea16e81c29926188ec5a8e149c032d102f Mon Sep 17 00:00:00 2001
From: 沈斌 <bluelazysb@hotmail.com>
Date: Thu, 03 May 2018 14:23:26 +0800
Subject: [PATCH] 代码优化 - 去掉无效的queue

---
 method.js |  173 +++++++++++++++++++++++++++++++--------------------------
 1 files changed, 94 insertions(+), 79 deletions(-)

diff --git a/method.js b/method.js
index 0148b5d..254054f 100644
--- a/method.js
+++ b/method.js
@@ -131,6 +131,10 @@
     mac = mac.toLowerCase();
     this.updateDeviceLastUpdated(db, mac, function(data) {});
 
+    //������������������������������������������������������
+    //var ver = this.toDec(fields[18]) * 256 + this.toDec(fields[19]); //���������
+
+
     var x1  = this.toDec(fields[20]) * 256 + this.toDec(fields[21]); //PM2.5������
     var x2  = this.toDec(fields[22]) * 256 + this.toDec(fields[23]); //PM10
     var x3  = this.toDec(fields[24]) * 256 + this.toDec(fields[25]); //0.1���0.3um���
@@ -160,69 +164,47 @@
     var p3 = this.toDec(fields[47]);
     var p4 = this.toDec(fields[48]);
     var fei = this.toDec(fields[58]);
-    var ferval = this.toDec(fields[59]);
+    //var ferval = this.toDec(fields[59]);
+
+    var feival = this.toDec(fields[71]) == 0 ? (this.toDec(fields[72]) * 256 + this.toDec(fields[73])) : -1 * (this.toDec(fields[72]) * 256 + this.toDec(fields[73]));
+
     var t = this.toDec(fields[56]);
     var aqi = this.toDec(fields[60]) * 256 + this.toDec(fields[61]); //AQI
 
     var ddv = this.toDec(fields[62]) * 256 + this.toDec(fields[63]);
     var mcu = this.toDec(fields[64]) + this.toDec(fields[65]) / 100;
 
+    var _config = global.configs[mac];
+    if(_config == null) {
+        _config = config.ALARM_DEFAULTS;
+        _config.mac = mac;
+        global.configs[mac] = _config;
+    }
+
     var current = moment();
 
-    queue.pushToMQ('ex_data_screen', {
+    var sensor_data = {
         mac: mac,
-        location: {
-            lat: 31.430616,
-            lng: 120.988327
-        },
+        location: _config.location,
         data: {
-            x0: ferval,
+            x0: feival,
             x1: x1,  //PM2.5 - (������:ppm)
             x2: x3,  //PM2.5 - 0.1���0.3um���
             x3: x9,  //������
             x4: x11, //������
             x5: x10, //������
-            x6: x14  //������������
-        },
-        time: current.valueOf()
-    });
+            x6: x14,  //������������
 
-    if(x1 > 250) {
-        var level = 1;
-        if(x1 > 750) {
-            level = 3;
-        } else if(x1 > 500) {
-            level = 2;
-        }
-        queue.pushToMQ('ex_data_alarm', {
-            mac: mac,
-            address: "���������������������������������",
-            location: {
-                lat:31.430616,
-                lng:120.988327
-            },
-            data:{
-                x0: ferval,
-                x1: x1,  //PM2.5
-                x2: x3,  //PM2.5
-                x3: x9,  //������
-                x4: x11, //������
-                x5: x10, //������
-                x6: x14  //������������
-            },
-            level: level,
-            notice: {
-                tel: "15950198162",
-                email: "it01@moral.org.cn",
-                open_id: "o-RTuwvMHWotyirPHLmdSB_dKoQU"
-            },
-            time: moment.valueOf()
-        });
-    }
+            mcu: mcu
+        },
+        options: _config.options,
+        time: current.valueOf()
+    };
+    queue.pushToMQ('ex_data_screen', sensor_data);
 
     var rank = 0;
     if(s > 0) {
-        rank = this.random(1000, 99999);//this.random(1000, 99999999);
+        rank = this.random(100200, 102000);//this.random(1000, 99999999);
         db.collection("device_ranks").insertOne({
             mac: mac,
             rank: rank,
@@ -238,6 +220,7 @@
         }, function(err, result) { });
     }
 
+    var _this = this;
     db.collection("data").insertOne({
         mac: mac,
         x1: x1,
@@ -259,7 +242,7 @@
         p3: p3,
         p4: p4,
         fei: fei,
-        ferval: ferval,
+        ferval: feival,
         aqi: aqi,
         s: s,
         rank: rank,
@@ -267,10 +250,40 @@
         mcu: mcu,
         day: current.format('YYYYMMDD'),
         created: current.valueOf()
-    }, function(err, result) {
+    }, function(err, doc) {
         if (err) return;
-        callback(result, rank);
+
+        var level1 = _this.getLevel(x1,  _config['options'][1]);
+        var level2 = _this.getLevel(x9,  _config['options'][2]);
+        var level3 = _this.getLevel(x11, _config['options'][3]);
+        var level4 = _this.getLevel(x10, _config['options'][4]);
+        var level5 = _this.getLevel(x14, _config['options'][5]);
+        var level = Math.max(level1, level2, level3, level4, level5);
+        if(level > 0) {
+            sensor_data._id = doc.insertedId;
+            sensor_data.level = level;
+            sensor_data.notice = _config.notice;
+            sensor_data.address = _config.address;
+            sensor_data.data.levels = [level1, level2, level3, level4, level5];
+            queue.pushToMQ('ex_data_alarm', sensor_data);
+        }
+
+        callback(doc, rank);
     });
+};
+
+module.exports.getLevel = function(val, option) {
+    var level = 0;
+    if(option == null || option.length < 3) return level;
+    if(val > option[0]) {
+        var level = 1;
+        if(val > option[2]) {
+            level = 3;
+        } else if(val > option[1]) {
+            level = 2;
+        }
+    }
+    return level;
 };
 
 module.exports.updateDeviceSleep = function(db, data, callback) {
@@ -343,37 +356,39 @@
     }
 };
 
-/////////////////////////////////////////////////
-module.exports.insertDocument2 = function(db, data, rank, callback) {
-    var fields = data.match(/.{2}/g);
-    var mac = fields[6] + fields[7] + fields[8] + fields[9] + fields[10] + fields[11]; //Mac
-
-    var x01 = this.toDec(fields[20]) * 256 + this.toDec(fields[21]); //PM2.5������
-    var x02 = this.toDec(fields[24]) * 256 + this.toDec(fields[25]); //PM2.5������
-    var x09 = this.toDec(fields[32]) * 256 + this.toDec(fields[33]); //������
-    var x10 = this.toDec(fields[34]) * 256 + this.toDec(fields[35]); //������
-    var x11 = this.toDec(fields[36]) * 256 + this.toDec(fields[37]); //������
-    var x14 = this.toDec(fields[42]) * 256 + this.toDec(fields[43]); //������������
-
-    var fei = this.toDec(fields[58]);
-    var ferval = this.toDec(fields[59]);
-    var aqi = this.toDec(fields[60]) * 256 + this.toDec(fields[61]);
-    var ddv = this.toDec(fields[62]) * 256 + this.toDec(fields[63]);
-    var mcu = this.toDec(fields[64]) + this.toDec(fields[65]) / 100;
-
-    db.collection("devices").find({ mac: mac }).limit(1).next(function(err, doc){
-        if (err) return;
-
-        var app = 0;
-        var app_status = doc.app_status;
-        var app_last_updated = doc.app_last_updated;
-        if(app_status == 1 && app_last_updated != null && Date.now() - app_last_updated <= 30000) {
-            app = 1;
-        }
-        db.collection(config.COLLECTION).insertOne({ mac: mac.toLowerCase(), data: data + ' - PM2.5:' + x01 + ', ������:' + x09 + ', ������:' + x10 + ', ������:' + x11 + ', ������:' + x02 + ', FEI:' +  ferval + ', ������:' + fei + ', ������:' + x14 + ', AQI:' + aqi + ', ������������:' + ddv + ', MCU������:' + mcu + ', APP:' + app, date: Date.now() }, function(err, doc) {
-            if (err) return;
-            callback(doc);
+module.exports.initConfigs = function(db) {
+    var _address = config.ALARM_DEFAULTS.address;
+    var _location = config.ALARM_DEFAULTS.location;
+    var _options = config.ALARM_DEFAULTS.options;
+    db.collection("devices").find().toArray(function(err, docs) {
+        docs.forEach(function(doc) {
+            var mac = doc.mac;
+            var address = doc.address || _address;
+            var location = doc.location || _location;
+            var options = doc.options || _options;
+            var notice = doc.notice;
+            var config = {
+                mac: mac,
+                address: address,
+                location: location,
+                notice: notice,
+                options: options
+            };
+            if(notice == null || notice == {}) {
+                var userID = doc.userID;
+                db.collection("users").find({"_id": userID}).limit(1).next(function(err, user){
+                    if(user) {
+                        config["notice"] = {
+                            tel: user.username,
+                            email: user.email,
+                            open_id: user.open_id
+                        };
+                        global.configs[mac] = config;
+                    }
+                });
+            } else {
+                global.configs[mac] = config;
+            }
         });
     });
-};
-
+};
\ No newline at end of file

--
Gitblit v1.8.0