From 9a94dddb26c2d0e14d8f2197000c9d2031fb0e18 Mon Sep 17 00:00:00 2001
From: lyp-home <liangyuanpengem@163.com>
Date: Sun, 23 Jun 2019 23:54:04 +0800
Subject: [PATCH] update record_log

---
 loadconfig.go |  8 +++++++-
 main.go       |  9 +++++++-
 router.go     |  8 +++++---
 tcpserver.go  |  7 ++++---
 worker.go     | 57 +++++++++++++++++++++++++++++++++++++++++++++++----
 5 files changed, 77 insertions(+), 12 deletions(-)

diff --git a/loadconfig.go b/loadconfig.go
index c161704..32c2af7 100644
--- a/loadconfig.go
+++ b/loadconfig.go
@@ -106,10 +106,16 @@ var today string
 //var femaledemoDevice Device
 //var maledemoDevice Device
 
+var nodeUpdateMap sync.Map
+var logch = make(chan []byte)
+
+//log channel
+var logch = make(chan []byte)
+
+var loraNodeMap sync.Map
 
 var db, _ = sql.Open("sqlite3", "./db/gateway.db")
 
-var loraNodeMap sync.Map
 
 // 加载配置文件
 func init() {
diff --git a/main.go b/main.go
index 078de3c..e35baad 100644
--- a/main.go
+++ b/main.go
@@ -6,6 +6,7 @@ import (
 	"net"
 	"os"
 	"strconv"
+	"time"
 )
 
 var err error
@@ -15,7 +16,6 @@ func main() {
 	go gw_router()
 	go serial_run()
 	c := cron.New()
-
 	
 	//获取数据防抖处理时间配置
 	if conf.SYNEXTENSIONTIME {
@@ -52,9 +52,16 @@ func main() {
 	c.AddFunc("0, */10, *, *, *, *", savedata_cron)
 	c.AddFunc("0, 0, 0, *, *, *", insertdata)
 	c.AddFunc("0, 0, *, *, *, *", get_weather)
+	c.AddFunc("0, *, *, *, *, *", func(){
+		t := time.Now()
+ 		today = t.Format("2006-01-02")
+	})
 	c.Start()
 
 	if conf.OPENTCPSETVER {
+
+		go record_log_channel()
+
 		tcp_port := strconv.Itoa(conf.TCPPORT)
 
 		listener, err := net.Listen("tcp", "0.0.0.0:"+tcp_port)
diff --git a/router.go b/router.go
index c7ae89c..1fbfaf5 100644
--- a/router.go
+++ b/router.go
@@ -58,6 +58,8 @@ var dparkConf DparkConf
 var connTest net.Conn
 
 
+
+
 //获取数据防抖配置时间
 func getConf() {
 	resp, err := http.Get("https://smartoilets.cn/socketServer/dpark/getConf")
@@ -94,7 +96,7 @@ func getConf() {
 	if dparkConf.ExtensionOutTime < 0 {
 		dparkConf.ExtensionOutTime = 0
 	}
-
+// time.
 	extensionInTime = dparkConf.ExtensionInTime
 	extensionOutTime = dparkConf.ExtensionOutTime
 
@@ -102,8 +104,8 @@ func getConf() {
 
 }
 
-//距离有效判断
-var reactTof = 1650
+//距离有效判断time.
+var reactTof = 1650time.
 
 //数据防抖 进入时间
 var extensionInTime = 6
diff --git a/tcpserver.go b/tcpserver.go
index d0a013f..a840953 100644
--- a/tcpserver.go
+++ b/tcpserver.go
@@ -117,7 +117,9 @@ func readConn(conn net.Conn, readChan chan<- []byte, stopChan chan<- bool) {
 					//尿布台数据,地址1位 数据2位
 					dataType := data[i+1]
 					values := make([]byte,0)
-					if data[i+1] == 1 {
+
+
+					if dataType == 1 {
 
 						continueCount = 3
 						end = 4
@@ -208,7 +210,6 @@ func readConn(conn net.Conn, readChan chan<- []byte, stopChan chan<- bool) {
 						if err != nil {
 							log.Println("write msg error!", err)
 						}
-
 					}
 
 					log.Println("yunhorndeug.push.data.tcp:",buffer.String(),addrs,dataType,values)
@@ -222,7 +223,7 @@ func readConn(conn net.Conn, readChan chan<- []byte, stopChan chan<- bool) {
 
 						buffer = new(bytes.Buffer)
 
-						go record_log(data[i-4:i+end])
+						go write_log_channel(data[i-4:i+end])
 						
 					 	go dealDatav3(data[i-4:i+end])
 
diff --git a/worker.go b/worker.go
index b3af0d6..6df58d2 100644
--- a/worker.go
+++ b/worker.go
@@ -10,6 +10,8 @@ import (
 	"sync"
 	"encoding/json"
 	"time"
+	"strconv"
+	"bytes"
 )
 
 type Devicedatas struct {
@@ -77,18 +79,64 @@ func yunhorn_xdy_l_v1(data_buf []byte) {
 
 }
 
+//wirte data to log channel
+func write_log_channel(data []byte){
+	logch <- data
+}
+
+//get data from log channel and write file
+func record_log_channel(){
+
+	for {
+		data_buf := <- logch
+
+		addrs := data_buf[:4]
+
+
+		buffer := new(bytes.Buffer)
+
+		for i:=0;i<len(addrs);i++{
+			s := strconv.FormatInt(int64(addrs[i]&0xff), 16)
+			buffer.WriteString(s)
+		}
+
+
+		adr := buffer.String()
+
+		// log.Println("addrs and data",adr,data_buf)
+
+		now := time.Now()
+
+		oldTime,ok := nodeUpdateMap.Load(adr);
+		if(ok){
+			//have data
+			var duration = now.Sub(oldTime.(time.Time)).Seconds()
+			var durationAsInt64 = int(duration)
+			if(durationAsInt64>1){
+				record_log(data_buf)
+			}
+			//same data
+		}else{
+			//not data
+			// log.Println("save adr:",adr)
+			nodeUpdateMap.Store(adr,now)
+			record_log(data_buf)
+		}
+	}
+}
+
 
 //打印原始数据进log
 func record_log(data_buf []byte){
 	time := today
 	folder := conf.RECORD_LOG_PATH+"/"+time
 	err2 :=os.MkdirAll(folder,os.ModePerm)
-     	if err2!=nil{
+    if err2!=nil{
        		log.Println(err2)
-     	}
-	f, err := os.OpenFile(folder+"/"+time,  os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
+    }
+	f, err := os.OpenFile(folder+"/"+time+".log",  os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
    	if err != nil{
-    		log.Fatalln("HHHHH")
+    	log.Fatalln("HHHHH")
    	} 
     record := log.New(f,"",log.Llongfile)
     //debugLog.SetPrefix("[Debug]")
@@ -96,6 +144,7 @@ func record_log(data_buf []byte){
     record.Println(data_buf)
 }
 
+
 func yunhorn_lora_l_v1(data_buf []byte) {
 
 	// for _, i := range conf.RS485DEVICES {