siked 3 years ago
parent
commit
9a58a0ecfe
65 changed files with 4073 additions and 10678 deletions
  1. 1 2
      .idea/Cold_Api.iml
  2. 6 0
      .idea/vcs.xml
  3. BIN
      Cold_Api6200
  4. BIN
      Cold_Api6201
  5. 57 7
      Nats/Nats.go
  6. 0 79
      Nats/NatsMqtt.go
  7. 84 0
      Nats/NatsServer/NatsMqtt.go
  8. 20 24
      Nats/NatsServer/NatsQiniu.go
  9. 23 0
      Nats/NatsServer/NatsWx.go
  10. 0 23
      Nats/NatsWx.go
  11. 9 0
      Z_Build.bat
  12. 6 3
      conf/app.conf
  13. 1 4
      conf/config.go
  14. 65 65
      controllers/Data.go
  15. 165 284
      controllers/Device.go
  16. 28 36
      controllers/Login.go
  17. 0 845
      controllers/Panel.go
  18. 52 34
      controllers/User.go
  19. 45 36
      controllers/WebSocket/WebSocket.go
  20. 0 200
      controllers/WebSocketPanel/WebSocket.go
  21. 0 307
      controllers/Wx.go
  22. 44 40
      controllers/lib/lib.go
  23. 2 4
      go.mod
  24. 3 9
      go.sum
  25. BIN
      go_build_main_go.exe
  26. 1 1
      lastupdate.tmp
  27. 2100 0
      logs/logx/logx.log
  28. 17 7
      main.go
  29. 110 34
      models/Admin/Admin.go
  30. 98 42
      models/Admin/AdminPower.go
  31. 98 47
      models/Admin/Tokey.go
  32. 19 8
      models/Device/Device.go
  33. 95 21
      models/Device/DeviceClass.go
  34. 8 11
      models/Device/DeviceData.go
  35. 63 134
      models/Device/DeviceSensor.go
  36. 110 18
      models/Device/DeviceWarningList.go
  37. 0 157
      models/Panel/PaneView.go
  38. 0 34
      models/Panel/PanelImg.go
  39. 0 174
      models/Panel/PanelLayerMould.go
  40. 0 179
      models/Panel/PanelTool.go
  41. 0 23
      models/Panel/PanellibImg.go
  42. 51 0
      models/System/DeviceLogs.go
  43. 21 26
      routers/Data.go
  44. 38 38
      routers/Device.go
  45. 0 58
      routers/Panel.go
  46. 22 24
      routers/User.go
  47. 12 20
      routers/router.go
  48. 0 32
      tests/default_test.go
  49. 66 0
      tests/logs/logx/logx.log
  50. 14 33
      views/Data/DataRealCalss.html
  51. 101 14
      views/Device/Device.html
  52. 278 48
      views/Device/DeviceClass-.html
  53. 1 1
      views/Device/DeviceClass.html
  54. 7 9
      views/Device/DeviceClassBind-.html
  55. 87 0
      views/Device/DeviceLogs.html
  56. 2 2
      views/Device/DeviceWarning.html
  57. 11 3
      views/Device/Device_Parameter-.html
  58. 10 11
      views/Device/Device_Sensor-.html
  59. 0 894
      views/Panel/Index.html
  60. 0 825
      views/Panel/Index_plan.html
  61. 0 2493
      views/Panel/PanelE.html
  62. 0 2420
      views/Panel/PanelE_.html
  63. 0 833
      views/Panel/说明.html
  64. 21 1
      views/index.html
  65. 1 1
      views/login.html

+ 1 - 2
.idea/Cold_Api.iml

@@ -1,9 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?xml version="1.0" encoding="UTF-8"?>
-<module type="WEB_MODULE" version="4">
+<module version="4">
   <component name="Go" enabled="true" />
   <component name="Go" enabled="true" />
   <component name="NewModuleRootManager">
   <component name="NewModuleRootManager">
     <content url="file://$MODULE_DIR$" />
     <content url="file://$MODULE_DIR$" />
-    <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
     <orderEntry type="sourceFolder" forTests="false" />
   </component>
   </component>
 </module>
 </module>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

BIN
Cold_Api6200


BIN
Cold_Api6201


+ 57 - 7
Nats/Nats.go

@@ -2,46 +2,96 @@ package Nats
 
 
 import (
 import (
 	"Cold_Api/conf"
 	"Cold_Api/conf"
+	"Cold_Api/controllers/lib"
 	"Cold_Api/logs"
 	"Cold_Api/logs"
+	"Cold_Api/models/Device"
+	"encoding/xml"
 	"fmt"
 	"fmt"
 	"github.com/nats-io/nats.go"
 	"github.com/nats-io/nats.go"
+	"strconv"
+	"strings"
 )
 )
 
 
-var Nats *nats.Conn
 func init() {
 func init() {
+
+	logs.Println("============Nats init============")
 	var err error
 	var err error
 	// 连接Nats服务器
 	// 连接Nats服务器
-	Nats, err = nats.Connect("nats://"+conf.NatsServer_Url)
+	lib.Nats, err = nats.Connect("nats://" + conf.NatsServer_Url)
 	if err != nil {
 	if err != nil {
 		fmt.Println("nats 连接失败!")
 		fmt.Println("nats 连接失败!")
-		panic("nats 连接失败!")
+		panic(err)
 	}
 	}
 	logs.Println("nats OK!")
 	logs.Println("nats OK!")
-}
 
 
+	go NatsInit()
+}
 
 
 func NatsInit() {
 func NatsInit() {
 
 
+	// 请求-响应, 响应 test3 消息。
+	_, _ = lib.Nats.Subscribe("Wx_BasicMessage_Event_QRCode", func(m *nats.Msg) {
+		fmt.Printf(" => Nats   Wx_BasicMessage_Event_QRCode message: %s\n", string(m.Data))
+
+		type Person_QRCode struct {
+			ToUserName   string `xml:"ToUserName"`   //注意这里有个反引号
+			FromUserName string `xml:"FromUserName"` //注意这里有个反引号
+			CreateTime   string `xml:"CreateTime"`   //注意这里有个反引号
+			EventKey     string `xml:"EventKey"`
+		}
+		var person_QRCode Person_QRCode
+		err1 := xml.Unmarshal(m.Data, &person_QRCode)
+		if err1 != nil {
+			fmt.Println("Unmarshal error")
+			_ = lib.Nats.Publish(m.Reply, []byte(""))
+			return
+		}
+		// 进入 二维码配对
+		fmt.Println("FromUserName-", person_QRCode.FromUserName)
+		fmt.Println("EventKey-", person_QRCode.EventKey)
+
+		// 开始  处理消息
+		if strings.Contains(person_QRCode.EventKey, "@宝智达 微信公众号通知") {
+			//"请将本内容发送到 深圳市宝智达科技有限公司 微信公众号-|"+lib.AesEncryptCBC(T_calss_id, "0123456789012345")+"|-",
+			Content_r := lib.GetBetweenStr(person_QRCode.EventKey, "-|", "|-")
+			decryptCode := lib.AesDecryptCBC(Content_r, "0123456789012345")
+			decryptCode_int, err := strconv.Atoi(decryptCode)
+			fmt.Println("解密结果:", decryptCode, "  decryptCode_int", decryptCode_int, "  Content_r:", Content_r)
+			R_DeviceClass, err := Device.Read_Class_ById(decryptCode_int)
+			if err != nil {
+				_ = lib.Nats.Publish(m.Reply, []byte(""))
+				return
+			}
 
 
+			if strings.Contains(R_DeviceClass.T_Notice_wx, person_QRCode.FromUserName) {
 
 
+				_ = lib.Nats.Publish(m.Reply, []byte(R_DeviceClass.T_name+" 已绑定,无需重复绑定!"))
+				return
+			}
+
+			R_DeviceClass.T_Notice_wx = R_DeviceClass.T_Notice_wx + person_QRCode.FromUserName + "/重令名|"
+			Device.Update_Class_ById(R_DeviceClass)
+
+			_ = lib.Nats.Publish(m.Reply, []byte(R_DeviceClass.T_name+" 绑定成功!"))
+			return
+		}
+		_ = lib.Nats.Publish(m.Reply, []byte(""))
+	})
 
 
 	//// 发布-订阅 模式,异步订阅 test1
 	//// 发布-订阅 模式,异步订阅 test1
 	//_, _ = Nats.Subscribe("test1", func(m *nats.Msg) {
 	//_, _ = Nats.Subscribe("test1", func(m *nats.Msg) {
 	//	fmt.Printf("Received a message: %s\n", string(m.Data))
 	//	fmt.Printf("Received a message: %s\n", string(m.Data))
 	//})
 	//})
 
 
-
 	//// 队列 模式,订阅 test2, 队列为queue, test2 发向所有队列,同一队列只有一个能收到消息
 	//// 队列 模式,订阅 test2, 队列为queue, test2 发向所有队列,同一队列只有一个能收到消息
 	//_, _ = Nats.QueueSubscribe("test2", "queue", func(msg *nats.Msg) {
 	//_, _ = Nats.QueueSubscribe("test2", "queue", func(msg *nats.Msg) {
 	//	fmt.Printf("Queue a message: %s\n", string(msg.Data))
 	//	fmt.Printf("Queue a message: %s\n", string(msg.Data))
 	//})
 	//})
 
 
-
 	//// 请求-响应, 响应 test3 消息。
 	//// 请求-响应, 响应 test3 消息。
 	//_, _ = Nats.Subscribe("test3", func(m *nats.Msg) {
 	//_, _ = Nats.Subscribe("test3", func(m *nats.Msg) {
 	//	fmt.Printf("Reply a message: %s\n", string(m.Data))
 	//	fmt.Printf("Reply a message: %s\n", string(m.Data))
 	//	_ = Nats.Publish(m.Reply, []byte("I can help!!"))
 	//	_ = Nats.Publish(m.Reply, []byte("I can help!!"))
 	//})
 	//})
 
 
-
 }
 }

+ 0 - 79
Nats/NatsMqtt.go

@@ -1,79 +0,0 @@
-package Nats
-
-import (
-	"Cold_Api/controllers/lib"
-	"Cold_Api/logs"
-	"Cold_Api/models/Device"
-	"github.com/vmihailenco/msgpack/v5"
-)
-
-
-func Read_DeviceParameter(T_SN string)  {
-	logs.Println("Nats =>",lib.FuncName(),T_SN)
-	err := Nats.Publish("Read_DeviceParameter", []byte(T_SN))
-	if err != nil {
-		logs.Println("Nats =>",lib.FuncName(),err)
-	}
-
-}
-func Read_DeviceSensorParameter(T_SN string)  {
-	logs.Println("Nats =>",lib.FuncName(),T_SN)
-	err := Nats.Publish("Read_DeviceSensorParameter", []byte(T_SN))
-	if err != nil {
-		logs.Println("Nats =>",lib.FuncName(),err)
-	}
-}
-func Pu_DeviceParameter(v Device.DeviceParameter)  {
-	logs.Println("Nats =>",lib.FuncName(),v)
-	b, err := msgpack.Marshal(&v)
-	if err != nil {
-		panic(err)
-	}
-
-	err = Nats.Publish("Pu_DeviceParameter", b)
-	if err != nil {
-		logs.Println("Nats =>",lib.FuncName(),err)
-	}
-
-}
-func Pu_DeviceParameter_Sensor(v Device.DeviceSensorParameter)  {
-	logs.Println("Nats =>",lib.FuncName(),v)
-	b, err := msgpack.Marshal(&v)
-	if err != nil {
-		panic(err)
-	}
-
-	err = Nats.Publish("Pu_DeviceParameter_Sensor", b)
-	if err != nil {
-		logs.Println("Nats =>",lib.FuncName(),err)
-	}
-
-}
-func Set_DeviceTask(v Device.Device_task)  {
-	logs.Println("Nats =>",lib.FuncName(),v)
-	b, err := msgpack.Marshal(&v)
-	if err != nil {
-		panic(err)
-	}
-
-	err = Nats.Publish("Set_DeviceTask", b)
-	if err != nil {
-		logs.Println("Nats =>",lib.FuncName(),err)
-	}
-
-}
-
-func Del_DeviceSensor(v Device.DeviceSensor_Del)  {
-	logs.Println("Nats =>",lib.FuncName(),v)
-	b, err := msgpack.Marshal(&v)
-	if err != nil {
-		panic(err)
-	}
-
-	err = Nats.Publish("Del_DeviceSensor", b)
-	if err != nil {
-		logs.Println("Nats =>",lib.FuncName(),err)
-	}
-
-}
-

+ 84 - 0
Nats/NatsServer/NatsMqtt.go

@@ -0,0 +1,84 @@
+package NatsServer
+
+import (
+	"Cold_Api/controllers/lib"
+	"Cold_Api/logs"
+	"Cold_Api/models/Device"
+	"github.com/vmihailenco/msgpack/v5"
+)
+
+func Read_DeviceParameter(T_SN string) {
+	logs.Println("Nats =>", lib.FuncName(), T_SN)
+	err := lib.Nats.Publish("Read_DeviceParameter", []byte(T_SN))
+	if err != nil {
+		logs.Println("Nats =>", lib.FuncName(), err)
+	}
+
+}
+func Read_DeviceSensorParameter(T_SN string) {
+	logs.Println("Nats =>", lib.FuncName(), T_SN)
+	err := lib.Nats.Publish("Read_DeviceSensorParameter", []byte(T_SN))
+	if err != nil {
+		logs.Println("Nats =>", lib.FuncName(), err)
+	}
+}
+func Pu_DeviceParameter(v Device.DeviceParameter) {
+	logs.Println("Nats =>", lib.FuncName(), v)
+	b, err := msgpack.Marshal(&v)
+	if err != nil {
+		panic(err)
+	}
+
+	err = lib.Nats.Publish("Pu_DeviceParameter", b)
+	if err != nil {
+		logs.Println("Nats =>", lib.FuncName(), err)
+	}
+
+}
+func Pu_DeviceParameter_Sensor(v Device.DeviceSensorParameter) {
+	logs.Println("Nats =>", lib.FuncName(), v)
+	b, err := msgpack.Marshal(&v)
+	if err != nil {
+		panic(err)
+	}
+
+	err = lib.Nats.Publish("Pu_DeviceParameter_Sensor", b)
+	if err != nil {
+		logs.Println("Nats =>", lib.FuncName(), err)
+	}
+}
+func Set_DeviceTask(v Device.Device_task) {
+	logs.Println("Nats =>", lib.FuncName(), v)
+	b, err := msgpack.Marshal(&v)
+	if err != nil {
+		panic(err)
+	}
+
+	err = lib.Nats.Publish("Set_DeviceTask", b)
+	if err != nil {
+		logs.Println("Nats =>", lib.FuncName(), err)
+	}
+
+}
+
+func Del_DeviceSensor(v Device.DeviceSensor_Del) {
+	logs.Println("Nats =>", lib.FuncName(), v)
+	b, err := msgpack.Marshal(&v)
+	if err != nil {
+		panic(err)
+	}
+
+	err = lib.Nats.Publish("Del_DeviceSensor", b)
+	if err != nil {
+		logs.Println("Nats =>", lib.FuncName(), err)
+	}
+
+}
+
+func Get_Device_Realtime(v string) {
+	logs.Println("Nats =>", lib.FuncName(), v)
+	err := lib.Nats.Publish("Get_Device_Realtime", []byte(v))
+	if err != nil {
+		logs.Println("Nats =>", lib.FuncName(), err)
+	}
+}

+ 20 - 24
Nats/NatsQiniu.go → Nats/NatsServer/NatsQiniu.go

@@ -1,64 +1,60 @@
-package Nats
+package NatsServer
 
 
 import (
 import (
+	"Cold_Api/controllers/lib"
+	"Cold_Api/logs"
 	"fmt"
 	"fmt"
 	"github.com/vmihailenco/msgpack/v5"
 	"github.com/vmihailenco/msgpack/v5"
 	"time"
 	"time"
 )
 )
 
 
-func Qiniu_UploadToken(T_suffix string,T_MimeLimit string) (string,bool) {
+func Qiniu_UploadToken(T_suffix string, T_MimeLimit string) (string, bool) {
 	type Qiniu_UploadToken struct {
 	type Qiniu_UploadToken struct {
-		T_suffix string
+		T_suffix    string
 		T_MimeLimit string
 		T_MimeLimit string
 	}
 	}
 
 
 	b, err := msgpack.Marshal(&Qiniu_UploadToken{
 	b, err := msgpack.Marshal(&Qiniu_UploadToken{
-		T_suffix:T_suffix,
-		T_MimeLimit:T_MimeLimit,
+		T_suffix:    T_suffix,
+		T_MimeLimit: T_MimeLimit,
 	})
 	})
 	if err != nil {
 	if err != nil {
 		panic(err)
 		panic(err)
 	}
 	}
 
 
 	// 请求-响应, 向 test3 发布一个 `help me` 请求数据,设置超时间3秒,如果有多个响应,只接收第一个收到的消息
 	// 请求-响应, 向 test3 发布一个 `help me` 请求数据,设置超时间3秒,如果有多个响应,只接收第一个收到的消息
-	msg, err := Nats.Request("Qiniu_UploadToken", b, 3*time.Second)
+	msg, err := lib.Nats.Request("Qiniu_UploadToken", b, 3*time.Second)
 	if err != nil {
 	if err != nil {
 		fmt.Println(err)
 		fmt.Println(err)
 	} else {
 	} else {
 		fmt.Printf("Qiniu_UploadToken : %s\n", string(msg.Data))
 		fmt.Printf("Qiniu_UploadToken : %s\n", string(msg.Data))
-		return string(msg.Data),true
+		return string(msg.Data), true
 	}
 	}
 
 
-	return string(msg.Data),false
+	return string(msg.Data), false
 }
 }
 
 
-
-
-
-func Qiniu_UploadFile(localFile string,name string) (string,bool) {
+func Qiniu_UploadFile(localFile string, name string) (string, bool) {
+	logs.Println("Nats =>", lib.FuncName(), localFile, name)
 	type Qiniu_UploadFile struct {
 	type Qiniu_UploadFile struct {
-		localFile string
-		name string
+		File string
+		Name string
 	}
 	}
-
-	b, err := msgpack.Marshal(&Qiniu_UploadFile{
-		localFile:localFile,
-		name:name,
-	})
+	RR := Qiniu_UploadFile{File: localFile, Name: name}
+	println(":", RR.File)
+	b, err := msgpack.Marshal(&RR)
 	if err != nil {
 	if err != nil {
 		panic(err)
 		panic(err)
 	}
 	}
 
 
 	// 请求-响应, 向 test3 发布一个 `help me` 请求数据,设置超时间3秒,如果有多个响应,只接收第一个收到的消息
 	// 请求-响应, 向 test3 发布一个 `help me` 请求数据,设置超时间3秒,如果有多个响应,只接收第一个收到的消息
-	msg, err := Nats.Request("Qiniu_UploadFile", b, 3*time.Second)
+	msg, err := lib.Nats.Request("Qiniu_UploadFile", b, 3*time.Second)
 	if err != nil {
 	if err != nil {
 		fmt.Println(err)
 		fmt.Println(err)
 	} else {
 	} else {
 		fmt.Printf("Qiniu_UploadFile : %s\n", string(msg.Data))
 		fmt.Printf("Qiniu_UploadFile : %s\n", string(msg.Data))
-		return string(msg.Data),true
+		return string(msg.Data), true
 	}
 	}
 
 
-	return string(msg.Data),false
+	return string(msg.Data), false
 }
 }
-
-

+ 23 - 0
Nats/NatsServer/NatsWx.go

@@ -0,0 +1,23 @@
+package NatsServer
+
+import (
+	"Cold_Api/controllers/lib"
+	"Cold_Api/logs"
+	"fmt"
+	"time"
+)
+
+func Wx_GenerateQRCode(DeviceClass_id string) (string, bool) {
+	logs.Println(" => Nats", lib.FuncName(), DeviceClass_id)
+
+	// 请求-响应, 向 test3 发布一个 `help me` 请求数据,设置超时间3秒,如果有多个响应,只接收第一个收到的消息
+	msg, err := lib.Nats.Request("Wx_GenerateQR", []byte(DeviceClass_id), 3*time.Second)
+	if err != nil {
+		fmt.Println(err)
+	} else {
+		fmt.Printf("Wx_GenerateQR : %s\n", string(msg.Data))
+		return string(msg.Data), true
+	}
+
+	return string(msg.Data), false
+}

+ 0 - 23
Nats/NatsWx.go

@@ -1,23 +0,0 @@
-package Nats
-
-import (
-	"fmt"
-	"time"
-)
-
-func Wx_GenerateQRCode(DeviceClass_id string) (string,bool) {
-
-
-	// 请求-响应, 向 test3 发布一个 `help me` 请求数据,设置超时间3秒,如果有多个响应,只接收第一个收到的消息
-	msg, err := Nats.Request("Wx_GenerateQRCode", []byte(DeviceClass_id), 3*time.Second)
-	if err != nil {
-		fmt.Println(err)
-	} else {
-		fmt.Printf("Wx_GenerateQRCode : %s\n", string(msg.Data))
-		return string(msg.Data),true
-	}
-
-	return string(msg.Data),false
-}
-
-

+ 9 - 0
Z_Build.bat

@@ -0,0 +1,9 @@
+cd %~dp0
+set GOARCH=amd64
+set GOOS=linux
+set GOPATH=C:\Users\SIKED\go
+set GO111MODULE=auto
+
+
+go build -o Cold_Api6200 main.go
+go build -o Cold_Api6201 main.go

+ 6 - 3
conf/app.conf

@@ -1,11 +1,11 @@
 appname = Cold_Api
 appname = Cold_Api
-HTTPPort = 30332
+HTTPPort = 6200
 runmode = dev
 runmode = dev
 EnableDocs = true
 EnableDocs = true
 copyrequestbody = true
 copyrequestbody = true
 
 
 # Nats
 # Nats
-NatsServer_Url = "127.0.0.1:4222"
+NatsServer_Url = "192.168.192.63:4222"
 
 
 
 
 # Mysql
 # Mysql
@@ -18,7 +18,7 @@ MysqlServer_MaxOpenConnections = 200
 
 
 
 
 # Redis
 # Redis
-Redis_address = "localhost:6379"
+Redis_address = "192.168.192.63:6379"
 Redis_password = ""
 Redis_password = ""
 Redis_dbNum = "1"
 Redis_dbNum = "1"
 
 
@@ -28,3 +28,6 @@ Redis_dbNum = "1"
 Oss = "../../../static"
 Oss = "../../../static"
 Oss_file = "C:\\Users\\Administrator\\Pictures\\oss"
 Oss_file = "C:\\Users\\Administrator\\Pictures\\oss"
 
 
+# Panel
+Panel_url = "http://127.0.0.1:6204/Cold_Panel"
+

+ 1 - 4
conf/config.go

@@ -10,10 +10,8 @@ var NatsServer_Url, _ = beego.AppConfig.String("NatsServer_Url")
 var HTTPPort, _ = beego.AppConfig.String("HTTPPort")
 var HTTPPort, _ = beego.AppConfig.String("HTTPPort")
 var AppName, _ = beego.AppConfig.String("appname")
 var AppName, _ = beego.AppConfig.String("appname")
 
 
-
 var Page_size = 10
 var Page_size = 10
 
 
-
 // Mysql
 // Mysql
 var MysqlServer_UrlPort, _ = beego.AppConfig.String("MysqlServer_UrlPort")
 var MysqlServer_UrlPort, _ = beego.AppConfig.String("MysqlServer_UrlPort")
 var MysqlServer_Database, _ = beego.AppConfig.String("MysqlServer_Database")
 var MysqlServer_Database, _ = beego.AppConfig.String("MysqlServer_Database")
@@ -27,9 +25,8 @@ var Redis_address, _ = beego.AppConfig.String("Redis_address")
 var Redis_password, _ = beego.AppConfig.String("Redis_password")
 var Redis_password, _ = beego.AppConfig.String("Redis_password")
 var Redis_dbNum, _ = beego.AppConfig.String("Redis_dbNum")
 var Redis_dbNum, _ = beego.AppConfig.String("Redis_dbNum")
 
 
-
-
 // Qiniu
 // Qiniu
 var Oss, _ = beego.AppConfig.String("Oss")
 var Oss, _ = beego.AppConfig.String("Oss")
 var Oss_file, _ = beego.AppConfig.String("Oss_file")
 var Oss_file, _ = beego.AppConfig.String("Oss_file")
 
 
+var Panel_url, _ = beego.AppConfig.String("Panel_url")

+ 65 - 65
controllers/Data.go

@@ -1,6 +1,7 @@
 package controllers
 package controllers
 
 
 import (
 import (
+	"Cold_Api/Nats/NatsServer"
 	"Cold_Api/conf"
 	"Cold_Api/conf"
 	"Cold_Api/controllers/lib"
 	"Cold_Api/controllers/lib"
 	"Cold_Api/models/Admin"
 	"Cold_Api/models/Admin"
@@ -136,14 +137,13 @@ func (c *DataController) Device_Sensor() {
 	T_id, _ := c.GetInt("T_id")
 	T_id, _ := c.GetInt("T_id")
 	//c.Data["Class_List"] = Device.Read_Class_All_1()
 	//c.Data["Class_List"] = Device.Read_Class_All_1()
 
 
-	DeviceSensor_r,err := Device.Read_DeviceSensor_ByTsn_Tid(T_sn, T_id)
+	DeviceSensor_r, err := Device.Read_DeviceSensor_ByTsn_Tid(T_sn, T_id)
 	if err != nil {
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 201, Msg: "err!"}
 		c.Data["json"] = lib.JSONS{Code: 201, Msg: "err!"}
 		c.ServeJSON()
 		c.ServeJSON()
 		return
 		return
 	}
 	}
 
 
-
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Device.DeviceSensorToDeviceSensor_R(DeviceSensor_r)}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Device.DeviceSensorToDeviceSensor_R(DeviceSensor_r)}
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
@@ -372,19 +372,21 @@ func (c *DataController) Device_Sensor_Data_Excel() {
 	if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil {
 	if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil {
 		fmt.Println(err)
 		fmt.Println(err)
 	}
 	}
-	//
-	//if !lib.Pload_qiniu("ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx") {
-	//	c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
-	//	c.ServeJSON()
-	//	return
-	//}
+
+	// 上传 OSS
+	url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx")
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
+		c.ServeJSON()
+		return
+	}
 	//删除目录
 	//删除目录
 	err := os.Remove("ofile/" + timeStr + ".xlsx")
 	err := os.Remove("ofile/" + timeStr + ".xlsx")
 	if err != nil {
 	if err != nil {
 		fmt.Println(err)
 		fmt.Println(err)
 	}
 	}
 
 
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: "https://osscold.baozhida.cn/" + "ofile/" + timeStr + ".xlsx"}
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
 }
 }
@@ -446,8 +448,7 @@ func (c *DataController) Device_Sensor_Data_Excel_m() {
 		   }
 		   }
 		}`)
 		}`)
 
 
-
-	atime, _ := time.ParseDuration("-1m")  //  Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
+	atime, _ := time.ParseDuration("-1m") //  Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
 
 
 	// 循环写入数据
 	// 循环写入数据
 	for v_i, v := range DeviceSensor_data {
 	for v_i, v := range DeviceSensor_data {
@@ -473,18 +474,18 @@ func (c *DataController) Device_Sensor_Data_Excel_m() {
 			f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper)
 			f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper)
 		}
 		}
 
 
-		if(len(DeviceSensor_data) - 1 == v_i){
-			break;
+		if len(DeviceSensor_data)-1 == v_i {
+			break
 		}
 		}
 
 
-		cha_v := ((DeviceSensor_data[v_i + 1].T_t - v.T_t ) / 3)
-		println("cha_v:",cha_v)
+		cha_v := ((DeviceSensor_data[v_i+1].T_t - v.T_t) / 3)
+		//println("cha_v:",cha_v)
 
 
 		// -------
 		// -------
-		v.T_t = float32(lib.Decimal(float64(v.T_t+cha_v)))
-		println("v.T_t:",v.T_t)
+		v.T_t = float32(lib.Decimal(float64(v.T_t + cha_v)))
+		//println("v.T_t:",v.T_t)
 
 
-		fTime,_ := time.Parse("2006-1-2 15:04:05", v.T_time)
+		fTime, _ := time.Parse("2006-1-2 15:04:05", v.T_time)
 		fTime = fTime.Add(atime)
 		fTime = fTime.Add(atime)
 		v.T_time = fTime.Format("2006-1-2 15:04:05")
 		v.T_time = fTime.Format("2006-1-2 15:04:05")
 
 
@@ -510,10 +511,10 @@ func (c *DataController) Device_Sensor_Data_Excel_m() {
 		}
 		}
 
 
 		// -------
 		// -------
-		v.T_t = float32(lib.Decimal(float64(v.T_t+cha_v)))
-		println("v.T_t:",v.T_t)
+		v.T_t = float32(lib.Decimal(float64(v.T_t + cha_v)))
+		//println("v.T_t:",v.T_t)
 
 
-		fTime,_ = time.Parse("2006-1-2 15:04:05", v.T_time)
+		fTime, _ = time.Parse("2006-1-2 15:04:05", v.T_time)
 		fTime = fTime.Add(atime)
 		fTime = fTime.Add(atime)
 		v.T_time = fTime.Format("2006-1-2 15:04:05")
 		v.T_time = fTime.Format("2006-1-2 15:04:05")
 
 
@@ -539,10 +540,10 @@ func (c *DataController) Device_Sensor_Data_Excel_m() {
 		}
 		}
 
 
 		// -------
 		// -------
-		v.T_t = float32(lib.Decimal(float64(v.T_t+cha_v)))
-		println("v.T_t:",v.T_t)
+		v.T_t = float32(lib.Decimal(float64(v.T_t + cha_v)))
+		//println("v.T_t:",v.T_t)
 
 
-		fTime,_ = time.Parse("2006-1-2 15:04:05", v.T_time)
+		fTime, _ = time.Parse("2006-1-2 15:04:05", v.T_time)
 		fTime = fTime.Add(atime)
 		fTime = fTime.Add(atime)
 		v.T_time = fTime.Format("2006-1-2 15:04:05")
 		v.T_time = fTime.Format("2006-1-2 15:04:05")
 
 
@@ -598,17 +599,13 @@ func (c *DataController) Device_Sensor_Data_Excel_m() {
 		//}
 		//}
 
 
 		// -------
 		// -------
-		v.T_t = float32(lib.Decimal(float64(v.T_t+cha_v)))
-		println("v.T_t:",v.T_t)
+		v.T_t = float32(lib.Decimal(float64(v.T_t + cha_v)))
+		//println("v.T_t:",v.T_t)
 
 
-		fTime,_ = time.Parse("2006-1-2 15:04:05", v.T_time)
+		fTime, _ = time.Parse("2006-1-2 15:04:05", v.T_time)
 		fTime = fTime.Add(atime)
 		fTime = fTime.Add(atime)
 		v.T_time = fTime.Format("2006-1-2 15:04:05")
 		v.T_time = fTime.Format("2006-1-2 15:04:05")
 
 
-
-
-
-
 	}
 	}
 	timeStr := time.Now().Format("20060102150405")
 	timeStr := time.Now().Format("20060102150405")
 	// 保存文件
 	// 保存文件
@@ -616,18 +613,21 @@ func (c *DataController) Device_Sensor_Data_Excel_m() {
 		fmt.Println(err)
 		fmt.Println(err)
 	}
 	}
 
 
-	//if !lib.Pload_qiniu("ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx") {
-	//	c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
-	//	c.ServeJSON()
-	//	return
-	//}
+	// 上传 OSS
+	url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx")
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
+		c.ServeJSON()
+		return
+	}
+
 	//删除目录
 	//删除目录
 	err := os.Remove("ofile/" + timeStr + ".xlsx")
 	err := os.Remove("ofile/" + timeStr + ".xlsx")
 	if err != nil {
 	if err != nil {
 		fmt.Println(err)
 		fmt.Println(err)
 	}
 	}
 
 
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: "https://osscold.baozhida.cn/" + "ofile/" + timeStr + ".xlsx"}
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
 }
 }
@@ -1081,7 +1081,7 @@ func (c *DataController) Device_Sensor_Data_PDF() {
 		T_Tlu := fmt.Sprintf(" %.1f ~ %.1f ", v.T_Tlower, v.T_Tupper)
 		T_Tlu := fmt.Sprintf(" %.1f ~ %.1f ", v.T_Tlower, v.T_Tupper)
 		T_Rlu := fmt.Sprintf(" %.1f ~ %.1f ", v.T_RHlower, v.T_RHupper)
 		T_Rlu := fmt.Sprintf(" %.1f ~ %.1f ", v.T_RHlower, v.T_RHupper)
 		T_time := fmt.Sprintf("%s", v.T_time)
 		T_time := fmt.Sprintf("%s", v.T_time)
-		if (user_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
+		if user_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD") {
 			T_rh = "-"
 			T_rh = "-"
 			T_Rlu = "-"
 			T_Rlu = "-"
 		}
 		}
@@ -1107,18 +1107,20 @@ func (c *DataController) Device_Sensor_Data_PDF() {
 		return
 		return
 	}
 	}
 
 
-	//if !lib.Pload_qiniu(timeStr, timeStr) {
-	//	c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
-	//	c.ServeJSON()
-	//	return
-	//}
+	// 上传 OSS
+	url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/"+timeStr, timeStr)
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
+		c.ServeJSON()
+		return
+	}
 	//删除目录
 	//删除目录
 	err = os.Remove(timeStr)
 	err = os.Remove(timeStr)
 	if err != nil {
 	if err != nil {
 		fmt.Println(err)
 		fmt.Println(err)
 	}
 	}
 
 
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: "https://osscold.baozhida.cn/" + timeStr}
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
 
 
@@ -1145,37 +1147,35 @@ func (c *DataController) Raw() {
 		//strings.Contains(T_SQL, "DeviceSnOld")||
 		//strings.Contains(T_SQL, "DeviceSnOld")||
 		//strings.Contains(T_SQL, "DeviceTask")||
 		//strings.Contains(T_SQL, "DeviceTask")||
 		//strings.Contains(T_SQL, "DeviceWarning")||
 		//strings.Contains(T_SQL, "DeviceWarning")||
-		strings.Contains(T_SQL, "Logs")||
-		strings.Contains(T_SQL, "SqlLogs")||
-		strings.Contains(T_SQL, "Tokey")||
-		strings.Contains(T_SQL, "UserLogs")||
-		strings.Contains(T_SQL_, "show")||
-		strings.Contains(T_SQL_, "create")||
-		strings.Contains(T_SQL_, "drop")||
-		strings.Contains(T_SQL_, "desc")||
-		strings.Contains(T_SQL_, "alter")||
-		strings.Contains(T_SQL_, "insert")||
-		strings.Contains(T_SQL_, "update")||
-		strings.Contains(T_SQL_, "delete"){
-		System.Add_SqlLogs(admin_r.Admin_uuid,"Err:"+admin_r.Admin_user, T_SQL)
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "Err SQL!",Data: admin_r.Admin_name+" :你的行为 也被记录"}
+		strings.Contains(T_SQL, "Logs") ||
+		strings.Contains(T_SQL, "SqlLogs") ||
+		strings.Contains(T_SQL, "Tokey") ||
+		strings.Contains(T_SQL, "UserLogs") ||
+		strings.Contains(T_SQL_, "show") ||
+		strings.Contains(T_SQL_, "create") ||
+		strings.Contains(T_SQL_, "drop") ||
+		strings.Contains(T_SQL_, "desc") ||
+		strings.Contains(T_SQL_, "alter") ||
+		strings.Contains(T_SQL_, "insert") ||
+		strings.Contains(T_SQL_, "update") ||
+		strings.Contains(T_SQL_, "delete") {
+		System.Add_SqlLogs(admin_r.Admin_uuid, "Err:"+admin_r.Admin_user, T_SQL)
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "Err SQL!", Data: admin_r.Admin_name + " :你的行为 也被记录"}
 		c.ServeJSON()
 		c.ServeJSON()
 		return
 		return
 	}
 	}
 
 
 	if //!strings.Contains(T_SQL, "Z_DeviceData_") ||
 	if //!strings.Contains(T_SQL, "Z_DeviceData_") ||
-		!strings.Contains(T_SQL_, "select"){
-		System.Add_SqlLogs(admin_r.Admin_uuid,"Err:"+admin_r.Admin_user, T_SQL)
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "Err SQL!",Data: admin_r.Admin_name+" :你的行为 也被记录"}
+	!strings.Contains(T_SQL_, "select") {
+		System.Add_SqlLogs(admin_r.Admin_uuid, "Err:"+admin_r.Admin_user, T_SQL)
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "Err SQL!", Data: admin_r.Admin_name + " :你的行为 也被记录"}
 		c.ServeJSON()
 		c.ServeJSON()
 		return
 		return
 	}
 	}
 
 
-	System.Add_SqlLogs(admin_r.Admin_uuid,"ok", T_SQL)
-
-
+	System.Add_SqlLogs(admin_r.Admin_uuid, "ok", T_SQL)
 
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Device.Read_SqlRaw(T_SQL)}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Device.Read_SqlRaw(T_SQL)}
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
-}
+}

File diff suppressed because it is too large
+ 165 - 284
controllers/Device.go


+ 28 - 36
controllers/Login.go

@@ -1,6 +1,7 @@
 package controllers
 package controllers
 
 
 import (
 import (
+	"Cold_Api/conf"
 	"Cold_Api/controllers/lib"
 	"Cold_Api/controllers/lib"
 	"Cold_Api/models/Admin"
 	"Cold_Api/models/Admin"
 	"Cold_Api/models/System"
 	"Cold_Api/models/System"
@@ -13,44 +14,39 @@ type AdminController struct {
 	beego.Controller
 	beego.Controller
 }
 }
 
 
-
 func (c *AdminController) Login() {
 func (c *AdminController) Login() {
 	c.TplName = "login.html"
 	c.TplName = "login.html"
 
 
 }
 }
 
 
-
 func (c *AdminController) Login_verification() {
 func (c *AdminController) Login_verification() {
 	Admin_user := c.GetString("bzd_username")
 	Admin_user := c.GetString("bzd_username")
 	Admin_pass := c.GetString("bzd_password")
 	Admin_pass := c.GetString("bzd_password")
 
 
-	println("Login_verification",Admin_user, Admin_pass)
-	err,admin_r := Admin.ReadLogin_verification(Admin_user, Admin_pass)
+	println("Login_verification", Admin_user, Admin_pass)
+	err, admin_r := Admin.ReadLogin_verification(Admin_user, Admin_pass)
 
 
 	if err != nil {
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "E!"}
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "E!"}
 	} else {
 	} else {
-		User_tokey := Admin.Add_Tokey(admin_r.Admin_uuid)
+		User_tokey := Admin.Add_Tokey_Set(admin_r.Admin_uuid)
 		c.Ctx.SetCookie("User_tokey", User_tokey, time.Second*60*60)
 		c.Ctx.SetCookie("User_tokey", User_tokey, time.Second*60*60)
 		c.Data["json"] = lib.JSONS{Code: 200, Msg: "OK!", Data: User_tokey}
 		c.Data["json"] = lib.JSONS{Code: 200, Msg: "OK!", Data: User_tokey}
 
 
-		System.Add_UserLogs(admin_r.Admin_uuid,"登陆","用户登陆","")
+		System.Add_UserLogs(admin_r.Admin_uuid, "登陆", "用户登陆", "")
 
 
 	}
 	}
 
 
-
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
 
 
 }
 }
 
 
-
-
 func (c *AdminController) Index() {
 func (c *AdminController) Index() {
 	// 验证登录
 	// 验证登录
 
 
-	b_,admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"),c.GetString("User_tokey"))
-	if(!b_){
+	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !b_ {
 		c.Ctx.Redirect(302, "Login")
 		c.Ctx.Redirect(302, "Login")
 		return
 		return
 	}
 	}
@@ -58,22 +54,23 @@ func (c *AdminController) Index() {
 	// 基本信息
 	// 基本信息
 	c.Data["Admin_name"] = admin_r.Admin_name
 	c.Data["Admin_name"] = admin_r.Admin_name
 	c.Data["Admin_root"] = admin_r.Id
 	c.Data["Admin_root"] = admin_r.Id
-	if(admin_r.Admin_master == 0){
+	if admin_r.Admin_master == 0 {
 		c.Data["Admin_master"] = "管理员"
 		c.Data["Admin_master"] = "管理员"
-	}else if(admin_r.Admin_master == 1){
+	} else if admin_r.Admin_master == 1 {
 		c.Data["Admin_master"] = "企业"
 		c.Data["Admin_master"] = "企业"
-	}else {
-		Admin_m,_ := Admin.Read_Admin_ById(admin_r.Admin_master)
+	} else {
+		Admin_m, _ := Admin.Read_Admin_ById(admin_r.Admin_master)
 		c.Data["Admin_master"] = Admin_m.Admin_name
 		c.Data["Admin_master"] = Admin_m.Admin_name
 	}
 	}
 
 
-	c.Data["Admin_Power"],_ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
+	c.Data["Admin_Power"], _ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
 
 
 	// 消息
 	// 消息
 	AdminNews_list := System.Read_AdminNews_all_1(admin_r.Admin_uuid)
 	AdminNews_list := System.Read_AdminNews_all_1(admin_r.Admin_uuid)
 	c.Data["Now_list"] = AdminNews_list
 	c.Data["Now_list"] = AdminNews_list
 	c.Data["News"] = len(AdminNews_list)
 	c.Data["News"] = len(AdminNews_list)
 
 
+	c.Data["Panel_url"] = conf.Panel_url
 
 
 	c.TplName = "index.html"
 	c.TplName = "index.html"
 
 
@@ -81,8 +78,8 @@ func (c *AdminController) Index() {
 func (c *AdminController) Home() {
 func (c *AdminController) Home() {
 
 
 	// 验证登录
 	// 验证登录
-	b_,admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"),c.GetString("User_tokey"))
-	if(!b_){
+	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !b_ {
 		c.Ctx.Redirect(302, "Login")
 		c.Ctx.Redirect(302, "Login")
 		return
 		return
 	}
 	}
@@ -91,17 +88,17 @@ func (c *AdminController) Home() {
 	c.Data["Admin_name"] = admin_r.Admin_name
 	c.Data["Admin_name"] = admin_r.Admin_name
 	//c.Data["Admin_type_name"] = Admin.Read_AdminType_id(admin_r.Id).Type_name
 	//c.Data["Admin_type_name"] = Admin.Read_AdminType_id(admin_r.Id).Type_name
 
 
-	if(admin_r.Admin_master == 0){
+	if admin_r.Admin_master == 0 {
 		c.Data["Admin_master"] = "管理员"
 		c.Data["Admin_master"] = "管理员"
-	}else if(admin_r.Admin_master == 1){
+	} else if admin_r.Admin_master == 1 {
 		c.Data["Admin_master"] = "企业"
 		c.Data["Admin_master"] = "企业"
-	}else {
-		Admin_m,_ := Admin.Read_Admin_ById(admin_r.Admin_master)
+	} else {
+		Admin_m, _ := Admin.Read_Admin_ById(admin_r.Admin_master)
 		c.Data["Admin_master"] = Admin_m.Admin_name
 		c.Data["Admin_master"] = Admin_m.Admin_name
 	}
 	}
-	c.Data["Admin_Power"],_ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
-	if(admin_r.Admin_master <= 1){
-		FlowPoolSharingInfo,_ := lib.Yidong_group_data_margin()
+	c.Data["Admin_Power"], _ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
+	if admin_r.Admin_master <= 1 {
+		FlowPoolSharingInfo, _ := lib.Yidong_group_data_margin()
 
 
 		int64_, _ := strconv.ParseFloat(FlowPoolSharingInfo.RemainAmount, 32)
 		int64_, _ := strconv.ParseFloat(FlowPoolSharingInfo.RemainAmount, 32)
 		FlowPoolSharingInfo.RemainAmount = strconv.FormatFloat(int64_/1024, 'f', 2, 32)
 		FlowPoolSharingInfo.RemainAmount = strconv.FormatFloat(int64_/1024, 'f', 2, 32)
@@ -112,28 +109,23 @@ func (c *AdminController) Home() {
 		int64_, _ = strconv.ParseFloat(FlowPoolSharingInfo.TotalAmount, 32)
 		int64_, _ = strconv.ParseFloat(FlowPoolSharingInfo.TotalAmount, 32)
 		FlowPoolSharingInfo.TotalAmount = strconv.FormatFloat(int64_/1024, 'f', 2, 32)
 		FlowPoolSharingInfo.TotalAmount = strconv.FormatFloat(int64_/1024, 'f', 2, 32)
 
 
-
 		c.Data["FlowPoolSharingInfo"] = FlowPoolSharingInfo
 		c.Data["FlowPoolSharingInfo"] = FlowPoolSharingInfo
 	}
 	}
 
 
-
-
-
-
 	c.TplName = "home.html"
 	c.TplName = "home.html"
 
 
 }
 }
 func (c *AdminController) Nows_rend() {
 func (c *AdminController) Nows_rend() {
 
 
 	// 验证登录
 	// 验证登录
-	b_,_ := lib.Verification(c.Ctx.GetCookie("User_tokey"),c.GetString("User_tokey"))
-	if(!b_){
+	b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !b_ {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "no"}
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "no"}
 		c.ServeJSON()
 		c.ServeJSON()
 		return
 		return
 	}
 	}
 
 
-	Id,_ := c.GetInt("Id")
+	Id, _ := c.GetInt("Id")
 	System.Update_AdminNews_News_Tag_2(Id)
 	System.Update_AdminNews_News_Tag_2(Id)
 
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok"}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok"}
@@ -144,14 +136,14 @@ func (c *AdminController) Nows_rend() {
 func (c *AdminController) Info() {
 func (c *AdminController) Info() {
 
 
 	// 验证登录
 	// 验证登录
-	b_,user_r := lib.Verification(c.Ctx.GetCookie("User_tokey"),c.GetString("User_tokey"))
-	if(!b_){
+	b_, user_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !b_ {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "no"}
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "no"}
 		c.ServeJSON()
 		c.ServeJSON()
 		return
 		return
 	}
 	}
 
 
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok",Data: Admin.Admin_To_Admin_R(user_r)}
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok", Data: Admin.Admin_To_Admin_R(user_r)}
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
 }
 }

+ 0 - 845
controllers/Panel.go

@@ -1,845 +0,0 @@
-package controllers
-
-import (
-	"Cold_Api/conf"
-	"Cold_Api/controllers/lib"
-	"Cold_Api/models/Admin"
-	"Cold_Api/models/Panel"
-	beego "github.com/beego/beego/v2/server/web"
-	uuid "github.com/satori/go.uuid"
-	"math"
-	"strconv"
-	"strings"
-	"time"
-)
-
-type PanelController struct {
-	beego.Controller
-}
-
-// 列表 -
-func (c *PanelController) Index_Html_plan() {
-	// 验证登录 User_r, User_x
-	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Ctx.Redirect(302, "Login")
-		return
-	}
-
-	c.Data["E"] = false // {{if .E}} {{end}}  not
-	c.Data["admin_r"] = admin_r
-	c.Data["OSS_Static"] = conf.Oss
-	T_viewid := c.GetString("T_viewid")
-
-	// 有参数
-	if len(T_viewid) > 0 {
-		PaneView,is := Panel.Read_PaneView_ByT_viewid(T_viewid)
-		if is{
-			c.Data["T_viewid"] = PaneView.T_viewid
-			c.TplName = "Panel/Index_plan.html"
-			return
-		}
-	}
-
-	// 获取当期用户
-	if len(admin_r.Admin_panel_plan) == 0 {
-		viewid := strconv.FormatInt(time.Now().Unix(), 10) + strings.Replace(uuid.NewV4().String(), "-", "", -1)
-		var_v := Panel.PaneView{
-			T_viewid: viewid,
-			T_width:  1920,
-			T_height:   1080,
-			T_mode: 0,
-			T_css:   "",
-			T_text:   "",
-			T_data:   "",
-		}
-		if _, is := Panel.Add_PaneView(var_v); !is {
-			c.Data["json"] = lib.JSONS{Code: 201, Msg: "添加失败!"}
-			c.ServeJSON()
-			return
-		}
-		admin_r.Admin_panel_plan = viewid
-		Admin.Update_Admin(admin_r,"Admin_panel_plan")
-
-		c.Data["T_viewid"] = viewid
-		c.TplName = "Panel/Index_plan.html"
-		return
-	}
-
-
-	c.Data["T_viewid"] = admin_r.Admin_panel_plan
-	c.TplName = "Panel/Index_plan.html"
-	return
-}
-
-//// 列表 -
-//func (c *PanelController) Index_Class_Html() {
-//
-//	c.Data["OSS_Static"] = lib.Get_Oss()
-//	c.TplName = "Panel/IndexClass.html"
-//}
-
-
-//----------- 保存为面板
-func (c *PanelController) Layer_Mould_Save() {
-	// 验证登录 User_r, User_x
-	//b_, _, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	//if !b_ {
-	//	c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
-	//	c.ServeJSON()
-	//	return
-	//}
-
-	layer_name := c.GetString("layer_name")
-	layer_img := c.GetString("layer_img")
-	layer_json := c.GetString("layer_json")
-
-	PanelLayerMould_r := Panel.PanelLayerMould{
-		T_class: 0,
-		T_name:  layer_name,
-		T_img:   layer_img,
-		T_text:  layer_json,
-	}
-	Panel.Add_PanelLayerMould(PanelLayerMould_r)
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-	c.ServeJSON()
-	return
-}
-
-//----------- 列表
-func (c *PanelController) Layer_Mould_List() {
-	// 验证登录 User_r, User_x
-	//b_, _, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	//if !b_ {
-	//	c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
-	//	c.ServeJSON()
-	//	return
-	//}
-
-	var r_jsons lib.R_JSONS
-	page, _ := c.GetInt("page")
-	if page < 1 {
-		page = 1
-	}
-	page_z, _ := c.GetInt("page_z")
-	if page_z < 1 {
-		page_z = conf.Page_size
-	}
-
-	var cnt int64
-	List, cnt := Panel.Read_PanelLayerMould_1("",page, page_z)
-	page_size := math.Ceil(float64(cnt) / float64(page_z))
-	r_jsons.List = List
-	r_jsons.Page = int(page)
-	r_jsons.Page_size = int(page_size)
-	r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
-	r_jsons.Num = int(cnt)
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
-	c.ServeJSON()
-	return
-}
-
-func (c *PanelController) PaneView_Post() {
-	// 验证登录 User_r, User_x
-
-
-	T_viewid := c.GetString("T_viewid")
-	T_text := c.GetString("T_text")
-	T_mode,_ := c.GetInt("T_mode")
-	T_width,_ := c.GetInt("T_width")
-	T_height,_ := c.GetInt("T_height")
-	T_css := c.GetString("T_css")
-	T_data := c.GetString("T_data")
-
-	// 初始化 高度 宽度
-	//if(T_width == 0){
-	//	T_width = 4096
-	//}
-	//if(T_height == 0){
-	//	T_height = 2160
-	//}
-
-	var_ := Panel.PaneView{
-		T_viewid: T_viewid,
-		T_mode:  T_mode,
-		T_width:  T_width,
-		T_height:   T_height,
-		T_css:   T_css,
-		T_text:   T_text,
-		T_data:   T_data,
-	}
-
-	if len(T_viewid) > 0 {
-		PaneView_r, is := Panel.Read_PaneView_ByT_name(T_viewid)
-		if !is {
-			c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_viewid 错误!"}
-			c.ServeJSON()
-			return
-		}
-		PaneView_r.T_text = T_text
-		PaneView_r.T_css = T_css
-		PaneView_r.T_mode = T_mode
-		PaneView_r.T_height = T_height
-		PaneView_r.T_width = T_width
-		PaneView_r.T_data = T_data
-
-		if !Panel.Update_PaneView(PaneView_r) {
-			c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
-			c.ServeJSON()
-			return
-		}
-	} else {
-		var is bool
-		viewid := strconv.FormatInt(time.Now().Unix(), 10) + strings.Replace(uuid.NewV4().String(), "-", "", -1)
-
-		var_.T_viewid = viewid
-		var_.T_mode = 0
-		if _, is = Panel.Add_PaneView(var_); !is {
-			c.Data["json"] = lib.JSONS{Code: 201, Msg: "添加失败!"}
-			c.ServeJSON()
-			return
-		}
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: var_.T_viewid}
-	c.ServeJSON()
-	return
-
-}
-//
-//// 列表 -
-//func (c *PanelController) PaneView_Get_htmlV() {
-//	// 验证登录 User_r, User_x
-//	b_, User_r, User_x := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-//	if !b_ {
-//		c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
-//		c.ServeJSON()
-//		return
-//	}
-//	c.Data["E"] = false // {{if .E}} {{end}}  not
-//	c.Data["User_r"] = User_r
-//	c.Data["User_x"] = User_x
-//
-//	T_viewid := c.GetString("T_viewid")
-//
-//	c.Data["T_viewid"] = T_viewid
-//	c.Data["OSS_Static"] = lib.Get_Oss()
-//	c.TplName = "Panel/Index.html"
-//}
-//
-//
-//
-//// 列表 -
-func (c *PanelController) PaneView_Get_htmlE() {
-
-	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
-		c.ServeJSON()
-		return
-	}
-	c.Data["E"] = true // {{if .E}} {{end}}  not
-
-	T_viewid := c.GetString("T_viewid")
-	ToUrl := c.GetString("ToUrl")
-
-	c.Data["T_viewid"] = T_viewid
-	c.Data["ToUrl"] = ToUrl
-	c.Data["USER_UUID"] = admin_r.Admin_uuid
-
-
-	c.Data["OSS_Static"] = conf.Oss
-	c.TplName = "Panel/PanelE.html"
-}
-//
-//
-//// 列表 -
-func (c *PanelController) PaneView_Get() {
-	// 验证登录 User_r, User_x
-	//b_, User_r, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	//if !b_ {
-	//	c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
-	//	c.ServeJSON()
-	//	return
-	//}
-
-	T_viewid := c.GetString("T_viewid")
-
-	PaneView_r, is := Panel.Read_PaneView_ByT_name(T_viewid)
-	if !is {
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_viewid 错误!"}
-		c.ServeJSON()
-		return
-	}
-
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: PaneView_r}
-	c.ServeJSON()
-	return
-
-}
-
-//
-//
-//// 列表 -
-//func (c *PanelController) PaneView_Class_Get_htmlV() {
-//	// 验证登录 User_r, User_x
-//	b_, User_r, User_x := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-//	if !b_ {
-//		c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
-//		c.ServeJSON()
-//		return
-//	}
-//	c.Data["E"] = false // {{if .E}} {{end}}  not
-//	c.Data["User_r"] = User_r
-//	c.Data["User_x"] = User_x
-//
-//	T_viewid := c.GetString("T_viewid")
-//	T_ClassHome_id,_ := c.GetInt("T_ClassHome_id")
-//	T_ClassFloor_id,_ := c.GetInt("T_ClassFloor_id")
-//
-//
-//	T_ClassHome_ClassFloor_ALL := Class.Read_ClassHome_ClassFloor_ALL_1(User_r.T_uuid)
-//	// 选择第一个
-//	if(len(T_viewid) == 0 || T_ClassHome_id == 0 || T_ClassFloor_id == 0){
-//		T_viewid = T_ClassHome_ClassFloor_ALL[0].T_ClassFloor_List[0].T_viewid
-//		T_ClassHome_id = T_ClassHome_ClassFloor_ALL[0].Id
-//		T_ClassFloor_id = T_ClassHome_ClassFloor_ALL[0].T_ClassFloor_List[0].Id
-//	}
-//	c.Data["T_viewid"] = T_viewid
-//	c.Data["T_ClassHome_id"] = T_ClassHome_id
-//	c.Data["T_ClassFloor_id"] = T_ClassFloor_id
-//	c.Data["T_ClassHome_ClassFloor_ALL"] = T_ClassHome_ClassFloor_ALL
-//
-//	c.Data["OSS_Static"] = lib.Get_Oss()
-//	c.TplName = "Panel/IndexClass.html"
-//}
-//
-//
-//
-//
-//
-//
-//
-//////----------------------------------------------------------
-//// 列表 -
-func (c *PanelController) PanelLayerMould_List() {
-	// 验证登录 User_r, User_x
-	//b_, _, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	//if !b_ {
-	//	c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
-	//	c.ServeJSON()
-	//	return
-	//}
-
-	var r_jsons lib.R_JSONS
-	page, _ := c.GetInt("page")
-	if page < 1 {
-		page = 1
-	}
-	page_z, _ := c.GetInt("page_z")
-	if page_z < 1 {
-		page_z = conf.Page_size
-	}
-	T_name  := c.GetString("T_name")
-	var cnt int64
-	List, cnt := Panel.Read_PanelLayerMould_1(T_name,page, page_z)
-	page_size := math.Ceil(float64(cnt) / float64(page_z))
-	r_jsons.List = List
-	r_jsons.Page = int(page)
-	r_jsons.Page_size = int(page_size)
-	r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
-	r_jsons.Num = int(cnt)
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
-	c.ServeJSON()
-	return
-}
-
-func (c *PanelController) PanelLayerMould_Get() {
-	// 验证登录 User_r, User_x
-	//b_, _, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	//if !b_ {
-	//	c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
-	//	c.ServeJSON()
-	//	return
-	//}
-
-	Id, _ := c.GetInt("Id")
-
-	r, is := Panel.Read_PanelLayerMould_ById(Id)
-	if !is {
-		c.Data["json"] = lib.JSONS{Code: 204, Msg: "Id 错误!"}
-		c.ServeJSON()
-		return
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r}
-	c.ServeJSON()
-	return
-}
-
-func (c *PanelController) PanelLayerMould_Post() {
-	// 验证登录 User_r, User_x
-	//b_, User_r, User_x := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	//if !b_ {
-	//	c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
-	//	c.ServeJSON()
-	//	return
-	//}
-
-	Id, _ := c.GetInt("Id")
-	T_class,_ := c.GetInt("T_class")
-	T_name  := c.GetString("T_name")
-	T_img   := c.GetString("T_img")
-	T_text  := c.GetString("T_text")
-
-	var_ := Panel.PanelLayerMould{
-		T_class: T_class,
-		T_name : T_name ,
-		T_img  : T_img  ,
-		T_text : T_text ,
-	}
-
-	if Id > 0 {
-		var_.Id = int(Id)
-		if !Panel.Update_PanelLayerMould_ById(var_) {
-			c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
-			c.ServeJSON()
-			return
-		}
-	} else {
-		if _, is := Panel.Add_PanelLayerMould(var_); !is {
-			c.Data["json"] = lib.JSONS{Code: 201, Msg: "添加失败!"}
-			c.ServeJSON()
-			return
-		}
-
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-	c.ServeJSON()
-	return
-
-}
-func (c *PanelController) PanelLayerMould_Del() {
-	// 验证登录 User_r, User_x
-	//b_, User_r, User_x := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	//if !b_ {
-	//	c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
-	//	c.ServeJSON()
-	//	return
-	//}
-
-	Id, _ := c.GetInt("Id")
-	if Id > 0 {
-		if r, is := Panel.Read_PanelLayerMould_ById(Id); is {
-			if Panel.Delete_PanelLayerMould_ById(r) {
-				c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-				c.ServeJSON()
-				return
-			}
-		}
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
-	c.ServeJSON()
-	return
-}
-
-////------------------------------------------------------------
-//
-//
-////----------- 工具菜单
-func (c *PanelController) PanelTool_List() {
-	// 验证登录 User_r, User_x
-	//b_, _, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	//if !b_ {
-	//	c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
-	//	c.ServeJSON()
-	//	return
-	//}
-
-	var r_jsons lib.R_JSONS
-	page, _ := c.GetInt("page")
-	if page < 1 {
-		page = 1
-	}
-	page_z, _ := c.GetInt("page_z")
-	if page_z < 1 {
-		page_z = conf.Page_size
-	}
-	T_name   := c.GetString("T_name")
-	var cnt int64
-	List, cnt := Panel.Read_PanelTool_1(T_name,page, page_z)
-	page_size := math.Ceil(float64(cnt) / float64(page_z))
-	r_jsons.List = List
-	r_jsons.Page = int(page)
-	r_jsons.Page_size = int(page_size)
-	r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
-	r_jsons.Num = int(cnt)
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
-	c.ServeJSON()
-	return
-}
-
-func (c *PanelController) PanelTool_Get() {
-	// 验证登录 User_r, User_x
-	//b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	//if !b_ {
-	//	c.Ctx.Redirect(302, "Login")
-	//	return
-	//}
-
-	Id, _ := c.GetInt("Id")
-
-	r, is := Panel.Read_PanelTool_ById(Id)
-	if !is {
-		c.Data["json"] = lib.JSONS{Code: 204, Msg: "Id 错误!"}
-		c.ServeJSON()
-		return
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r}
-	c.ServeJSON()
-	return
-}
-
-func (c *PanelController) PanelTool_Post() {
-	// 验证登录 User_r, User_x
-	//b_, User_r, User_x := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	//if !b_ {
-	//	c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
-	//	c.ServeJSON()
-	//	return
-	//}
-
-	Id, _ := c.GetInt("Id")
-	T_class ,_ := c.GetInt( "T_class")
-	T_name   := c.GetString("T_name")
-	T_img    := c.GetString("T_img")
-	T_width ,_ := c.GetInt("T_width")
-	T_height ,_ := c.GetInt("T_height")
-	T_color := c.GetString("T_color")
-	T_text   := c.GetString("T_text")
-
-	var_ := Panel.PanelTool{
-		T_class: T_class,
-		T_name : T_name ,
-		T_img  : T_img  ,
-		T_text : T_text ,
-		T_width : T_width ,
-		T_height : T_height ,
-		T_color : T_color ,
-	}
-
-	if Id > 0 {
-		var_.Id = int(Id)
-		if !Panel.Update_PanelTool_ById(var_) {
-			c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
-			c.ServeJSON()
-			return
-		}
-	} else {
-
-		if(len(var_.T_color) < 3){
-			var_.T_color = "transparent"
-		}
-		if _, is := Panel.Add_PanelTool(var_); !is {
-			c.Data["json"] = lib.JSONS{Code: 201, Msg: "添加失败!"}
-			c.ServeJSON()
-			return
-		}
-
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-	c.ServeJSON()
-	return
-
-}
-func (c *PanelController) PanelTool_Del() {
-	// 验证登录 User_r, User_x
-	//b_, User_r, User_x := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	//if !b_ {
-	//	c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
-	//	c.ServeJSON()
-	//	return
-	//}
-
-	Id, _ := c.GetInt("Id")
-	if Id > 0 {
-		if r, is := Panel.Read_PanelTool_ById(Id); is {
-			if Panel.Delete_PanelTool_ById(r) {
-				c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-				c.ServeJSON()
-				return
-			}
-		}
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
-	c.ServeJSON()
-	return
-}
-
-
-
-//----------- 配置图片
-// 列表 -
-func (c *PanelController) ConfigImg_List() {
-	// 验证登录 User_r, User_x
-	//b_, _, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	//if !b_ {
-	//	c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
-	//	c.ServeJSON()
-	//	return
-	//}
-
-	var r_jsons lib.R_JSONS
-	page, _ := c.GetInt("page")
-	if page < 1 {
-		page = 1
-	}
-	page_z, _ := c.GetInt("page_z")
-	if page_z < 1 {
-		page_z = conf.Page_size
-	}
-
-	var cnt int64
-	List, cnt := Panel.Read_ConfigImg_1(page, page_z)
-	page_size := math.Ceil(float64(cnt) / float64(page_z))
-	r_jsons.List = List
-	r_jsons.Page = int(page)
-	r_jsons.Page_size = int(page_size)
-	r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
-	r_jsons.Num = int(cnt)
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
-	c.ServeJSON()
-	return
-}
-
-func (c *PanelController) ConfigImg_Get() {
-	// 验证登录 User_r, User_x
-
-	Id, _ := c.GetInt("Id")
-
-	r, is := Panel.Read_ConfigImg_ById(Id)
-	if !is {
-		c.Data["json"] = lib.JSONS{Code: 204, Msg: "Id 错误!"}
-		c.ServeJSON()
-		return
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r}
-	c.ServeJSON()
-	return
-}
-
-func (c *PanelController) ConfigImg_Post() {
-	// 验证登录 User_r, User_x
-	//b_, User_r, User_x := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	//if !b_ {
-	//	c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
-	//	c.ServeJSON()
-	//	return
-	//}
-
-	Id, _ := c.GetInt("Id")
-	T_img0 := c.GetString("T_img0")
-	T_img1 := c.GetString("T_img1")
-	T_img2 := c.GetString("T_img2")
-	T_img3 := c.GetString("T_img3")
-	T_img4 := c.GetString("T_img4")
-	T_img5 := c.GetString("T_img5")
-	T_str0 := c.GetString("T_str0")
-	T_str1 := c.GetString("T_str1")
-	T_str2 := c.GetString("T_str2")
-	T_str3 := c.GetString("T_str3")
-	T_str4 := c.GetString("T_str4")
-	T_str5 := c.GetString("T_str5")
-
-	var_ := Panel.ConfigImg{
-		T_img0: T_img0,
-		T_img1: T_img1,
-		T_img2: T_img2,
-		T_img3: T_img3,
-		T_img4: T_img4,
-		T_img5: T_img5,
-		T_str0: T_str0,
-		T_str1: T_str1,
-		T_str2: T_str2,
-		T_str3: T_str3,
-		T_str4: T_str4,
-		T_str5: T_str5,
-	}
-
-	if Id > 0 {
-		var_.Id = int(Id)
-		if !Panel.Update_ConfigImg_ById(var_) {
-			c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
-			c.ServeJSON()
-			return
-		}
-	} else {
-		if _, is := Panel.Add_ConfigImg(var_); !is {
-			c.Data["json"] = lib.JSONS{Code: 201, Msg: "添加失败!"}
-			c.ServeJSON()
-			return
-		}
-
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-	c.ServeJSON()
-	return
-
-}
-func (c *PanelController) ConfigImg_Del() {
-	// 验证登录 User_r, User_x
-	//b_, User_r, User_x := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	//if !b_ {
-	//	c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
-	//	c.ServeJSON()
-	//	return
-	//}
-
-	Id, _ := c.GetInt("Id")
-	if Id > 0 {
-		if r, is := Panel.Read_ConfigImg_ById(Id); is {
-			if Panel.Delete_ConfigImg_ById(r) {
-				c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-				c.ServeJSON()
-				return
-			}
-		}
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
-	c.ServeJSON()
-	return
-}
-
-//----------- 配置图片
-// 列表 -
-func (c *PanelController) ConfiglibImg_List() {
-	// 验证登录 User_r, User_x
-	//b_, _, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	//if !b_ {
-	//	c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
-	//	c.ServeJSON()
-	//	return
-	//}
-
-	var r_jsons lib.R_JSONS
-	page, _ := c.GetInt("page")
-	if page < 1 {
-		page = 1
-	}
-	page_z, _ := c.GetInt("page_z")
-	if page_z < 1 {
-		page_z = conf.Page_size
-	}
-	T_str0 := c.GetString("T_str0")
-
-	var cnt int64
-	List, cnt := Panel.Read_ConfiglibImg_1(T_str0,page, page_z)
-	page_size := math.Ceil(float64(cnt) / float64(page_z))
-	r_jsons.List = List
-	r_jsons.Page = int(page)
-	r_jsons.Page_size = int(page_size)
-	r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
-	r_jsons.Num = int(cnt)
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
-	c.ServeJSON()
-	return
-}
-
-func (c *PanelController) ConfiglibImg_Get() {
-
-
-	Id, _ := c.GetInt("Id")
-
-	r, is := Panel.Read_ConfiglibImg_ById(Id)
-	if !is {
-		c.Data["json"] = lib.JSONS{Code: 204, Msg: "Id 错误!"}
-		c.ServeJSON()
-		return
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r}
-	c.ServeJSON()
-	return
-}
-
-func (c *PanelController) ConfiglibImg_Post() {
-	// 验证登录 User_r, User_x
-	//b_, User_r, User_x := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	//if !b_ {
-	//	c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
-	//	c.ServeJSON()
-	//	return
-	//}
-
-	Id, _ := c.GetInt("Id")
-	T_img0 := c.GetString("T_img0")
-	T_str0 := c.GetString("T_str0")
-
-	var_ := Panel.ConfiglibImg{
-		T_img0: T_img0,
-		T_str0: T_str0,
-	}
-
-	if Id > 0 {
-		var_.Id = int(Id)
-		if !Panel.Update_ConfiglibImg_ById(var_) {
-			c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
-			c.ServeJSON()
-			return
-		}
-	} else {
-		if _, is := Panel.Add_ConfiglibImg(var_); !is {
-			c.Data["json"] = lib.JSONS{Code: 201, Msg: "添加失败!"}
-			c.ServeJSON()
-			return
-		}
-
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-	c.ServeJSON()
-	return
-
-}
-func (c *PanelController) ConfiglibImg_Del() {
-	// 验证登录 User_r, User_x
-	//b_, User_r, User_x := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	//if !b_ {
-	//	c.Data["json"] = lib.JSONS{Code: 302, Msg: "请重新登录!"}
-	//	c.ServeJSON()
-	//	return
-	//}
-
-	Id, _ := c.GetInt("Id")
-	if Id > 0 {
-		if r, is := Panel.Read_ConfiglibImg_ById(Id); is {
-			if Panel.Delete_ConfiglibImg_ById(r) {
-				c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-				c.ServeJSON()
-				return
-			}
-		}
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
-	c.ServeJSON()
-	return
-}
-

+ 52 - 34
controllers/User.go

@@ -56,6 +56,20 @@ func (c *UserController) Admin_html() {
 	c.TplName = "User/Admin.html"
 	c.TplName = "User/Admin.html"
 }
 }
 
 
+// 检查 Tokey 是否过期
+func (c *UserController) InspectTokey() {
+	// 验证登录
+	b_ := lib.Verification_Tokey(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !b_ {
+		c.Data["json"] = lib.JSONS{Code: 301, Msg: "请退出重新登录!"}
+		c.ServeJSON()
+		return
+	}
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}
+
 func (c *UserController) Admin_() {
 func (c *UserController) Admin_() {
 	// 验证登录
 	// 验证登录
 	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
@@ -108,18 +122,18 @@ func (c *UserController) Admin_Post() {
 	Admin_gender, _ := c.GetInt("Admin_gender")
 	Admin_gender, _ := c.GetInt("Admin_gender")
 	Admin_power, _ := c.GetInt("Admin_power")
 	Admin_power, _ := c.GetInt("Admin_power")
 	var_ := Admin.Admin{
 	var_ := Admin.Admin{
-		Admin_uuid:      uuid.NewV4().String(),
-		Admin_name:      Admin_name,
-		Admin_master:    admin_r.Admin_master,
-		Admin_user:      Admin_user,
-		Admin_telephone: Admin_telephone,
-		Admin_mail:      Admin_mail,
-		Admin_text:      Admin_text,
-		Admin_gender:    Admin_gender,
-		Admin_power:     Admin_power,
-		Admin_panel_plan:     "",
-		Admin_panel_data:     "",
-		T_State:         1,
+		Admin_uuid:       uuid.NewV4().String(),
+		Admin_name:       Admin_name,
+		Admin_master:     admin_r.Admin_master,
+		Admin_user:       Admin_user,
+		Admin_telephone:  Admin_telephone,
+		Admin_mail:       Admin_mail,
+		Admin_text:       Admin_text,
+		Admin_gender:     Admin_gender,
+		Admin_power:      Admin_power,
+		Admin_panel_plan: "",
+		Admin_panel_data: "",
+		T_State:          1,
 	}
 	}
 
 
 	if len(Admin_uuid) > 0 {
 	if len(Admin_uuid) > 0 {
@@ -154,13 +168,13 @@ func (c *UserController) Admin_Post() {
 			return
 			return
 		}
 		}
 		var_.Admin_pass = "***********"
 		var_.Admin_pass = "***********"
-		System.Add_UserLogs_T(admin_r.Admin_uuid,"管理员", "管理员操作", var_)
+		System.Add_UserLogs_T(admin_r.Admin_uuid, "管理员", "管理员操作", var_)
 		c.Data["json"] = lib.JSONS{Code: 210, Msg: "ok!", Data: s_pass}
 		c.Data["json"] = lib.JSONS{Code: 210, Msg: "ok!", Data: s_pass}
 		c.ServeJSON()
 		c.ServeJSON()
 		return
 		return
 	}
 	}
 	var_.Admin_pass = "***********"
 	var_.Admin_pass = "***********"
-	System.Add_UserLogs_T(admin_r.Admin_uuid,"管理员", "管理员操作", var_)
+	System.Add_UserLogs_T(admin_r.Admin_uuid, "管理员", "管理员操作", var_)
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
@@ -194,13 +208,15 @@ func (c *UserController) Admin_Del() {
 			c.ServeJSON()
 			c.ServeJSON()
 			return
 			return
 		}
 		}
-		Admin.Update_Delete_Admin_ByAdmin_uuid(Admin_uuid)
+		admin_r_lod.T_State = 0
+		Admin.Update_Admin(admin_r_lod, "T_State")
+		//Admin.Update_Delete_Admin_ByAdmin_uuid(Admin_uuid)
 	} else {
 	} else {
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "e!"}
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "e!"}
 		c.ServeJSON()
 		c.ServeJSON()
 		return
 		return
 	}
 	}
-	System.Add_UserLogs(admin_r.Admin_uuid,"管理员", "管理员删除", Admin_uuid)
+	System.Add_UserLogs(admin_r.Admin_uuid, "管理员", "管理员删除", Admin_uuid)
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
@@ -233,7 +249,7 @@ func (c *UserController) User_Entry() {
 			return
 			return
 		}
 		}
 
 
-		User_tokey := Admin.Add_Tokey(admin_r_a.Admin_uuid)
+		User_tokey := Admin.Add_Tokey_Set(admin_r_a.Admin_uuid)
 		c.Ctx.SetCookie("User_tokey", User_tokey, time.Second*60*60)
 		c.Ctx.SetCookie("User_tokey", User_tokey, time.Second*60*60)
 
 
 	} else {
 	} else {
@@ -241,7 +257,7 @@ func (c *UserController) User_Entry() {
 		c.ServeJSON()
 		c.ServeJSON()
 		return
 		return
 	}
 	}
-	System.Add_UserLogs(admin_r.Admin_uuid,"用户管理", "无钥匙进入", Admin_uuid)
+	System.Add_UserLogs(admin_r.Admin_uuid, "用户管理", "无钥匙进入", Admin_uuid)
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
@@ -336,14 +352,14 @@ func (c *UserController) User_Get() {
 		return
 		return
 	}
 	}
 	type Admin_ struct {
 	type Admin_ struct {
-		Admin_uuid   string
-		Admin_power  int // 权限
-		Admin_name   string //
-		Admin_telephone string  // 电话
-		Admin_mail      string  //  邮箱
-		Admin_gender    int     // 性别  0未知   1男   2女
-		Admin_text      string  // 详情
-		Admin_rh int // 显示湿度
+		Admin_uuid      string
+		Admin_power     int    // 权限
+		Admin_name      string //
+		Admin_telephone string // 电话
+		Admin_mail      string //  邮箱
+		Admin_gender    int    // 性别  0未知   1男   2女
+		Admin_text      string // 详情
+		Admin_rh        int    // 显示湿度
 
 
 	}
 	}
 
 
@@ -460,13 +476,13 @@ func (c *UserController) User_Post() {
 			return
 			return
 		}
 		}
 		var_.Admin_pass = "****************"
 		var_.Admin_pass = "****************"
-		System.Add_UserLogs_T(admin_r.Admin_uuid,"用户管理", "操作", var_)
+		System.Add_UserLogs_T(admin_r.Admin_uuid, "用户管理", "操作", var_)
 		c.Data["json"] = lib.JSONS{Code: 210, Msg: "ok!", Data: s_pass}
 		c.Data["json"] = lib.JSONS{Code: 210, Msg: "ok!", Data: s_pass}
 		c.ServeJSON()
 		c.ServeJSON()
 		return
 		return
 	}
 	}
 	var_.Admin_pass = "****************"
 	var_.Admin_pass = "****************"
-	System.Add_UserLogs_T(admin_r.Admin_uuid,"用户管理", "操作", var_)
+	System.Add_UserLogs_T(admin_r.Admin_uuid, "用户管理", "操作", var_)
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
@@ -492,13 +508,15 @@ func (c *UserController) User_Del() {
 			c.ServeJSON()
 			c.ServeJSON()
 			return
 			return
 		}
 		}
-		Admin.Update_Delete_Admin_ByAdmin_uuid(Admin_uuid)
+		admin_r_lod.T_State = 0
+		Admin.Update_Admin(admin_r_lod, "T_State")
+		//Admin.Update_Delete_Admin_ByAdmin_uuid(Admin_uuid)
 	} else {
 	} else {
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "e!"}
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "e!"}
 		c.ServeJSON()
 		c.ServeJSON()
 		return
 		return
 	}
 	}
-	System.Add_UserLogs_T(admin_r.Admin_uuid,"用户管理", "删除", Admin_uuid)
+	System.Add_UserLogs_T(admin_r.Admin_uuid, "用户管理", "删除", Admin_uuid)
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
@@ -638,7 +656,7 @@ func (c *UserController) Power_Post() {
 			return
 			return
 		}
 		}
 	}
 	}
-	System.Add_UserLogs_T(admin_r.Admin_uuid,"权限管理", "权限操作", var_)
+	System.Add_UserLogs_T(admin_r.Admin_uuid, "权限管理", "权限操作", var_)
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
@@ -686,7 +704,7 @@ func (c *UserController) Power_Del() {
 		c.ServeJSON()
 		c.ServeJSON()
 		return
 		return
 	}
 	}
-	System.Add_UserLogs(admin_r.Admin_uuid,"权限管理", "权限删除", strconv.Itoa(id))
+	System.Add_UserLogs(admin_r.Admin_uuid, "权限管理", "权限删除", strconv.Itoa(id))
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
@@ -710,9 +728,9 @@ func (c *UserController) Panel_plan_Syn() {
 	}
 	}
 
 
 	user_r.Admin_panel_plan = admin_r.Admin_panel_plan
 	user_r.Admin_panel_plan = admin_r.Admin_panel_plan
-	Admin.Update_Admin(user_r,"Admin_panel_plan")
+	Admin.Update_Admin(user_r, "Admin_panel_plan")
 
 
-	System.Add_UserLogs(admin_r.Admin_uuid,"设备管理", "同步面板操作", "面板:"+admin_r.Admin_panel_plan+"|"+admin_r.Admin_uuid+"->"+user_r.Admin_uuid)
+	System.Add_UserLogs(admin_r.Admin_uuid, "设备管理", "同步面板操作", "面板:"+admin_r.Admin_panel_plan+"|"+admin_r.Admin_uuid+"->"+user_r.Admin_uuid)
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return

+ 45 - 36
controllers/WebSocket/WebSocket.go

@@ -1,6 +1,7 @@
 package WebSocket
 package WebSocket
 
 
 import (
 import (
+	"Cold_Api/Nats/NatsServer"
 	"Cold_Api/controllers/lib"
 	"Cold_Api/controllers/lib"
 	"Cold_Api/logs"
 	"Cold_Api/logs"
 	"Cold_Api/models/System"
 	"Cold_Api/models/System"
@@ -18,6 +19,7 @@ import (
 type WebSocketController struct {
 type WebSocketController struct {
 	beego.Controller
 	beego.Controller
 }
 }
+
 // 网关 -》服务端    json 通用模板
 // 网关 -》服务端    json 通用模板
 type Event_w struct {
 type Event_w struct {
 	Type      int // JOIN, LEAVE, MESSAGE
 	Type      int // JOIN, LEAVE, MESSAGE
@@ -25,16 +27,16 @@ type Event_w struct {
 	Content   interface{}
 	Content   interface{}
 }
 }
 type Ms_Project struct {
 type Ms_Project struct {
-	Cmd   string `json:"Cmd"`
-	Sn   string `json:"Sn"`
+	Cmd string `json:"Cmd"`
+	Sn  string `json:"Sn"`
 }
 }
+
 // Event archives.
 // Event archives.
 var archive = list.New()
 var archive = list.New()
 
 
-
 type WsConn struct {
 type WsConn struct {
 	Conn *websocket.Conn
 	Conn *websocket.Conn
-	Mux sync.RWMutex
+	Mux  sync.RWMutex
 }
 }
 
 
 var (
 var (
@@ -62,11 +64,11 @@ func Leave(user string) {
 
 
 		_, ok := lib.CountrySnMap[k].Uuid_list[user]
 		_, ok := lib.CountrySnMap[k].Uuid_list[user]
 		if ok {
 		if ok {
-			fmt.Println("清楚成功 用户! KEY:",k,"  Uuid:",lib.CountrySnMap[k].Uuid_list[user])
+			fmt.Println("清楚成功 用户! KEY:", k, "  Uuid:", lib.CountrySnMap[k].Uuid_list[user])
 			delete(lib.CountrySnMap[k].Uuid_list, user)
 			delete(lib.CountrySnMap[k].Uuid_list, user)
 
 
-			if(len(lib.CountrySnMap[k].Uuid_list) == 0){
-				fmt.Println("清楚成功 SN! KEY:",k)
+			if len(lib.CountrySnMap[k].Uuid_list) == 0 {
+				fmt.Println("清楚成功 SN! KEY:", k)
 				delete(lib.CountrySnMap, k)
 				delete(lib.CountrySnMap, k)
 			}
 			}
 		}
 		}
@@ -75,10 +77,6 @@ func Leave(user string) {
 
 
 }
 }
 
 
-
-
-
-
 // This function handles all incoming chan messages.
 // This function handles all incoming chan messages.
 func chatroom() {
 func chatroom() {
 	countryCapitalMap = make(map[string]WsConn)
 	countryCapitalMap = make(map[string]WsConn)
@@ -86,16 +84,15 @@ func chatroom() {
 
 
 func init() {
 func init() {
 	go chatroom()
 	go chatroom()
-
+	go Realtime()
 }
 }
 
 
-
 // 连接 注册   Join method handles WebSocket requests for WebSocketController.
 // 连接 注册   Join method handles WebSocket requests for WebSocketController.
 func (this *WebSocketController) Join() {
 func (this *WebSocketController) Join() {
 
 
 	// 验证登录
 	// 验证登录
-	b_,admin_r := lib.Verification(this.Ctx.GetCookie("User_tokey"),this.GetString("User_tokey"))
-	if(!b_){
+	b_, admin_r := lib.Verification(this.Ctx.GetCookie("User_tokey"), this.GetString("User_tokey"))
+	if !b_ {
 		this.Redirect("/", 302)
 		this.Redirect("/", 302)
 		return
 		return
 	}
 	}
@@ -122,53 +119,49 @@ func (this *WebSocketController) Join() {
 				return
 				return
 			}
 			}
 			fmt.Println("============= WebSocket JSON =============")
 			fmt.Println("============= WebSocket JSON =============")
-			fmt.Println(admin_r.Admin_uuid,"收到信息:",string(p))
-
+			fmt.Println(admin_r.Admin_uuid, "收到信息:", string(p))
 
 
 			var Ms_project Ms_Project
 			var Ms_project Ms_Project
 			err = json.Unmarshal(p, &Ms_project)
 			err = json.Unmarshal(p, &Ms_project)
 			if err != nil {
 			if err != nil {
-				System.Add_Logs("WebSocket","JSON反序列化失败[Ms_Project]",string(p))
-				fmt.Println("JSON反序列化失败[Ms_Project],err=",err)
+				System.Add_Logs("WebSocket", "JSON反序列化失败[Ms_Project]", string(p))
+				fmt.Println("JSON反序列化失败[Ms_Project],err=", err)
 				return
 				return
 			}
 			}
 
 
 			//fmt.Println("Cmd:", Ms_project.Cmd)
 			//fmt.Println("Cmd:", Ms_project.Cmd)
 			fmt.Println("Sn:", Ms_project.Sn)
 			fmt.Println("Sn:", Ms_project.Sn)
 
 
-
 			//Parameter.Read_DeviceParameter(admin_r.Admin_uuid,Ms_project.Sn)
 			//Parameter.Read_DeviceParameter(admin_r.Admin_uuid,Ms_project.Sn)
 
 
 			_, ok := lib.CountrySnMap[Ms_project.Sn] /*如果确定是真实的,则存在,否则不存在 */
 			_, ok := lib.CountrySnMap[Ms_project.Sn] /*如果确定是真实的,则存在,否则不存在 */
 			if ok {
 			if ok {
 
 
-			}else {
-				fmt.Println("CountrySnMap 没有,新建",Ms_project.Sn)
+			} else {
+				fmt.Println("CountrySnMap 没有,新建", Ms_project.Sn)
 				lib.CountrySnMap[Ms_project.Sn] = lib.Cl_{
 				lib.CountrySnMap[Ms_project.Sn] = lib.Cl_{
-					Uuid_list:  make(map[string]string) ,
+					Uuid_list: make(map[string]string),
 				}
 				}
 			}
 			}
 
 
-
 			// 是否 有相同 用户
 			// 是否 有相同 用户
 			_, ok = lib.CountrySnMap[Ms_project.Sn].Uuid_list[admin_r.Admin_uuid]
 			_, ok = lib.CountrySnMap[Ms_project.Sn].Uuid_list[admin_r.Admin_uuid]
 			if ok {
 			if ok {
-				fmt.Println("用户重复 ",admin_r.Admin_uuid)
-				data, _ := json.Marshal(lib.JSONS{Code: 201, Msg: "用户重复!",Data: admin_r.Admin_uuid})
-				Send_WebSocket(admin_r.Admin_uuid,string(data))
+				fmt.Println("用户重复 ", admin_r.Admin_uuid)
+				data, _ := json.Marshal(lib.JSONS{Code: 201, Msg: "用户重复!", Data: admin_r.Admin_uuid})
+				Send_WebSocket(admin_r.Admin_uuid, string(data))
 
 
-			}else {
-				fmt.Println("用户新建 ",admin_r.Admin_uuid)
+			} else {
+				fmt.Println("用户新建 ", admin_r.Admin_uuid)
 				lib.CountrySnMap[Ms_project.Sn].Uuid_list[admin_r.Admin_uuid] = admin_r.Admin_uuid
 				lib.CountrySnMap[Ms_project.Sn].Uuid_list[admin_r.Admin_uuid] = admin_r.Admin_uuid
 
 
-				data, _ := json.Marshal(lib.JSONS{Code: 200, Msg: "ok!",Data: admin_r.Admin_uuid})
-				Send_WebSocket(admin_r.Admin_uuid,string(data))
+				data, _ := json.Marshal(lib.JSONS{Code: 200, Msg: "ok!", Data: admin_r.Admin_uuid})
+				Send_WebSocket(admin_r.Admin_uuid, string(data))
 
 
-				lib.CountryRead_DeviceParameterSnMap[Ms_project.Sn] = ""
 			}
 			}
 
 
 		}
 		}
-	}else {
+	} else {
 		this.Redirect("/", 302)
 		this.Redirect("/", 302)
 		return
 		return
 
 
@@ -176,14 +169,13 @@ func (this *WebSocketController) Join() {
 
 
 }
 }
 
 
-
 /// -------------    ---------------------------------------------
 /// -------------    ---------------------------------------------
 
 
-func Send_WebSocket(Admin_uuid string,T_json string) {
+func Send_WebSocket(Admin_uuid string, T_json string) {
 	defer func() {
 	defer func() {
 		if err := recover(); err != nil {
 		if err := recover(); err != nil {
 			fmt.Println(err)
 			fmt.Println(err)
-			logs.Println("Send_WebSocket ok err:!",err)
+			logs.Println("Send_WebSocket ok err:!", err)
 			System.Add_Logs("WebSocket", "Send_WebSocket Err", Admin_uuid+T_json)
 			System.Add_Logs("WebSocket", "Send_WebSocket Err", Admin_uuid+T_json)
 		}
 		}
 	}()
 	}()
@@ -199,3 +191,20 @@ func Send_WebSocket(Admin_uuid string,T_json string) {
 	}
 	}
 
 
 }
 }
+
+// 循环刷新
+func Realtime() {
+	fmt.Println("=====================Realtime GO===============")
+	time.Sleep(time.Second * 10)
+	for true {
+		//fmt.Println("=====================Realtime GO===============")
+		//fmt.Println("CountrySnMap_z:", len(lib.CountrySnMap))
+		for k, _ := range lib.CountrySnMap {
+			fmt.Println("CountrySnMap:", k)
+			NatsServer.Get_Device_Realtime(k)
+			time.Sleep(time.Millisecond * 100)
+		}
+		time.Sleep(time.Second * 10)
+
+	}
+}

+ 0 - 200
controllers/WebSocketPanel/WebSocket.go

@@ -1,200 +0,0 @@
-package WebSocketPanel
-
-import (
-	"Cold_Api/controllers/lib"
-	"Cold_Api/logs"
-	"Cold_Api/models/System"
-	"container/list"
-	"encoding/json"
-	"fmt"
-	beego "github.com/beego/beego/v2/server/web"
-	"github.com/gorilla/websocket"
-	"net/http"
-	"sync"
-	"time"
-)
-
-// WebSocketController handles WebSocket requests.
-type WebSocketPanelController struct {
-	beego.Controller
-}
-// 网关 -》服务端    json 通用模板
-type Event_w struct {
-	Type      int // JOIN, LEAVE, MESSAGE
-	Timestamp int // Unix timestamp (secs)
-	Content   interface{}
-}
-type Ms_Project struct {
-	Cmd   string `json:"Cmd"`
-	Sn   string `json:"Sn"`
-}
-// Event archives.
-var archive = list.New()
-
-
-type WsConn struct {
-	Conn *websocket.Conn
-	Mux sync.RWMutex
-}
-
-var (
-	countryCapitalMap map[string]WsConn /*创建集合 */
-)
-
-func Join_wc(user string, ws *websocket.Conn) bool {
-	// 有先加入 给全部人发消息
-	_, ok := countryCapitalMap[user] /*如果确定是真实的,则存在,否则不存在 */
-	if ok {
-		fmt.Println(user + " 重复")
-		countryCapitalMap[user] = WsConn{Conn: ws}
-		return true
-	} else {
-		fmt.Println(user + " 注册成功")
-		countryCapitalMap[user] = WsConn{Conn: ws}
-		return false
-	}
-}
-
-func Leave(user string) {
-	fmt.Println("注销:" + user)
-
-	for k, _ := range lib.CountrySnMap_Panel {
-
-		_, ok := lib.CountrySnMap_Panel[k].Uuid_list[user]
-		if ok {
-			fmt.Println("清楚成功 用户! KEY:",k,"  Uuid:",lib.CountrySnMap_Panel[k].Uuid_list[user])
-			delete(lib.CountrySnMap_Panel[k].Uuid_list, user)
-
-			if(len(lib.CountrySnMap_Panel[k].Uuid_list) == 0){
-				fmt.Println("清楚成功 SN! KEY:",k)
-				delete(lib.CountrySnMap_Panel, k)
-			}
-		}
-	}
-	delete(countryCapitalMap, user)
-
-}
-
-
-
-
-
-// This function handles all incoming chan messages.
-func chatroom() {
-	countryCapitalMap = make(map[string]WsConn)
-}
-
-func init() {
-	go chatroom()
-
-}
-
-
-// 连接 注册   Join method handles WebSocket requests for WebSocketController.
-func (this *WebSocketPanelController) Join() {
-
-	// 验证登录
-	b_,admin_r := lib.Verification(this.Ctx.GetCookie("User_tokey"),this.GetString("User_tokey"))
-	if(!b_){
-		this.Redirect("/", 302)
-		return
-	}
-
-	// Upgrade from http request to WebSocket.
-	ws, err := websocket.Upgrade(this.Ctx.ResponseWriter, this.Ctx.Request, nil, 1024, 1024)
-	if _, ok := err.(websocket.HandshakeError); ok {
-		http.Error(this.Ctx.ResponseWriter, "Not a WebSocketPanel handshake", 400)
-		return
-	} else if err != nil {
-		fmt.Println("无法设置WebSocketPanel连接:", err)
-		return
-	}
-
-	// Join chat room.
-	is := Join_wc(admin_r.Admin_uuid, ws)
-
-	if !is {
-		defer Leave(admin_r.Admin_uuid) //  退后 会自动执行
-		time.Sleep(3 * time.Second)
-		for {
-			_, p, err := ws.ReadMessage()
-			if err != nil {
-				return
-			}
-			fmt.Println("============= WebSocketPanel JSON =============")
-			fmt.Println(admin_r.Admin_uuid,"收到信息:",string(p))
-
-
-			var Ms_project Ms_Project
-			err = json.Unmarshal(p, &Ms_project)
-			if err != nil {
-				System.Add_Logs("WebSocketPanel","JSON反序列化失败[Ms_Project]",string(p))
-				fmt.Println("JSON反序列化失败[Ms_Project],err=",err)
-				return
-			}
-
-			//fmt.Println("Cmd:", Ms_project.Cmd)
-			fmt.Println("Sn:", Ms_project.Sn)
-
-
-			//Parameter.Read_DeviceParameter(admin_r.Admin_uuid,Ms_project.Sn)
-
-			_, ok := lib.CountrySnMap_Panel[Ms_project.Sn] /*如果确定是真实的,则存在,否则不存在 */
-			if ok {
-
-			}else {
-				fmt.Println("CountrySnMap_Panel 没有,新建",Ms_project.Sn)
-				lib.CountrySnMap_Panel[Ms_project.Sn] = lib.Cl_{
-					Uuid_list:  make(map[string]string) ,
-				}
-			}
-
-
-			// 是否 有相同 用户
-			_, ok = lib.CountrySnMap_Panel[Ms_project.Sn].Uuid_list[admin_r.Admin_uuid]
-			if ok {
-				fmt.Println("用户重复 ",admin_r.Admin_uuid)
-				data, _ := json.Marshal(lib.JSONS{Code: 201, Msg: "用户重复!",Data: admin_r.Admin_uuid})
-				Send_WebSocket(admin_r.Admin_uuid,string(data))
-
-			}else {
-				fmt.Println("用户新建 ",admin_r.Admin_uuid)
-				lib.CountrySnMap_Panel[Ms_project.Sn].Uuid_list[admin_r.Admin_uuid] = admin_r.Admin_uuid
-
-				data, _ := json.Marshal(lib.JSONS{Code: 200, Msg: "ok!",Data: admin_r.Admin_uuid})
-				Send_WebSocket(admin_r.Admin_uuid,string(data))
-
-			}
-
-		}
-	}else {
-		this.Redirect("/", 302)
-		return
-
-	}
-
-}
-
-
-/// -------------    ---------------------------------------------
-
-func Send_WebSocket(Admin_uuid string,T_json string) {
-	defer func() {
-		if err := recover(); err != nil {
-			fmt.Println(err)
-			logs.Println("Send_WebSocket ok err:!",err)
-			System.Add_Logs("WebSocket", "Send_WebSocket Err", Admin_uuid+T_json)
-		}
-	}()
-
-	ws, ok := countryCapitalMap[Admin_uuid] /*如果确定是真实的,则存在,否则不存在 */
-	if ok && ws.Conn != nil {
-		ws.Mux.Lock()
-		if ws.Conn.WriteMessage(websocket.TextMessage, []byte(T_json)) != nil {
-			println("ok!")
-		}
-		ws.Mux.Unlock()
-
-	}
-
-}

+ 0 - 307
controllers/Wx.go

@@ -1,307 +0,0 @@
-package controllers
-
-import (
-	"Cold_Api/controllers/lib"
-	"Cold_Api/models/Device"
-	"crypto/sha1"
-	"encoding/json"
-	"encoding/xml"
-	"fmt"
-	beego "github.com/beego/beego/v2/server/web"
-	"io"
-	"sort"
-	"strconv"
-	"strings"
-	"time"
-)
-
-type WxController struct {
-	beego.Controller
-}
-/**
- * 实例化文字消息
- * toUser:openId
- * content:文本内容
- */
-//反序列化结构体定义
-type Person_QRCode struct {
-	ToUserName  string `xml:"ToUserName"`  //注意这里有个反引号
-	FromUserName  string `xml:"FromUserName"`  //注意这里有个反引号
-	CreateTime  string `xml:"CreateTime"`  //注意这里有个反引号
-	EventKey   string `xml:"EventKey"`
-}
-type Person_Msg struct {
-	ToUserName  string `xml:"ToUserName"`  //注意这里有个反引号
-	FromUserName  string `xml:"FromUserName"`  //注意这里有个反引号
-	CreateTime  string `xml:"CreateTime"`  //注意这里有个反引号
-	Content   string `xml:"Content"`
-}
-
-// 列表 - http://cloud.hoooooo.cn/
-func (c *WxController) Wx_handler() {
-	//Time_start :=
-
-	fmt.Println("RequestBody-",string(c.Ctx.Input.RequestBody))
-	var ob map[string]interface{}
-	var err error
-	if err = json.Unmarshal(c.Ctx.Input.RequestBody, &ob); err == nil {
-
-	} else {
-
-	}
-
-
-	if(strings.Contains(string(c.Ctx.Input.RequestBody), "EventKey")){
-		var person_QRCode Person_QRCode
-		err1:=xml.Unmarshal(c.Ctx.Input.RequestBody,&person_QRCode)
-		if err1!=nil{
-			fmt.Println("Unmarshal error")
-			return
-		}
-		// 进入 二维码配对
-		fmt.Println("FromUserName-",person_QRCode.FromUserName)
-		fmt.Println("EventKey-",person_QRCode.EventKey)
-
-		type xml struct {
-			ToUserName     string
-			FromUserName string
-			CreateTime int64
-			MsgType string
-			Content string
-		}
-		// 开始  处理消息
-		if(strings.Contains(string(person_QRCode.EventKey), "@宝智达 微信公众号通知")){
-			//"请将本内容发送到 深圳市宝智达科技有限公司 微信公众号-|"+lib.AesEncryptCBC(T_calss_id, "0123456789012345")+"|-",
-			Content_r := lib.GetBetweenStr(person_QRCode.EventKey,"-|","|-")
-			decryptCode := lib.AesDecryptCBC(Content_r, "0123456789012345")
-			decryptCode_int,err:=strconv.Atoi(decryptCode)
-			fmt.Println("解密结果:", decryptCode,"  decryptCode_int",decryptCode_int,"  Content_r:",Content_r)
-			R_DeviceClass,err := Device.Read_Class_ById(decryptCode_int);
-			if err != nil {
-
-
-				return
-			}
-
-			if(strings.Contains(R_DeviceClass.T_Notice_wx, person_QRCode.FromUserName)){
-				var p= xml{
-					ToUserName:person_QRCode.FromUserName,
-					FromUserName:person_QRCode.ToUserName,
-					CreateTime:time.Now().Unix(),
-					MsgType:"text",
-					Content: "已绑定,无需重复绑定!",
-				}
-
-				c.Data["xml"]=&p
-				c.ServeXML()
-				return
-			}
-
-			R_DeviceClass.T_Notice_wx = R_DeviceClass.T_Notice_wx + person_QRCode.FromUserName + "/重令名|"
-			Device.Update_Class_ById(R_DeviceClass)
-
-			var p= xml{
-				ToUserName:person_QRCode.FromUserName,
-				FromUserName:person_QRCode.ToUserName,
-				CreateTime:time.Now().Unix(),
-				MsgType:"text",
-				Content: "绑定成功!",
-			}
-
-			c.Data["xml"]=&p
-			c.ServeXML()
-			return
-		}
-
-
-		var p= xml{
-			ToUserName:person_QRCode.FromUserName,
-			FromUserName:person_QRCode.ToUserName,
-			CreateTime:time.Now().Unix(),
-			MsgType:"text",
-			Content: "",
-		}
-
-		c.Data["xml"]=&p
-		c.ServeXML()
-		return
-	}else {
-		var person_Msg Person_Msg
-		err1:=xml.Unmarshal(c.Ctx.Input.RequestBody,&person_Msg)
-		if err1!=nil{
-			fmt.Println("Unmarshal error")
-			return
-		}
-		if(len(person_Msg.Content) > 0){
-			fmt.Println("FromUserName-",person_Msg.FromUserName)
-			fmt.Println("Content-",person_Msg.Content)
-
-		}
-		// 开始  处理消息
-		type xml struct {
-			ToUserName     string
-			FromUserName string
-			CreateTime int64
-			MsgType string
-			Content string
-		}
-		if(strings.Contains(string(person_Msg.Content), "@宝智达 微信公众号通知")){
-			//"请将本内容发送到 深圳市宝智达科技有限公司 微信公众号-|"+lib.AesEncryptCBC(T_calss_id, "0123456789012345")+"|-",
-			Content_r := lib.GetBetweenStr(person_Msg.Content,"-|","|-")
-			decryptCode := lib.AesDecryptCBC(Content_r, "0123456789012345")
-			decryptCode_int,err:=strconv.Atoi(decryptCode)
-			fmt.Println("解密结果:", decryptCode,"  decryptCode_int",decryptCode_int,"  Content_r:",Content_r)
-			R_DeviceClass,err := Device.Read_Class_ById(decryptCode_int);
-			if err != nil {
-				c.Data["json"] = lib.JSONS{Code: 205, Msg: "T_class_id Err!"}
-				c.ServeJSON()
-				return
-			}
-			if(strings.Contains(R_DeviceClass.T_Notice_wx, person_Msg.FromUserName)){
-				var p= xml{
-					ToUserName:person_Msg.FromUserName,
-					FromUserName:person_Msg.ToUserName,
-					CreateTime:time.Now().Unix(),
-					MsgType:"text",
-					Content: "已绑定,无需重复绑定!",
-				}
-
-				c.Data["xml"]=&p
-				c.ServeXML()
-				return
-			}
-			R_DeviceClass.T_Notice_wx = R_DeviceClass.T_Notice_wx + person_Msg.FromUserName + "/重令名|"
-			Device.Update_Class_ById(R_DeviceClass)
-
-			var p= xml{
-				ToUserName:person_Msg.FromUserName,
-				FromUserName:person_Msg.ToUserName,
-				CreateTime:time.Now().Unix(),
-				MsgType:"text",
-				Content: "绑定成功!",
-			}
-
-			c.Data["xml"]=&p
-			c.ServeXML()
-			return
-		}
-
-
-
-
-
-		var p= xml{
-			ToUserName:person_Msg.FromUserName,
-			FromUserName:person_Msg.ToUserName,
-			CreateTime:time.Now().Unix(),
-			MsgType:"text",
-			Content: "",
-		}
-
-		c.Data["xml"]=&p
-		c.ServeXML()
-		return
-	}
-
-	//<xml><ToUserName><![CDATA[gh_cc23d9b3bca2]]></ToUserName>
-	//<FromUserName><![CDATA[o5EKB1buEEsyDP6u-6H3H326T4no]]></FromUserName>
-	//<CreateTime>1641111908</CreateTime>
-	//<MsgType><![CDATA[event]]></MsgType>
-	//<Event><![CDATA[SCAN]]></Event>
-	//<EventKey><![CDATA[3]]></EventKey>
-	//<Ticket><![CDATA[gQGM7zwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyLUNscnRUQTJlMWwxWG9ycXh4YzYAAgRYYdFhAwSAOgkA]]></Ticket>
-	//</xml>
-
-
-	//
-	//fmt.Println("Per-",person_QRCode)
-	//fmt.Println("ob-",ob)
-
-
-	//var ob User//这是一个model,struct类型
-	//body := this.Ctx.Input.RequestBody//这是获取到的json二进制数据
-	//json.Unmarshal(body, &ob)//解析二进制json,把结果放进ob中
-	//user := &User{Id: ob.UserName, Mobile: ob.Mobile}
-	//err := user.AddUser()//这是添加用户函数
-	//if nil != err {
-	//	this.Data["json"] = map[string]interface{}{"result": false, "msg": err}
-	//} else {
-	//	this.Data["json"] = map[string]interface{}{"result": true, "msg": "新增成功"}
-	//}
-	//this.ServeJSON()
-
-	c.Ctx.WriteString("")
-	return
-}
-
-
-// 验证 服务器配置
-func (c *WxController) Wx() {
-	//
-	timestamp := c.GetString("timestamp")
-	nonce := c.GetString("nonce")
-	signatureIn := c.GetString("signature")
-	echostr := c.GetString("echostr")
-	println("timestamp:",timestamp)
-	println("nonce:",nonce)
-	println("signatureIn:",signatureIn)
-
-	signatureGen := MakeSignature("gPc", timestamp, nonce)
-	println("signatureGen:",signatureGen)
-
-	if signatureGen != signatureIn {
-		return
-	}
-
-	c.Ctx.WriteString(echostr)
-	return
-}
-
-
-func MakeSignature(token, timestamp, nonce string) string {
-	strs := []string{token, timestamp, nonce}
-	sort.Strings(strs)
-	sha := sha1.New()
-	io.WriteString(sha, strings.Join(strs, ""))
-	return fmt.Sprintf("%x", sha.Sum(nil))
-}
-
-func (c *WxController) Get_DeviceClassId_QRCode() {
-	// 验证登录
-	b_,_ := lib.Verification(c.Ctx.GetCookie("User_tokey"),c.GetString("User_tokey"))
-	if(!b_){
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
-		c.ServeJSON()
-		return
-	}
-
-	T_calss_id := c.GetString("T_class_id")
-	if(len(T_calss_id) == 0){
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_calss_id Err!"}
-		c.ServeJSON()
-		return
-	}
-	//T_calss_id_str := lib.GenerateQRCode( "-|"+lib.AesEncryptCBC(T_calss_id, "0123456789012345")+"|- @宝智达 微信公众号通知")
-	//if(len(T_calss_id_str) == 0){
-	//	c.Data["json"] = lib.JSONS{Code: 201, Msg: "Err!"}
-	//	c.ServeJSON()
-	//	return
-	//}
-
-
-	type Text struct {
-		QR     string
-		Code string
-	}
-
-
-	//
-	//T_calss_id_str = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" + T_calss_id_str
-	//Text_r := Text{
-	//	QR:T_calss_id_str,
-	//	Code:"请将本内容发送到 深圳市宝智达科技有限公司 微信公众号-|"+lib.AesEncryptCBC(T_calss_id, "0123456789012345")+"|- @宝智达 微信公众号通知    ",
-	//}
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!",Data: "Text_r"}
-	c.ServeJSON()
-	return
-}

+ 44 - 40
controllers/lib/lib.go

@@ -4,6 +4,7 @@ import (
 	"Cold_Api/models/Admin"
 	"Cold_Api/models/Admin"
 	"encoding/json"
 	"encoding/json"
 	"fmt"
 	"fmt"
+	"github.com/nats-io/nats.go"
 	"log"
 	"log"
 	"math/rand"
 	"math/rand"
 	"os"
 	"os"
@@ -15,27 +16,21 @@ import (
 	"strings"
 	"strings"
 	"time"
 	"time"
 )
 )
-var Run_My_Server = false  // 运行当期服务
+
+var Run_My_Server = false // 运行当期服务
 
 
 type Cl_ struct {
 type Cl_ struct {
 	Uuid_list map[string]string // 泛型
 	Uuid_list map[string]string // 泛型
 }
 }
 
 
 var CountrySnMap map[string]Cl_ /*创建集合 */
 var CountrySnMap map[string]Cl_ /*创建集合 */
-var CountrySnMap_Panel map[string]Cl_ /*创建集合 */
-var CountryRead_DeviceParameterSnMap map[string]string /*创建集合 */
+var Nats *nats.Conn
 
 
-var CountryRead_DeviceParameter_Cache map[string]bool /*设备参数 缓存 */
 func init() {
 func init() {
 	CountrySnMap = make(map[string]Cl_)
 	CountrySnMap = make(map[string]Cl_)
-	CountrySnMap_Panel = make(map[string]Cl_)
-	CountryRead_DeviceParameterSnMap = make(map[string]string)
-	CountryRead_DeviceParameter_Cache = make(map[string]bool)
 
 
 }
 }
 
 
-
-
 type JSONS struct {
 type JSONS struct {
 	//必须的大写开头
 	//必须的大写开头
 	Code int16
 	Code int16
@@ -51,9 +46,8 @@ type R_JSONS struct {
 	Pages     []Page_T
 	Pages     []Page_T
 }
 }
 
 
-
 // 登录验证
 // 登录验证
-func Verification(GetCookie string,GetString string) (bool, Admin.Admin){
+func Verification(GetCookie string, GetString string) (bool, Admin.Admin) {
 	Run_My_Server = true // 运行当期服务
 	Run_My_Server = true // 运行当期服务
 	// 自适应 参数
 	// 自适应 参数
 	User_tokey := GetCookie
 	User_tokey := GetCookie
@@ -61,21 +55,39 @@ func Verification(GetCookie string,GetString string) (bool, Admin.Admin){
 		User_tokey = GetString
 		User_tokey = GetString
 	}
 	}
 	if len(User_tokey) == 0 {
 	if len(User_tokey) == 0 {
-		return false,Admin.Admin{}
+		return false, Admin.Admin{}
 	}
 	}
-	ebool,tokey := Admin.Read_Verification_Tokey(User_tokey)
-	if !ebool {
-		return false,Admin.Admin{}
+	tokey, is := Admin.Redis_Tokey_Get(User_tokey)
+	if !is {
+		return false, Admin.Admin{}
 	}
 	}
-	err,admin_r := Admin.Read_Admin_ByAdmin_uuid(tokey.Admin_uuid)
+	err, admin_r := Admin.Read_Admin_ByAdmin_uuid(tokey)
 	if err != nil {
 	if err != nil {
-		ebool = false
-		return false,Admin.Admin{}
+		is = false
+		return false, Admin.Admin{}
 	}
 	}
 	log.Println("登录 Admin_name 为:", admin_r.Admin_name)
 	log.Println("登录 Admin_name 为:", admin_r.Admin_name)
-	return ebool,admin_r
+	return is, admin_r
 }
 }
 
 
+// 登录验证
+func Verification_Tokey(GetCookie string, GetString string) bool {
+	Run_My_Server = true // 运行当期服务
+	// 自适应 参数
+	User_tokey := GetCookie
+	if len(User_tokey) == 0 {
+		User_tokey = GetString
+	}
+	if len(User_tokey) == 0 {
+		return false
+	}
+	_, is := Admin.Redis_Tokey_Get(User_tokey)
+	if !is {
+		return false
+	}
+
+	return is
+}
 
 
 // func_page 分页   [{3 1} {4 2} {4 3} {4 4} {4 5} {4 6} {4 7} {4 8} {4 9} {5 2}]-
 // func_page 分页   [{3 1} {4 2} {4 3} {4 4} {4 5} {4 6} {4 7} {4 8} {4 9} {5 2}]-
 type Page_T struct {
 type Page_T struct {
@@ -123,8 +135,6 @@ func Func_page(Page int64, Page_size int64) (page_t_list []Page_T) {
 	return page_t_list
 	return page_t_list
 }
 }
 
 
-
-
 func Strval(value interface{}) string {
 func Strval(value interface{}) string {
 	var key string
 	var key string
 	if value == nil {
 	if value == nil {
@@ -180,7 +190,6 @@ func Strval(value interface{}) string {
 	return key
 	return key
 }
 }
 
 
-
 func To_int(value interface{}) int {
 func To_int(value interface{}) int {
 	var key int
 	var key int
 	if value == nil {
 	if value == nil {
@@ -212,12 +221,12 @@ func To_int(value interface{}) int {
 	case uint64:
 	case uint64:
 		key = int(value.(uint64))
 		key = int(value.(uint64))
 	case string:
 	case string:
-		key,_ =strconv.Atoi(value.(string))
+		key, _ = strconv.Atoi(value.(string))
 	case []byte:
 	case []byte:
-		key,_ =strconv.Atoi(string(value.([]byte)))
+		key, _ = strconv.Atoi(string(value.([]byte)))
 	default:
 	default:
 		newValue, _ := json.Marshal(value)
 		newValue, _ := json.Marshal(value)
-		key,_ = strconv.Atoi(string(newValue))
+		key, _ = strconv.Atoi(string(newValue))
 	}
 	}
 	return key
 	return key
 }
 }
@@ -254,14 +263,14 @@ func To_float32(value interface{}) float32 {
 	case uint64:
 	case uint64:
 		key = float32(value.(uint64))
 		key = float32(value.(uint64))
 	case string:
 	case string:
-		key_float64,_ := strconv.ParseFloat(value.(string),32/64)
+		key_float64, _ := strconv.ParseFloat(value.(string), 32/64)
 		key = float32(key_float64)
 		key = float32(key_float64)
 	case []byte:
 	case []byte:
-		key_float64,_ := strconv.ParseFloat(string(value.([]byte)),32/64)
+		key_float64, _ := strconv.ParseFloat(string(value.([]byte)), 32/64)
 		key = float32(key_float64)
 		key = float32(key_float64)
 	default:
 	default:
 		newValue, _ := json.Marshal(value)
 		newValue, _ := json.Marshal(value)
-		key_float64,_ := strconv.ParseFloat(string(newValue),32/64)
+		key_float64, _ := strconv.ParseFloat(string(newValue), 32/64)
 		key = float32(key_float64)
 		key = float32(key_float64)
 	}
 	}
 
 
@@ -271,7 +280,6 @@ func To_float32(value interface{}) float32 {
 	return key
 	return key
 }
 }
 
 
-
 func To_string(value interface{}) string {
 func To_string(value interface{}) string {
 	var key string
 	var key string
 	if value == nil {
 	if value == nil {
@@ -326,10 +334,9 @@ func To_string(value interface{}) string {
 	return key
 	return key
 }
 }
 
 
-
 func Random(min, max int) int {
 func Random(min, max int) int {
-	rand.Seed(time.Now().Unix())  //Seed生成的随机数
-	return rand.Intn(max - min) + min
+	rand.Seed(time.Now().Unix()) //Seed生成的随机数
+	return rand.Intn(max-min) + min
 }
 }
 
 
 //取文本(字符串)中间
 //取文本(字符串)中间
@@ -338,7 +345,7 @@ func GetBetweenStr(str, start, end string) string {
 	if n == -1 {
 	if n == -1 {
 		n = 0
 		n = 0
 	} else {
 	} else {
-		n = n + len(start)  // 增加了else,不加的会把start带上
+		n = n + len(start) // 增加了else,不加的会把start带上
 	}
 	}
 	str = string([]byte(str)[n:])
 	str = string([]byte(str)[n:])
 	m := strings.Index(str, end)
 	m := strings.Index(str, end)
@@ -390,8 +397,8 @@ func Decimal(value float64) float64 {
 	return value
 	return value
 }
 }
 
 
-func Strconv_Atoi(string string) int  {
-	int,_:=strconv.Atoi(string)
+func Strconv_Atoi(string string) int {
+	int, _ := strconv.Atoi(string)
 	return int
 	return int
 }
 }
 
 
@@ -402,13 +409,10 @@ func GetCurrentDirectory() string {
 	return strings.Replace(dir, "\\", "/", -1)
 	return strings.Replace(dir, "\\", "/", -1)
 }
 }
 
 
-
-
 // 获取正在运行的函数名
 // 获取正在运行的函数名
 func FuncName() string {
 func FuncName() string {
-	pc := make([]uintptr,1)
-	runtime.Callers(2,pc)
+	pc := make([]uintptr, 1)
+	runtime.Callers(2, pc)
 	f := runtime.FuncForPC(pc[0])
 	f := runtime.FuncForPC(pc[0])
 	return f.Name()
 	return f.Name()
 }
 }
-

+ 2 - 4
go.mod

@@ -11,7 +11,7 @@ require (
 	github.com/nats-io/nats.go v1.16.0
 	github.com/nats-io/nats.go v1.16.0
 	github.com/satori/go.uuid v1.2.0
 	github.com/satori/go.uuid v1.2.0
 	github.com/signintech/gopdf v0.13.0
 	github.com/signintech/gopdf v0.13.0
-	github.com/smartystreets/goconvey v1.6.4
+	github.com/vmihailenco/msgpack v4.0.4+incompatible
 	github.com/vmihailenco/msgpack/v5 v5.3.5
 	github.com/vmihailenco/msgpack/v5 v5.3.5
 	github.com/xuri/excelize/v2 v2.6.0
 	github.com/xuri/excelize/v2 v2.6.0
 )
 )
@@ -21,9 +21,7 @@ require (
 	github.com/cespare/xxhash/v2 v2.1.1 // indirect
 	github.com/cespare/xxhash/v2 v2.1.1 // indirect
 	github.com/golang/protobuf v1.4.2 // indirect
 	github.com/golang/protobuf v1.4.2 // indirect
 	github.com/gomodule/redigo v2.0.0+incompatible // indirect
 	github.com/gomodule/redigo v2.0.0+incompatible // indirect
-	github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 // indirect
 	github.com/hashicorp/golang-lru v0.5.4 // indirect
 	github.com/hashicorp/golang-lru v0.5.4 // indirect
-	github.com/jtolds/gls v4.20.0+incompatible // indirect
 	github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
 	github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
 	github.com/mitchellh/mapstructure v1.3.3 // indirect
 	github.com/mitchellh/mapstructure v1.3.3 // indirect
 	github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
 	github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
@@ -39,7 +37,6 @@ require (
 	github.com/richardlehane/mscfb v1.0.4 // indirect
 	github.com/richardlehane/mscfb v1.0.4 // indirect
 	github.com/richardlehane/msoleps v1.0.1 // indirect
 	github.com/richardlehane/msoleps v1.0.1 // indirect
 	github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect
 	github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect
-	github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d // indirect
 	github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
 	github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
 	github.com/xuri/efp v0.0.0-20220407160117-ad0f7a785be8 // indirect
 	github.com/xuri/efp v0.0.0-20220407160117-ad0f7a785be8 // indirect
 	github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22 // indirect
 	github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22 // indirect
@@ -50,6 +47,7 @@ require (
 	golang.org/x/text v0.3.7 // indirect
 	golang.org/x/text v0.3.7 // indirect
 	golang.org/x/tools v0.0.0-20201211185031-d93e913c1a58 // indirect
 	golang.org/x/tools v0.0.0-20201211185031-d93e913c1a58 // indirect
 	golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
 	golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
+	google.golang.org/appengine v1.4.0 // indirect
 	google.golang.org/protobuf v1.23.0 // indirect
 	google.golang.org/protobuf v1.23.0 // indirect
 	gopkg.in/yaml.v2 v2.2.8 // indirect
 	gopkg.in/yaml.v2 v2.2.8 // indirect
 )
 )

+ 3 - 9
go.sum

@@ -79,8 +79,6 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
 github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
-github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
 github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
 github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
 github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
 github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
@@ -89,8 +87,6 @@ github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uG
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
-github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
 github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
 github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
@@ -183,10 +179,6 @@ github.com/signintech/gopdf v0.13.0 h1:1+pzfg2ll84NHvKvHCiXQ5XOqWaJ6M9xKmboBfyeP
 github.com/signintech/gopdf v0.13.0/go.mod h1:a+E8HlIuBwghPyoo7UaoB5UaL7zklDzmYVIAHoW/Rlw=
 github.com/signintech/gopdf v0.13.0/go.mod h1:a+E8HlIuBwghPyoo7UaoB5UaL7zklDzmYVIAHoW/Rlw=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
-github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
-github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
-github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
-github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
 github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE=
 github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -199,6 +191,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
 github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
 github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
 github.com/syndtr/goleveldb v0.0.0-20181127023241-353a9fca669c/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
 github.com/syndtr/goleveldb v0.0.0-20181127023241-353a9fca669c/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
 github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=
 github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=
+github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI=
+github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
 github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU=
 github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU=
 github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc=
 github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc=
 github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g=
 github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g=
@@ -294,7 +288,6 @@ golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGm
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
 golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
 golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
@@ -310,6 +303,7 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=

BIN
go_build_main_go.exe


+ 1 - 1
lastupdate.tmp

@@ -1 +1 @@
-{"C:\\BZD\\Cold\\Cold_Api\\controllers":1657280451788999500}
+{"C:\\BZD\\Cold\\Cold_Api\\controllers":1658733858512812100}

+ 2100 - 0
logs/logx/logx.log

@@ -0,0 +1,2100 @@
+2022/07/22 10:13:18.411 [I]  2022-07-22 10:13:18>%!(EXTRA []interface {}=[nats OK!])
+2022/07/22 10:13:18.413 [I]  2022-07-22 10:13:18>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 10:13:18.717 [I]  2022-07-22 10:13:18>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 10:13:19.021 [I]  2022-07-22 10:13:19>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 10:13:19.326 [I]  2022-07-22 10:13:19>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 10:13:19.630 [I]  2022-07-22 10:13:19>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 10:13:54.187 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 10:13:54.336 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 10:13:54.632 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 10:13:54.632 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 10:13:54.632 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 10:13:54.632 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 10:13:54.632 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 10:13:54.633 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 10:13:54.633 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 10:13:54.633 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 10:13:54.633 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 10:13:54.633 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 10:13:54.633 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 10:13:54.633 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 10:13:54.633 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 10:13:54.634 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 10:13:54.634 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 10:13:54.634 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 10:13:54.634 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 10:13:54.634 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 10:13:54.634 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 10:13:54.634 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 10:13:54.635 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 10:13:54.635 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 10:13:54.635 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 10:13:54.635 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 10:13:54.636 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 10:13:54.636 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 10:13:54.636 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 10:13:54.636 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 10:13:54.636 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 10:13:54.636 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 10:13:54.636 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 10:13:54.783 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 10:13:54.944 [I]  2022-07-22 10:13:54>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 10:13:55.097 [I]  2022-07-22 10:13:55>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 10:16:42.697 [I]  2022-07-22 10:16:42>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats.Pu_DeviceParameter {4557 YD062289057646669 测试6669 0 88 112 112 122 61 122 52 22 2 22 0   0 0 0  5ca76637-000b-000a-000b-0c9b90f9586a 0 0 2 2022-07-22 10:16:42.5408844 +0800 CST 2022-07-22 10:16:42.5408844 +0800 CST}])
+2022/07/22 10:16:43.386 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 10:16:43.532 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 10:16:43.842 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 10:16:43.842 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 10:16:43.843 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 10:16:43.843 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 10:16:43.843 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 10:16:43.843 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 10:16:43.843 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 10:16:43.843 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 10:16:43.843 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 10:16:43.843 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 10:16:43.844 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 10:16:43.844 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 10:16:43.844 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 10:16:43.844 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 10:16:43.844 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 10:16:43.844 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 10:16:43.844 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 10:16:43.845 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 10:16:43.845 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 10:16:43.845 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 10:16:43.845 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 10:16:43.845 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 10:16:43.845 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 10:16:43.845 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 10:16:43.845 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 10:16:43.846 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 10:16:43.846 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 10:16:43.846 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 10:16:43.847 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 10:16:43.847 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 10:16:43.847 [I]  2022-07-22 10:16:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 10:16:44.073 [I]  2022-07-22 10:16:44>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 10:16:44.295 [I]  2022-07-22 10:16:44>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 10:16:44.522 [I]  2022-07-22 10:16:44>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 10:16:54.731 [I]  2022-07-22 10:16:54>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 10:16:54.881 [I]  2022-07-22 10:16:54>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 10:16:55.181 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 10:16:55.181 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 10:16:55.182 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 10:16:55.182 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 10:16:55.182 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 10:16:55.182 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 10:16:55.182 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 10:16:55.182 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 10:16:55.182 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 10:16:55.183 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 10:16:55.183 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 10:16:55.183 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 10:16:55.183 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 10:16:55.183 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 10:16:55.183 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 10:16:55.183 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 10:16:55.183 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 10:16:55.184 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 10:16:55.184 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 10:16:55.184 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 10:16:55.184 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 10:16:55.184 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 10:16:55.184 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 10:16:55.184 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 10:16:55.185 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 10:16:55.185 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 10:16:55.185 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 10:16:55.185 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 10:16:55.185 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 10:16:55.185 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 10:16:55.185 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 10:16:55.332 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 10:16:55.398 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 10:16:55.434 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 10:16:55.479 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 10:16:55.555 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 10:16:55.593 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 10:16:55.627 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 10:16:55.873 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 10:16:55.873 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 10:16:55.874 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 10:16:55.874 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 10:16:55.874 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 10:16:55.874 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 10:16:55.874 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 10:16:55.874 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 10:16:55.874 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 10:16:55.875 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 10:16:55.875 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 10:16:55.875 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 10:16:55.875 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 10:16:55.875 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 10:16:55.875 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 10:16:55.875 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 10:16:55.875 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 10:16:55.876 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 10:16:55.876 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 10:16:55.876 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 10:16:55.876 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 10:16:55.876 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 10:16:55.876 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 10:16:55.876 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 10:16:55.877 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 10:16:55.877 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 10:16:55.877 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 10:16:55.877 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 10:16:55.877 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 10:16:55.877 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 10:16:55.877 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 10:16:55.909 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 10:16:55.909 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 10:16:55.909 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 10:16:55.909 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 10:16:55.909 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 10:16:55.909 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 10:16:55.910 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 10:16:55.910 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 10:16:55.910 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 10:16:55.910 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 10:16:55.910 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 10:16:55.910 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 10:16:55.910 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 10:16:55.910 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 10:16:55.911 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 10:16:55.911 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 10:16:55.911 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 10:16:55.911 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 10:16:55.911 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 10:16:55.911 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 10:16:55.911 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 10:16:55.912 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 10:16:55.912 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 10:16:55.912 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 10:16:55.912 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 10:16:55.912 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 10:16:55.912 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 10:16:55.912 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 10:16:55.912 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 10:16:55.913 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 10:16:55.913 [I]  2022-07-22 10:16:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 10:16:56.030 [I]  2022-07-22 10:16:56>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 10:16:56.071 [I]  2022-07-22 10:16:56>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 10:16:56.181 [I]  2022-07-22 10:16:56>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 10:16:56.233 [I]  2022-07-22 10:16:56>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 10:16:56.329 [I]  2022-07-22 10:16:56>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 10:16:56.397 [I]  2022-07-22 10:16:56>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 10:17:12.723 [I]  2022-07-22 10:17:12>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 10:17:12.884 [I]  2022-07-22 10:17:12>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 10:17:13.216 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 10:17:13.216 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 10:17:13.217 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 10:17:13.217 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 10:17:13.217 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 10:17:13.217 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 10:17:13.217 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 10:17:13.217 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 10:17:13.217 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 10:17:13.218 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 10:17:13.218 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 10:17:13.218 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 10:17:13.218 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 10:17:13.218 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 10:17:13.218 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 10:17:13.218 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 10:17:13.218 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 10:17:13.219 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 10:17:13.219 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 10:17:13.219 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 10:17:13.219 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 10:17:13.219 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 10:17:13.219 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 10:17:13.219 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 10:17:13.220 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 10:17:13.220 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 10:17:13.220 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 10:17:13.220 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 10:17:13.220 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 10:17:13.220 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 10:17:13.220 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 10:17:13.373 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 10:17:13.526 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 10:17:13.684 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 10:17:13.817 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 10:17:13.982 [I]  2022-07-22 10:17:13>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 10:17:14.301 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 10:17:14.301 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 10:17:14.301 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 10:17:14.301 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 10:17:14.301 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 10:17:14.302 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 10:17:14.302 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 10:17:14.302 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 10:17:14.302 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 10:17:14.302 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 10:17:14.302 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 10:17:14.302 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 10:17:14.302 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 10:17:14.303 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 10:17:14.303 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 10:17:14.303 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 10:17:14.303 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 10:17:14.303 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 10:17:14.303 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 10:17:14.303 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 10:17:14.303 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 10:17:14.304 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 10:17:14.304 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 10:17:14.304 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 10:17:14.305 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 10:17:14.305 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 10:17:14.305 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 10:17:14.305 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 10:17:14.305 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 10:17:14.305 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 10:17:14.305 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 10:17:14.463 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 10:17:14.623 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 10:17:14.783 [I]  2022-07-22 10:17:14>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 10:18:55.465 [I]  2022-07-22 10:18:55>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats.Pu_DeviceParameter {4558 YD062289057646669 测试6669 0 88 112 112 122 61 122 52 22 2 22 0   0 0 0  5ca76637-000b-000a-000b-0c9b90f9586a 0 0 2 2022-07-22 10:18:55.3051963 +0800 CST 2022-07-22 10:18:55.3051963 +0800 CST}])
+2022/07/22 10:18:56.196 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 10:18:56.361 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 10:18:56.687 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 10:18:56.687 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 10:18:56.687 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 10:18:56.687 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 10:18:56.687 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 10:18:56.688 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 10:18:56.688 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 10:18:56.688 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 10:18:56.688 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 10:18:56.688 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 10:18:56.688 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 10:18:56.688 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 10:18:56.688 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 10:18:56.689 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 10:18:56.689 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 10:18:56.689 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 10:18:56.689 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 10:18:56.689 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 10:18:56.689 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 10:18:56.689 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 10:18:56.689 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 10:18:56.690 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 10:18:56.690 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 10:18:56.690 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 10:18:56.690 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 10:18:56.690 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 10:18:56.690 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 10:18:56.690 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 10:18:56.691 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 10:18:56.691 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 10:18:56.691 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 10:18:56.844 [I]  2022-07-22 10:18:56>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 10:18:57.014 [I]  2022-07-22 10:18:57>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 10:18:57.169 [I]  2022-07-22 10:18:57>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 10:19:09.151 [I]  2022-07-22 10:19:09>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats.Pu_DeviceParameter {4559 YD062289057646669 测试6669 0 88 112 112 122 62 122 52 22 2 22 0   0 0 0  5ca76637-000b-000a-000b-0c9b90f9586a 0 0 2 2022-07-22 10:19:08.9888802 +0800 CST 2022-07-22 10:19:08.9888802 +0800 CST}])
+2022/07/22 10:19:09.900 [I]  2022-07-22 10:19:09>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 10:19:10.056 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 10:19:10.376 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 10:19:10.376 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 10:19:10.376 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 10:19:10.376 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 10:19:10.376 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 10:19:10.377 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 10:19:10.377 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 10:19:10.377 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 10:19:10.377 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 10:19:10.377 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 10:19:10.377 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 10:19:10.377 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 10:19:10.377 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 10:19:10.378 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 10:19:10.378 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 10:19:10.378 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 10:19:10.378 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 10:19:10.378 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 10:19:10.378 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 10:19:10.378 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 10:19:10.378 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 10:19:10.379 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 10:19:10.379 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 10:19:10.379 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 10:19:10.379 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 10:19:10.379 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 10:19:10.379 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 10:19:10.379 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 10:19:10.379 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 10:19:10.380 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 10:19:10.380 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 10:19:10.544 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 10:19:10.697 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 10:19:10.860 [I]  2022-07-22 10:19:10>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 10:19:21.011 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 10:19:21.175 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 10:19:21.495 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 10:19:21.495 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 10:19:21.496 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 10:19:21.496 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 10:19:21.496 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 10:19:21.496 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 10:19:21.496 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 10:19:21.496 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 10:19:21.496 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 10:19:21.497 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 10:19:21.497 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 10:19:21.497 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 10:19:21.497 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 10:19:21.497 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 10:19:21.497 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 10:19:21.497 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 10:19:21.497 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 10:19:21.498 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 10:19:21.498 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 10:19:21.498 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 10:19:21.498 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 10:19:21.498 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 10:19:21.498 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 10:19:21.498 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 10:19:21.498 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 10:19:21.499 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 10:19:21.499 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 10:19:21.499 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 10:19:21.499 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 10:19:21.499 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 10:19:21.499 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 10:19:21.652 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 10:19:21.816 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 10:19:21.981 [I]  2022-07-22 10:19:21>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 10:19:24.836 [I]  2022-07-22 10:19:24>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 10:19:24.999 [I]  2022-07-22 10:19:24>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 10:19:25.318 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 10:19:25.318 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 10:19:25.319 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 10:19:25.319 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 10:19:25.319 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 10:19:25.319 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 10:19:25.319 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 10:19:25.319 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 10:19:25.319 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 10:19:25.320 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 10:19:25.320 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 10:19:25.320 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 10:19:25.320 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 10:19:25.320 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 10:19:25.320 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 10:19:25.320 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 10:19:25.320 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 10:19:25.321 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 10:19:25.321 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 10:19:25.321 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 10:19:25.321 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 10:19:25.321 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 10:19:25.321 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 10:19:25.321 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 10:19:25.321 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 10:19:25.322 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 10:19:25.322 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 10:19:25.322 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 10:19:25.322 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 10:19:25.322 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 10:19:25.322 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 10:19:25.475 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 10:19:25.637 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 10:19:25.800 [I]  2022-07-22 10:19:25>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 10:19:26.061 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 10:19:26.215 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 10:19:26.539 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 10:19:26.539 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 10:19:26.539 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 10:19:26.539 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 10:19:26.539 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 10:19:26.539 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 10:19:26.540 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 10:19:26.540 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 10:19:26.540 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 10:19:26.540 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 10:19:26.541 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 10:19:26.541 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 10:19:26.541 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 10:19:26.541 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 10:19:26.541 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 10:19:26.541 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 10:19:26.541 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 10:19:26.541 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 10:19:26.542 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 10:19:26.542 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 10:19:26.542 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 10:19:26.542 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 10:19:26.542 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 10:19:26.542 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 10:19:26.542 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 10:19:26.543 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 10:19:26.543 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 10:19:26.543 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 10:19:26.543 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 10:19:26.543 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 10:19:26.543 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 10:19:26.701 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 10:19:26.736 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 10:19:26.865 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 10:19:26.886 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 10:19:26.971 [I]  2022-07-22 10:19:26>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 10:19:27.022 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 10:19:27.130 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 10:19:27.164 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 10:19:27.200 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 10:19:27.200 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 10:19:27.200 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 10:19:27.200 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 10:19:27.200 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 10:19:27.201 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 10:19:27.201 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 10:19:27.201 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 10:19:27.201 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 10:19:27.201 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 10:19:27.201 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 10:19:27.201 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 10:19:27.202 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 10:19:27.202 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 10:19:27.202 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 10:19:27.202 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 10:19:27.202 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 10:19:27.202 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 10:19:27.203 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 10:19:27.203 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 10:19:27.203 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 10:19:27.203 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 10:19:27.203 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 10:19:27.203 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 10:19:27.203 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 10:19:27.204 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 10:19:27.204 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 10:19:27.204 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 10:19:27.204 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 10:19:27.204 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 10:19:27.204 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 10:19:27.317 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 10:19:27.367 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 10:19:27.456 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 10:19:27.456 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 10:19:27.457 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 10:19:27.457 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 10:19:27.457 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 10:19:27.457 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 10:19:27.457 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 10:19:27.457 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 10:19:27.457 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 10:19:27.457 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 10:19:27.458 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 10:19:27.458 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 10:19:27.458 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 10:19:27.458 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 10:19:27.458 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 10:19:27.458 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 10:19:27.458 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 10:19:27.458 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 10:19:27.459 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 10:19:27.459 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 10:19:27.459 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 10:19:27.459 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 10:19:27.459 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 10:19:27.459 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 10:19:27.459 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 10:19:27.459 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 10:19:27.460 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 10:19:27.460 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 10:19:27.460 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 10:19:27.460 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 10:19:27.460 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 10:19:27.518 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 10:19:27.571 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 10:19:27.607 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 10:19:27.636 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 10:19:27.636 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 10:19:27.636 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 10:19:27.636 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 10:19:27.636 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 10:19:27.636 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 10:19:27.636 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 10:19:27.637 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 10:19:27.637 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 10:19:27.637 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 10:19:27.637 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 10:19:27.637 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 10:19:27.637 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 10:19:27.637 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 10:19:27.637 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 10:19:27.638 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 10:19:27.638 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 10:19:27.638 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 10:19:27.638 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 10:19:27.638 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 10:19:27.638 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 10:19:27.638 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 10:19:27.638 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 10:19:27.638 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 10:19:27.639 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 10:19:27.639 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 10:19:27.639 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 10:19:27.639 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 10:19:27.639 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 10:19:27.639 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 10:19:27.639 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 10:19:27.674 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 10:19:27.734 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 10:19:27.760 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 10:19:27.802 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 10:19:27.924 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 10:19:27.956 [I]  2022-07-22 10:19:27>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 10:19:28.051 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 10:19:28.051 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 10:19:28.052 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 10:19:28.052 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 10:19:28.052 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 10:19:28.052 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 10:19:28.052 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 10:19:28.052 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 10:19:28.052 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 10:19:28.053 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 10:19:28.053 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 10:19:28.053 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 10:19:28.053 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 10:19:28.053 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 10:19:28.053 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 10:19:28.054 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 10:19:28.054 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 10:19:28.054 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 10:19:28.054 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 10:19:28.054 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 10:19:28.054 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 10:19:28.054 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 10:19:28.055 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 10:19:28.055 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 10:19:28.055 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 10:19:28.055 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 10:19:28.055 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 10:19:28.055 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 10:19:28.056 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 10:19:28.056 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 10:19:28.056 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 10:19:28.117 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 10:19:28.208 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 10:19:28.365 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 10:19:28.520 [I]  2022-07-22 10:19:28>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 10:19:34.297 [I]  2022-07-22 10:19:34>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 10:19:35.080 [I]  2022-07-22 10:19:35>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 10:19:44.100 [I]  2022-07-22 10:19:44>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 10:20:00.383 [I]  2022-07-22 10:20:00>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 10:41:39.687 [I]  2022-07-22 10:41:39>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 10:41:39.703 [I]  2022-07-22 10:41:39>%!(EXTRA []interface {}=[找到key: KF868131063451805|1])
+2022/07/22 10:52:15.699 [I]  2022-07-22 10:52:15>%!(EXTRA []interface {}=[找到key: KF868131063451805|1])
+2022/07/22 10:52:15.714 [I]  2022-07-22 10:52:15>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 10:54:33.332 [I]  2022-07-22 10:54:33>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 10:54:33.347 [I]  2022-07-22 10:54:33>%!(EXTRA []interface {}=[找到key: KF868131063451805|1])
+2022/07/22 11:04:35.428 [I]  2022-07-22 11:04:35>%!(EXTRA []interface {}=[nats OK!])
+2022/07/22 11:04:35.431 [I]  2022-07-22 11:04:35>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:04:35.737 [I]  2022-07-22 11:04:35>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:04:36.041 [I]  2022-07-22 11:04:36>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:04:36.344 [I]  2022-07-22 11:04:36>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:04:36.649 [I]  2022-07-22 11:04:36>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:10:15.230 [I]  2022-07-22 11:10:15>%!(EXTRA []interface {}=[nats OK!])
+2022/07/22 11:10:15.232 [I]  2022-07-22 11:10:15>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:10:15.542 [I]  2022-07-22 11:10:15>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:10:15.843 [I]  2022-07-22 11:10:15>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:10:16.147 [I]  2022-07-22 11:10:16>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:10:16.453 [I]  2022-07-22 11:10:16>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:10:28.965 [I]  2022-07-22 11:10:28>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 11:10:29.191 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[找到key: KF868131063451805|1])
+2022/07/22 11:10:29.598 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 11:10:29.598 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 11:10:29.599 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 11:10:29.599 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 11:10:29.599 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 11:10:29.599 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 11:10:29.599 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 11:10:29.599 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 11:10:29.599 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 11:10:29.599 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 11:10:29.600 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 11:10:29.600 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 11:10:29.600 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 11:10:29.600 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 11:10:29.600 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 11:10:29.600 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 11:10:29.600 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 11:10:29.600 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 11:10:29.600 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 11:10:29.601 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 11:10:29.601 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 11:10:29.601 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 11:10:29.601 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 11:10:29.601 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 11:10:29.601 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 11:10:29.601 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 11:10:29.602 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 11:10:29.602 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 11:10:29.602 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 11:10:29.602 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 11:10:29.602 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 11:10:29.759 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 11:10:29.917 [I]  2022-07-22 11:10:29>%!(EXTRA []interface {}=[找到key: YD060289057645620|1])
+2022/07/22 11:10:30.076 [I]  2022-07-22 11:10:30>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 11:10:42.679 [I]  2022-07-22 11:10:42>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 11:10:42.837 [I]  2022-07-22 11:10:42>%!(EXTRA []interface {}=[找到key: KF868131063451805|1])
+2022/07/22 11:10:43.154 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 11:10:43.154 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 11:10:43.154 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 11:10:43.154 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 11:10:43.155 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 11:10:43.155 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 11:10:43.155 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 11:10:43.155 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 11:10:43.155 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 11:10:43.156 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 11:10:43.156 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 11:10:43.156 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 11:10:43.156 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 11:10:43.156 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 11:10:43.156 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 11:10:43.156 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 11:10:43.156 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 11:10:43.156 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 11:10:43.157 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 11:10:43.157 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 11:10:43.157 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 11:10:43.157 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 11:10:43.157 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 11:10:43.157 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 11:10:43.157 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 11:10:43.157 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 11:10:43.157 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 11:10:43.158 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 11:10:43.158 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 11:10:43.158 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 11:10:43.158 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 11:10:43.314 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 11:10:43.479 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[找到key: YD060289057645620|1])
+2022/07/22 11:10:43.635 [I]  2022-07-22 11:10:43>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 11:12:18.155 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 11:12:18.312 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[找到key: KF868131063451805|1])
+2022/07/22 11:12:18.628 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 11:12:18.628 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 11:12:18.628 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 11:12:18.628 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 11:12:18.629 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 11:12:18.629 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 11:12:18.629 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 11:12:18.630 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 11:12:18.630 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 11:12:18.630 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 11:12:18.630 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 11:12:18.630 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 11:12:18.630 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 11:12:18.630 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 11:12:18.630 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 11:12:18.631 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 11:12:18.631 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 11:12:18.631 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 11:12:18.631 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 11:12:18.631 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 11:12:18.631 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 11:12:18.631 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 11:12:18.631 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 11:12:18.632 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 11:12:18.632 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 11:12:18.632 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 11:12:18.632 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 11:12:18.632 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 11:12:18.632 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 11:12:18.632 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 11:12:18.632 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 11:12:18.791 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 11:12:18.957 [I]  2022-07-22 11:12:18>%!(EXTRA []interface {}=[找到key: YD060289057645620|1])
+2022/07/22 11:12:19.113 [I]  2022-07-22 11:12:19>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 11:30:32.506 [I]  2022-07-22 11:30:32>%!(EXTRA []interface {}=[nats OK!])
+2022/07/22 11:30:32.509 [I]  2022-07-22 11:30:32>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:30:32.819 [I]  2022-07-22 11:30:32>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:30:33.124 [I]  2022-07-22 11:30:33>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:30:33.430 [I]  2022-07-22 11:30:33>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:30:33.734 [I]  2022-07-22 11:30:33>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:30:52.150 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 11:30:52.310 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[找到key: KF868131063451805|1])
+2022/07/22 11:30:52.636 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 11:30:52.636 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 11:30:52.636 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 11:30:52.636 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 11:30:52.637 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 11:30:52.637 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 11:30:52.637 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 11:30:52.637 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 11:30:52.637 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 11:30:52.637 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 11:30:52.637 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 11:30:52.638 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 11:30:52.638 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 11:30:52.638 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 11:30:52.638 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 11:30:52.638 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 11:30:52.638 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 11:30:52.638 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 11:30:52.638 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 11:30:52.639 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 11:30:52.639 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 11:30:52.639 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 11:30:52.639 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 11:30:52.640 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 11:30:52.640 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 11:30:52.640 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 11:30:52.640 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 11:30:52.640 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 11:30:52.641 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 11:30:52.641 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 11:30:52.641 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 11:30:52.818 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 11:30:52.978 [I]  2022-07-22 11:30:52>%!(EXTRA []interface {}=[找到key: YD060289057645620|1])
+2022/07/22 11:30:53.145 [I]  2022-07-22 11:30:53>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 11:31:06.299 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 11:31:06.466 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[找到key: KF868131063451805|1])
+2022/07/22 11:31:06.803 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 11:31:06.803 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 11:31:06.804 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 11:31:06.804 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 11:31:06.804 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 11:31:06.804 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 11:31:06.805 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 11:31:06.805 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 11:31:06.805 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 11:31:06.805 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 11:31:06.805 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 11:31:06.805 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 11:31:06.805 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 11:31:06.805 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 11:31:06.806 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 11:31:06.806 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 11:31:06.806 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 11:31:06.806 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 11:31:06.806 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 11:31:06.806 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 11:31:06.807 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 11:31:06.807 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 11:31:06.807 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 11:31:06.807 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 11:31:06.807 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 11:31:06.807 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 11:31:06.808 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 11:31:06.808 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 11:31:06.808 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 11:31:06.808 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 11:31:06.808 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 11:31:06.984 [I]  2022-07-22 11:31:06>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 11:31:07.183 [I]  2022-07-22 11:31:07>%!(EXTRA []interface {}=[找到key: YD060289057645620|1])
+2022/07/22 11:31:07.350 [I]  2022-07-22 11:31:07>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 11:31:23.702 [I]  2022-07-22 11:31:23>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 11:31:23.942 [I]  2022-07-22 11:31:23>%!(EXTRA []interface {}=[找到key: KF868131063451805|1])
+2022/07/22 11:31:24.281 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 11:31:24.282 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 11:31:24.282 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 11:31:24.282 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 11:31:24.282 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 11:31:24.282 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 11:31:24.282 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 11:31:24.283 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 11:31:24.283 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 11:31:24.283 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 11:31:24.283 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 11:31:24.283 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 11:31:24.283 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 11:31:24.283 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 11:31:24.283 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 11:31:24.283 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 11:31:24.284 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 11:31:24.284 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 11:31:24.284 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 11:31:24.284 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 11:31:24.284 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 11:31:24.284 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 11:31:24.284 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 11:31:24.284 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 11:31:24.285 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 11:31:24.285 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 11:31:24.285 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 11:31:24.285 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 11:31:24.285 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 11:31:24.285 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 11:31:24.285 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 11:31:24.472 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 11:31:24.697 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[找到key: YD060289057645620|1])
+2022/07/22 11:31:24.864 [I]  2022-07-22 11:31:24>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 11:43:20.900 [I]  2022-07-22 11:43:20>%!(EXTRA []interface {}=[nats OK!])
+2022/07/22 11:43:20.904 [I]  2022-07-22 11:43:20>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:43:21.210 [I]  2022-07-22 11:43:21>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:43:21.521 [I]  2022-07-22 11:43:21>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:43:21.837 [I]  2022-07-22 11:43:21>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:43:22.152 [I]  2022-07-22 11:43:22>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:43:44.058 [I]  2022-07-22 11:43:44>%!(EXTRA []interface {}=[nats OK!])
+2022/07/22 11:43:44.061 [I]  2022-07-22 11:43:44>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:43:44.369 [I]  2022-07-22 11:43:44>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:43:44.685 [I]  2022-07-22 11:43:44>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:43:45.001 [I]  2022-07-22 11:43:45>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:43:45.316 [I]  2022-07-22 11:43:45>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:43:53.483 [I]  2022-07-22 11:43:53>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 11:43:53.763 [I]  2022-07-22 11:43:53>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 11:43:54.151 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 11:43:54.151 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 11:43:54.151 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 11:43:54.151 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 11:43:54.151 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 11:43:54.152 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 11:43:54.152 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 11:43:54.152 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 11:43:54.153 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 11:43:54.153 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 11:43:54.153 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 11:43:54.153 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 11:43:54.153 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 11:43:54.153 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 11:43:54.154 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 11:43:54.154 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 11:43:54.154 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 11:43:54.154 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 11:43:54.154 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 11:43:54.154 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 11:43:54.155 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 11:43:54.155 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 11:43:54.155 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 11:43:54.155 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 11:43:54.155 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 11:43:54.155 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 11:43:54.156 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 11:43:54.156 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 11:43:54.156 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 11:43:54.156 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 11:43:54.156 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 11:43:54.340 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 11:43:54.540 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 11:43:54.715 [I]  2022-07-22 11:43:54>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 11:44:04.068 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 11:44:04.473 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 11:44:04.800 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 11:44:04.800 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 11:44:04.800 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 11:44:04.800 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 11:44:04.800 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 11:44:04.801 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 11:44:04.801 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 11:44:04.801 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 11:44:04.801 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 11:44:04.801 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 11:44:04.801 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 11:44:04.801 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 11:44:04.802 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 11:44:04.802 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 11:44:04.802 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 11:44:04.802 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 11:44:04.802 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 11:44:04.802 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 11:44:04.802 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 11:44:04.802 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 11:44:04.803 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 11:44:04.803 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 11:44:04.803 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 11:44:04.803 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 11:44:04.804 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 11:44:04.804 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 11:44:04.804 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 11:44:04.804 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 11:44:04.804 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 11:44:04.804 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 11:44:04.804 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 11:44:04.967 [I]  2022-07-22 11:44:04>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 11:44:05.167 [I]  2022-07-22 11:44:05>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 11:44:05.408 [I]  2022-07-22 11:44:05>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 11:53:25.335 [I]  2022-07-22 11:53:25>%!(EXTRA []interface {}=[nats OK!])
+2022/07/22 11:53:25.338 [I]  2022-07-22 11:53:25>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:53:25.646 [I]  2022-07-22 11:53:25>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:53:25.947 [I]  2022-07-22 11:53:25>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:53:26.259 [I]  2022-07-22 11:53:26>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:53:26.573 [I]  2022-07-22 11:53:26>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:53:44.552 [I]  2022-07-22 11:53:44>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 11:53:44.730 [I]  2022-07-22 11:53:44>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 11:53:45.097 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 11:53:45.097 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 11:53:45.098 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 11:53:45.098 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 11:53:45.098 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 11:53:45.098 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 11:53:45.098 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 11:53:45.098 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 11:53:45.099 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 11:53:45.099 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 11:53:45.099 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 11:53:45.099 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 11:53:45.099 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 11:53:45.100 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 11:53:45.100 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 11:53:45.100 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 11:53:45.100 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 11:53:45.100 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 11:53:45.100 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 11:53:45.101 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 11:53:45.101 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 11:53:45.101 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 11:53:45.101 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 11:53:45.101 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 11:53:45.101 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 11:53:45.101 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 11:53:45.102 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 11:53:45.102 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 11:53:45.102 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 11:53:45.102 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 11:53:45.102 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 11:53:45.280 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 11:53:45.466 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 11:53:45.649 [I]  2022-07-22 11:53:45>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 11:55:27.740 [I]  2022-07-22 11:55:27>%!(EXTRA []interface {}=[nats OK!])
+2022/07/22 11:55:27.743 [I]  2022-07-22 11:55:27>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:55:28.050 [I]  2022-07-22 11:55:28>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:55:28.363 [I]  2022-07-22 11:55:28>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:55:28.674 [I]  2022-07-22 11:55:28>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:55:28.987 [I]  2022-07-22 11:55:28>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 11:55:45.224 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 11:55:45.384 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 11:55:45.705 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 11:55:45.705 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 11:55:45.706 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 11:55:45.706 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 11:55:45.706 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 11:55:45.706 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 11:55:45.706 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 11:55:45.706 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 11:55:45.706 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 11:55:45.706 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 11:55:45.707 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 11:55:45.707 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 11:55:45.707 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 11:55:45.707 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 11:55:45.707 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 11:55:45.707 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 11:55:45.707 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 11:55:45.707 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 11:55:45.707 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 11:55:45.708 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 11:55:45.708 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 11:55:45.708 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 11:55:45.708 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 11:55:45.708 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 11:55:45.708 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 11:55:45.708 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 11:55:45.708 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 11:55:45.709 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 11:55:45.709 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 11:55:45.709 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 11:55:45.709 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 11:55:45.872 [I]  2022-07-22 11:55:45>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 11:55:46.031 [I]  2022-07-22 11:55:46>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 11:55:46.191 [I]  2022-07-22 11:55:46>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 13:35:36.884 [I]  2022-07-22 13:35:36>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 13:35:37.046 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 13:35:37.366 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 13:35:37.367 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 13:35:37.367 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 13:35:37.367 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 13:35:37.367 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 13:35:37.367 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 13:35:37.367 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 13:35:37.367 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 13:35:37.368 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 13:35:37.368 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 13:35:37.368 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 13:35:37.368 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 13:35:37.368 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 13:35:37.368 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 13:35:37.368 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 13:35:37.368 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 13:35:37.369 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 13:35:37.369 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 13:35:37.369 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 13:35:37.369 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 13:35:37.369 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 13:35:37.369 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 13:35:37.369 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 13:35:37.369 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 13:35:37.370 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 13:35:37.370 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 13:35:37.370 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 13:35:37.370 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 13:35:37.370 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 13:35:37.370 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 13:35:37.370 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 13:35:37.531 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 13:35:37.691 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 13:35:37.852 [I]  2022-07-22 13:35:37>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 13:48:06.243 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 13:48:06.404 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 13:48:06.724 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 13:48:06.724 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 13:48:06.724 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 13:48:06.724 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 13:48:06.724 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 13:48:06.724 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 13:48:06.725 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 13:48:06.725 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 13:48:06.725 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 13:48:06.725 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 13:48:06.725 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 13:48:06.725 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 13:48:06.725 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 13:48:06.725 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 13:48:06.726 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 13:48:06.726 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 13:48:06.726 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 13:48:06.726 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 13:48:06.726 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 13:48:06.726 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 13:48:06.726 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 13:48:06.727 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 13:48:06.727 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 13:48:06.727 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 13:48:06.727 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 13:48:06.727 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 13:48:06.727 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 13:48:06.727 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 13:48:06.727 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 13:48:06.727 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 13:48:06.728 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 13:48:06.887 [I]  2022-07-22 13:48:06>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 13:48:07.046 [I]  2022-07-22 13:48:07>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 13:48:07.211 [I]  2022-07-22 13:48:07>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 13:48:42.371 [I]  2022-07-22 13:48:42>%!(EXTRA []interface {}=[nats OK!])
+2022/07/22 13:48:42.375 [I]  2022-07-22 13:48:42>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 13:48:42.684 [I]  2022-07-22 13:48:42>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 13:48:42.995 [I]  2022-07-22 13:48:42>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 13:48:43.306 [I]  2022-07-22 13:48:43>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 13:48:43.618 [I]  2022-07-22 13:48:43>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 13:48:55.042 [I]  2022-07-22 13:48:55>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 13:48:55.931 [I]  2022-07-22 13:48:55>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 13:48:56.271 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 13:48:56.272 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 13:48:56.272 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 13:48:56.272 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 13:48:56.272 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 13:48:56.272 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 13:48:56.272 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 13:48:56.272 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 13:48:56.273 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 13:48:56.273 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 13:48:56.273 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 13:48:56.273 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 13:48:56.274 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 13:48:56.274 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 13:48:56.274 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 13:48:56.274 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 13:48:56.274 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 13:48:56.274 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 13:48:56.274 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 13:48:56.274 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 13:48:56.274 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 13:48:56.274 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 13:48:56.275 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 13:48:56.275 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 13:48:56.275 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 13:48:56.275 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 13:48:56.275 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 13:48:56.275 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 13:48:56.275 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 13:48:56.276 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 13:48:56.276 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 13:48:56.458 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 13:48:56.628 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 13:48:56.800 [I]  2022-07-22 13:48:56>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 13:49:50.951 [I]  2022-07-22 13:49:50>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 13:49:51.293 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 13:49:51.293 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 13:49:51.293 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 13:49:51.293 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 13:49:51.294 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 13:49:51.294 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 13:49:51.294 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 13:49:51.294 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 13:49:51.294 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 13:49:51.294 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 13:49:51.294 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 13:49:51.294 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 13:49:51.295 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 13:49:51.295 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 13:49:51.295 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 13:49:51.295 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 13:49:51.295 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 13:49:51.295 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 13:49:51.295 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 13:49:51.295 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 13:49:51.295 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 13:49:51.295 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 13:49:51.296 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 13:49:51.296 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 13:49:51.296 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 13:49:51.296 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 13:49:51.296 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 13:49:51.296 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 13:49:51.296 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 13:49:51.296 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 13:49:51.296 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 13:49:51.467 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 13:49:51.636 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 13:49:51.805 [I]  2022-07-22 13:49:51>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 13:49:54.936 [I]  2022-07-22 13:49:54>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 13:49:55.275 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 13:49:55.275 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 13:49:55.276 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 13:49:55.276 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 13:49:55.276 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 13:49:55.276 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 13:49:55.276 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 13:49:55.276 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 13:49:55.276 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 13:49:55.276 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 13:49:55.277 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 13:49:55.277 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 13:49:55.277 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 13:49:55.277 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 13:49:55.277 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 13:49:55.277 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 13:49:55.277 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 13:49:55.278 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 13:49:55.278 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 13:49:55.278 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 13:49:55.278 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 13:49:55.279 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 13:49:55.279 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 13:49:55.279 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 13:49:55.279 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 13:49:55.279 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 13:49:55.279 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 13:49:55.279 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 13:49:55.279 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 13:49:55.280 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 13:49:55.280 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 13:49:55.448 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 13:49:55.623 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 13:49:55.795 [I]  2022-07-22 13:49:55>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 13:57:49.139 [I]  2022-07-22 13:57:49>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats.Read_DeviceSensorParameter YD062289057646669])
+2022/07/22 13:57:52.005 [I]  2022-07-22 13:57:52>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 13:58:08.323 [I]  2022-07-22 13:58:08>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 13:58:09.499 [I]  2022-07-22 13:58:09>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 13:58:10.690 [I]  2022-07-22 13:58:10>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 13:58:11.756 [I]  2022-07-22 13:58:11>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 13:58:12.522 [I]  2022-07-22 13:58:12>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 13:58:13.676 [I]  2022-07-22 13:58:13>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 13:58:14.120 [I]  2022-07-22 13:58:14>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 13:58:17.233 [I]  2022-07-22 13:58:17>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 13:58:17.472 [I]  2022-07-22 13:58:17>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 13:58:17.687 [I]  2022-07-22 13:58:17>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 13:58:27.160 [I]  2022-07-22 13:58:27>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats.Set_DeviceTask {YD062289057646669 stop}])
+2022/07/22 13:58:30.769 [I]  2022-07-22 13:58:30>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 13:58:36.137 [I]  2022-07-22 13:58:36>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats.Set_DeviceTask {YD062289057646669 stop}])
+2022/07/22 13:58:40.158 [I]  2022-07-22 13:58:40>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 13:59:15.738 [I]  2022-07-22 13:59:15>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 13:59:39.198 [I]  2022-07-22 13:59:39>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 13:59:40.210 [I]  2022-07-22 13:59:40>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 13:59:40.422 [I]  2022-07-22 13:59:40>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 13:59:59.882 [I]  2022-07-22 13:59:59>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats.Pu_DeviceParameter {4563 YD062289057646669 测试设备 0 88 112 112 122 62 122 52 22 2 22 0   0 0 0  5ca76637-000b-000a-000b-0c9b90f9586a 0 0 2 2022-07-22 13:59:59.7002508 +0800 CST 2022-07-22 13:59:59.7002508 +0800 CST}])
+2022/07/22 14:00:00.413 [I]  2022-07-22 14:00:00>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 14:00:02.512 [I]  2022-07-22 14:00:02>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 14:00:22.901 [I]  2022-07-22 14:00:22>%!(EXTRA []interface {}=[找到key: KF868131063451805|1])
+2022/07/22 14:00:23.245 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 14:00:23.246 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 14:00:23.246 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 14:00:23.246 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 14:00:23.246 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 14:00:23.246 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 14:00:23.246 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 14:00:23.246 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 14:00:23.246 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 14:00:23.246 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 14:00:23.247 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 14:00:23.247 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 14:00:23.247 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 14:00:23.247 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 14:00:23.247 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 14:00:23.248 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 14:00:23.248 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 14:00:23.248 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 14:00:23.248 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 14:00:23.248 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 14:00:23.248 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 14:00:23.248 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 14:00:23.248 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 14:00:23.248 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 14:00:23.249 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 14:00:23.249 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 14:00:23.249 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 14:00:23.249 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 14:00:23.249 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 14:00:23.249 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 14:00:23.249 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 14:00:23.418 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 14:00:23.587 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[找到key: YD060289057645620|1])
+2022/07/22 14:00:23.756 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 14:00:23.938 [I]  2022-07-22 14:00:23>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 14:00:27.193 [I]  2022-07-22 14:00:27>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 14:10:51.536 [I]  2022-07-22 14:10:51>%!(EXTRA []interface {}=[nats OK!])
+2022/07/22 14:10:51.539 [I]  2022-07-22 14:10:51>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 14:10:51.850 [I]  2022-07-22 14:10:51>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 14:10:52.155 [I]  2022-07-22 14:10:52>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 14:10:52.470 [I]  2022-07-22 14:10:52>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 14:10:52.785 [I]  2022-07-22 14:10:52>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 14:11:05.579 [I]  2022-07-22 14:11:05>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 14:11:09.062 [I]  2022-07-22 14:11:09>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 14:14:17.817 [I]  2022-07-22 14:14:17>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 14:14:46.929 [I]  2022-07-22 14:14:46>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 14:14:55.696 [I]  2022-07-22 14:14:55>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats.Set_DeviceTask {YD062289057646669 stop}])
+2022/07/22 14:15:04.345 [I]  2022-07-22 14:15:04>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats.Set_DeviceTask {YD062289057646669 stop}])
+2022/07/22 14:15:23.300 [I]  2022-07-22 14:15:23>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats.Set_DeviceTask {YD062289057646669 stop}])
+2022/07/22 14:16:40.491 [I]  2022-07-22 14:16:40>%!(EXTRA []interface {}=[nats OK!])
+2022/07/22 14:16:40.493 [I]  2022-07-22 14:16:40>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 14:16:40.798 [I]  2022-07-22 14:16:40>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 14:16:41.113 [I]  2022-07-22 14:16:41>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 14:16:41.427 [I]  2022-07-22 14:16:41>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 14:16:41.739 [I]  2022-07-22 14:16:41>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"localhost:6379","dbNum":"1","password":""}])
+2022/07/22 14:18:35.964 [I]  2022-07-22 14:18:35>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 14:18:44.154 [I]  2022-07-22 14:18:44>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats.Set_DeviceTask {YD062289057646669 stop}])
+2022/07/22 14:18:50.785 [I]  2022-07-22 14:18:50>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 14:22:36.332 [I]  2022-07-22 14:22:36>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats.Set_DeviceTask {YD062289057646669 stop}])
+2022/07/22 14:27:26.258 [I]  2022-07-22 14:27:26>%!(EXTRA []interface {}=[nats OK!])
+2022/07/22 14:27:26.259 [I]  2022-07-22 14:27:26>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:27:26.335 [I]  2022-07-22 14:27:26>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:27:26.410 [I]  2022-07-22 14:27:26>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:27:26.484 [I]  2022-07-22 14:27:26>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:27:26.559 [I]  2022-07-22 14:27:26>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:27:40.728 [I]  2022-07-22 14:27:40>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 14:27:41.298 [I]  2022-07-22 14:27:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 14:27:41.411 [I]  2022-07-22 14:27:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 14:27:41.525 [I]  2022-07-22 14:27:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 14:27:41.646 [I]  2022-07-22 14:27:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 14:27:41.759 [I]  2022-07-22 14:27:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 14:27:41.871 [I]  2022-07-22 14:27:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 14:27:41.983 [I]  2022-07-22 14:27:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 14:27:42.093 [I]  2022-07-22 14:27:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 14:27:42.204 [I]  2022-07-22 14:27:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 14:27:42.320 [I]  2022-07-22 14:27:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 14:27:42.431 [I]  2022-07-22 14:27:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 14:27:42.545 [I]  2022-07-22 14:27:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 14:27:42.657 [I]  2022-07-22 14:27:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 14:27:42.770 [I]  2022-07-22 14:27:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 14:27:42.883 [I]  2022-07-22 14:27:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 14:27:42.995 [I]  2022-07-22 14:27:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 14:27:43.109 [I]  2022-07-22 14:27:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 14:27:43.220 [I]  2022-07-22 14:27:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 14:27:43.331 [I]  2022-07-22 14:27:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 14:27:43.441 [I]  2022-07-22 14:27:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 14:27:43.552 [I]  2022-07-22 14:27:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 14:27:43.663 [I]  2022-07-22 14:27:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 14:27:43.774 [I]  2022-07-22 14:27:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 14:27:43.884 [I]  2022-07-22 14:27:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 14:27:43.997 [I]  2022-07-22 14:27:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 14:27:44.109 [I]  2022-07-22 14:27:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 14:27:44.220 [I]  2022-07-22 14:27:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 14:27:44.332 [I]  2022-07-22 14:27:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 14:27:44.445 [I]  2022-07-22 14:27:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 14:27:44.557 [I]  2022-07-22 14:27:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 14:27:44.668 [I]  2022-07-22 14:27:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 14:27:45.055 [I]  2022-07-22 14:27:45>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 14:27:45.448 [I]  2022-07-22 14:27:45>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 14:27:45.836 [I]  2022-07-22 14:27:45>%!(EXTRA []interface {}=[没有 找到key: YD862289058335130|1])
+2022/07/22 14:27:46.225 [I]  2022-07-22 14:27:46>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 14:27:52.222 [I]  2022-07-22 14:27:52>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 14:28:02.895 [I]  2022-07-22 14:28:02>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats.Set_DeviceTask {YD062289057646669 start}])
+2022/07/22 14:28:06.422 [I]  2022-07-22 14:28:06>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 14:28:13.145 [I]  2022-07-22 14:28:13>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats.Set_DeviceTask {YD062289057646669 stop}])
+2022/07/22 14:28:16.790 [I]  2022-07-22 14:28:16>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 14:28:23.164 [I]  2022-07-22 14:28:23>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 14:28:31.166 [I]  2022-07-22 14:28:31>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 14:28:32.221 [I]  2022-07-22 14:28:32>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 14:32:22.011 [I]  2022-07-22 14:32:22>%!(EXTRA []interface {}=[nats OK!])
+2022/07/22 14:32:22.013 [I]  2022-07-22 14:32:22>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:32:22.088 [I]  2022-07-22 14:32:22>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:32:22.162 [I]  2022-07-22 14:32:22>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:32:22.236 [I]  2022-07-22 14:32:22>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:32:22.310 [I]  2022-07-22 14:32:22>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:32:25.504 [I]  2022-07-22 14:32:25>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 14:32:40.351 [I]  2022-07-22 14:32:40>%!(EXTRA []interface {}=[没有 找到key: YD062289057646669|1])
+2022/07/22 14:34:43.875 [I]  2022-07-22 14:34:43>%!(EXTRA []interface {}=[nats OK!])
+2022/07/22 14:34:43.877 [I]  2022-07-22 14:34:43>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:34:43.951 [I]  2022-07-22 14:34:43>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:34:44.027 [I]  2022-07-22 14:34:44>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:34:44.103 [I]  2022-07-22 14:34:44>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:34:44.179 [I]  2022-07-22 14:34:44>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:34:47.681 [I]  2022-07-22 14:34:47>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 14:34:47.717 [I]  2022-07-22 14:34:47>%!(EXTRA []interface {}=[时间对比: 2022-07-22 13:57:51 2022-07-22 14:28:16])
+2022/07/22 14:35:15.842 [I]  2022-07-22 14:35:15>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 14:35:15.881 [I]  2022-07-22 14:35:15>%!(EXTRA []interface {}=[时间对比: 2022-07-22 13:57:51 2022-07-22 14:28:16])
+2022/07/22 14:35:17.377 [I]  2022-07-22 14:35:17>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 14:35:17.415 [I]  2022-07-22 14:35:17>%!(EXTRA []interface {}=[时间对比: 2022-07-22 13:57:51 2022-07-22 14:28:16])
+2022/07/22 14:35:38.537 [I]  2022-07-22 14:35:38>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats.Set_DeviceTask {YD062289057646669 start}])
+2022/07/22 14:35:44.884 [I]  2022-07-22 14:35:44>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 14:35:44.920 [I]  2022-07-22 14:35:44>%!(EXTRA []interface {}=[时间对比: 2022-07-22 13:57:51 2022-07-22 14:35:45])
+2022/07/22 14:42:39.590 [I]  2022-07-22 14:42:39>%!(EXTRA []interface {}=[nats OK!])
+2022/07/22 14:42:39.592 [I]  2022-07-22 14:42:39>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:42:39.666 [I]  2022-07-22 14:42:39>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:42:39.740 [I]  2022-07-22 14:42:39>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:42:39.814 [I]  2022-07-22 14:42:39>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:42:39.889 [I]  2022-07-22 14:42:39>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:42:53.968 [I]  2022-07-22 14:42:53>%!(EXTRA []interface {}=[nats OK!])
+2022/07/22 14:42:53.969 [I]  2022-07-22 14:42:53>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:42:54.043 [I]  2022-07-22 14:42:54>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:42:54.118 [I]  2022-07-22 14:42:54>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:42:54.199 [I]  2022-07-22 14:42:54>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:42:54.274 [I]  2022-07-22 14:42:54>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:43:54.775 [I]  2022-07-22 14:43:54>%!(EXTRA []interface {}=[nats OK!])
+2022/07/22 14:43:54.777 [I]  2022-07-22 14:43:54>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:43:54.853 [I]  2022-07-22 14:43:54>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:43:54.927 [I]  2022-07-22 14:43:54>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:43:55.003 [I]  2022-07-22 14:43:55>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:43:55.078 [I]  2022-07-22 14:43:55>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 14:58:38.398 [I]  2022-07-22 14:58:38>%!(EXTRA []interface {}=[找到key: KF868131063451805|1])
+2022/07/22 14:58:38.436 [I]  2022-07-22 14:58:38>%!(EXTRA []interface {}=[时间对比: 2022-07-15 14:59:54 2022-07-21 14:41:08])
+2022/07/22 14:58:38.890 [I]  2022-07-22 14:58:38>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 14:58:39.001 [I]  2022-07-22 14:58:39>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 14:58:39.112 [I]  2022-07-22 14:58:39>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 14:58:39.224 [I]  2022-07-22 14:58:39>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 14:58:39.334 [I]  2022-07-22 14:58:39>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 14:58:39.444 [I]  2022-07-22 14:58:39>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 14:58:39.555 [I]  2022-07-22 14:58:39>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 14:58:39.672 [I]  2022-07-22 14:58:39>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 14:58:39.782 [I]  2022-07-22 14:58:39>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 14:58:39.892 [I]  2022-07-22 14:58:39>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 14:58:40.005 [I]  2022-07-22 14:58:40>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 14:58:40.117 [I]  2022-07-22 14:58:40>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 14:58:40.226 [I]  2022-07-22 14:58:40>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 14:58:40.337 [I]  2022-07-22 14:58:40>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 14:58:40.447 [I]  2022-07-22 14:58:40>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 14:58:40.559 [I]  2022-07-22 14:58:40>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 14:58:40.672 [I]  2022-07-22 14:58:40>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 14:58:40.798 [I]  2022-07-22 14:58:40>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 14:58:40.907 [I]  2022-07-22 14:58:40>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 14:58:41.027 [I]  2022-07-22 14:58:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 14:58:41.139 [I]  2022-07-22 14:58:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 14:58:41.250 [I]  2022-07-22 14:58:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 14:58:41.362 [I]  2022-07-22 14:58:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 14:58:41.471 [I]  2022-07-22 14:58:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 14:58:41.581 [I]  2022-07-22 14:58:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 14:58:41.693 [I]  2022-07-22 14:58:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 14:58:41.804 [I]  2022-07-22 14:58:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 14:58:41.916 [I]  2022-07-22 14:58:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 14:58:42.026 [I]  2022-07-22 14:58:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 14:58:42.147 [I]  2022-07-22 14:58:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 14:58:42.258 [I]  2022-07-22 14:58:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 14:58:42.680 [I]  2022-07-22 14:58:42>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 14:58:42.717 [I]  2022-07-22 14:58:42>%!(EXTRA []interface {}=[时间对比: 2022-07-20 12:57:12 2022-07-22 14:53:00])
+2022/07/22 14:58:42.818 [I]  2022-07-22 14:58:42>%!(EXTRA []interface {}=[找到key: KF868131063451805|1])
+2022/07/22 14:58:42.855 [I]  2022-07-22 14:58:42>%!(EXTRA []interface {}=[时间对比: 2022-07-15 14:59:54 2022-07-21 14:41:08])
+2022/07/22 14:58:42.993 [I]  2022-07-22 14:58:42>%!(EXTRA []interface {}=[找到key: YD060289057645620|1])
+2022/07/22 14:58:43.029 [I]  2022-07-22 14:58:43>%!(EXTRA []interface {}=[时间对比: 2022-07-20 13:20:30 2022-07-22 13:06:00])
+2022/07/22 14:58:43.285 [I]  2022-07-22 14:58:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 14:58:43.382 [I]  2022-07-22 14:58:43>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 14:58:43.394 [I]  2022-07-22 14:58:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 14:58:43.422 [I]  2022-07-22 14:58:43>%!(EXTRA []interface {}=[时间对比: 2022-07-20 18:12:43 2022-07-22 14:54:00])
+2022/07/22 14:58:43.504 [I]  2022-07-22 14:58:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 14:58:43.614 [I]  2022-07-22 14:58:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 14:58:43.694 [I]  2022-07-22 14:58:43>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 14:58:43.725 [I]  2022-07-22 14:58:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 14:58:43.730 [I]  2022-07-22 14:58:43>%!(EXTRA []interface {}=[时间对比: 2022-07-22 13:57:51 2022-07-22 14:57:00])
+2022/07/22 14:58:43.837 [I]  2022-07-22 14:58:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 14:58:43.947 [I]  2022-07-22 14:58:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 14:58:44.057 [I]  2022-07-22 14:58:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 14:58:44.166 [I]  2022-07-22 14:58:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 14:58:44.276 [I]  2022-07-22 14:58:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 14:58:44.401 [I]  2022-07-22 14:58:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 14:58:44.512 [I]  2022-07-22 14:58:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 14:58:44.627 [I]  2022-07-22 14:58:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 14:58:44.740 [I]  2022-07-22 14:58:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 14:58:44.852 [I]  2022-07-22 14:58:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 14:58:44.962 [I]  2022-07-22 14:58:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 14:58:45.073 [I]  2022-07-22 14:58:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 14:58:45.182 [I]  2022-07-22 14:58:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 14:58:45.292 [I]  2022-07-22 14:58:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 14:58:45.407 [I]  2022-07-22 14:58:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 14:58:45.517 [I]  2022-07-22 14:58:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 14:58:45.628 [I]  2022-07-22 14:58:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 14:58:45.738 [I]  2022-07-22 14:58:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 14:58:45.849 [I]  2022-07-22 14:58:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 14:58:45.959 [I]  2022-07-22 14:58:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 14:58:46.069 [I]  2022-07-22 14:58:46>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 14:58:46.183 [I]  2022-07-22 14:58:46>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 14:58:46.294 [I]  2022-07-22 14:58:46>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 14:58:46.404 [I]  2022-07-22 14:58:46>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 14:58:46.519 [I]  2022-07-22 14:58:46>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 14:58:46.630 [I]  2022-07-22 14:58:46>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 14:58:46.904 [I]  2022-07-22 14:58:46>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 14:58:46.941 [I]  2022-07-22 14:58:46>%!(EXTRA []interface {}=[时间对比: 2022-07-20 12:57:12 2022-07-22 14:53:00])
+2022/07/22 14:58:47.216 [I]  2022-07-22 14:58:47>%!(EXTRA []interface {}=[找到key: YD060289057645620|1])
+2022/07/22 14:58:47.253 [I]  2022-07-22 14:58:47>%!(EXTRA []interface {}=[时间对比: 2022-07-20 13:20:30 2022-07-22 13:06:00])
+2022/07/22 14:58:47.530 [I]  2022-07-22 14:58:47>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 14:58:47.567 [I]  2022-07-22 14:58:47>%!(EXTRA []interface {}=[时间对比: 2022-07-20 18:12:43 2022-07-22 14:54:00])
+2022/07/22 14:58:47.846 [I]  2022-07-22 14:58:47>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 14:58:47.884 [I]  2022-07-22 14:58:47>%!(EXTRA []interface {}=[时间对比: 2022-07-22 13:57:51 2022-07-22 14:57:00])
+2022/07/22 15:28:17.225 [I]  2022-07-22 15:28:17>%!(EXTRA []interface {}=[nats OK!])
+2022/07/22 15:28:17.227 [I]  2022-07-22 15:28:17>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 15:28:17.301 [I]  2022-07-22 15:28:17>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 15:28:17.377 [I]  2022-07-22 15:28:17>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 15:28:17.452 [I]  2022-07-22 15:28:17>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 15:28:17.526 [I]  2022-07-22 15:28:17>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"192.168.192.63:6379","dbNum":"1","password":""}])
+2022/07/22 15:28:31.354 [I]  2022-07-22 15:28:31>%!(EXTRA []interface {}=[找到key: KF868131063451805|1])
+2022/07/22 15:28:31.392 [I]  2022-07-22 15:28:31>%!(EXTRA []interface {}=[时间对比: 2022-07-15 14:59:54 2022-07-21 14:41:08])
+2022/07/22 15:28:31.845 [I]  2022-07-22 15:28:31>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 15:28:31.956 [I]  2022-07-22 15:28:31>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 15:28:32.067 [I]  2022-07-22 15:28:32>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 15:28:32.178 [I]  2022-07-22 15:28:32>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 15:28:32.288 [I]  2022-07-22 15:28:32>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 15:28:32.398 [I]  2022-07-22 15:28:32>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 15:28:32.507 [I]  2022-07-22 15:28:32>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 15:28:32.618 [I]  2022-07-22 15:28:32>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 15:28:32.728 [I]  2022-07-22 15:28:32>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 15:28:32.839 [I]  2022-07-22 15:28:32>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 15:28:32.954 [I]  2022-07-22 15:28:32>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 15:28:33.070 [I]  2022-07-22 15:28:33>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 15:28:33.193 [I]  2022-07-22 15:28:33>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 15:28:33.304 [I]  2022-07-22 15:28:33>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 15:28:33.424 [I]  2022-07-22 15:28:33>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 15:28:33.536 [I]  2022-07-22 15:28:33>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 15:28:33.645 [I]  2022-07-22 15:28:33>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 15:28:33.758 [I]  2022-07-22 15:28:33>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 15:28:33.873 [I]  2022-07-22 15:28:33>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 15:28:33.984 [I]  2022-07-22 15:28:33>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 15:28:34.095 [I]  2022-07-22 15:28:34>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 15:28:34.206 [I]  2022-07-22 15:28:34>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 15:28:34.318 [I]  2022-07-22 15:28:34>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 15:28:34.431 [I]  2022-07-22 15:28:34>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 15:28:34.542 [I]  2022-07-22 15:28:34>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 15:28:34.654 [I]  2022-07-22 15:28:34>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 15:28:34.765 [I]  2022-07-22 15:28:34>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 15:28:34.878 [I]  2022-07-22 15:28:34>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 15:28:34.988 [I]  2022-07-22 15:28:34>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 15:28:35.101 [I]  2022-07-22 15:28:35>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 15:28:35.219 [I]  2022-07-22 15:28:35>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 15:28:35.508 [I]  2022-07-22 15:28:35>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 15:28:35.545 [I]  2022-07-22 15:28:35>%!(EXTRA []interface {}=[时间对比: 2022-07-20 12:57:12 2022-07-22 14:53:00])
+2022/07/22 15:28:35.827 [I]  2022-07-22 15:28:35>%!(EXTRA []interface {}=[找到key: YD060289057645620|1])
+2022/07/22 15:28:35.864 [I]  2022-07-22 15:28:35>%!(EXTRA []interface {}=[时间对比: 2022-07-20 13:20:30 2022-07-22 13:06:00])
+2022/07/22 15:28:36.153 [I]  2022-07-22 15:28:36>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 15:28:36.191 [I]  2022-07-22 15:28:36>%!(EXTRA []interface {}=[时间对比: 2022-07-20 18:12:43 2022-07-22 15:26:00])
+2022/07/22 15:28:36.471 [I]  2022-07-22 15:28:36>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 15:28:36.508 [I]  2022-07-22 15:28:36>%!(EXTRA []interface {}=[时间对比: 2022-07-22 13:57:51 2022-07-22 15:27:00])
+2022/07/22 15:37:46.073 [I]  2022-07-22 15:37:46>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 15:37:46.512 [I]  2022-07-22 15:37:46>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 15:37:46.625 [I]  2022-07-22 15:37:46>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 15:37:46.738 [I]  2022-07-22 15:37:46>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 15:37:46.849 [I]  2022-07-22 15:37:46>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 15:37:46.961 [I]  2022-07-22 15:37:46>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 15:37:47.072 [I]  2022-07-22 15:37:47>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 15:37:47.184 [I]  2022-07-22 15:37:47>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 15:37:47.294 [I]  2022-07-22 15:37:47>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 15:37:47.405 [I]  2022-07-22 15:37:47>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 15:37:47.516 [I]  2022-07-22 15:37:47>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 15:37:47.625 [I]  2022-07-22 15:37:47>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 15:37:47.736 [I]  2022-07-22 15:37:47>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 15:37:47.846 [I]  2022-07-22 15:37:47>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 15:37:47.957 [I]  2022-07-22 15:37:47>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 15:37:48.068 [I]  2022-07-22 15:37:48>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 15:37:48.179 [I]  2022-07-22 15:37:48>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 15:37:48.292 [I]  2022-07-22 15:37:48>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 15:37:48.404 [I]  2022-07-22 15:37:48>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 15:37:48.515 [I]  2022-07-22 15:37:48>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 15:37:48.629 [I]  2022-07-22 15:37:48>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 15:37:48.740 [I]  2022-07-22 15:37:48>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 15:37:48.851 [I]  2022-07-22 15:37:48>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 15:37:48.963 [I]  2022-07-22 15:37:48>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 15:37:49.075 [I]  2022-07-22 15:37:49>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 15:37:49.186 [I]  2022-07-22 15:37:49>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 15:37:49.299 [I]  2022-07-22 15:37:49>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 15:37:49.410 [I]  2022-07-22 15:37:49>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 15:37:49.521 [I]  2022-07-22 15:37:49>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 15:37:49.631 [I]  2022-07-22 15:37:49>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 15:37:49.743 [I]  2022-07-22 15:37:49>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 15:37:49.854 [I]  2022-07-22 15:37:49>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 15:37:50.134 [I]  2022-07-22 15:37:50>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 15:37:50.172 [I]  2022-07-22 15:37:50>%!(EXTRA []interface {}=[时间对比: 2022-07-20 12:57:12 2022-07-22 14:53:00])
+2022/07/22 15:37:50.443 [I]  2022-07-22 15:37:50>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 15:37:50.724 [I]  2022-07-22 15:37:50>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 15:37:50.761 [I]  2022-07-22 15:37:50>%!(EXTRA []interface {}=[时间对比: 2022-07-20 18:12:43 2022-07-22 15:36:00])
+2022/07/22 15:37:51.036 [I]  2022-07-22 15:37:51>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 15:37:51.073 [I]  2022-07-22 15:37:51>%!(EXTRA []interface {}=[时间对比: 2022-07-22 13:57:51 2022-07-22 15:36:00])
+2022/07/22 15:38:17.569 [I]  2022-07-22 15:38:17>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 15:38:18.005 [I]  2022-07-22 15:38:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 15:38:18.115 [I]  2022-07-22 15:38:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 15:38:18.231 [I]  2022-07-22 15:38:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 15:38:18.342 [I]  2022-07-22 15:38:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 15:38:18.456 [I]  2022-07-22 15:38:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 15:38:18.568 [I]  2022-07-22 15:38:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 15:38:18.678 [I]  2022-07-22 15:38:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 15:38:18.790 [I]  2022-07-22 15:38:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 15:38:18.901 [I]  2022-07-22 15:38:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 15:38:19.013 [I]  2022-07-22 15:38:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 15:38:19.124 [I]  2022-07-22 15:38:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 15:38:19.234 [I]  2022-07-22 15:38:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 15:38:19.350 [I]  2022-07-22 15:38:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 15:38:19.462 [I]  2022-07-22 15:38:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 15:38:19.573 [I]  2022-07-22 15:38:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 15:38:19.688 [I]  2022-07-22 15:38:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 15:38:19.798 [I]  2022-07-22 15:38:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 15:38:19.910 [I]  2022-07-22 15:38:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 15:38:20.020 [I]  2022-07-22 15:38:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 15:38:20.131 [I]  2022-07-22 15:38:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 15:38:20.241 [I]  2022-07-22 15:38:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 15:38:20.352 [I]  2022-07-22 15:38:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 15:38:20.464 [I]  2022-07-22 15:38:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 15:38:20.579 [I]  2022-07-22 15:38:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 15:38:20.690 [I]  2022-07-22 15:38:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 15:38:20.804 [I]  2022-07-22 15:38:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 15:38:20.915 [I]  2022-07-22 15:38:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 15:38:21.025 [I]  2022-07-22 15:38:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 15:38:21.138 [I]  2022-07-22 15:38:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 15:38:21.249 [I]  2022-07-22 15:38:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 15:38:21.360 [I]  2022-07-22 15:38:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 15:38:21.641 [I]  2022-07-22 15:38:21>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 15:38:21.680 [I]  2022-07-22 15:38:21>%!(EXTRA []interface {}=[时间对比: 2022-07-20 12:57:12 2022-07-22 14:53:00])
+2022/07/22 15:38:21.962 [I]  2022-07-22 15:38:21>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 15:38:22.235 [I]  2022-07-22 15:38:22>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 15:38:22.272 [I]  2022-07-22 15:38:22>%!(EXTRA []interface {}=[时间对比: 2022-07-20 18:12:43 2022-07-22 15:36:00])
+2022/07/22 15:38:22.546 [I]  2022-07-22 15:38:22>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 15:38:22.583 [I]  2022-07-22 15:38:22>%!(EXTRA []interface {}=[时间对比: 2022-07-22 13:57:51 2022-07-22 15:38:00])
+2022/07/22 15:44:14.024 [I]  2022-07-22 15:44:14>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 15:44:14.462 [I]  2022-07-22 15:44:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 15:44:14.574 [I]  2022-07-22 15:44:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 15:44:14.685 [I]  2022-07-22 15:44:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 15:44:14.798 [I]  2022-07-22 15:44:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 15:44:14.908 [I]  2022-07-22 15:44:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 15:44:15.023 [I]  2022-07-22 15:44:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 15:44:15.133 [I]  2022-07-22 15:44:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 15:44:15.243 [I]  2022-07-22 15:44:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 15:44:15.355 [I]  2022-07-22 15:44:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 15:44:15.465 [I]  2022-07-22 15:44:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 15:44:15.577 [I]  2022-07-22 15:44:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 15:44:15.687 [I]  2022-07-22 15:44:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 15:44:15.798 [I]  2022-07-22 15:44:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 15:44:15.908 [I]  2022-07-22 15:44:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 15:44:16.020 [I]  2022-07-22 15:44:16>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 15:44:16.131 [I]  2022-07-22 15:44:16>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 15:44:16.240 [I]  2022-07-22 15:44:16>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 15:44:16.351 [I]  2022-07-22 15:44:16>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 15:44:16.461 [I]  2022-07-22 15:44:16>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 15:44:16.574 [I]  2022-07-22 15:44:16>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 15:44:16.685 [I]  2022-07-22 15:44:16>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 15:44:16.795 [I]  2022-07-22 15:44:16>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 15:44:16.905 [I]  2022-07-22 15:44:16>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 15:44:17.014 [I]  2022-07-22 15:44:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 15:44:17.124 [I]  2022-07-22 15:44:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 15:44:17.236 [I]  2022-07-22 15:44:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 15:44:17.351 [I]  2022-07-22 15:44:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 15:44:17.462 [I]  2022-07-22 15:44:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 15:44:17.577 [I]  2022-07-22 15:44:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 15:44:17.687 [I]  2022-07-22 15:44:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 15:44:17.828 [I]  2022-07-22 15:44:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 15:44:18.098 [I]  2022-07-22 15:44:18>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 15:44:18.135 [I]  2022-07-22 15:44:18>%!(EXTRA []interface {}=[时间对比: 2022-07-20 12:57:12 2022-07-22 14:53:00])
+2022/07/22 15:44:18.407 [I]  2022-07-22 15:44:18>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 15:44:18.679 [I]  2022-07-22 15:44:18>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 15:44:18.716 [I]  2022-07-22 15:44:18>%!(EXTRA []interface {}=[时间对比: 2022-07-20 18:12:43 2022-07-22 15:41:00])
+2022/07/22 15:44:18.989 [I]  2022-07-22 15:44:18>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 15:44:19.025 [I]  2022-07-22 15:44:19>%!(EXTRA []interface {}=[时间对比: 2022-07-22 13:57:51 2022-07-22 15:43:00])
+2022/07/22 15:46:16.946 [I]  2022-07-22 15:46:16>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 15:46:17.375 [I]  2022-07-22 15:46:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 15:46:17.508 [I]  2022-07-22 15:46:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 15:46:17.620 [I]  2022-07-22 15:46:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 15:46:17.731 [I]  2022-07-22 15:46:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 15:46:17.846 [I]  2022-07-22 15:46:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 15:46:17.957 [I]  2022-07-22 15:46:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 15:46:18.070 [I]  2022-07-22 15:46:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 15:46:18.181 [I]  2022-07-22 15:46:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 15:46:18.293 [I]  2022-07-22 15:46:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 15:46:18.407 [I]  2022-07-22 15:46:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 15:46:18.521 [I]  2022-07-22 15:46:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 15:46:18.632 [I]  2022-07-22 15:46:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 15:46:18.742 [I]  2022-07-22 15:46:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 15:46:18.854 [I]  2022-07-22 15:46:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 15:46:18.964 [I]  2022-07-22 15:46:18>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 15:46:19.076 [I]  2022-07-22 15:46:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 15:46:19.186 [I]  2022-07-22 15:46:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 15:46:19.297 [I]  2022-07-22 15:46:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 15:46:19.411 [I]  2022-07-22 15:46:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 15:46:19.522 [I]  2022-07-22 15:46:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 15:46:19.634 [I]  2022-07-22 15:46:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 15:46:19.746 [I]  2022-07-22 15:46:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 15:46:19.856 [I]  2022-07-22 15:46:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 15:46:19.967 [I]  2022-07-22 15:46:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 15:46:20.079 [I]  2022-07-22 15:46:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 15:46:20.191 [I]  2022-07-22 15:46:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 15:46:20.303 [I]  2022-07-22 15:46:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 15:46:20.414 [I]  2022-07-22 15:46:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 15:46:20.525 [I]  2022-07-22 15:46:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 15:46:20.642 [I]  2022-07-22 15:46:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 15:46:20.775 [I]  2022-07-22 15:46:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 15:46:21.043 [I]  2022-07-22 15:46:21>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 15:46:21.081 [I]  2022-07-22 15:46:21>%!(EXTRA []interface {}=[时间对比: 2022-07-20 12:57:12 2022-07-22 14:53:00])
+2022/07/22 15:46:21.345 [I]  2022-07-22 15:46:21>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 15:46:21.608 [I]  2022-07-22 15:46:21>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 15:46:21.647 [I]  2022-07-22 15:46:21>%!(EXTRA []interface {}=[时间对比: 2022-07-20 18:12:43 2022-07-22 15:46:00])
+2022/07/22 15:46:21.913 [I]  2022-07-22 15:46:21>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 15:46:21.950 [I]  2022-07-22 15:46:21>%!(EXTRA []interface {}=[时间对比: 2022-07-22 13:57:51 2022-07-22 15:45:00])
+2022/07/22 15:46:39.565 [I]  2022-07-22 15:46:39>%!(EXTRA []interface {}=[找到key: YD062289057646669|1])
+2022/07/22 15:46:39.602 [I]  2022-07-22 15:46:39>%!(EXTRA []interface {}=[时间对比: 2022-07-22 13:57:51 2022-07-22 15:46:00])
+2022/07/22 15:46:40.713 [I]  2022-07-22 15:46:40>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 15:46:41.134 [I]  2022-07-22 15:46:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 15:46:41.245 [I]  2022-07-22 15:46:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 15:46:41.356 [I]  2022-07-22 15:46:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 15:46:41.468 [I]  2022-07-22 15:46:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 15:46:41.579 [I]  2022-07-22 15:46:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 15:46:41.690 [I]  2022-07-22 15:46:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 15:46:41.801 [I]  2022-07-22 15:46:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 15:46:41.919 [I]  2022-07-22 15:46:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 15:46:42.029 [I]  2022-07-22 15:46:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 15:46:42.141 [I]  2022-07-22 15:46:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 15:46:42.251 [I]  2022-07-22 15:46:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 15:46:42.364 [I]  2022-07-22 15:46:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 15:46:42.477 [I]  2022-07-22 15:46:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 15:46:42.588 [I]  2022-07-22 15:46:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 15:46:42.698 [I]  2022-07-22 15:46:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 15:46:42.809 [I]  2022-07-22 15:46:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 15:46:42.923 [I]  2022-07-22 15:46:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 15:46:43.035 [I]  2022-07-22 15:46:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 15:46:43.149 [I]  2022-07-22 15:46:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 15:46:43.259 [I]  2022-07-22 15:46:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 15:46:43.370 [I]  2022-07-22 15:46:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 15:46:43.483 [I]  2022-07-22 15:46:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 15:46:43.594 [I]  2022-07-22 15:46:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 15:46:43.704 [I]  2022-07-22 15:46:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 15:46:43.814 [I]  2022-07-22 15:46:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 15:46:43.936 [I]  2022-07-22 15:46:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 15:46:44.048 [I]  2022-07-22 15:46:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 15:46:44.158 [I]  2022-07-22 15:46:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 15:46:44.270 [I]  2022-07-22 15:46:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 15:46:44.352 [I]  2022-07-22 15:46:44>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 15:46:44.455 [I]  2022-07-22 15:46:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 15:46:44.565 [I]  2022-07-22 15:46:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 15:46:44.769 [I]  2022-07-22 15:46:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 15:46:44.879 [I]  2022-07-22 15:46:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 15:46:44.990 [I]  2022-07-22 15:46:44>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 15:46:44.993 [I]  2022-07-22 15:46:44>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 15:46:45.030 [I]  2022-07-22 15:46:45>%!(EXTRA []interface {}=[时间对比: 2022-07-20 12:57:12 2022-07-22 14:53:00])
+2022/07/22 15:46:45.101 [I]  2022-07-22 15:46:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 15:46:45.212 [I]  2022-07-22 15:46:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 15:46:45.298 [I]  2022-07-22 15:46:45>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 15:46:45.322 [I]  2022-07-22 15:46:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 15:46:45.432 [I]  2022-07-22 15:46:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 15:46:45.544 [I]  2022-07-22 15:46:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 15:46:45.567 [I]  2022-07-22 15:46:45>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 15:46:45.605 [I]  2022-07-22 15:46:45>%!(EXTRA []interface {}=[时间对比: 2022-07-20 18:12:43 2022-07-22 15:46:00])
+2022/07/22 15:46:45.656 [I]  2022-07-22 15:46:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 15:46:45.768 [I]  2022-07-22 15:46:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 15:46:45.878 [I]  2022-07-22 15:46:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 15:46:45.991 [I]  2022-07-22 15:46:45>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 15:46:46.111 [I]  2022-07-22 15:46:46>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 15:46:46.222 [I]  2022-07-22 15:46:46>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 15:46:46.333 [I]  2022-07-22 15:46:46>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 15:46:46.443 [I]  2022-07-22 15:46:46>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 15:46:46.554 [I]  2022-07-22 15:46:46>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 15:46:46.671 [I]  2022-07-22 15:46:46>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 15:46:46.781 [I]  2022-07-22 15:46:46>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 15:46:46.895 [I]  2022-07-22 15:46:46>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 15:46:47.005 [I]  2022-07-22 15:46:47>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 15:46:47.115 [I]  2022-07-22 15:46:47>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 15:46:47.226 [I]  2022-07-22 15:46:47>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 15:46:47.338 [I]  2022-07-22 15:46:47>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 15:46:47.448 [I]  2022-07-22 15:46:47>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 15:46:47.560 [I]  2022-07-22 15:46:47>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 15:46:47.670 [I]  2022-07-22 15:46:47>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 15:46:47.782 [I]  2022-07-22 15:46:47>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 15:46:47.906 [I]  2022-07-22 15:46:47>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 15:46:48.032 [I]  2022-07-22 15:46:48>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 15:46:48.148 [I]  2022-07-22 15:46:48>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 15:46:48.415 [I]  2022-07-22 15:46:48>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 15:46:48.453 [I]  2022-07-22 15:46:48>%!(EXTRA []interface {}=[时间对比: 2022-07-20 12:57:12 2022-07-22 14:53:00])
+2022/07/22 15:46:48.724 [I]  2022-07-22 15:46:48>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 15:46:49.013 [I]  2022-07-22 15:46:49>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 15:46:49.050 [I]  2022-07-22 15:46:49>%!(EXTRA []interface {}=[时间对比: 2022-07-20 18:12:43 2022-07-22 15:46:00])
+2022/07/22 15:47:04.666 [I]  2022-07-22 15:47:04>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 15:47:05.095 [I]  2022-07-22 15:47:05>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 15:47:05.206 [I]  2022-07-22 15:47:05>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 15:47:05.318 [I]  2022-07-22 15:47:05>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 15:47:05.432 [I]  2022-07-22 15:47:05>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 15:47:05.543 [I]  2022-07-22 15:47:05>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 15:47:05.654 [I]  2022-07-22 15:47:05>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 15:47:05.765 [I]  2022-07-22 15:47:05>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 15:47:05.878 [I]  2022-07-22 15:47:05>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 15:47:05.989 [I]  2022-07-22 15:47:05>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 15:47:06.103 [I]  2022-07-22 15:47:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 15:47:06.213 [I]  2022-07-22 15:47:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 15:47:06.323 [I]  2022-07-22 15:47:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 15:47:06.436 [I]  2022-07-22 15:47:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 15:47:06.547 [I]  2022-07-22 15:47:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 15:47:06.663 [I]  2022-07-22 15:47:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 15:47:06.780 [I]  2022-07-22 15:47:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 15:47:06.896 [I]  2022-07-22 15:47:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 15:47:07.008 [I]  2022-07-22 15:47:07>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 15:47:07.119 [I]  2022-07-22 15:47:07>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 15:47:07.229 [I]  2022-07-22 15:47:07>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 15:47:07.342 [I]  2022-07-22 15:47:07>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 15:47:07.453 [I]  2022-07-22 15:47:07>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 15:47:07.566 [I]  2022-07-22 15:47:07>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 15:47:07.678 [I]  2022-07-22 15:47:07>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 15:47:07.788 [I]  2022-07-22 15:47:07>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 15:47:07.899 [I]  2022-07-22 15:47:07>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 15:47:08.014 [I]  2022-07-22 15:47:08>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 15:47:08.125 [I]  2022-07-22 15:47:08>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 15:47:08.245 [I]  2022-07-22 15:47:08>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 15:47:08.355 [I]  2022-07-22 15:47:08>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 15:47:08.466 [I]  2022-07-22 15:47:08>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 15:47:08.735 [I]  2022-07-22 15:47:08>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 15:47:08.773 [I]  2022-07-22 15:47:08>%!(EXTRA []interface {}=[时间对比: 2022-07-20 12:57:12 2022-07-22 14:53:00])
+2022/07/22 15:47:09.050 [I]  2022-07-22 15:47:09>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 15:47:09.323 [I]  2022-07-22 15:47:09>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 15:47:09.361 [I]  2022-07-22 15:47:09>%!(EXTRA []interface {}=[时间对比: 2022-07-20 18:12:43 2022-07-22 15:46:00])
+2022/07/22 15:47:39.754 [I]  2022-07-22 15:47:39>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 15:47:40.247 [I]  2022-07-22 15:47:40>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 15:47:40.359 [I]  2022-07-22 15:47:40>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 15:47:40.470 [I]  2022-07-22 15:47:40>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 15:47:40.583 [I]  2022-07-22 15:47:40>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 15:47:40.695 [I]  2022-07-22 15:47:40>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 15:47:40.807 [I]  2022-07-22 15:47:40>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 15:47:40.924 [I]  2022-07-22 15:47:40>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 15:47:41.036 [I]  2022-07-22 15:47:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 15:47:41.146 [I]  2022-07-22 15:47:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 15:47:41.257 [I]  2022-07-22 15:47:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 15:47:41.368 [I]  2022-07-22 15:47:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 15:47:41.479 [I]  2022-07-22 15:47:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 15:47:41.589 [I]  2022-07-22 15:47:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 15:47:41.700 [I]  2022-07-22 15:47:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 15:47:41.811 [I]  2022-07-22 15:47:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 15:47:41.933 [I]  2022-07-22 15:47:41>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 15:47:42.044 [I]  2022-07-22 15:47:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 15:47:42.154 [I]  2022-07-22 15:47:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 15:47:42.271 [I]  2022-07-22 15:47:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 15:47:42.382 [I]  2022-07-22 15:47:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 15:47:42.493 [I]  2022-07-22 15:47:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 15:47:42.606 [I]  2022-07-22 15:47:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 15:47:42.719 [I]  2022-07-22 15:47:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 15:47:42.831 [I]  2022-07-22 15:47:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 15:47:42.944 [I]  2022-07-22 15:47:42>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 15:47:43.060 [I]  2022-07-22 15:47:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 15:47:43.170 [I]  2022-07-22 15:47:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 15:47:43.289 [I]  2022-07-22 15:47:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 15:47:43.400 [I]  2022-07-22 15:47:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 15:47:43.515 [I]  2022-07-22 15:47:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 15:47:43.627 [I]  2022-07-22 15:47:43>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 15:47:43.924 [I]  2022-07-22 15:47:43>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 15:47:43.961 [I]  2022-07-22 15:47:43>%!(EXTRA []interface {}=[时间对比: 2022-07-20 12:57:12 2022-07-22 14:53:00])
+2022/07/22 15:47:44.253 [I]  2022-07-22 15:47:44>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 15:47:44.545 [I]  2022-07-22 15:47:44>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 15:47:44.582 [I]  2022-07-22 15:47:44>%!(EXTRA []interface {}=[时间对比: 2022-07-20 18:12:43 2022-07-22 15:46:00])
+2022/07/22 15:49:11.885 [I]  2022-07-22 15:49:11>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 15:49:12.364 [I]  2022-07-22 15:49:12>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 15:49:12.476 [I]  2022-07-22 15:49:12>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 15:49:12.588 [I]  2022-07-22 15:49:12>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 15:49:12.700 [I]  2022-07-22 15:49:12>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 15:49:12.811 [I]  2022-07-22 15:49:12>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 15:49:12.926 [I]  2022-07-22 15:49:12>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 15:49:13.040 [I]  2022-07-22 15:49:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 15:49:13.151 [I]  2022-07-22 15:49:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 15:49:13.262 [I]  2022-07-22 15:49:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 15:49:13.373 [I]  2022-07-22 15:49:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 15:49:13.486 [I]  2022-07-22 15:49:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 15:49:13.596 [I]  2022-07-22 15:49:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 15:49:13.707 [I]  2022-07-22 15:49:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 15:49:13.817 [I]  2022-07-22 15:49:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 15:49:13.937 [I]  2022-07-22 15:49:13>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 15:49:14.049 [I]  2022-07-22 15:49:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 15:49:14.158 [I]  2022-07-22 15:49:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 15:49:14.272 [I]  2022-07-22 15:49:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 15:49:14.382 [I]  2022-07-22 15:49:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 15:49:14.498 [I]  2022-07-22 15:49:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 15:49:14.609 [I]  2022-07-22 15:49:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 15:49:14.719 [I]  2022-07-22 15:49:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 15:49:14.831 [I]  2022-07-22 15:49:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 15:49:14.942 [I]  2022-07-22 15:49:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 15:49:15.053 [I]  2022-07-22 15:49:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 15:49:15.165 [I]  2022-07-22 15:49:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 15:49:15.277 [I]  2022-07-22 15:49:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 15:49:15.387 [I]  2022-07-22 15:49:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 15:49:15.510 [I]  2022-07-22 15:49:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 15:49:15.621 [I]  2022-07-22 15:49:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 15:49:15.731 [I]  2022-07-22 15:49:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 15:49:16.024 [I]  2022-07-22 15:49:16>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 15:49:16.061 [I]  2022-07-22 15:49:16>%!(EXTRA []interface {}=[时间对比: 2022-07-20 12:57:12 2022-07-22 14:53:00])
+2022/07/22 15:49:16.351 [I]  2022-07-22 15:49:16>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 15:49:16.642 [I]  2022-07-22 15:49:16>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 15:49:16.679 [I]  2022-07-22 15:49:16>%!(EXTRA []interface {}=[时间对比: 2022-07-20 18:12:43 2022-07-22 15:46:00])
+2022/07/22 15:54:02.409 [I]  2022-07-22 15:54:02>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 15:54:02.879 [I]  2022-07-22 15:54:02>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 15:54:02.991 [I]  2022-07-22 15:54:02>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 15:54:03.104 [I]  2022-07-22 15:54:03>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 15:54:03.224 [I]  2022-07-22 15:54:03>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 15:54:03.335 [I]  2022-07-22 15:54:03>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 15:54:03.447 [I]  2022-07-22 15:54:03>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 15:54:03.558 [I]  2022-07-22 15:54:03>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 15:54:03.670 [I]  2022-07-22 15:54:03>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 15:54:03.785 [I]  2022-07-22 15:54:03>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 15:54:03.896 [I]  2022-07-22 15:54:03>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 15:54:04.008 [I]  2022-07-22 15:54:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 15:54:04.120 [I]  2022-07-22 15:54:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 15:54:04.232 [I]  2022-07-22 15:54:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 15:54:04.343 [I]  2022-07-22 15:54:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 15:54:04.454 [I]  2022-07-22 15:54:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 15:54:04.566 [I]  2022-07-22 15:54:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 15:54:04.678 [I]  2022-07-22 15:54:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 15:54:04.789 [I]  2022-07-22 15:54:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 15:54:04.903 [I]  2022-07-22 15:54:04>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 15:54:05.013 [I]  2022-07-22 15:54:05>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 15:54:05.124 [I]  2022-07-22 15:54:05>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 15:54:05.235 [I]  2022-07-22 15:54:05>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 15:54:05.345 [I]  2022-07-22 15:54:05>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 15:54:05.458 [I]  2022-07-22 15:54:05>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 15:54:05.573 [I]  2022-07-22 15:54:05>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 15:54:05.683 [I]  2022-07-22 15:54:05>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 15:54:05.794 [I]  2022-07-22 15:54:05>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 15:54:05.906 [I]  2022-07-22 15:54:05>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 15:54:06.018 [I]  2022-07-22 15:54:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 15:54:06.129 [I]  2022-07-22 15:54:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 15:54:06.242 [I]  2022-07-22 15:54:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 15:54:06.532 [I]  2022-07-22 15:54:06>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 15:54:06.569 [I]  2022-07-22 15:54:06>%!(EXTRA []interface {}=[时间对比: 2022-07-20 12:57:12 2022-07-22 14:53:00])
+2022/07/22 15:54:06.876 [I]  2022-07-22 15:54:06>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 15:54:07.166 [I]  2022-07-22 15:54:07>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 15:54:07.202 [I]  2022-07-22 15:54:07>%!(EXTRA []interface {}=[时间对比: 2022-07-20 18:12:43 2022-07-22 15:51:00])
+2022/07/22 15:54:24.500 [I]  2022-07-22 15:54:24>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 15:54:24.968 [I]  2022-07-22 15:54:24>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 15:54:25.085 [I]  2022-07-22 15:54:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 15:54:25.196 [I]  2022-07-22 15:54:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 15:54:25.308 [I]  2022-07-22 15:54:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 15:54:25.420 [I]  2022-07-22 15:54:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 15:54:25.532 [I]  2022-07-22 15:54:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 15:54:25.644 [I]  2022-07-22 15:54:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 15:54:25.756 [I]  2022-07-22 15:54:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 15:54:25.868 [I]  2022-07-22 15:54:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 15:54:25.980 [I]  2022-07-22 15:54:25>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 15:54:26.091 [I]  2022-07-22 15:54:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 15:54:26.204 [I]  2022-07-22 15:54:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 15:54:26.317 [I]  2022-07-22 15:54:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 15:54:26.430 [I]  2022-07-22 15:54:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 15:54:26.542 [I]  2022-07-22 15:54:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 15:54:26.652 [I]  2022-07-22 15:54:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 15:54:26.764 [I]  2022-07-22 15:54:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 15:54:26.879 [I]  2022-07-22 15:54:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 15:54:26.990 [I]  2022-07-22 15:54:26>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 15:54:27.102 [I]  2022-07-22 15:54:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 15:54:27.213 [I]  2022-07-22 15:54:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 15:54:27.324 [I]  2022-07-22 15:54:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 15:54:27.440 [I]  2022-07-22 15:54:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 15:54:27.550 [I]  2022-07-22 15:54:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 15:54:27.662 [I]  2022-07-22 15:54:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 15:54:27.776 [I]  2022-07-22 15:54:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 15:54:27.890 [I]  2022-07-22 15:54:27>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 15:54:28.000 [I]  2022-07-22 15:54:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 15:54:28.109 [I]  2022-07-22 15:54:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 15:54:28.222 [I]  2022-07-22 15:54:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 15:54:28.332 [I]  2022-07-22 15:54:28>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 15:54:28.623 [I]  2022-07-22 15:54:28>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 15:54:28.661 [I]  2022-07-22 15:54:28>%!(EXTRA []interface {}=[时间对比: 2022-07-20 12:57:12 2022-07-22 14:53:00])
+2022/07/22 15:54:28.953 [I]  2022-07-22 15:54:28>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 15:54:29.241 [I]  2022-07-22 15:54:29>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 15:54:29.278 [I]  2022-07-22 15:54:29>%!(EXTRA []interface {}=[时间对比: 2022-07-20 18:12:43 2022-07-22 15:51:00])
+2022/07/22 16:06:19.062 [I]  2022-07-22 16:06:19>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 16:06:19.529 [I]  2022-07-22 16:06:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 16:06:19.641 [I]  2022-07-22 16:06:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 16:06:19.753 [I]  2022-07-22 16:06:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 16:06:19.871 [I]  2022-07-22 16:06:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 16:06:19.990 [I]  2022-07-22 16:06:19>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 16:06:20.103 [I]  2022-07-22 16:06:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 16:06:20.215 [I]  2022-07-22 16:06:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 16:06:20.328 [I]  2022-07-22 16:06:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 16:06:20.441 [I]  2022-07-22 16:06:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 16:06:20.563 [I]  2022-07-22 16:06:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 16:06:20.676 [I]  2022-07-22 16:06:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 16:06:20.788 [I]  2022-07-22 16:06:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 16:06:20.898 [I]  2022-07-22 16:06:20>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 16:06:21.010 [I]  2022-07-22 16:06:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 16:06:21.122 [I]  2022-07-22 16:06:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 16:06:21.233 [I]  2022-07-22 16:06:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 16:06:21.345 [I]  2022-07-22 16:06:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 16:06:21.456 [I]  2022-07-22 16:06:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 16:06:21.567 [I]  2022-07-22 16:06:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 16:06:21.680 [I]  2022-07-22 16:06:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 16:06:21.799 [I]  2022-07-22 16:06:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 16:06:21.911 [I]  2022-07-22 16:06:21>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 16:06:22.023 [I]  2022-07-22 16:06:22>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 16:06:22.134 [I]  2022-07-22 16:06:22>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 16:06:22.245 [I]  2022-07-22 16:06:22>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 16:06:22.359 [I]  2022-07-22 16:06:22>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 16:06:22.470 [I]  2022-07-22 16:06:22>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 16:06:22.591 [I]  2022-07-22 16:06:22>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 16:06:22.704 [I]  2022-07-22 16:06:22>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 16:06:22.821 [I]  2022-07-22 16:06:22>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 16:06:22.935 [I]  2022-07-22 16:06:22>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 16:06:23.237 [I]  2022-07-22 16:06:23>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 16:06:23.274 [I]  2022-07-22 16:06:23>%!(EXTRA []interface {}=[时间对比: 2022-07-20 12:57:12 2022-07-22 14:53:00])
+2022/07/22 16:06:23.564 [I]  2022-07-22 16:06:23>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 16:06:23.873 [I]  2022-07-22 16:06:23>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 16:06:23.909 [I]  2022-07-22 16:06:23>%!(EXTRA []interface {}=[时间对比: 2022-07-20 18:12:43 2022-07-22 16:06:00])
+2022/07/22 16:10:35.706 [I]  2022-07-22 16:10:35>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 16:10:36.117 [I]  2022-07-22 16:10:36>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 16:10:36.229 [I]  2022-07-22 16:10:36>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 16:10:36.341 [I]  2022-07-22 16:10:36>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 16:10:36.452 [I]  2022-07-22 16:10:36>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 16:10:36.562 [I]  2022-07-22 16:10:36>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 16:10:36.677 [I]  2022-07-22 16:10:36>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 16:10:36.790 [I]  2022-07-22 16:10:36>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 16:10:36.901 [I]  2022-07-22 16:10:36>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 16:10:37.011 [I]  2022-07-22 16:10:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 16:10:37.122 [I]  2022-07-22 16:10:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 16:10:37.248 [I]  2022-07-22 16:10:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 16:10:37.360 [I]  2022-07-22 16:10:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 16:10:37.472 [I]  2022-07-22 16:10:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 16:10:37.582 [I]  2022-07-22 16:10:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 16:10:37.693 [I]  2022-07-22 16:10:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 16:10:37.807 [I]  2022-07-22 16:10:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 16:10:37.929 [I]  2022-07-22 16:10:37>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 16:10:38.040 [I]  2022-07-22 16:10:38>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 16:10:38.153 [I]  2022-07-22 16:10:38>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 16:10:38.264 [I]  2022-07-22 16:10:38>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 16:10:38.375 [I]  2022-07-22 16:10:38>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 16:10:38.485 [I]  2022-07-22 16:10:38>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 16:10:38.596 [I]  2022-07-22 16:10:38>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 16:10:38.708 [I]  2022-07-22 16:10:38>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 16:10:38.821 [I]  2022-07-22 16:10:38>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 16:10:38.933 [I]  2022-07-22 16:10:38>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 16:10:39.043 [I]  2022-07-22 16:10:39>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 16:10:39.154 [I]  2022-07-22 16:10:39>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 16:10:39.265 [I]  2022-07-22 16:10:39>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 16:10:39.376 [I]  2022-07-22 16:10:39>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 16:10:39.486 [I]  2022-07-22 16:10:39>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 16:10:39.746 [I]  2022-07-22 16:10:39>%!(EXTRA []interface {}=[找到key: YD861656606475148|1])
+2022/07/22 16:10:39.783 [I]  2022-07-22 16:10:39>%!(EXTRA []interface {}=[时间对比: 2022-07-20 12:57:12 2022-07-22 14:53:00])
+2022/07/22 16:10:40.040 [I]  2022-07-22 16:10:40>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 16:10:40.298 [I]  2022-07-22 16:10:40>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 16:10:40.337 [I]  2022-07-22 16:10:40>%!(EXTRA []interface {}=[时间对比: 2022-07-20 18:12:43 2022-07-22 16:06:00])
+2022/07/22 16:37:06.361 [I]  2022-07-22 16:37:06>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 16:37:06.862 [I]  2022-07-22 16:37:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 16:37:06.973 [I]  2022-07-22 16:37:06>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 16:37:07.084 [I]  2022-07-22 16:37:07>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 16:37:07.196 [I]  2022-07-22 16:37:07>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 16:37:07.306 [I]  2022-07-22 16:37:07>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 16:37:07.418 [I]  2022-07-22 16:37:07>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 16:37:07.529 [I]  2022-07-22 16:37:07>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 16:37:07.640 [I]  2022-07-22 16:37:07>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 16:37:07.752 [I]  2022-07-22 16:37:07>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 16:37:07.863 [I]  2022-07-22 16:37:07>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 16:37:07.974 [I]  2022-07-22 16:37:07>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 16:37:08.088 [I]  2022-07-22 16:37:08>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 16:37:08.200 [I]  2022-07-22 16:37:08>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 16:37:08.311 [I]  2022-07-22 16:37:08>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 16:37:08.421 [I]  2022-07-22 16:37:08>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 16:37:08.533 [I]  2022-07-22 16:37:08>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 16:37:08.643 [I]  2022-07-22 16:37:08>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 16:37:08.754 [I]  2022-07-22 16:37:08>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 16:37:08.864 [I]  2022-07-22 16:37:08>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 16:37:08.975 [I]  2022-07-22 16:37:08>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 16:37:09.086 [I]  2022-07-22 16:37:09>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 16:37:09.199 [I]  2022-07-22 16:37:09>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 16:37:09.311 [I]  2022-07-22 16:37:09>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 16:37:09.421 [I]  2022-07-22 16:37:09>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 16:37:09.532 [I]  2022-07-22 16:37:09>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 16:37:09.642 [I]  2022-07-22 16:37:09>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 16:37:09.755 [I]  2022-07-22 16:37:09>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 16:37:09.865 [I]  2022-07-22 16:37:09>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 16:37:09.977 [I]  2022-07-22 16:37:09>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 16:37:10.088 [I]  2022-07-22 16:37:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 16:37:10.199 [I]  2022-07-22 16:37:10>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 16:37:10.540 [I]  2022-07-22 16:37:10>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 16:37:10.890 [I]  2022-07-22 16:37:10>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 16:37:11.157 [I]  2022-07-22 16:37:11>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 16:37:11.194 [I]  2022-07-22 16:37:11>%!(EXTRA []interface {}=[时间对比: 2022-07-20 18:12:43 2022-07-22 16:36:00])
+2022/07/22 16:37:13.898 [I]  2022-07-22 16:37:13>%!(EXTRA []interface {}=[没有 找到key: KF868131063451805|1])
+2022/07/22 16:37:14.315 [I]  2022-07-22 16:37:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|1])
+2022/07/22 16:37:14.426 [I]  2022-07-22 16:37:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|2])
+2022/07/22 16:37:14.537 [I]  2022-07-22 16:37:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|3])
+2022/07/22 16:37:14.649 [I]  2022-07-22 16:37:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|4])
+2022/07/22 16:37:14.760 [I]  2022-07-22 16:37:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|5])
+2022/07/22 16:37:14.871 [I]  2022-07-22 16:37:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|6])
+2022/07/22 16:37:14.982 [I]  2022-07-22 16:37:14>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|7])
+2022/07/22 16:37:15.093 [I]  2022-07-22 16:37:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|8])
+2022/07/22 16:37:15.206 [I]  2022-07-22 16:37:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|9])
+2022/07/22 16:37:15.320 [I]  2022-07-22 16:37:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|10])
+2022/07/22 16:37:15.432 [I]  2022-07-22 16:37:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|11])
+2022/07/22 16:37:15.546 [I]  2022-07-22 16:37:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|12])
+2022/07/22 16:37:15.658 [I]  2022-07-22 16:37:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|13])
+2022/07/22 16:37:15.769 [I]  2022-07-22 16:37:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|14])
+2022/07/22 16:37:15.880 [I]  2022-07-22 16:37:15>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|15])
+2022/07/22 16:37:16.003 [I]  2022-07-22 16:37:16>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|16])
+2022/07/22 16:37:16.120 [I]  2022-07-22 16:37:16>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|17])
+2022/07/22 16:37:16.232 [I]  2022-07-22 16:37:16>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|18])
+2022/07/22 16:37:16.342 [I]  2022-07-22 16:37:16>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|19])
+2022/07/22 16:37:16.454 [I]  2022-07-22 16:37:16>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|20])
+2022/07/22 16:37:16.566 [I]  2022-07-22 16:37:16>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|21])
+2022/07/22 16:37:16.675 [I]  2022-07-22 16:37:16>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|22])
+2022/07/22 16:37:16.786 [I]  2022-07-22 16:37:16>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|23])
+2022/07/22 16:37:16.899 [I]  2022-07-22 16:37:16>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|24])
+2022/07/22 16:37:17.011 [I]  2022-07-22 16:37:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|25])
+2022/07/22 16:37:17.124 [I]  2022-07-22 16:37:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|26])
+2022/07/22 16:37:17.235 [I]  2022-07-22 16:37:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|27])
+2022/07/22 16:37:17.351 [I]  2022-07-22 16:37:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|28])
+2022/07/22 16:37:17.463 [I]  2022-07-22 16:37:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|29])
+2022/07/22 16:37:17.576 [I]  2022-07-22 16:37:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|30])
+2022/07/22 16:37:17.696 [I]  2022-07-22 16:37:17>%!(EXTRA []interface {}=[没有 找到key: KF20210303202647|31])
+2022/07/22 16:37:17.962 [I]  2022-07-22 16:37:17>%!(EXTRA []interface {}=[没有 找到key: YD861656606475148|1])
+2022/07/22 16:37:18.225 [I]  2022-07-22 16:37:18>%!(EXTRA []interface {}=[没有 找到key: YD060289057645620|1])
+2022/07/22 16:37:18.493 [I]  2022-07-22 16:37:18>%!(EXTRA []interface {}=[找到key: YD862289058335130|1])
+2022/07/22 16:37:18.531 [I]  2022-07-22 16:37:18>%!(EXTRA []interface {}=[时间对比: 2022-07-20 18:12:43 2022-07-22 16:36:00])
+2022/07/22 17:52:22.619 [I]  2022-07-22 17:52:22>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Read_DeviceSensorParameter YD062289057646669])
+2022/07/22 17:52:22.619 [I]  2022-07-22 17:52:22>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Read_DeviceSensorParameter nats: invalid connection])
+2022/07/22 17:52:39.799 [I]  2022-07-22 17:52:39>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Pu_DeviceParameter {4564 YD062289057646669 测试设备 0 88 112 112 122 62 122 52 22 2 22 0   0 0 0  5ca76637-000b-000a-000b-0c9b90f9586a 0 0 2 2022-07-22 17:52:39.6227763 +0800 CST 2022-07-22 17:52:39.6227763 +0800 CST}])
+2022/07/22 17:52:39.799 [I]  2022-07-22 17:52:39>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Pu_DeviceParameter nats: invalid connection])
+2022/07/22 17:54:07.879 [I]  2022-07-22 17:54:07>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Pu_DeviceParameter {4565 YD062289057646669 测试设备 0 88 112 112 122 62 122 52 22 2 22 0   0 0 0  5ca76637-000b-000a-000b-0c9b90f9586a 0 0 2 2022-07-22 17:54:07.7029903 +0800 CST 2022-07-22 17:54:07.7029903 +0800 CST}])
+2022/07/22 17:54:07.879 [I]  2022-07-22 17:54:07>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Pu_DeviceParameter nats: invalid connection])
+2022/07/22 18:01:58.558 [I]  2022-07-22 18:01:58>%!(EXTRA []interface {}=[============Nats init============])
+2022/07/22 18:01:58.669 [I]  2022-07-22 18:01:58>%!(EXTRA []interface {}=[nats OK!])
+2022/07/22 18:02:19.345 [I]  2022-07-22 18:02:19>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Read_DeviceSensorParameter YD062289057646669])
+2022/07/22 18:02:23.412 [I]  2022-07-22 18:02:23>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Pu_DeviceParameter {4566 YD062289057646669 测试设备 0 88 112 112 122 62 122 52 22 2 22 0   0 0 0  5ca76637-000b-000a-000b-0c9b90f9586a 0 0 2 2022-07-22 18:02:23.2471366 +0800 CST 2022-07-22 18:02:23.2471366 +0800 CST}])
+2022/07/22 18:02:38.543 [I]  2022-07-22 18:02:38>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Pu_DeviceParameter_Sensor {141861 YD062289057646669 1 测试设备-温度探头1 1 33 0 200 1 0 5ca76637-000b-000a-000b-0c9b90f9586a 0 0 2 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC}])
+2022/07/22 18:39:51.540 [I]  2022-07-22 18:39:51>%!(EXTRA []interface {}=[============Nats init============])
+2022/07/22 18:39:51.653 [I]  2022-07-22 18:39:51>%!(EXTRA []interface {}=[nats OK!])
+2022/07/25 10:07:59.055 [I]  2022-07-25 10:07:59>%!(EXTRA []interface {}=[============Nats init============])
+2022/07/25 10:07:59.174 [I]  2022-07-25 10:07:59>%!(EXTRA []interface {}=[nats OK!])
+2022/07/25 10:14:49.704 [I]  2022-07-25 10:14:49>%!(EXTRA []interface {}=[============Nats init============])
+2022/07/25 10:14:49.821 [I]  2022-07-25 10:14:49>%!(EXTRA []interface {}=[nats OK!])
+2022/07/25 10:16:46.935 [I]  2022-07-25 10:16:46>%!(EXTRA []interface {}=[============Nats init============])
+2022/07/25 10:16:47.037 [I]  2022-07-25 10:16:47>%!(EXTRA []interface {}=[nats OK!])
+2022/07/25 10:18:08.066 [I]  2022-07-25 10:18:08>%!(EXTRA []interface {}=[============Nats init============])
+2022/07/25 10:18:08.170 [I]  2022-07-25 10:18:08>%!(EXTRA []interface {}=[nats OK!])
+2022/07/25 11:11:41.546 [I]  2022-07-25 11:11:41>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Read_DeviceParameter YD062289057646669])
+2022/07/25 11:14:10.744 [I]  2022-07-25 11:14:10>%!(EXTRA []interface {}=[============Nats init============])
+2022/07/25 11:14:10.859 [I]  2022-07-25 11:14:10>%!(EXTRA []interface {}=[nats OK!])
+2022/07/25 11:16:26.341 [I]  2022-07-25 11:16:26>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Read_DeviceParameter YD062289057646669])
+2022/07/25 11:16:46.347 [I]  2022-07-25 11:16:46>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Read_DeviceSensorParameter YD062289057646669])
+2022/07/25 11:20:07.292 [I]  2022-07-25 11:20:07>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Read_DeviceSensorParameter YD062289057646669])
+2022/07/25 11:22:06.122 [I]  2022-07-25 11:22:06>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Wx_GenerateQRCode -|ZZwmIfd4WdpzCO04zPKv7w==|- @宝智达 微信公众号通知])
+2022/07/25 11:22:15.482 [I]  2022-07-25 11:22:15>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Wx_GenerateQRCode -|ZZwmIfd4WdpzCO04zPKv7w==|- @宝智达 微信公众号通知])
+2022/07/25 11:22:51.624 [I]  2022-07-25 11:22:51>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime YD861658742931120])
+2022/07/25 11:22:51.731 [I]  2022-07-25 11:22:51>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime YD862289058335551])
+2022/07/25 11:22:51.837 [I]  2022-07-25 11:22:51>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime YD862289058335130])
+2022/07/25 11:22:51.943 [I]  2022-07-25 11:22:51>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime YD062289057646669])
+2022/07/25 11:46:15.942 [I]  2022-07-25 11:46:15>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Read_DeviceSensorParameter KF868131063451805])
+2022/07/25 11:46:21.768 [I]  2022-07-25 11:46:21>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Read_DeviceParameter KF003400443230511935323538])
+2022/07/25 11:46:23.365 [I]  2022-07-25 11:46:23>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Read_DeviceSensorParameter KF003400443230511935323538])
+2022/07/25 11:46:28.192 [I]  2022-07-25 11:46:28>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Read_DeviceSensorParameter KF20210303202647])
+2022/07/25 11:46:32.088 [I]  2022-07-25 11:46:32>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Read_DeviceSensorParameter YD861656606475148])
+2022/07/25 11:47:22.164 [I]  2022-07-25 11:47:22>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Read_DeviceSensorParameter KF868131063451805])
+2022/07/25 11:47:28.886 [I]  2022-07-25 11:47:28>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Read_DeviceSensorParameter KF868131063451805])
+2022/07/25 11:47:31.027 [I]  2022-07-25 11:47:31>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Read_DeviceParameter KF003400443230511935323538])
+2022/07/25 11:47:32.734 [I]  2022-07-25 11:47:32>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Read_DeviceSensorParameter KF003400443230511935323538])
+2022/07/25 11:47:37.538 [I]  2022-07-25 11:47:37>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Read_DeviceSensorParameter KF20210303202647])
+2022/07/25 11:47:41.927 [I]  2022-07-25 11:47:41>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Read_DeviceSensorParameter YD861656606475148])
+2022/07/25 11:47:54.562 [I]  2022-07-25 11:47:54>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Read_DeviceSensorParameter YD060289057645620])
+2022/07/25 13:44:09.496 [I]  2022-07-25 13:44:09>%!(EXTRA []interface {}=[============Nats init============])
+2022/07/25 13:44:09.616 [I]  2022-07-25 13:44:09>%!(EXTRA []interface {}=[nats OK!])
+2022/07/25 13:52:44.778 [I]  2022-07-25 13:52:44>%!(EXTRA []interface {}=[============Nats init============])
+2022/07/25 13:52:44.893 [I]  2022-07-25 13:52:44>%!(EXTRA []interface {}=[nats OK!])
+2022/07/25 15:24:23.438 [I]  2022-07-25 15:24:23>%!(EXTRA []interface {}=[============Nats init============])
+2022/07/25 15:24:23.983 [I]  2022-07-25 15:24:23>%!(EXTRA []interface {}=[nats OK!])
+2022/07/25 16:53:05.160 [I]  2022-07-25 16:53:05>%!(EXTRA []interface {}=[============Nats init============])
+2022/07/25 16:53:05.276 [I]  2022-07-25 16:53:05>%!(EXTRA []interface {}=[nats OK!])

+ 17 - 7
main.go

@@ -1,6 +1,7 @@
 package main
 package main
 
 
 import (
 import (
+	_ "Cold_Api/Nats"
 	"Cold_Api/conf"
 	"Cold_Api/conf"
 	"Cold_Api/models/Device"
 	"Cold_Api/models/Device"
 	_ "Cold_Api/routers"
 	_ "Cold_Api/routers"
@@ -11,6 +12,7 @@ import (
 	_ "github.com/go-sql-driver/mysql"
 	_ "github.com/go-sql-driver/mysql"
 	"runtime"
 	"runtime"
 	"strconv"
 	"strconv"
+	"strings"
 	"time"
 	"time"
 )
 )
 
 
@@ -23,7 +25,7 @@ func init() {
 		conf.MysqlServer_MaxIdleConnections, conf.MysqlServer_MaxOpenConnections)
 		conf.MysqlServer_MaxIdleConnections, conf.MysqlServer_MaxOpenConnections)
 	orm.RunSyncdb("default", false, false) // 创建数据库
 	orm.RunSyncdb("default", false, false) // 创建数据库
 
 
-	println(conf.MysqlServer_Username+":"+conf.MysqlServer_Password+"@tcp("+conf.MysqlServer_UrlPort+")/"+conf.MysqlServer_Database+"?charset=utf8mb4&loc=Local&parseTime=True")
+	println(conf.MysqlServer_Username + ":" + conf.MysqlServer_Password + "@tcp(" + conf.MysqlServer_UrlPort + ")/" + conf.MysqlServer_Database + "?charset=utf8mb4&loc=Local&parseTime=True")
 }
 }
 func main() {
 func main() {
 
 
@@ -37,12 +39,12 @@ func main() {
 		AllowCredentials: true,
 		AllowCredentials: true,
 	}))
 	}))
 
 
-	beego.BConfig.AppName = conf.AppName          // 项目名
-	beego.BConfig.ServerName = conf.AppName + conf.HTTPPort      //server  名称
-	beego.BConfig.RunMode = "dev"                //  应用的运行模式
-	beego.BConfig.Listen.HTTPPort = HTTPPort_int //监听端口  本地:8518  线上:8528
+	beego.BConfig.AppName = conf.AppName                    // 项目名
+	beego.BConfig.ServerName = conf.AppName + conf.HTTPPort //server  名称
+	beego.BConfig.RunMode = "dev"                           //  应用的运行模式
+	beego.BConfig.Listen.HTTPPort = HTTPPort_int            //监听端口  本地:8518  线上:8528
 	beego.AddFuncMap("convertm", convertM)
 	beego.AddFuncMap("convertm", convertM)
-
+	beego.AddFuncMap("IsYD", IsYD)
 
 
 	fmt.Println("======= beego.Run ======")
 	fmt.Println("======= beego.Run ======")
 	beego.Run()
 	beego.Run()
@@ -50,7 +52,6 @@ func main() {
 }
 }
 
 
 // 转十进制
 // 转十进制
-
 func convertM(Devicesensor Device.DeviceSensor) (out string) {
 func convertM(Devicesensor Device.DeviceSensor) (out string) {
 	var TouTime float64
 	var TouTime float64
 	TouTime = 2 * 60
 	TouTime = 2 * 60
@@ -90,3 +91,12 @@ func convertM(Devicesensor Device.DeviceSensor) (out string) {
 	// 传感器正常
 	// 传感器正常
 	return "温湿度传感器-1.png"
 	return "温湿度传感器-1.png"
 }
 }
+
+// 转十进制
+func IsYD(sn string) (out int) {
+	if strings.Contains(sn, "YD") {
+		return 1
+	}
+	// 传感器正常
+	return 0
+}

+ 110 - 34
models/Admin/Admin.go

@@ -2,7 +2,10 @@ package Admin
 
 
 import (
 import (
 	"Cold_Api/conf"
 	"Cold_Api/conf"
+	"encoding/json"
 	"fmt"
 	"fmt"
+	"github.com/astaxie/beego/cache"
+	_ "github.com/astaxie/beego/cache/redis"
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/beego/beego/v2/client/orm"
 	"time"
 	"time"
 )
 )
@@ -21,9 +24,8 @@ type Admin struct {
 	Admin_gender    int    `orm:"size(2);null"`    // 性别  0未知   1男   2女
 	Admin_gender    int    `orm:"size(2);null"`    // 性别  0未知   1男   2女
 	Admin_text      string `orm:"type(text);null"` // 详情
 	Admin_text      string `orm:"type(text);null"` // 详情
 
 
-	Admin_panel_plan      string `orm:"size(200);null"`  //  平面图
-	Admin_panel_data      string `orm:"size(200);null"`  //  大数据
-
+	Admin_panel_plan string `orm:"size(200);null"` //  平面图
+	Admin_panel_data string `orm:"size(200);null"` //  大数据
 
 
 	Admin_rh int `orm:"type(text);1"` // 显示湿度  0 不显示   1  显示
 	Admin_rh int `orm:"type(text);1"` // 显示湿度  0 不显示   1  显示
 
 
@@ -32,18 +34,18 @@ type Admin struct {
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
 }
 }
 type Admin_R struct {
 type Admin_R struct {
-	Admin_uuid      string //
-	Admin_master    int    //  上一级
-	Admin_power     int    // 权限
-	Admin_name      string //
-	Admin_user      string //
-	Admin_telephone string // 电话
-	Admin_mail      string //  邮箱
-	Admin_gender    int    // 性别  0未知   1男   2女
-	Admin_text      string // 详情
-	Admin_rh        int    // 显示湿度
-	Admin_panel_plan      string //  平面图
-	Admin_panel_data      string //  大数据
+	Admin_uuid       string //
+	Admin_master     int    //  上一级
+	Admin_power      int    // 权限
+	Admin_name       string //
+	Admin_user       string //
+	Admin_telephone  string // 电话
+	Admin_mail       string //  邮箱
+	Admin_gender     int    // 性别  0未知   1男   2女
+	Admin_text       string // 详情
+	Admin_rh         int    // 显示湿度
+	Admin_panel_plan string //  平面图
+	Admin_panel_data string //  大数据
 }
 }
 
 
 func Admin_To_Admin_R(r Admin) (v Admin_R) {
 func Admin_To_Admin_R(r Admin) (v Admin_R) {
@@ -66,12 +68,63 @@ func (t *Admin) TableName() string {
 	return "Admin" // 数据库名称   // ************** 替换 FormulaList **************
 	return "Admin" // 数据库名称   // ************** 替换 FormulaList **************
 }
 }
 
 
+var redisCache_Admin cache.Cache
+
 func init() {
 func init() {
 	//注册模型
 	//注册模型
 	orm.RegisterModel(new(Admin))
 	orm.RegisterModel(new(Admin))
 
 
+	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
+		"redis_Admin", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+	fmt.Println(config)
+	var err error
+	redisCache_Admin, err = cache.NewCache("redis", config)
+	if err != nil || redisCache_Admin == nil {
+		errMsg := "failed to init redis"
+		fmt.Println(errMsg, err)
+	}
+
+}
+
+// ---------------- Redis -------------------
+//Redis_Set(m.T_sn,m) // Redis 更新缓存
+func Redis_Admin_Set(r Admin) (err error) {
+	//json序列化
+	str, err := json.Marshal(r)
+	if err != nil {
+		fmt.Print(err)
+		return
+	}
+
+	err = redisCache_Admin.Put(r.Admin_uuid, str, 24*time.Hour)
+	if err != nil {
+		fmt.Println("set key:", r.Admin_uuid, ",value:", str, err)
+	}
+	return
 }
 }
 
 
+//if r,is :=Redis_Get(T_sn);is{
+//return r,nil
+//}
+func Redis_Admin_Get(key string) (r Admin, is bool) {
+	if redisCache_Admin.IsExist(key) {
+		//println("找到key:",key)
+		v := redisCache_Admin.Get(key)
+
+		json.Unmarshal(v.([]byte), &r)
+		return r, true
+	}
+	//println("没有 找到key:",key)
+	return Admin{}, false
+}
+
+func Redis_Admin_DelK(key string) (err error) {
+	err = redisCache_Admin.Delete(key)
+	return
+}
+
+// ---------------- 特殊方法 -------------------
+
 // 添加
 // 添加
 func Add_Admin(m Admin) (id int64, err error) {
 func Add_Admin(m Admin) (id int64, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
@@ -79,24 +132,43 @@ func Add_Admin(m Admin) (id int64, err error) {
 	if err != nil {
 	if err != nil {
 		fmt.Println(err)
 		fmt.Println(err)
 	}
 	}
+	m.Id = int(id)
+	Redis_Admin_Set(m)
 	return id, err
 	return id, err
 }
 }
 
 
+//// 修改
+//func Update_Delete_Admin_ByAdmin_uuid(Admin_uuid string) (err error) {
+//	o := orm.NewOrm()
+//	v := Admin{Admin_uuid: Admin_uuid}
+//	// ascertain id exists in the database
+//	if err = o.Read(&v, "Admin_uuid"); err == nil {
+//		var num int64
+//		v.T_State = 0
+//
+//		if num, err = o.Update(&v, "T_State"); err == nil {
+//			fmt.Println("Number of records updated in database:", num)
+//		}
+//
+//		Redis_Admin_Set(v)
+//	}
+//	return err
+//}
+
 // 修改
 // 修改
-func Update_Delete_Admin_ByAdmin_uuid(Admin_uuid string) (err error) {
+func Update_Admin(r Admin, cols ...string) bool {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	v := Admin{Admin_uuid: Admin_uuid}
-	// ascertain id exists in the database
-	if err = o.Read(&v, "Admin_uuid"); err == nil {
-		var num int64
-		v.T_State = 0
-		if num, err = o.Update(&v, "T_State"); err == nil {
-			fmt.Println("Number of records updated in database:", num)
-		}
+	if num, err := o.Update(&r, cols...); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+		Redis_Admin_Set(r) // Redis 更新缓存
+		return true
 	}
 	}
-	return err
+
+	return false
 }
 }
+
 func Read_Admin_Admin_user(Admin_user string) (error, Admin) {
 func Read_Admin_Admin_user(Admin_user string) (error, Admin) {
+
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	r := Admin{Admin_user: Admin_user}
 	r := Admin{Admin_user: Admin_user}
 	err := o.Read(&r, "Admin_user") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	err := o.Read(&r, "Admin_user") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
@@ -106,12 +178,14 @@ func Read_Admin_Admin_user(Admin_user string) (error, Admin) {
 	return err, r
 	return err, r
 }
 }
 func ReadLogin_verification(Admin_user string, Admin_pass string) (error, Admin) {
 func ReadLogin_verification(Admin_user string, Admin_pass string) (error, Admin) {
+
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	r := Admin{Admin_user: Admin_user, Admin_pass: Admin_pass}
 	r := Admin{Admin_user: Admin_user, Admin_pass: Admin_pass}
 	err := o.Read(&r, "Admin_user", "Admin_pass") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	err := o.Read(&r, "Admin_user", "Admin_pass") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	if err != nil {
 	if err != nil {
 		fmt.Println(err)
 		fmt.Println(err)
 	}
 	}
+	Redis_Admin_Set(r) // Redis 更新缓存
 	return err, r
 	return err, r
 }
 }
 
 
@@ -151,6 +225,11 @@ func Update_Admin_ById_Basics(m Admin) (err error) {
 
 
 // 获取 ById
 // 获取 ById
 func Read_Admin_ByAdmin_uuid(Admin_uuid string) (e error, r Admin) {
 func Read_Admin_ByAdmin_uuid(Admin_uuid string) (e error, r Admin) {
+	if r, is := Redis_Admin_Get(Admin_uuid); is {
+		//println("Redis_Get  OK")
+		return nil, r
+	}
+
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	qs := o.QueryTable(new(Admin))
 	qs := o.QueryTable(new(Admin))
 	e = qs.Filter("Admin_uuid", Admin_uuid).One(&r)
 	e = qs.Filter("Admin_uuid", Admin_uuid).One(&r)
@@ -159,6 +238,11 @@ func Read_Admin_ByAdmin_uuid(Admin_uuid string) (e error, r Admin) {
 
 
 // 获取 ById
 // 获取 ById
 func Read_Admin_ByUuid(Admin_uuid string) (r Admin, err error) {
 func Read_Admin_ByUuid(Admin_uuid string) (r Admin, err error) {
+	if r, is := Redis_Admin_Get(Admin_uuid); is {
+		//println("Redis_Get  OK")
+		return r, nil
+	}
+
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	r = Admin{Admin_uuid: Admin_uuid}
 	r = Admin{Admin_uuid: Admin_uuid}
 	err = o.Read(&r, "Admin_uuid") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	err = o.Read(&r, "Admin_uuid") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
@@ -178,15 +262,7 @@ func Read_Admin_ById(id int) (r Admin, err error) {
 	}
 	}
 	return r, err
 	return r, err
 }
 }
-// 修改
-func Update_Admin(r Admin,cols ...string) bool {
-	o := orm.NewOrm()
-	if num, err := o.Update(&r, cols...); err == nil {
-		fmt.Println("Number of records updated in database:", num)
-		return true
-	}
-	return false
-}
+
 // 获取 ById
 // 获取 ById
 func Read_Admin_ById_x(Id int) (r Admin) {
 func Read_Admin_ById_x(Id int) (r Admin) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()

+ 98 - 42
models/Admin/AdminPower.go

@@ -2,62 +2,117 @@ package Admin
 
 
 import (
 import (
 	"Cold_Api/conf"
 	"Cold_Api/conf"
+	"encoding/json"
 	"fmt"
 	"fmt"
+	"github.com/astaxie/beego/cache"
+	_ "github.com/astaxie/beego/cache/redis"
 	"github.com/beego/beego/v2/adapter/orm"
 	"github.com/beego/beego/v2/adapter/orm"
+	"strconv"
 	"time"
 	"time"
 )
 )
 
 
 type AdminPower struct {
 type AdminPower struct {
-	Id         int    `orm:"column(ID);size(11);auto;pk"`
-	Power_name string `orm:"size(256);null"` //  权限名称
-	Power_Administration  int    `orm:"size(2);0"`  //  内部人员
+	Id                   int    `orm:"column(ID);size(11);auto;pk"`
+	Power_name           string `orm:"size(256);null"` //  权限名称
+	Power_Administration int    `orm:"size(2);0"`      //  内部人员
+
+	Power_User_r     int `orm:"size(2);0"` //  用户管理
+	Power_User_e     int `orm:"size(2);0"` //  用户管理
+	Power_User_entry int `orm:"size(2);0"` //  无钥匙进入 用户管理
+
+	Power_Device_r                  int `orm:"size(2);0"` //  设备查看
+	Power_Device_a                  int `orm:"size(2);0"` //  设备增加
+	Power_Device_Parameter_e        int `orm:"size(2);0"` //  设备 参数
+	Power_DeviceSensor_Parameter_e  int `orm:"size(2);0"` //  设备 传感器参数
+	Power_DeviceSensor_Compensate_e int `orm:"size(2);0"` //设备 传感器 偏差值 参数
+	Power_DeviceSensor_Class        int `orm:"size(2);0"` // 传感器分类
+	Power_Device_Bind_e             int `orm:"size(2);0"` //  用户 设备绑定
+
+	Power_DataScreen_r int `orm:"size(2);0"` //  大数据平台
+
+	Logs_Sys_r  int `orm:"size(2);0"` //  系统日志
+	Logs_User_r int `orm:"size(2);0"` //  用户日志
+
+	T_State    int       `orm:"size(200);1"`                                           //  0删除  1 正常
+	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now 每次 model 保存时都会对时间自动更新
+	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
+}
 
 
-	Power_User_r  int    `orm:"size(2);0"`  //  用户管理
-	Power_User_e  int    `orm:"size(2);0"`  //  用户管理
-	Power_User_entry  int    `orm:"size(2);0"`  //  无钥匙进入 用户管理
+func (t *AdminPower) TableName() string {
+	return "AdminPower" // 数据库名称   // ************** 替换 FormulaList **************
+}
 
 
-	Power_Device_r  int    `orm:"size(2);0"`  //  设备查看
-	Power_Device_a  int    `orm:"size(2);0"`  //  设备增加
-	Power_Device_Parameter_e  int    `orm:"size(2);0"`  //  设备 参数
-	Power_DeviceSensor_Parameter_e  int    `orm:"size(2);0"`  //  设备 传感器参数
-	Power_DeviceSensor_Compensate_e  int    `orm:"size(2);0"`  //设备 传感器 偏差值 参数
-	Power_DeviceSensor_Class  int    `orm:"size(2);0"`  // 传感器分类
-	Power_Device_Bind_e  int    `orm:"size(2);0"`  //  用户 设备绑定
+var redisCache_AdminPower cache.Cache
 
 
-	Power_DataScreen_r  int    `orm:"size(2);0"`  //  大数据平台
+func init() {
+	//注册模型
+	orm.RegisterModel(new(AdminPower))
 
 
+	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
+		"redis_AdminPower", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+	fmt.Println(config)
+	var err error
+	redisCache_AdminPower, err = cache.NewCache("redis", config)
+	if err != nil || redisCache_AdminPower == nil {
+		errMsg := "failed to init redis"
+		fmt.Println(errMsg, err)
+	}
 
 
-	Logs_Sys_r  int    `orm:"size(2);0"`  //  系统日志
-	Logs_User_r  int    `orm:"size(2);0"`  //  用户日志
+}
 
 
+// ---------------- Redis -------------------
+//Redis_Set(m.T_sn,m) // Redis 更新缓存
+func Redis_AdminPower_Set(r AdminPower) (err error) {
+	//json序列化
+	str, err := json.Marshal(r)
+	if err != nil {
+		fmt.Print(err)
+		return
+	}
 
 
-	T_State int    `orm:"size(200);1"`  //  0删除  1 正常
-	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"`     //auto_now 每次 model 保存时都会对时间自动更新
-	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"` //auto_now_add 第一次保存时才设置时间
+	err = redisCache_AdminPower.Put(strconv.Itoa(r.Id), str, 24*time.Hour)
+	if err != nil {
+		fmt.Println("set key:", strconv.Itoa(r.Id), ",value:", str, err)
+	}
+	return
 }
 }
 
 
-func (t *AdminPower) TableName() string {
-	return "AdminPower" // 数据库名称   // ************** 替换 FormulaList **************
-}
+//if r,is :=Redis_Get(T_sn);is{
+//return r,nil
+//}
+func Redis_AdminPower_Get(key string) (r AdminPower, is bool) {
+	if redisCache_AdminPower.IsExist(key) {
+		//println("找到key:",key)
+		v := redisCache_AdminPower.Get(key)
 
 
-func init() {
-	//注册模型
-	orm.RegisterModel(new(AdminPower))
+		json.Unmarshal(v.([]byte), &r)
+		return r, true
+	}
+	//println("没有 找到key:",key)
+	return AdminPower{}, false
+}
 
 
+func Redis_AdminPower_DelK(key string) (err error) {
+	err = redisCache_AdminPower.Delete(key)
+	return
 }
 }
 
 
+// ---------------- 特殊方法 -------------------
+
 // 修改
 // 修改
 func Update_AdminPower_ById_Basics(m AdminPower) (err error) {
 func Update_AdminPower_ById_Basics(m AdminPower) (err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	v := AdminPower{Id: m.Id}
 	v := AdminPower{Id: m.Id}
 	// ascertain id exists in the database
 	// ascertain id exists in the database
-	if err = o.Read(&v,); err == nil {
+	if err = o.Read(&v); err == nil {
 		var num int64
 		var num int64
 		m.Id = v.Id
 		m.Id = v.Id
-		if num, err = o.Update(&m, "Power_name","Power_Administration","Power_User_r","Power_User_entry","Power_Device_r","Power_Device_a","Power_Device_Parameter_e","Power_DeviceSensor_Class","Power_DeviceSensor_Parameter_e","Power_DeviceSensor_Compensate_e","Power_Device_Bind_e","Power_DataScreen_r","Logs_Sys_r","Logs_User_r"); err == nil {
+		if num, err = o.Update(&m, "Power_name", "Power_Administration", "Power_User_r", "Power_User_entry", "Power_Device_r", "Power_Device_a", "Power_Device_Parameter_e", "Power_DeviceSensor_Class", "Power_DeviceSensor_Parameter_e", "Power_DeviceSensor_Compensate_e", "Power_Device_Bind_e", "Power_DataScreen_r", "Logs_Sys_r", "Logs_User_r"); err == nil {
 			fmt.Println("Number of records updated in database:", num)
 			fmt.Println("Number of records updated in database:", num)
 		}
 		}
+		Redis_AdminPower_Set(m)
 	}
 	}
+
 	return err
 	return err
 }
 }
 
 
@@ -68,27 +123,27 @@ func Add_AdminPower(m AdminPower) (id int64, err error) {
 	if err != nil {
 	if err != nil {
 		fmt.Println(err)
 		fmt.Println(err)
 	}
 	}
+	Redis_AdminPower_Set(m)
 	return id, err
 	return id, err
 }
 }
+
 // 获取 ById
 // 获取 ById
-func Read_AdminPower_ById(Id int) (r AdminPower,err error) {
+func Read_AdminPower_ById(Id int) (r AdminPower, err error) {
+	if r, is := Redis_AdminPower_Get(strconv.Itoa(Id)); is {
+		//println("Redis_Get  OK")
+		return r, nil
+	}
+
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	r = AdminPower{Id: Id}
 	r = AdminPower{Id: Id}
 	err = o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	err = o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	if err != nil {
 	if err != nil {
 		fmt.Println(err)
 		fmt.Println(err)
+	} else {
+		Redis_AdminPower_Set(r)
 	}
 	}
-	return r,err
-}
-// 获取列表
-func Read_Power_List_ALL_1() (maps []AdminPower) {
 
 
-	o := orm.NewOrm()
-	qs := o.QueryTable(new(AdminPower))
-
-	qs.Filter("T_State", 1).OrderBy("Id").All(&maps)
-
-	return maps
+	return r, err
 }
 }
 
 
 // 获取列表
 // 获取列表
@@ -97,14 +152,13 @@ func Read_Power_List_ALL_Power_Administration(Power_Administration int) (maps []
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	qs := o.QueryTable(new(AdminPower))
 	qs := o.QueryTable(new(AdminPower))
 
 
-
 	qs.Filter("T_State", 1).OrderBy("Id").All(&maps)
 	qs.Filter("T_State", 1).OrderBy("Id").All(&maps)
 
 
 	return maps
 	return maps
 }
 }
 
 
 // 获取列表
 // 获取列表
-func Read_Power_List_ALL(page int,Power_name string) (maps []AdminPower,cnt int64) {
+func Read_Power_List_ALL(page int, Power_name string) (maps []AdminPower, cnt int64) {
 
 
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 	// 也可以直接使用 Model 结构体作为表名
@@ -120,7 +174,7 @@ func Read_Power_List_ALL(page int,Power_name string) (maps []AdminPower,cnt int6
 	qs.Limit(conf.Page_size, offset).Filter("Power_name__icontains", Power_name).Filter("T_State", 1).OrderBy("Id").All(&maps)
 	qs.Limit(conf.Page_size, offset).Filter("Power_name__icontains", Power_name).Filter("T_State", 1).OrderBy("Id").All(&maps)
 	cnt, _ = qs.Filter("Power_name__icontains", Power_name).Filter("T_State", 1).Count()
 	cnt, _ = qs.Filter("Power_name__icontains", Power_name).Filter("T_State", 1).Count()
 
 
-	return maps,cnt
+	return maps, cnt
 }
 }
 
 
 // 修改
 // 修改
@@ -134,6 +188,8 @@ func Update_Delete_AdminPower_Byid(Id int) (err error) {
 		if num, err = o.Update(&v, "T_State"); err == nil {
 		if num, err = o.Update(&v, "T_State"); err == nil {
 			fmt.Println("Number of records updated in database:", num)
 			fmt.Println("Number of records updated in database:", num)
 		}
 		}
+		Redis_AdminPower_DelK(strconv.Itoa(Id))
 	}
 	}
+
 	return err
 	return err
-}
+}

+ 98 - 47
models/Admin/Tokey.go

@@ -1,69 +1,120 @@
 package Admin
 package Admin
 
 
 import (
 import (
+	"Cold_Api/conf"
 	"fmt"
 	"fmt"
-	"github.com/beego/beego/v2/adapter/orm"
+	"github.com/astaxie/beego/cache"
+	_ "github.com/astaxie/beego/cache/redis"
 	uuid "github.com/satori/go.uuid"
 	uuid "github.com/satori/go.uuid"
 	"time"
 	"time"
 )
 )
 
 
-type Tokey struct {
-	Id         int    `orm:"column(ID);size(11);auto;pk"`
-	Admin_uuid string `orm:"size(256);null"` //
-	User_tokey string `orm:"size(256);null"` //
-	User_num int    `orm:"size(200);null"`  //  操作次数
-	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"`     //auto_now 每次 model 保存时都会对时间自动更新
-	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"` //auto_now_add 第一次保存时才设置时间
-}
+//
+//type Tokey struct {
+//	Id         int    `orm:"column(ID);size(11);auto;pk"`
+//	Admin_uuid string `orm:"size(256);null"` //
+//	User_tokey string `orm:"size(256);null"` //
+//	User_num int    `orm:"size(200);null"`  //  操作次数
+//	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"`     //auto_now 每次 model 保存时都会对时间自动更新
+//	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"` //auto_now_add 第一次保存时才设置时间
+//}
 
 
-func (t *Tokey) TableName() string {
-	return "Tokey" // 数据库名称   // ************** 替换 FormulaList **************
-}
+//func (t *Tokey) TableName() string {
+//	return "Tokey" // 数据库名称   // ************** 替换 FormulaList **************
+//}
+
+var redisCache_Tokey cache.Cache
 
 
 func init() {
 func init() {
 	//注册模型
 	//注册模型
-	orm.RegisterModel(new(Tokey))
+	//orm.RegisterModel(new(Tokey))
 
 
+	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
+		"redisCache_Tokey", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+	fmt.Println(config)
+	var err error
+	redisCache_Tokey, err = cache.NewCache("redis", config)
+	if err != nil || redisCache_Tokey == nil {
+		errMsg := "failed to init redis"
+		fmt.Println(errMsg, err)
+	}
 }
 }
-// 验证 TOKEY
-func Read_Verification_Tokey(User_tokey string) (bool, Tokey) {
-	r := Tokey{}
-	o := orm.NewOrm()
-	qs := o.QueryTable(new(Tokey))
-	err := qs.Filter("User_tokey",User_tokey).One(&r)
 
 
-	if err != nil {
-		fmt.Println(err)
-		return false,r
+// ---------------- Redis -------------------
+//Redis_Set(m.T_sn,m) // Redis 更新缓存
+func Add_Tokey_Set(Uuid string) string {
+	var Tokey string
+	for true {
+		Tokey = uuid.NewV4().String()
+		if !redisCache_Tokey.IsExist(Tokey) {
+			break
+		}
+		fmt.Print("申请 TOKEY 重复!重新生成。", Tokey)
 	}
 	}
+	redisCache_Tokey.Put(Tokey, Uuid, 2*time.Hour)
 
 
-	//println(time.Now().String(),time.Now().Unix())
-	//println(r.UpdateTime.String(),r.UpdateTime.Unix())
-	//
-	//println(r.Id,time.Now().Unix() - r.UpdateTime.Unix())
-	if time.Now().Unix() - r.UpdateTime.Unix() > 60 * 60 * 8 {   // 小时
-		println("User_tokey 过期了")
-		return false,r
+	return Tokey
+}
+
+//if r,is :=Redis_Get(T_sn);is{
+//return r,nil
+//}
+func Redis_Tokey_Get(Tokey string) (string, bool) {
+	if len(Tokey) < 10 {
+		return "", false
 	}
 	}
-	r.UpdateTime = time.Now()
-	o.Update(&r, "UpdateTime");
+	if redisCache_Tokey.IsExist(Tokey) {
+		//println("找到key:",key)
+		v := redisCache_Tokey.Get(Tokey)
+		value := string(v.([]byte)) //这里的转换很重要,Get返回的是interface
 
 
-	return true,r
+		redisCache_Tokey.Put(Tokey, value, 2*time.Hour) //  重新计次
+		return value, true
+	}
+	//println("没有 找到key:",key)
+	return "", false
 }
 }
 
 
+//
+//// 验证 TOKEY
+//func Read_Verification_Tokey(User_tokey string) (bool, Tokey) {
+//	r := Tokey{}
+//	o := orm.NewOrm()
+//	qs := o.QueryTable(new(Tokey))
+//	err := qs.Filter("User_tokey",User_tokey).One(&r)
+//
+//	if err != nil {
+//		fmt.Println(err)
+//		return false,r
+//	}
+//
+//	//println(time.Now().String(),time.Now().Unix())
+//	//println(r.UpdateTime.String(),r.UpdateTime.Unix())
+//	//
+//	//println(r.Id,time.Now().Unix() - r.UpdateTime.Unix())
+//	if time.Now().Unix() - r.UpdateTime.Unix() > 60 * 60 * 8 {   // 小时
+//		println("User_tokey 过期了")
+//		return false,r
+//	}
+//	r.UpdateTime = time.Now()
+//	o.Update(&r, "UpdateTime");
+//
+//	return true,r
+//}
+//
 // 添加 Tokey
 // 添加 Tokey
-func Add_Tokey(Admin_uuid string) (User_tokey string) {
-	o := orm.NewOrm()
-	for true{
-		User_tokey = uuid.NewV4().String()
-		r := Tokey{User_tokey: User_tokey}
-		err := o.Read(&r, "User_tokey") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
-		if err != nil {
-			break;
-		}
-		fmt.Print("申请 TOKEY 重复!重新生成。",User_tokey)
-	}
-	o.Insert(&Tokey{Admin_uuid:Admin_uuid,User_tokey: User_tokey})
-
-	return User_tokey
-}
+//func Add_Tokey(Admin_uuid string) (User_tokey string) {
+//	o := orm.NewOrm()
+//	for true{
+//		User_tokey = uuid.NewV4().String()
+//		r := Tokey{User_tokey: User_tokey}
+//		err := o.Read(&r, "User_tokey") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+//		if err != nil {
+//			break;
+//		}
+//		fmt.Print("申请 TOKEY 重复!重新生成。",User_tokey)
+//	}
+//	o.Insert(&Tokey{Admin_uuid:Admin_uuid,User_tokey: User_tokey})
+//
+//	return User_tokey
+//}

+ 19 - 8
models/Device/Device.go

@@ -9,7 +9,6 @@ import (
 	_ "github.com/astaxie/beego/cache/redis"
 	_ "github.com/astaxie/beego/cache/redis"
 	orm2 "github.com/beego/beego/v2/client/orm"
 	orm2 "github.com/beego/beego/v2/client/orm"
 
 
-
 	"github.com/beego/beego/v2/adapter/orm"
 	"github.com/beego/beego/v2/adapter/orm"
 	_ "github.com/go-sql-driver/mysql"
 	_ "github.com/go-sql-driver/mysql"
 	"strconv"
 	"strconv"
@@ -32,16 +31,29 @@ type Device struct {
 	T_Putime_Parameter time.Time `orm:"type(timestamp);null;"` // 参数时间
 	T_Putime_Parameter time.Time `orm:"type(timestamp);null;"` // 参数时间
 	T_Bind             string    `orm:"size(256);null"`        //设备绑定  Uid
 	T_Bind             string    `orm:"size(256);null"`        //设备绑定  Uid
 
 
-	T_monitor int `orm:"size(22);null"` //  监控状态 1 监控  0 未监控
-	T_err     int `orm:"size(2);1"`     // 0 正常  1 异常
+	T_monitor int `orm:"size(22);null"`  //  监控状态 1 监控  0 未监控
+	T_online  int `orm:"size(22);1"`     //  在线状态 1 在线  0 离线
+	T_Dattery int `orm:"size(256);null"` //电量
+	T_err     int `orm:"size(2);1"`      // 0 正常  1 异常
 
 
 	T_State    int       `orm:"size(2);1"`                                             // 0 删除   1 正常
 	T_State    int       `orm:"size(2);1"`                                             // 0 删除   1 正常
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 }
 }
-
+type R_Device struct {
+	T_sn          string           // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
+	T_devName     string           //设备名称
+	T_sensor      int              //  传感器数量
+	T_monitor     int              //  监控状态 1 监控  0 未监控
+	T_give        int              // 0 丢弃  1 正常
+	T_online      int              //  在线状态 1 在线  0 离线
+	T_Dattery     int              //电量
+	T_sensor_list []DeviceSensor_R //  传感器List
+	T_MSISDN      string           //设备名称
+	UpdateTime    time.Time        //auto_now 每次 model 保存时都会对时间自动更新
+}
 type Device_task struct {
 type Device_task struct {
-	T_sn string
+	T_sn   string
 	T_task string
 	T_task string
 }
 }
 
 
@@ -253,11 +265,11 @@ func Read_Device_ALL_bind_1(user_ Admin.Admin, page int, page_z int, T_sn string
 		cond1 = cond.AndCond(cond1).AndCond(cond.And("T_monitor", 1))
 		cond1 = cond.AndCond(cond1).AndCond(cond.And("T_monitor", 1))
 	} else if T_monitor == "0" {
 	} else if T_monitor == "0" {
 		//cond1.AndCond(cond.And("T_class", class))
 		//cond1.AndCond(cond.And("T_class", class))
-		cond1 = cond.AndCond(cond1).AndCond(cond.And("T_monitor", 0))
+		cond1 = cond.AndCond(cond1).AndCond(cond.And("T_monitor", 0).Or("T_monitor", 2).Or("T_monitor", 3))
 	}
 	}
 
 
 	// 非内部权限
 	// 非内部权限
-	println("user_.Admin_power:",user_.Admin_power)
+	//println("user_.Admin_power:", user_.Admin_power)
 	if user_.Admin_power > 6 {
 	if user_.Admin_power > 6 {
 		cond1 = cond.AndCond(cond1).AndCond(cond.And("T_give", 1))
 		cond1 = cond.AndCond(cond1).AndCond(cond.And("T_give", 1))
 	}
 	}
@@ -265,7 +277,6 @@ func Read_Device_ALL_bind_1(user_ Admin.Admin, page int, page_z int, T_sn string
 	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("Id").OrderBy("-T_give").All(&r)
 	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("Id").OrderBy("-T_give").All(&r)
 	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
 	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
 
 
-
 	return r, cnt
 	return r, cnt
 }
 }
 
 

+ 95 - 21
models/Device/DeviceClass.go

@@ -3,53 +3,121 @@ package Device
 import (
 import (
 	"Cold_Api/conf"
 	"Cold_Api/conf"
 	"Cold_Api/models/Admin"
 	"Cold_Api/models/Admin"
+
+	"encoding/json"
 	"fmt"
 	"fmt"
+	"github.com/astaxie/beego/cache"
+	_ "github.com/astaxie/beego/cache/redis"
 	"github.com/beego/beego/v2/adapter/orm"
 	"github.com/beego/beego/v2/adapter/orm"
 	_ "github.com/go-sql-driver/mysql"
 	_ "github.com/go-sql-driver/mysql"
+	"strconv"
 	"time"
 	"time"
 )
 )
 
 
 type DeviceClass struct {
 type DeviceClass struct {
-	Id         int       `orm:"column(ID);size(11);auto;pk"`
+	Id     int    `orm:"column(ID);size(11);auto;pk"`
 	T_uuid string `orm:"size(256);null"` //
 	T_uuid string `orm:"size(256);null"` //
-	T_name string    `orm:"size(256);null"`                  // 分类
-
-	T_Notice_wx       string `orm:"type(text);null"`  //微信公众号  appid/名字|
-	T_Notice_phone       string `orm:"type(text);null"`  //手机  1111111|
-	T_Notice_message       string `orm:"type(text);null"`  //短信   1111111|
-	T_Notice_mailbox       string `orm:"type(text);null"`  //邮箱    1111111|
+	T_name string `orm:"size(256);null"` // 分类
 
 
+	T_Notice_wx      string `orm:"type(text);null"` //w微信公众号  appid/名字|
+	T_Notice_wx2     string `orm:"type(text);null"` //w微信公众号  appid/名字|
+	T_Notice_phone   string `orm:"type(text);null"` //p手机  1111111|
+	T_Notice_message string `orm:"type(text);null"` //m短信   1111111|
+	T_Notice_mailbox string `orm:"type(text);null"` //e邮箱    1111111|
 
 
+	T_Notice_mechanism string `orm:"type(text);null"` // 报警机制
+	// 湿度超下限预警,处理,w启用,数量,上限,~|
+	// 湿度超下限预警,0,0,0,0,0,0,0,0,0,0,0,0|
 
 
-	T_State       int    `orm:"size(2);1"`       // 0 删除   1 正常
-	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"`   //auto_now_add 第一次保存时才设置时间
-	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`   //auto_now 每次 model 保存时都会对时间自动更新
+	T_State    int       `orm:"size(2);1"`                                             // 0 删除   1 正常
+	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
+	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 }
 }
 
 
 func (t *DeviceClass) TableName() string {
 func (t *DeviceClass) TableName() string {
 	return "DeviceClass" // 数据库名称   // ************** 替换 DesignClass **************
 	return "DeviceClass" // 数据库名称   // ************** 替换 DesignClass **************
 }
 }
 
 
+var redisCache_DeviceClass cache.Cache
+
 func init() {
 func init() {
 	//注册模型
 	//注册模型
 	orm.RegisterModel(new(DeviceClass))
 	orm.RegisterModel(new(DeviceClass))
 
 
+	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
+		"redis_DeviceClass", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+	fmt.Println(config)
+	var err error
+	redisCache_DeviceClass, err = cache.NewCache("redis", config)
+	if err != nil || redisCache_DeviceClass == nil {
+		errMsg := "failed to init redis"
+		fmt.Println(errMsg, err)
+		panic(errMsg)
+	}
+
 }
 }
 
 
-// ---------------- 特殊方法 -------------------
+//Redis_Set(m.T_sn,m) // Redis 更新缓存
+func Redis_DeviceClass_Set(r DeviceClass) (err error) {
+	key := strconv.Itoa(r.Id)
+
+	//json序列化
+	str, err := json.Marshal(r)
+	if err != nil {
+		fmt.Print(err)
+		return
+	}
+
+	err = redisCache_DeviceClass.Put(key, str, 2*time.Hour)
+	if err != nil {
+		fmt.Println("set key:", key, ",value:", str, err)
+	}
+	return
+}
+
+//if r,is :=Redis_Get(T_sn);is{
+//return r,nil
+//}
+func Redis_DeviceClass_Get(key string) (DeviceClass, bool) {
+	println("找到key:", key)
+	if redisCache_DeviceClass.IsExist(key) {
+		//println("找到key:",key)
+		v := redisCache_DeviceClass.Get(key)
+		var r DeviceClass
+		json.Unmarshal(v.([]byte), &r)
+
+		return r, true
+	}
 
 
+	return DeviceClass{}, false
+}
+func Redis_DeviceClass_DelK(key string) (err error) {
+	err = redisCache_DeviceClass.Delete(key)
+	return
+}
 
 
+// ---------------- 特殊方法 -------------------
 
 
 // 获取 ById
 // 获取 ById
 func Read_Class_ById(id int) (r DeviceClass, err error) {
 func Read_Class_ById(id int) (r DeviceClass, err error) {
+	key := strconv.Itoa(id)
+	if r, is := Redis_DeviceClass_Get(key); is {
+		//println("Redis_Get  OK")
+		return r, nil
+	}
+
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	r = DeviceClass{Id: id}
 	r = DeviceClass{Id: id}
 	err = o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	err = o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	if err != nil {
 	if err != nil {
 		fmt.Println(err)
 		fmt.Println(err)
+		return r, err
 	}
 	}
-	return r,err
+
+	Redis_DeviceClass_Set(r)
+	return r, err
 }
 }
+
 // 添加
 // 添加
 func Add_Class(m DeviceClass) (id int64, err error) {
 func Add_Class(m DeviceClass) (id int64, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
@@ -57,8 +125,10 @@ func Add_Class(m DeviceClass) (id int64, err error) {
 	if err != nil {
 	if err != nil {
 		fmt.Println(err)
 		fmt.Println(err)
 	}
 	}
+	Redis_DeviceClass_Set(m)
 	return
 	return
 }
 }
+
 // 修改
 // 修改
 func Update_Class_ById(m DeviceClass) (err error) {
 func Update_Class_ById(m DeviceClass) (err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
@@ -66,15 +136,16 @@ func Update_Class_ById(m DeviceClass) (err error) {
 	// ascertain id exists in the database
 	// ascertain id exists in the database
 	if err = o.Read(&v); err == nil {
 	if err = o.Read(&v); err == nil {
 		var num int64
 		var num int64
-		if num, err = o.Update(&m, "T_name","T_Notice_wx","T_Notice_phone","T_Notice_message","T_Notice_mailbox"); err == nil {
+		if num, err = o.Update(&m, "T_name", "T_Notice_wx", "T_Notice_wx2", "T_Notice_phone", "T_Notice_message", "T_Notice_mailbox", "T_Notice_mechanism"); err == nil {
 			fmt.Println("Number of records updated in database:", num)
 			fmt.Println("Number of records updated in database:", num)
 		}
 		}
 	}
 	}
+	Redis_DeviceClass_Set(m)
 	return
 	return
 }
 }
 
 
 // 删除
 // 删除
-func Delete_Class_ById(id int) (DeviceClass) {
+func Delete_Class_ById(id int) DeviceClass {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	v := DeviceClass{Id: id}
 	v := DeviceClass{Id: id}
 	// ascertain id exists in the database
 	// ascertain id exists in the database
@@ -84,22 +155,26 @@ func Delete_Class_ById(id int) (DeviceClass) {
 		if num, err = o.Update(&v, "T_State"); err == nil {
 		if num, err = o.Update(&v, "T_State"); err == nil {
 			fmt.Println("Number of records updated in database:", num)
 			fmt.Println("Number of records updated in database:", num)
 		}
 		}
+		key := strconv.Itoa(v.Id)
+		Redis_DeviceClass_DelK(key)
 	}
 	}
 	return v
 	return v
 }
 }
+
 // 删除
 // 删除
-func Delete_Class_ByUuid_All(user_ Admin.Admin)  {
+func Delete_Class_ByUuid_All(user_ Admin.Admin) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	qs := o.QueryTable(new(DeviceClass))
 	qs := o.QueryTable(new(DeviceClass))
 
 
 	var r []DeviceClass
 	var r []DeviceClass
 	qs.Filter("T_State", 1).All(&r)
 	qs.Filter("T_State", 1).All(&r)
-	for _,v := range r{
+	for _, v := range r {
 		v.T_State = 0
 		v.T_State = 0
-		o.Update(&v, "T_State");
+		o.Update(&v, "T_State")
 	}
 	}
 
 
 }
 }
+
 // 获取全部
 // 获取全部
 func Read_Class_All_1() (r []DeviceClass) {
 func Read_Class_All_1() (r []DeviceClass) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
@@ -109,7 +184,7 @@ func Read_Class_All_1() (r []DeviceClass) {
 }
 }
 
 
 // 获取列表
 // 获取列表
-func Read_DeviceClass_ALL_1(T_uuid string,page int,T_name string) (r []DeviceClass,cnt int64) {
+func Read_DeviceClass_ALL_1(T_uuid string, page int, T_name string) (r []DeviceClass, cnt int64) {
 
 
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 	// 也可以直接使用 Model 结构体作为表名
@@ -125,9 +200,9 @@ func Read_DeviceClass_ALL_1(T_uuid string,page int,T_name string) (r []DeviceCla
 	qs.Limit(conf.Page_size, offset).Filter("T_uuid", T_uuid).Filter("T_name__icontains", T_name).OrderBy("-Id").Filter("T_State", 1).All(&r)
 	qs.Limit(conf.Page_size, offset).Filter("T_uuid", T_uuid).Filter("T_name__icontains", T_name).OrderBy("-Id").Filter("T_State", 1).All(&r)
 	cnt, _ = qs.Filter("T_uuid", T_uuid).Filter("T_name__icontains", T_name).Filter("T_State", 1).Count()
 	cnt, _ = qs.Filter("T_uuid", T_uuid).Filter("T_name__icontains", T_name).Filter("T_State", 1).Count()
 
 
-
-	return r,cnt
+	return r, cnt
 }
 }
+
 // 获取列表
 // 获取列表
 func Read_DeviceClass_ALL_T_uuid_1(T_uuid string) (r []DeviceClass) {
 func Read_DeviceClass_ALL_T_uuid_1(T_uuid string) (r []DeviceClass) {
 
 
@@ -140,4 +215,3 @@ func Read_DeviceClass_ALL_T_uuid_1(T_uuid string) (r []DeviceClass) {
 
 
 	return r
 	return r
 }
 }
-

+ 8 - 11
models/Device/DeviceData.go

@@ -3,7 +3,6 @@ package Device
 import (
 import (
 	"Cold_Api/conf"
 	"Cold_Api/conf"
 	"Cold_Api/controllers/lib"
 	"Cold_Api/controllers/lib"
-	"Cold_Api/logs"
 	"encoding/json"
 	"encoding/json"
 	"fmt"
 	"fmt"
 	"github.com/astaxie/beego/cache"
 	"github.com/astaxie/beego/cache"
@@ -37,7 +36,7 @@ var redisCache_DeviceData cache.Cache
 func init() {
 func init() {
 
 
 	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
 	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
-		"redis_DeviceData", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+		"redisCache_DeviceData", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
 	fmt.Println(config)
 	fmt.Println(config)
 	var err error
 	var err error
 	redisCache_DeviceData, err = cache.NewCache("redis", config)
 	redisCache_DeviceData, err = cache.NewCache("redis", config)
@@ -85,12 +84,11 @@ func RedisDeviceData_Get(key string) (r DeviceData_New, is bool) {
 }
 }
 func RedisDeviceData_Get_(key string) (r DeviceData_New, is bool) {
 func RedisDeviceData_Get_(key string) (r DeviceData_New, is bool) {
 	if redisCache_DeviceData.IsExist(key) {
 	if redisCache_DeviceData.IsExist(key) {
-		logs.Println("找到key:", key)
 		v := redisCache_DeviceData.Get(key)
 		v := redisCache_DeviceData.Get(key)
 		json.Unmarshal(v.([]byte), &r)
 		json.Unmarshal(v.([]byte), &r)
+
 		return r, true
 		return r, true
 	}
 	}
-	logs.Println("没有 找到key:", key)
 	return DeviceData_New{}, false
 	return DeviceData_New{}, false
 }
 }
 
 
@@ -123,7 +121,7 @@ func CREATE_DeviceData(SN string) bool {
 
 
 func DELETE_DeviceDatar(SN string) bool {
 func DELETE_DeviceDatar(SN string) bool {
 
 
-	sql := "DROP TABLE Z_DeviceData_"+SN
+	sql := "DROP TABLE Z_DeviceData_" + SN
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	_, err := o.Raw(sql).Exec()
 	_, err := o.Raw(sql).Exec()
 	if err != nil {
 	if err != nil {
@@ -140,11 +138,9 @@ func DELETE_DeviceDatar(SN string) bool {
 //	return r
 //	return r
 //}
 //}
 
 
-
-
 type DeviceData_ struct {
 type DeviceData_ struct {
 	T_name    string  `orm:"column(t_name);size(256);null"`        // 标题
 	T_name    string  `orm:"column(t_name);size(256);null"`        // 标题
-	T_sn    string  `orm:"column(t_sn);size(256);null"`        // 标题
+	T_sn      string  `orm:"column(t_sn);size(256);null"`          // 标题
 	T_id      int     `orm:"column(t_id);size(10);null"`           // ID
 	T_id      int     `orm:"column(t_id);size(10);null"`           // ID
 	T_t       float32 `orm:"column(t_t);size(10);null"`            // 温度
 	T_t       float32 `orm:"column(t_t);size(10);null"`            // 温度
 	T_rh      float32 `orm:"column(t_rh);size(10);null"`           // 湿度
 	T_rh      float32 `orm:"column(t_rh);size(10);null"`           // 湿度
@@ -216,14 +212,15 @@ func Read_DeviceSensorData_ById_List(SN string, T_id int, Time_start_ string, Ti
 	key, _ := strconv.Atoi(maps_z[0][0].(string))
 	key, _ := strconv.Atoi(maps_z[0][0].(string))
 	return maps, key
 	return maps, key
 }
 }
+
 //
 //
-func Read_SqlRaw(T_SQL string) ([]orm2.Params) {
+func Read_SqlRaw(T_SQL string) []orm2.Params {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	var lists []orm2.Params
 	var lists []orm2.Params
 
 
 	fmt.Println(T_SQL)
 	fmt.Println(T_SQL)
 	o.Raw(T_SQL).Values(&lists)
 	o.Raw(T_SQL).Values(&lists)
-	fmt.Println(T_SQL+":",len(lists))
+	fmt.Println(T_SQL+":", len(lists))
 	return lists
 	return lists
 }
 }
 
 
@@ -264,7 +261,7 @@ func Read_DeviceSensorData_By_T_snid_List(T_snid string, Time_start_ string, Tim
 
 
 		if len(sn_id) == 2 {
 		if len(sn_id) == 2 {
 			r_maps, r_maps_num := Read_DeviceSensorData_ById_List(sn_id[0], lib.To_int(sn_id[1]), Time_start_, Time_end_, 0, 9999)
 			r_maps, r_maps_num := Read_DeviceSensorData_ById_List(sn_id[0], lib.To_int(sn_id[1]), Time_start_, Time_end_, 0, 9999)
-			for i,_ := range r_maps{
+			for i, _ := range r_maps {
 				r_maps[i].T_sn = sn_id[0]
 				r_maps[i].T_sn = sn_id[0]
 			}
 			}
 			maps = append(maps, r_maps...)
 			maps = append(maps, r_maps...)

+ 63 - 134
models/Device/DeviceSensor.go

@@ -5,13 +5,11 @@ import (
 	"Cold_Api/models/Admin"
 	"Cold_Api/models/Admin"
 	"encoding/json"
 	"encoding/json"
 	"fmt"
 	"fmt"
-	orm2 "github.com/beego/beego/v2/client/orm"
-
-	beego "github.com/beego/beego/v2/server/web"
-
 	"github.com/astaxie/beego/cache"
 	"github.com/astaxie/beego/cache"
 	_ "github.com/astaxie/beego/cache/redis"
 	_ "github.com/astaxie/beego/cache/redis"
 	"github.com/beego/beego/v2/adapter/orm"
 	"github.com/beego/beego/v2/adapter/orm"
+	orm2 "github.com/beego/beego/v2/client/orm"
+	beego "github.com/beego/beego/v2/server/web"
 	_ "github.com/go-sql-driver/mysql"
 	_ "github.com/go-sql-driver/mysql"
 	"strconv"
 	"strconv"
 	"strings"
 	"strings"
@@ -49,7 +47,7 @@ type DeviceSensor struct {
 	T_Calss    string    `orm:"size(256);null"`                                        //设备分类
 	T_Calss    string    `orm:"size(256);null"`                                        //设备分类
 	T_l_p      int       `orm:"size(22);null"`                                         // 1物流端   2药店端
 	T_l_p      int       `orm:"size(22);null"`                                         // 1物流端   2药店端
 	T_give     int       `orm:"size(2);1"`                                             // 0 丢弃  1 正常
 	T_give     int       `orm:"size(2);1"`                                             // 0 丢弃  1 正常
-	T_datashow     int       `orm:"size(2);1"`                                             // 0 屏蔽数据展示  1 正常数据展示
+	T_datashow int       `orm:"size(2);1"`                                             // 0 屏蔽数据展示  1 正常数据展示
 	T_Visit    int       `orm:"size(200);1"`                                           // 浏览量
 	T_Visit    int       `orm:"size(200);1"`                                           // 浏览量
 	T_sort     int       `orm:"size(200);1"`                                           // 排序
 	T_sort     int       `orm:"size(200);1"`                                           // 排序
 	T_State    int       `orm:"size(2);1"`                                             // 0 删除   1 正常
 	T_State    int       `orm:"size(2);1"`                                             // 0 删除   1 正常
@@ -68,19 +66,20 @@ func (t *DeviceSensor) TableName() string {
 
 
 // 模板
 // 模板
 type DeviceSensor_R struct {
 type DeviceSensor_R struct {
-	T_sn      string  // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
-	T_id      int     // 传感器编号
-	T_name    string  // 标题
-	T_t       float32 // 温度
-	T_rh      float32 // 湿度
-	T_Tlower  float32 //  温度下限
-	T_Tupper  float32 //  温度上限
-	T_RHlower float32 //  湿度下限
-	T_RHupper float32 //  湿度上限
-	T_time    string  // 采集时间
-	T_Site    string  //GPS
-	T_Dattery int     //电量
-	T_monitor int     //  记录状态
+	T_sn       string  // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
+	T_id       int     // 传感器编号
+	T_name     string  // 标题
+	T_t        float32 // 温度
+	T_rh       float32 // 湿度
+	T_Tlower   float32 //  温度下限
+	T_Tupper   float32 //  温度上限
+	T_RHlower  float32 //  湿度下限
+	T_RHupper  float32 //  湿度上限
+	T_time     string  // 采集时间
+	T_Site     string  //GPS
+	T_Dattery  int     //电量
+	T_monitor  int     //  记录状态
+	T_online   int     //  在线状态 1 在线  0 离线
 	T_datashow int     //   0 屏蔽数据展示  1 正常数据展示
 	T_datashow int     //   0 屏蔽数据展示  1 正常数据展示
 
 
 }
 }
@@ -132,8 +131,10 @@ func Redis_DeviceSensor_Get(key string) (r DeviceSensor, is bool) {
 	if redisCache_DeviceSensor.IsExist(key) {
 	if redisCache_DeviceSensor.IsExist(key) {
 		//println("找到key:",key)
 		//println("找到key:",key)
 		v := redisCache_DeviceSensor.Get(key)
 		v := redisCache_DeviceSensor.Get(key)
-
 		json.Unmarshal(v.([]byte), &r)
 		json.Unmarshal(v.([]byte), &r)
+		if r.Id == -1 {
+			return DeviceSensor{}, false
+		}
 		return r, true
 		return r, true
 	}
 	}
 	//println("没有 找到key:",key)
 	//println("没有 找到key:",key)
@@ -147,17 +148,6 @@ func Redis_DeviceSensor_DelK(r DeviceSensor) (err error) {
 }
 }
 
 
 func DeviceSensorToDeviceSensor_R(DeviceSensor_ DeviceSensor) (DeviceSensor_r DeviceSensor_R) {
 func DeviceSensorToDeviceSensor_R(DeviceSensor_ DeviceSensor) (DeviceSensor_r DeviceSensor_R) {
-	key_data := DeviceSensor_.T_sn + "|" + strconv.Itoa(DeviceSensor_.T_id)
-	r, is := RedisDeviceData_Get_(key_data)
-	if is {
-		if DeviceSensor_.T_time.Unix() < r.T_time.Unix() {
-			DeviceSensor_r.T_t = r.T_t
-			DeviceSensor_r.T_rh = r.T_rh
-			DeviceSensor_r.T_time = r.T_time.Format("2006-01-02 15:04:05")
-			DeviceSensor_r.T_Site = r.T_Site
-			DeviceSensor_r.T_Dattery = r.T_Dattery
-		}
-	}
 
 
 	DeviceSensor_r.T_sn = DeviceSensor_.T_sn
 	DeviceSensor_r.T_sn = DeviceSensor_.T_sn
 	DeviceSensor_r.T_id = DeviceSensor_.T_id
 	DeviceSensor_r.T_id = DeviceSensor_.T_id
@@ -172,8 +162,30 @@ func DeviceSensorToDeviceSensor_R(DeviceSensor_ DeviceSensor) (DeviceSensor_r De
 	DeviceSensor_r.T_Site = DeviceSensor_.T_Site
 	DeviceSensor_r.T_Site = DeviceSensor_.T_Site
 	DeviceSensor_r.T_Dattery = DeviceSensor_.T_Dattery
 	DeviceSensor_r.T_Dattery = DeviceSensor_.T_Dattery
 	DeviceSensor_r.T_monitor = DeviceSensor_.T_monitor
 	DeviceSensor_r.T_monitor = DeviceSensor_.T_monitor
+
 	DeviceSensor_r.T_datashow = DeviceSensor_.T_datashow
 	DeviceSensor_r.T_datashow = DeviceSensor_.T_datashow
 
 
+	// 最新设备数据
+	d_r, d_r_err := Read_Device_ByT_sn(DeviceSensor_.T_sn)
+	if d_r_err == nil {
+		DeviceSensor_r.T_monitor = d_r.T_monitor
+		DeviceSensor_r.T_online = d_r.T_online
+	}
+
+	// 最新数据
+	key_data := DeviceSensor_.T_sn + "|" + strconv.Itoa(DeviceSensor_.T_id)
+	r, is := RedisDeviceData_Get_(key_data)
+	if is {
+		//logs.Println("时间对比:",DeviceSensor_.T_time.Format("2006-01-02 15:04:05") , r.T_time.Format("2006-01-02 15:04:05"))
+		if DeviceSensor_.T_time.Unix() < r.T_time.Unix() {
+			DeviceSensor_r.T_t = r.T_t
+			DeviceSensor_r.T_rh = r.T_rh
+			DeviceSensor_r.T_time = r.T_time.Format("2006-01-02 15:04:05")
+			DeviceSensor_r.T_Site = r.T_Site
+			DeviceSensor_r.T_Dattery = r.T_Dattery
+		}
+	}
+
 	return
 	return
 }
 }
 
 
@@ -183,20 +195,23 @@ func DeviceSensorToDeviceSensor_R(DeviceSensor_ DeviceSensor) (DeviceSensor_r De
 func Read_DeviceSensor_ByT_sn(T_sn string, T_id int) (r DeviceSensor, is bool) {
 func Read_DeviceSensor_ByT_sn(T_sn string, T_id int) (r DeviceSensor, is bool) {
 	key := r.T_sn + "|" + strconv.Itoa(r.T_id)
 	key := r.T_sn + "|" + strconv.Itoa(r.T_id)
 	if r, is := Redis_DeviceSensor_Get(key); is {
 	if r, is := Redis_DeviceSensor_Get(key); is {
+		if r.Id == -1 {
+			return r, false
+		}
 		return r, true
 		return r, true
 	}
 	}
-
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	r = DeviceSensor{T_sn: T_sn, T_id: T_id}
 	r = DeviceSensor{T_sn: T_sn, T_id: T_id}
 	err := o.Read(&r, "T_sn", "T_id") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	err := o.Read(&r, "T_sn", "T_id") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	if err != nil {
 	if err != nil {
 		fmt.Println("Delete_DeviceSensor_ById", err)
 		fmt.Println("Delete_DeviceSensor_ById", err)
+		r.Id = -1
+		Redis_DeviceSensor_Set(r)
 		return r, false
 		return r, false
 	}
 	}
 
 
 	Redis_DeviceSensor_Set(r)
 	Redis_DeviceSensor_Set(r)
 	return r, true
 	return r, true
-
 }
 }
 
 
 // 删除
 // 删除
@@ -218,37 +233,6 @@ func Delete_DeviceSensor_ById(T_sn string, T_id int) (err error) {
 	return
 	return
 }
 }
 
 
-// 添加
-func Add_DeviceSensor(Devicesensor DeviceSensor) int {
-	//if(conf.Test_server) {return }
-
-	o := orm.NewOrm()
-	r := Devicesensor
-	r.T_give = 1
-	r.T_datashow = 1
-	// 三个返回参数依次为:是否新创建的,对象 Id 值,错误
-	_, id, err := o.ReadOrCreate(&r, "T_sn", "T_id")
-	if err != nil {
-		return 0
-	}
-
-	//if !is {
-	//	//fmt.Println(Devicesensor.T_id," ReadOrCreate ",id)
-	//	Devicesensor.Id = int(id)
-	//	if Devicesensor.T_name == "*" || len(Devicesensor.T_name) == 0 {
-	//		//fmt.Println("Add_DeviceSensor:",Devicesensor.T_sn,Devicesensor.T_id,Devicesensor.T_Bind)
-	//		o.Update(&Devicesensor, "T_Bind", "T_t", "T_rh", "T_Tlower", "T_Tupper", "T_RHlower", "T_RHupper", "T_Site", "T_Dattery", "T_time")
-	//
-	//	} else {
-	//		//fmt.Println("Add_DeviceSensor:",Devicesensor.T_sn,Devicesensor.T_id,Devicesensor.T_Bind)
-	//		o.Update(&Devicesensor, "T_Bind", "T_name", "T_t", "T_rh", "T_Tlower", "T_Tupper", "T_RHlower", "T_RHupper", "T_Site", "T_Dattery", "T_time")
-	//
-	//	}
-	//}
-	Redis_DeviceSensor_Set(Devicesensor)
-	return int(id)
-}
-
 // 修改
 // 修改
 func Update_DeviceSensor(r DeviceSensor, cols ...string) bool {
 func Update_DeviceSensor(r DeviceSensor, cols ...string) bool {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
@@ -262,51 +246,6 @@ func Update_DeviceSensor(r DeviceSensor, cols ...string) bool {
 }
 }
 
 
 // 修改
 // 修改
-func Update_DeviceSensor_ByTsn_T_Tx_T_RHx(T_sn string, T_id int, T_Tlower float32, T_Tupper float32, T_RHlower float32, T_RHupper float32) (err error) {
-	o := orm.NewOrm()
-	v := DeviceSensor{T_sn: T_sn, T_id: T_id}
-	// ascertain id exists in the database
-	if err = o.Read(&v, "T_sn", "T_id"); err == nil {
-
-		v.T_Tlower = T_Tlower
-		v.T_Tupper = T_Tupper
-		v.T_RHlower = T_RHlower
-		v.T_RHupper = T_RHupper
-		o.Update(&v, "T_en", "T_free", "T_del")
-	}
-	return err
-}
-
-// 修改
-func Update_DeviceSensor_ByTsn_T_en_T_free_T_del(T_sn string, T_id int, T_en int, T_free int, T_del int) (err error) {
-	o := orm.NewOrm()
-	v := DeviceSensor{T_sn: T_sn, T_id: T_id}
-	// ascertain id exists in the database
-	if err = o.Read(&v, "T_sn", "T_id"); err == nil {
-
-		v.T_en = T_en
-		//v.T_del = T_del
-		v.T_free = T_free
-		o.Update(&v, "T_en", "T_free", "T_del")
-	}
-	return err
-}
-
-//// 修改
-//func Update_DeviceSensor_ByTsn_T_err(T_sn string, T_id int, T_err int) (err error) {
-//	o := orm.NewOrm()
-//	v := DeviceSensor{T_sn: T_sn, T_id: T_id}
-//	// ascertain id exists in the database
-//	if err = o.Read(&v, "T_sn", "T_id"); err == nil {
-//
-//		v.T_err = T_err
-//
-//		o.Update(&v, "T_err")
-//	}
-//	return err
-//}
-
-// 修改
 func DeviceSensor_Bind_Del(T_sn string, T_id int, T_Calss_id int) (err error) {
 func DeviceSensor_Bind_Del(T_sn string, T_id int, T_Calss_id int) (err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	v := DeviceSensor{T_sn: T_sn, T_id: T_id}
 	v := DeviceSensor{T_sn: T_sn, T_id: T_id}
@@ -332,8 +271,6 @@ func DeviceSensor_T_Calss_Add(T_sn string, T_id int, T_Calss_id int) (err error)
 	return err
 	return err
 }
 }
 
 
-
-
 // 修改
 // 修改
 func DeviceSensor_T_Calss_ALL_Del(T_Calss_id int) {
 func DeviceSensor_T_Calss_ALL_Del(T_Calss_id int) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
@@ -371,6 +308,7 @@ func DeviceSensor_T_Bind_Add(T_sn string, T_id int, admin_r Admin.Admin) (err er
 	}
 	}
 	return err
 	return err
 }
 }
+
 //
 //
 //// 修改
 //// 修改
 //func Update_DeviceSensor_ByTsn_All_T_Bind(T_sn string, T_Bind string) (err error) {
 //func Update_DeviceSensor_ByTsn_All_T_Bind(T_sn string, T_Bind string) (err error) {
@@ -389,10 +327,10 @@ func DeviceSensor_T_Bind_Add(T_sn string, T_id int, admin_r Admin.Admin) (err er
 //}
 //}
 
 
 // 获取最新数据
 // 获取最新数据
-func DeviceSensor_T_Bind_ALL(T_sn string, T_Bind string)  {
+func DeviceSensor_T_Bind_ALL(T_sn string, T_Bind string) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 
 
-	res, err := o.Raw("UPDATE DeviceSensor SET `t__bind` = '"+T_Bind+"' WHERE `t_sn` = '"+T_sn+"' ").Exec()
+	res, err := o.Raw("UPDATE DeviceSensor SET `t__bind` = '" + T_Bind + "' WHERE `t_sn` = '" + T_sn + "' ").Exec()
 	if err == nil {
 	if err == nil {
 		num, _ := res.RowsAffected()
 		num, _ := res.RowsAffected()
 		fmt.Println("mysql row affected nums: ", num)
 		fmt.Println("mysql row affected nums: ", num)
@@ -400,31 +338,29 @@ func DeviceSensor_T_Bind_ALL(T_sn string, T_Bind string)  {
 
 
 }
 }
 
 
-
-
-
-
 // 获取最新数据
 // 获取最新数据
-func DeviceSensor_T_l_p_ALL(T_sn string, T_l_p int)  {
+func DeviceSensor_T_l_p_ALL(T_sn string, T_l_p int) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 
 
-	res, err := o.Raw("UPDATE DeviceSensor SET `t_l_p` = "+strconv.Itoa(T_l_p)+" WHERE `t_sn` = '"+T_sn+"' ").Exec()
+	res, err := o.Raw("UPDATE DeviceSensor SET `t_l_p` = " + strconv.Itoa(T_l_p) + " WHERE `t_sn` = '" + T_sn + "' ").Exec()
 	if err == nil {
 	if err == nil {
 		num, _ := res.RowsAffected()
 		num, _ := res.RowsAffected()
 		fmt.Println("mysql row affected nums: ", num)
 		fmt.Println("mysql row affected nums: ", num)
 	}
 	}
 
 
 }
 }
+
 // 获取最新数据
 // 获取最新数据
-func DeviceSensor_t_give_ALL(T_sn string, t_give int)  {
+func DeviceSensor_t_give_ALL(T_sn string, t_give int) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 
 
-	res, err := o.Raw("UPDATE DeviceSensor SET `t_give` = "+strconv.Itoa(t_give)+" WHERE `t_sn` = '"+T_sn+"' ").Exec()
+	res, err := o.Raw("UPDATE DeviceSensor SET `t_give` = " + strconv.Itoa(t_give) + " WHERE `t_sn` = '" + T_sn + "' ").Exec()
 	if err == nil {
 	if err == nil {
 		num, _ := res.RowsAffected()
 		num, _ := res.RowsAffected()
 		fmt.Println("mysql row affected nums: ", num)
 		fmt.Println("mysql row affected nums: ", num)
 	}
 	}
 }
 }
+
 // 获取 ById
 // 获取 ById
 func Read_DeviceSensor_ByTsn_Tid(T_sn string, T_id int) (r DeviceSensor, err error) {
 func Read_DeviceSensor_ByTsn_Tid(T_sn string, T_id int) (r DeviceSensor, err error) {
 
 
@@ -436,7 +372,7 @@ func Read_DeviceSensor_ByTsn_Tid(T_sn string, T_id int) (r DeviceSensor, err err
 }
 }
 
 
 // 获取列表
 // 获取列表
-func Read_DeviceSensor_ByTsn(T_sn string) ([]DeviceSensor, int) {
+func Read_DeviceSensor_ByTsn(T_sn string) ([]DeviceSensor_R, int) {
 
 
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 	// 也可以直接使用 Model 结构体作为表名
@@ -445,18 +381,12 @@ func Read_DeviceSensor_ByTsn(T_sn string) ([]DeviceSensor, int) {
 	var r []DeviceSensor
 	var r []DeviceSensor
 	qs.Filter("T_sn", T_sn).OrderBy("T_id").All(&r)
 	qs.Filter("T_sn", T_sn).OrderBy("T_id").All(&r)
 	cnt, _ := qs.Filter("T_sn", T_sn).Count()
 	cnt, _ := qs.Filter("T_sn", T_sn).Count()
-	for i, v := range r {
-		DeviceSensorData, is := Read_DeviceSensorData_ById_New(v.T_sn, v.T_id)
-		if !is {
-			continue
-		}
-		//fmt.Println(v.T_sn, v.T_id, DeviceSensorData.T_time)
-		r[i].T_t = DeviceSensorData.T_t
-		r[i].T_rh = DeviceSensorData.T_rh
-		r[i].T_time = DeviceSensorData.T_time
+	var DeviceSensor_r []DeviceSensor_R
+	for _, v := range r {
+		DeviceSensor_r = append(DeviceSensor_r, DeviceSensorToDeviceSensor_R(v))
 	}
 	}
 
 
-	return r, int(cnt)
+	return DeviceSensor_r, int(cnt)
 }
 }
 
 
 // 获取列表
 // 获取列表
@@ -543,13 +473,12 @@ func Read_DeviceSensor_class_ALL_1(user_ Admin.Admin, T_Calss_id int, page int,
 	cond1 := cond.And("T_Bind__icontains", T_Bind).And("T_Calss__icontains", T_Calss).And("T_sn__icontains", SN_type).And("T_sn__icontains", T_sn).And("T_name__icontains", T_name).And("T_datashow", 1) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
 	cond1 := cond.And("T_Bind__icontains", T_Bind).And("T_Calss__icontains", T_Calss).And("T_sn__icontains", SN_type).And("T_sn__icontains", T_sn).And("T_name__icontains", T_name).And("T_datashow", 1) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
 
 
 	// 非内部权限
 	// 非内部权限
-	println("user_.Admin_power:",user_.Admin_power)
+	println("user_.Admin_power:", user_.Admin_power)
 	if len(T_sn) < 6 {
 	if len(T_sn) < 6 {
 		cond1 = cond.AndCond(cond1).AndCond(cond.And("T_give", 1))
 		cond1 = cond.AndCond(cond1).AndCond(cond.And("T_give", 1))
 	}
 	}
 
 
-
-	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort","T_id").All(&r)
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
 	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
 	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
 
 
 	//
 	//

+ 110 - 18
models/Device/DeviceWarningList.go

@@ -1,44 +1,136 @@
 package Device
 package Device
 
 
 import (
 import (
-	"fmt"
+	"Cold_Api/logs"
+	_ "github.com/astaxie/beego/cache/redis"
 	"github.com/beego/beego/v2/adapter/orm"
 	"github.com/beego/beego/v2/adapter/orm"
 	_ "github.com/go-sql-driver/mysql"
 	_ "github.com/go-sql-driver/mysql"
+	"time"
 )
 )
 
 
 // 模板
 // 模板
 type DeviceWarningList struct {
 type DeviceWarningList struct {
-	Id         int       `orm:"column(ID);size(11);auto;pk"`
-	T_name string    `orm:"size(256);null"`                  // 分类
-	T_Tips string    `orm:"type(text);size(256);null"`                  // 提示
+	Id     int    `orm:"column(ID);size(11);auto;pk"`
+	T_name string `orm:"size(256);null"`            // 分类
+	T_Tips string `orm:"type(text);size(256);null"` // 提示
 }
 }
 
 
 func (t *DeviceWarningList) TableName() string {
 func (t *DeviceWarningList) TableName() string {
 	return "DeviceWarningList" // 数据库名称   // ************** 替换 FormulaList **************
 	return "DeviceWarningList" // 数据库名称   // ************** 替换 FormulaList **************
 }
 }
 
 
+//var redisCache_DeviceWarningList cache.Cache
+
 func init() {
 func init() {
 	//注册模型
 	//注册模型
 	orm.RegisterModel(new(DeviceWarningList))
 	orm.RegisterModel(new(DeviceWarningList))
+	//
+	//config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
+	//	"redis_DeviceWarningList", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+	//fmt.Println(config)
+	//var err error
+	//redisCache_DeviceWarningList, err = cache.NewCache("redis", config)
+	//if err != nil || redisCache_DeviceWarningList == nil {
+	//	errMsg := "failed to init redis"
+	//	fmt.Println(errMsg, err)
+	//	panic(err)
+	//}
+
+	//go Read_DeviceWarningList_All_1()
 }
 }
 
 
+// ---------------- Redis -------------------
+//Redis_Set(m.T_sn,m) // Redis 更新缓存
+//func Redis_DeviceWarningList_Set(r DeviceWarningList) (err error) {
+//	//json序列化
+//	str, err := json.Marshal(r)
+//	if err != nil {
+//		fmt.Print(err)
+//		return
+//	}
+//
+//	err = redisCache_DeviceWarningList.Put(r.T_name, str, 0)
+//	if err != nil {
+//		fmt.Println("set key:", r.T_name, ",value:", str, err)
+//	}
+//	return
+//}
+//
+////if r,is :=Redis_Get(T_sn);is{
+////return r,nil
+////}
+//func Redis_DeviceWarningList_Get(key string) (r DeviceWarningList, is bool) {
+//	if redisCache_DeviceWarningList.IsExist(key) {
+//		//println("找到key:",key)
+//		v := redisCache_DeviceWarningList.Get(key)
+//
+//		json.Unmarshal(v.([]byte), &r)
+//		return r, true
+//	}
+//	//println("没有 找到key:",key)
+//	return DeviceWarningList{}, false
+//}
 // ---------------- 特殊方法 -------------------
 // ---------------- 特殊方法 -------------------
-
-// 获取 ById
-func Read_DeviceWarningList_ById(id int) (r DeviceWarningList) {
-	o := orm.NewOrm()
-	r = DeviceWarningList{Id: id}
-	err := o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
-	if err != nil {
-		fmt.Println(err)
-	}
-	return r
-}
+//
+//// 获取 ById
+//func Read_DeviceWarningList(T_name string) (r DeviceWarningList) {
+//
+//	if r, is := Redis_DeviceWarningList_Get(T_name); is {
+//		//println("Redis_Get  OK")
+//		return r
+//	}
+//	o := orm.NewOrm()
+//	r = DeviceWarningList{T_name: T_name}
+//	err := o.Read(&r,"T_name") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+//	if err != nil {
+//		o.Insert(&r)
+//		o.Read(&r,"T_name")
+//	}
+//
+//	Redis_DeviceWarningList_Set(r)
+//	return r
+//}
+//
+//// 修改
+//func Update_DeviceWarningList(r DeviceWarningList, cols ...string) bool {
+//	o := orm.NewOrm()
+//	if num, err := o.Update(&r, cols...); err == nil {
+//		fmt.Println("Number of records updated in database:", num)
+//		Redis_DeviceWarningList_Set(r) // Redis 更新缓存
+//		return true
+//	}
+//
+//	return false
+//}
+//
+//// 获取全部
+//func Read_DeviceWarningList_All_1(){
+//	logs.Println("=========== 初始化报警规则 =========")
+//	time.Sleep(3*time.Second)
+//	o := orm.NewOrm()
+//	var r []DeviceWarningList
+//	qs := o.QueryTable(new(DeviceWarningList))
+//	qs.All(&r)
+//
+//	for _,v := range r{
+//		Redis_DeviceWarningList_Set(v)
+//	}
+//
+//	return
+//}
 
 
 // 获取全部
 // 获取全部
-func Read_DeviceWarningList_All_1() (r []DeviceWarningList) {
+func Read_DeviceWarningList_All_T_Notice_mechanism() string {
+	logs.Println("=========== 初始化报警规则 =========")
+	time.Sleep(3 * time.Second)
 	o := orm.NewOrm()
 	o := orm.NewOrm()
+	var r []DeviceWarningList
 	qs := o.QueryTable(new(DeviceWarningList))
 	qs := o.QueryTable(new(DeviceWarningList))
 	qs.All(&r)
 	qs.All(&r)
-	return r
-}
+	str := ""
+	for _, v := range r {
+		str += v.T_Tips
+	}
+
+	return str
+}

+ 0 - 157
models/Panel/PaneView.go

@@ -1,157 +0,0 @@
-package Panel
-
-import (
-	"Cold_Api/conf"
-	"Cold_Api/logs"
-	"encoding/json"
-	"fmt"
-	"github.com/astaxie/beego/cache"
-	_ "github.com/astaxie/beego/cache/redis"
-	"github.com/beego/beego/v2/adapter/orm"
-	_ "github.com/go-sql-driver/mysql"
-	"time"
-)
-
-// 模板
-type PaneView struct {
-	Id       int    `orm:"column(ID);size(11);auto;pk"`
-	T_viewid string `orm:"size(256);null"` //
-
-	T_mode  int    `orm:"size(200);0"`  // 模式
-	T_width  int    `orm:"size(200);null"`  // 宽度
-	T_height int    `orm:"size(200);null"`  // 高度
-	T_css    string `orm:"type(text);null"` // 样式
-	T_text   string `orm:"type(text);null"` // 详情
-	T_data   string `orm:"type(text);null"` // 数据来源
-
-	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
-	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
-}
-
-func (t *PaneView) TableName() string {
-	return "PaneView" // 数据库名称   // ************** 替换 FormulaList **************
-}
-
-var redisCache_PaneView cache.Cache
-
-func init() {
-	//注册模型
-	orm.RegisterModel(new(PaneView))
-
-	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
-		"redis_"+"PaneView", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
-	logs.Println(config)
-	var err error
-	redisCache_PaneView, err = cache.NewCache("redis", config)
-	if err != nil || redisCache_PaneView == nil {
-		errMsg := "failed to init redis"
-		logs.Println(errMsg, err)
-
-	}
-}
-
-// ---------------- Redis -------------------
-//Redis_Set(m.T_sn,m) // Redis 更新缓存
-func Redis_PaneView_Set(key string, r PaneView) (err error) {
-	//json序列化
-	str, err := json.Marshal(r)
-	if err != nil {
-		logs.Println(err)
-		return
-	}
-	err = redisCache_PaneView.Put(key, str, 24*time.Hour)
-	if err != nil {
-		logs.Println("set key:", key, ",value:", str, err)
-	}
-	return
-}
-
-//if r,is :=Redis_Get(T_sn);is{
-//return r,nil
-//}
-func Redis_PaneView_Get(key string) (r PaneView, is bool) {
-	if redisCache_PaneView.IsExist(key) {
-		logs.Println("找到key:", key)
-		v := redisCache_PaneView.Get(key)
-		json.Unmarshal(v.([]byte), &r)
-		return r, true
-	}
-	logs.Println("没有 找到key:", key)
-	return PaneView{}, false
-}
-func Redis_PaneView_DelK(key string) (err error) {
-	err = redisCache_PaneView.Delete(key)
-	return
-}
-
-// ---------------- 特殊方法 -------------------
-
-// 获取 ById
-func Read_PaneView_ByT_viewid(T_viewid string) (r PaneView, is bool) {
-	o := orm.NewOrm()
-	r = PaneView{T_viewid: T_viewid}
-	err := o.Read(&r, "T_viewid") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
-	if err != nil {
-		logs.Println(err)
-		return r, false
-	}
-	return r, true
-}
-
-// 获取 By
-func Read_PaneView_ByT_name(T_viewid string) (r PaneView, is bool) {
-	//if r, is = Redis_PaneView_Get(strconv.Itoa(Id)); is == true {
-	//	return r, true
-	//}
-
-	o := orm.NewOrm()
-	qs := o.QueryTable(new(PaneView))
-	err := qs.Filter("T_viewid", T_viewid).One(&r)
-	if err != nil {
-		return r, false
-	}
-
-	Redis_PaneView_Set(T_viewid, r)
-	return r, true
-}
-
-// 添加
-func Add_PaneView(r PaneView) (id int64, is bool) {
-	o := orm.NewOrm()
-
-	id, err := o.Insert(&r)
-	if err != nil {
-		logs.Println(err)
-		return 0, false
-	}
-
-	Redis_PaneView_Set(r.T_viewid, r)
-	return id, true
-}
-
-// 修改
-func Update_PaneView(m PaneView) bool {
-	o := orm.NewOrm()
-	if num, err := o.Update(&m, "T_text","T_mode","T_width","T_height","T_css","T_data"); err == nil {
-		fmt.Println("Number of records updated in database:", num)
-		Redis_PaneView_Set(m.T_viewid, m)
-		return true
-	}
-
-	return false
-}
-
-// 获取列表
-func Read_PaneView_T_uuid(T_uuid string) (r []PaneView) {
-
-	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-	qs := o.QueryTable(new(PaneView))
-
-	qs.Limit(1, 0).Filter("T_uuid",T_uuid).OrderBy("Id").All(&r)
-
-
-
-
-	return r
-}

File diff suppressed because it is too large
+ 0 - 34
models/Panel/PanelImg.go


+ 0 - 174
models/Panel/PanelLayerMould.go

@@ -1,174 +0,0 @@
-package Panel
-
-import (
-	"Cold_Api/conf"
-	"Cold_Api/logs"
-	"encoding/json"
-	"fmt"
-	"github.com/astaxie/beego/cache"
-	_ "github.com/astaxie/beego/cache/redis"
-	"github.com/beego/beego/v2/adapter/orm"
-	_ "github.com/go-sql-driver/mysql"
-	"time"
-)
-
-// 模板
-type PanelLayerMould struct {
-	Id      int    `orm:"column(ID);size(11);auto;pk"`
-	T_class int    `orm:"size(200);null"`  // 分类
-	T_name  string `orm:"size(256);null"`  // 标题
-	T_img   string `orm:"size(256);null"`  // 图片
-	T_text  string `orm:"type(text);null"` // 详情
-
-	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
-	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
-}
-
-func (t *PanelLayerMould) TableName() string {
-	return "PanelLayerMould" // 数据库名称   // ************** 替换 FormulaList **************
-}
-
-var redisCache_PanelLayerMould cache.Cache
-
-func init() {
-	//注册模型
-	orm.RegisterModel(new(PanelLayerMould))
-
-	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
-		"redis_"+"PanelLayerMould", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
-	logs.Println(config)
-	var err error
-	redisCache_PanelLayerMould, err = cache.NewCache("redis", config)
-	if err != nil || redisCache_PanelLayerMould == nil {
-		errMsg := "failed to init redis"
-		logs.Println(errMsg, err)
-
-	}
-}
-
-// ---------------- Redis -------------------
-//Redis_Set(m.T_sn,m) // Redis 更新缓存
-func Redis_PanelLayerMould_Set(key string, r PanelLayerMould) (err error) {
-	//json序列化
-	str, err := json.Marshal(r)
-	if err != nil {
-		logs.Println(err)
-		return
-	}
-	err = redisCache_PanelLayerMould.Put(key, str, 24*time.Hour)
-	if err != nil {
-		logs.Println("set key:", key, ",value:", str, err)
-	}
-	return
-}
-
-//if r,is :=Redis_Get(T_sn);is{
-//return r,nil
-//}
-func Redis_PanelLayerMould_Get(key string) (r PanelLayerMould, is bool) {
-	if redisCache_PanelLayerMould.IsExist(key) {
-		logs.Println("找到key:", key)
-		v := redisCache_PanelLayerMould.Get(key)
-		json.Unmarshal(v.([]byte), &r)
-		return r, true
-	}
-	logs.Println("没有 找到key:", key)
-	return PanelLayerMould{}, false
-}
-func Redis_PanelLayerMould_DelK(key string) (err error) {
-	err = redisCache_PanelLayerMould.Delete(key)
-	return
-}
-
-// ---------------- 特殊方法 -------------------
-
-// 获取 ById
-func Read_PanelLayerMould_ById(id int) (r PanelLayerMould, is bool) {
-	o := orm.NewOrm()
-	r = PanelLayerMould{Id: id}
-	err := o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
-	if err != nil {
-		logs.Println(err)
-		return r, false
-	}
-	return r, true
-}
-
-// 获取 By
-func Read_PanelLayerMould_ByT_name(T_name string) (r PanelLayerMould, is bool) {
-	//if r, is = Redis_PanelLayerMould_Get(T_name); is == true {
-	//	return r, true
-	//}
-
-	o := orm.NewOrm()
-	qs := o.QueryTable(new(PanelLayerMould))
-	err := qs.Filter("T_name", T_name).One(&r)
-	if err != nil {
-		return r, false
-	}
-
-	//Redis_PanelLayerMould_Set(T_name, r)
-	return r, true
-}
-
-// 添加
-func Add_PanelLayerMould(r PanelLayerMould) (id int64, is bool) {
-	o := orm.NewOrm()
-
-	id, err := o.Insert(&r)
-	if err != nil {
-		logs.Println(err)
-		return 0, false
-	}
-
-	//Redis_PanelLayerMould_Set(r.T_name, r)
-	return id, true
-}
-
-// 修改
-func Update_PanelLayerMould_ById(m PanelLayerMould) bool {
-	o := orm.NewOrm()
-	v := PanelLayerMould{Id: m.Id}
-	if err := o.Read(&v); err == nil {
-		var num int64
-		v.T_class = m.T_class
-		v.T_name = m.T_name
-		v.T_img = m.T_img
-		v.T_text = m.T_text
-		if num, err = o.Update(&m, "T_class", "T_name", "T_img", "T_text"); err == nil {
-			fmt.Println("Number of records updated in database:", num)
-		}
-		//Redis_PanelLayerMould_Set(v.T_name, v)
-		return true
-	}
-	return false
-}
-// 删除
-func Delete_PanelLayerMould_ById(v PanelLayerMould) bool {
-	o := orm.NewOrm()
-	if num, err := o.Delete(&v); err == nil {
-		logs.Println("Number of records deleted in database:", num)
-	} else {
-		return false
-	}
-
-	//Redis_PanelLayerMould_DelK(v.T_name)
-	return true
-}
-// 获取列表
-func Read_PanelLayerMould_1(T_name string,page int, page_z int) (r []PanelLayerMould, cnt int64) {
-
-	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-	qs := o.QueryTable(new(PanelLayerMould))
-	var offset int64
-	if page <= 1 {
-		offset = 0
-	} else {
-		offset = int64((page - 1) * page_z)
-	}
-
-	qs.Limit(page_z, offset).Filter("T_name__icontains",T_name).OrderBy("-Id").All(&r)
-	cnt, _ = qs.Count()
-	return r, cnt
-}

+ 0 - 179
models/Panel/PanelTool.go

@@ -1,179 +0,0 @@
-package Panel
-
-import (
-	"Cold_Api/conf"
-	"Cold_Api/logs"
-	"encoding/json"
-	"fmt"
-	"github.com/astaxie/beego/cache"
-	_ "github.com/astaxie/beego/cache/redis"
-	"github.com/beego/beego/v2/adapter/orm"
-	_ "github.com/go-sql-driver/mysql"
-	"time"
-)
-
-// 模板
-type PanelTool struct {
-	Id       int    `orm:"column(ID);size(11);auto;pk"`
-	T_class  int    `orm:"size(200);null"`  // 分类
-	T_name   string `orm:"size(256);null"`  // 标题
-	T_img    string `orm:"size(256);null"`  // 图片
-	T_width  int    `orm:"size(200);null"`  // 宽度
-	T_height int    `orm:"size(200);null"`  // 高度
-	T_color  string `orm:"type(text);null"` // 颜色
-	T_text   string `orm:"type(text);null"` // 详情
-
-	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
-	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
-}
-
-func (t *PanelTool) TableName() string {
-	return "PanelTool" // 数据库名称   // ************** 替换 FormulaList **************
-}
-
-var redisCache_PanelTool cache.Cache
-
-func init() {
-	//注册模型
-	orm.RegisterModel(new(PanelTool))
-
-	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
-		"redis_"+"PanelTool", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
-	logs.Println(config)
-	var err error
-	redisCache_PanelTool, err = cache.NewCache("redis", config)
-	if err != nil || redisCache_PanelTool == nil {
-		errMsg := "failed to init redis"
-		logs.Println(errMsg, err)
-
-	}
-}
-
-// ---------------- Redis -------------------
-//Redis_Set(m.T_sn,m) // Redis 更新缓存
-func Redis_PanelTool_Set(key string, r PanelTool) (err error) {
-	//json序列化
-	str, err := json.Marshal(r)
-	if err != nil {
-		logs.Println(err)
-		return
-	}
-	err = redisCache_PanelTool.Put(key, str, 24*time.Hour)
-	if err != nil {
-		logs.Println("set key:", key, ",value:", str, err)
-	}
-	return
-}
-
-//if r,is :=Redis_Get(T_sn);is{
-//return r,nil
-//}
-func Redis_PanelTool_Get(key string) (r PanelTool, is bool) {
-	if redisCache_PanelTool.IsExist(key) {
-		logs.Println("找到key:", key)
-		v := redisCache_PanelTool.Get(key)
-		json.Unmarshal(v.([]byte), &r)
-		return r, true
-	}
-	logs.Println("没有 找到key:", key)
-	return PanelTool{}, false
-}
-func Redis_PanelTool_DelK(key string) (err error) {
-	err = redisCache_PanelTool.Delete(key)
-	return
-}
-
-// ---------------- 特殊方法 -------------------
-
-// 获取 ById
-func Read_PanelTool_ById(id int) (r PanelTool, is bool) {
-	o := orm.NewOrm()
-	r = PanelTool{Id: id}
-	err := o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
-	if err != nil {
-		logs.Println(err)
-		return r, false
-	}
-	return r, true
-}
-
-// 获取 By
-func Read_PanelTool_ByT_name(T_name string) (r PanelTool, is bool) {
-	if r, is = Redis_PanelTool_Get(T_name); is == true {
-		return r, true
-	}
-
-	o := orm.NewOrm()
-	qs := o.QueryTable(new(PanelTool))
-	err := qs.Filter("T_name", T_name).One(&r)
-	if err != nil {
-		return r, false
-	}
-
-	Redis_PanelTool_Set(T_name, r)
-	return r, true
-}
-
-// 添加
-func Add_PanelTool(r PanelTool) (id int64, is bool) {
-	o := orm.NewOrm()
-
-	id, err := o.Insert(&r)
-	if err != nil {
-		logs.Println(err)
-		return 0, false
-	}
-
-	Redis_PanelTool_Set(r.T_name, r)
-	return id, true
-}
-// 修改
-func Update_PanelTool_ById(m PanelTool) bool {
-	o := orm.NewOrm()
-	v := PanelTool{Id: m.Id}
-	if err := o.Read(&v); err == nil {
-		var num int64
-		v.T_class = m.T_class
-		v.T_name = m.T_name
-		v.T_img = m.T_img
-		v.T_text = m.T_text
-		v.T_width = m.T_width
-		v.T_height = m.T_height
-		v.T_color = m.T_color
-		if num, err = o.Update(&m, "T_class", "T_name", "T_img", "T_text", "T_width", "T_height", "T_color"); err == nil {
-			fmt.Println("Number of records updated in database:", num)
-		}
-		//Redis_PanelLayerMould_Set(v.T_name, v)
-		return true
-	}
-	return false
-}
-// 删除
-func Delete_PanelTool_ById(v PanelTool) bool {
-	o := orm.NewOrm()
-	if num, err := o.Delete(&v); err == nil {
-		logs.Println("Number of records deleted in database:", num)
-	} else {
-		return false
-	}
-
-	//Redis_PanelLayerMould_DelK(v.T_name)
-	return true
-}
-// 获取列表
-func Read_PanelTool_1(T_name string,page int, page_z int) (r []PanelTool, cnt int64) {
-
-	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-	qs := o.QueryTable(new(PanelTool))
-	var offset int64
-	if page <= 1 {
-		offset = 0
-	} else {
-		offset = int64((page - 1) * page_z)
-	}
-
-	qs.Limit(page_z, offset).Filter("T_name__icontains",T_name).OrderBy("-Id").All(&r)
-	cnt, _ = qs.Count()
-	return r, cnt
-}

File diff suppressed because it is too large
+ 0 - 23
models/Panel/PanellibImg.go


+ 51 - 0
models/System/DeviceLogs.go

@@ -0,0 +1,51 @@
+package System
+
+import (
+	"Cold_Api/conf"
+	"github.com/beego/beego/v2/adapter/orm"
+	"time"
+)
+
+type DeviceLogs struct {
+	Id       int    `orm:"column(ID);size(11);auto;pk"`
+	T_sn     string `orm:"size(256);null"`  //
+	Logs_Txt string `orm:"type(text);null"` // 详情
+
+	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now 每次 model 保存时都会对时间自动更新
+}
+
+func (t *DeviceLogs) TableName() string {
+	return "DeviceLogs" // 数据库名称   // ************** 替换 FormulaList **************
+}
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(DeviceLogs))
+}
+
+// 添加  System.Add_DeviceLogs("MqttServer","参数请求 [Rt_Parameter]","base")
+func Add_DeviceLogs(T_sn string, Logs_Txt string) {
+	o := orm.NewOrm()
+	m := DeviceLogs{T_sn: T_sn, Logs_Txt: Logs_Txt}
+	o.Insert(&m)
+}
+
+// 获取列表
+func Read_DeviceLogs_ALL(page int, T_sn string) (r []DeviceLogs, cnt int64) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(DeviceLogs))
+	var offset int64
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * conf.Page_size)
+	}
+
+	qs.Limit(conf.Page_size, offset).Filter("T_sn", T_sn).OrderBy("-Id").All(&r)
+	cnt, _ = qs.Filter("T_sn", T_sn).Count()
+
+	return r, cnt
+}

+ 21 - 26
routers/Data.go

@@ -12,31 +12,26 @@ func init() {
 	//3.3用户可添加和删除子账号。
 	//3.3用户可添加和删除子账号。
 	//3.4用户可对子账号分配管理权限,包括:设备数据查看权限,设备运行参数修改权限。
 	//3.4用户可对子账号分配管理权限,包括:设备数据查看权限,设备运行参数修改权限。
 	//-----------
 	//-----------
-	beego.Router("/Data/Device_Sensor", &controllers.DataController{}, "*:Device_Sensor")  // 设置 设备参数
-
-	beego.Router("/Data/DataReal_html", &controllers.DataController{}, "*:DataReal_html")  // 获取 基本信息
-	beego.Router("/Data/DataRealCalss_html", &controllers.DataController{}, "*:DataRealCalss_html")  // 获取 基本信息
-	beego.Router("/Data/DataList_html", &controllers.DataController{}, "*:DataList_html")  // 获取 基本信息
-	beego.Router("/Data/DataLine_html", &controllers.DataController{}, "*:DataLine_html")  // 获取 基本信息
-	beego.Router("/Data/DataMap_html", &controllers.DataController{}, "*:DataMap_html")  // 获取 基本信息
-	beego.Router("/Data/Device_Sensor_List", &controllers.DataController{}, "*:Device_Sensor_List")  // 设置 设备参数
-	beego.Router("/Data/Device_Sensor_Data", &controllers.DataController{}, "*:Device_Sensor_Data")  // 设置 设备参数
-	beego.Router("/Data/Device_Sensor_Data_More", &controllers.DataController{}, "*:Device_Sensor_Data_More")  // 设置 设备参数
-	beego.Router("/Data/Device_Sensor_Data_Excel", &controllers.DataController{}, "*:Device_Sensor_Data_Excel_m")  // 设置 设备参数
-	beego.Router("/Data/Device_Sensor_Data_Excel_m", &controllers.DataController{}, "*:Device_Sensor_Data_Excel_m")  // 设置 设备参数
-	beego.Router("/Data/Device_Sensor_Data_PDF", &controllers.DataController{}, "*:Device_Sensor_Data_PDF")  // 设置 设备参数
-	beego.Router("/Data/DataPlane", &controllers.DataController{}, "*:DataPlane")  // 设置 设备参数
-
-
-	beego.Router("/Data/DataScreen", &controllers.DataController{}, "*:DataScreen")  // 设置 设备参数
-	beego.Router("/Data/DataScreen_Data", &controllers.DataController{}, "*:DataScreen_Data")  // 设置 设备参数
-	beego.Router("/Data/DeviceSensor_Data_Print", &controllers.DataController{}, "*:DeviceSensor_Data_Print")  // 设置 设备参数
-	beego.Router("/Data/DataScreen_Map", &controllers.DataController{}, "*:DataScreen_Map")  // 设置 设备参数
-
-
-	beego.Router("/Data/Raw", &controllers.DataController{}, "*:Raw")  // 设置 设备参数
-
-
-
+	beego.Router("/Data/Device_Sensor", &controllers.DataController{}, "*:Device_Sensor") // 设置 设备参数
+
+	beego.Router("/Data/DataReal_html", &controllers.DataController{}, "*:DataReal_html")                           // 获取 基本信息
+	beego.Router("/Data/DataRealCalss_html", &controllers.DataController{}, "*:DataRealCalss_html")                 // 获取 基本信息
+	beego.Router("/Data/DataList_html", &controllers.DataController{}, "*:DataList_html")                           // 获取 基本信息
+	beego.Router("/Data/DataLine_html", &controllers.DataController{}, "*:DataLine_html")                           // 获取 基本信息
+	beego.Router("/Data/DataMap_html", &controllers.DataController{}, "*:DataMap_html")                             // 获取 基本信息
+	beego.Router("/Data/Device_Sensor_List", &controllers.DataController{}, "*:Device_Sensor_List")                 // 设置 设备参数
+	beego.Router("/Data/Device_Sensor_Data", &controllers.DataController{}, "*:Device_Sensor_Data")                 // 设置 设备参数
+	beego.Router("/Data/Device_Sensor_Data_More", &controllers.DataController{}, "*:Device_Sensor_Data_More")       // 设置 设备参数
+	beego.Router("/Data/Device_Sensor_Data_Excel", &controllers.DataController{}, "*:Device_Sensor_Data_Excel")     // 设置 设备参数
+	beego.Router("/Data/Device_Sensor_Data_Excel_m", &controllers.DataController{}, "*:Device_Sensor_Data_Excel_m") // 设置 设备参数
+	beego.Router("/Data/Device_Sensor_Data_PDF", &controllers.DataController{}, "*:Device_Sensor_Data_PDF")         // 设置 设备参数
+	beego.Router("/Data/DataPlane", &controllers.DataController{}, "*:DataPlane")                                   // 设置 设备参数
+
+	beego.Router("/Data/DataScreen", &controllers.DataController{}, "*:DataScreen")                           // 设置 设备参数
+	beego.Router("/Data/DataScreen_Data", &controllers.DataController{}, "*:DataScreen_Data")                 // 设置 设备参数
+	beego.Router("/Data/DeviceSensor_Data_Print", &controllers.DataController{}, "*:DeviceSensor_Data_Print") // 设置 设备参数
+	beego.Router("/Data/DataScreen_Map", &controllers.DataController{}, "*:DataScreen_Map")                   // 设置 设备参数
+
+	beego.Router("/Data/Raw", &controllers.DataController{}, "*:Raw") // 设置 设备参数
 
 
 }
 }

+ 38 - 38
routers/Device.go

@@ -12,27 +12,30 @@ func init() {
 	//3.3用户可添加和删除子账号。
 	//3.3用户可添加和删除子账号。
 	//3.4用户可对子账号分配管理权限,包括:设备数据查看权限,设备运行参数修改权限。
 	//3.4用户可对子账号分配管理权限,包括:设备数据查看权限,设备运行参数修改权限。
 	//-----------
 	//-----------
-	beego.Router("/Device/Read_DeviceParameter", &controllers.DeviceController{}, "*:Read_DeviceParameter")           // 获取 基本信息
-	beego.Router("/Device/Read_DeviceSensorParameter", &controllers.DeviceController{}, "*:Read_DeviceSensorParameter")           // 获取 基本信息
+	// 设备日志
+	beego.Router("/Device/DeviceLogs", &controllers.DeviceController{}, "*:DeviceLogs") // 获取未读消息
+
+	beego.Router("/Device/Read_DeviceParameter", &controllers.DeviceController{}, "*:Read_DeviceParameter")             // 获取 基本信息
+	beego.Router("/Device/Read_DeviceSensorParameter", &controllers.DeviceController{}, "*:Read_DeviceSensorParameter") // 获取 基本信息
 	//beego.Router("/Device/Read_DeviceParameter", &controllers.DeviceController{}, "*:Read_DeviceParameter")           // 获取 基本信息
 	//beego.Router("/Device/Read_DeviceParameter", &controllers.DeviceController{}, "*:Read_DeviceParameter")           // 获取 基本信息
 	beego.Router("/Device/Pu_DeviceParameter", &controllers.DeviceController{}, "*:Pu_DeviceParameter")               // 设置 设备参数
 	beego.Router("/Device/Pu_DeviceParameter", &controllers.DeviceController{}, "*:Pu_DeviceParameter")               // 设置 设备参数
 	beego.Router("/Device/Pu_DeviceParameter_Sensor", &controllers.DeviceController{}, "*:Pu_DeviceParameter_Sensor") // 设置 传感器参数
 	beego.Router("/Device/Pu_DeviceParameter_Sensor", &controllers.DeviceController{}, "*:Pu_DeviceParameter_Sensor") // 设置 传感器参数
 	//beego.Router("/Device/Pu_DeviceParameter_Sensor_Cache", &controllers.DeviceController{}, "*:Pu_DeviceParameter_Sensor_Cache") // 设置 传感器参数
 	//beego.Router("/Device/Pu_DeviceParameter_Sensor_Cache", &controllers.DeviceController{}, "*:Pu_DeviceParameter_Sensor_Cache") // 设置 传感器参数
-	beego.Router("/Device/Pu_DeviceParameter_T_l_p", &controllers.DeviceController{}, "*:Pu_DeviceParameter_T_l_p") // 设置 传感器参数
+	beego.Router("/Device/Pu_DeviceParameter_T_l_p", &controllers.DeviceController{}, "*:Pu_DeviceParameter_T_l_p")   // 设置 传感器参数
 	beego.Router("/Device/Pu_DeviceParameter_T_give", &controllers.DeviceController{}, "*:Pu_DeviceParameter_T_give") // 设置 传感器参数
 	beego.Router("/Device/Pu_DeviceParameter_T_give", &controllers.DeviceController{}, "*:Pu_DeviceParameter_T_give") // 设置 传感器参数
 
 
-	beego.Router("/Device/Device_html", &controllers.DeviceController{}, "*:Device_html") // 获取未读消息
-	beego.Router("/Device/Device_", &controllers.DeviceController{}, "*:Device_")         // 获取未读消息
-	beego.Router("/Device/Device_Post", &controllers.DeviceController{}, "*:Device_Post") // 获取未读消息
-	beego.Router("/Device/Device_Add", &controllers.DeviceController{}, "*:Device_Post") // 获取未读消息
-	beego.Router("/Device/Device_Del", &controllers.DeviceController{}, "*:Device_Del")   // 获取未读消息
-	beego.Router("/Device/DeviceBind_html", &controllers.DeviceController{}, "*:DeviceBind_html")       // 获取未读消息
-	beego.Router("/Device/DeviceBind_List", &controllers.DeviceController{}, "*:DeviceBind_List")       // 获取未读消息
-	beego.Router("/Device/DeviceBind_Sensor_List", &controllers.DeviceController{}, "*:DeviceBind_Sensor_List")       // 获取未读消息
-	beego.Router("/Device/DeviceBind_Del", &controllers.DeviceController{}, "*:DeviceBind_Del")         // 获取未读消息
-	beego.Router("/Device/DeviceBind_Add", &controllers.DeviceController{}, "*:DeviceBind_Add")         // 获取未读消息
-	beego.Router("/Device/DeviceBind_Add_All", &controllers.DeviceController{}, "*:DeviceBind_Add_All") // 获取未读消息
-	beego.Router("/Device/DeviceBind_html_", &controllers.DeviceController{}, "*:DeviceBind_html_")     // 获取未读消息
+	beego.Router("/Device/Device_html", &controllers.DeviceController{}, "*:Device_html")                       // 获取未读消息
+	beego.Router("/Device/Device_", &controllers.DeviceController{}, "*:Device_")                               // 获取未读消息
+	beego.Router("/Device/Device_Post", &controllers.DeviceController{}, "*:Device_Post")                       // 获取未读消息
+	beego.Router("/Device/Device_Add", &controllers.DeviceController{}, "*:Device_Post")                        // 获取未读消息
+	beego.Router("/Device/Device_Del", &controllers.DeviceController{}, "*:Device_Del")                         // 获取未读消息
+	beego.Router("/Device/DeviceBind_html", &controllers.DeviceController{}, "*:DeviceBind_html")               // 获取未读消息
+	beego.Router("/Device/DeviceBind_List", &controllers.DeviceController{}, "*:DeviceBind_List")               // 获取未读消息
+	beego.Router("/Device/DeviceBind_Sensor_List", &controllers.DeviceController{}, "*:DeviceBind_Sensor_List") // 获取未读消息
+	beego.Router("/Device/DeviceBind_Del", &controllers.DeviceController{}, "*:DeviceBind_Del")                 // 获取未读消息
+	beego.Router("/Device/DeviceBind_Add", &controllers.DeviceController{}, "*:DeviceBind_Add")                 // 获取未读消息
+	beego.Router("/Device/DeviceBind_Add_All", &controllers.DeviceController{}, "*:DeviceBind_Add_All")         // 获取未读消息
+	beego.Router("/Device/DeviceBind_html_", &controllers.DeviceController{}, "*:DeviceBind_html_")             // 获取未读消息
 
 
 	beego.Router("/Device/DeviceClass_html", &controllers.DeviceController{}, "*:DeviceClass_html") // 获取未读消息
 	beego.Router("/Device/DeviceClass_html", &controllers.DeviceController{}, "*:DeviceClass_html") // 获取未读消息
 	beego.Router("/Device/DeviceClass_", &controllers.DeviceController{}, "*:DeviceClass_")         // 获取未读消息
 	beego.Router("/Device/DeviceClass_", &controllers.DeviceController{}, "*:DeviceClass_")         // 获取未读消息
@@ -45,31 +48,28 @@ func init() {
 	beego.Router("/Device/DeviceClassBind_Del", &controllers.DeviceController{}, "*:DeviceClassBind_Del")    // 获取未读消息
 	beego.Router("/Device/DeviceClassBind_Del", &controllers.DeviceController{}, "*:DeviceClassBind_Del")    // 获取未读消息
 	beego.Router("/Device/DeviceClassBind_Add", &controllers.DeviceController{}, "*:DeviceClassBind_Add")    // 获取未读消息
 	beego.Router("/Device/DeviceClassBind_Add", &controllers.DeviceController{}, "*:DeviceClassBind_Add")    // 获取未读消息
 
 
-	beego.Router("/Device/Get_DeviceClassId_QRCode", &controllers.WxController{}, "*:Get_DeviceClassId_QRCode") // 获取未读消息
-	beego.Router("/Device/Get_DeviceClassId", &controllers.DeviceController{}, "*:Get_DeviceClassId")           // 获取未读消息
-
-	beego.Router("/Device/Device_List", &controllers.DeviceController{}, "*:Device_List")                         // 获取未读消息
-	beego.Router("/Device/Device_Parameter", &controllers.DeviceController{}, "*:Device_Parameter_html")               // 获取未读消息
-	beego.Router("/Device/Device_Parameter_Del", &controllers.DeviceController{}, "*:Device_Parameter_Del")       // 获取未读消息
-	beego.Router("/Device/Device_Parameter_Del_Device", &controllers.DeviceController{}, "*:Device_Parameter_Del_Device")       // 获取未读消息
-	beego.Router("/Device/DeviceSensor_List", &controllers.DeviceController{}, "*:DeviceSensor_List")             // 获取未读消息
-	beego.Router("/Device/DeviceSensor_List_html", &controllers.DeviceController{}, "*:DeviceSensor_List_html")   // 获取未读消息
-	beego.Router("/Device/DeviceWarning_List_html", &controllers.DeviceController{}, "*:DeviceWarning_List_html") // 获取未读消息
-	beego.Router("/Device/DeviceWarning_List", &controllers.DeviceController{}, "*:DeviceWarning_List")           // 获取未读消息
-	beego.Router("/Device/DeviceWarning_", &controllers.DeviceController{}, "*:DeviceWarning_")                   // 获取未读消息
-	beego.Router("/Device/DeviceWarning_M", &controllers.DeviceController{}, "*:DeviceWarning_M")                   // 获取未读消息
-	beego.Router("/Device/DeviceWarning_Post", &controllers.DeviceController{}, "*:DeviceWarning_Post")           // 获取未读消息
-	beego.Router("/Device/DeviceWarning_Data_Excel", &controllers.DeviceController{}, "*:DeviceWarning_Data_Excel")           // 获取未读消息
-	beego.Router("/Device/DeviceWarning_Del", &controllers.DeviceController{}, "*:DeviceWarning_Del")                   // 获取未读消息
-
-
-	beego.Router("/Device/UpDeviceSensor_Tsort", &controllers.DeviceController{}, "*:UpDeviceSensor_Tsort")   // 获取未读消息
-	beego.Router("/Device/UpDeviceSensor_T_datashow", &controllers.DeviceController{}, "*:UpDeviceSensor_T_datashow")   // 获取未读消息
-
+	beego.Router("/Device/Get_DeviceClassId_QRCode", &controllers.DeviceController{}, "*:Get_DeviceClassId_QRCode") // 获取未读消息
+	beego.Router("/Device/Get_DeviceClassId", &controllers.DeviceController{}, "*:Get_DeviceClassId")               // 获取未读消息
 
 
-	beego.Router("/Device/DeviceTask_List", &controllers.DeviceController{}, "*:DeviceTask_List")  // 设置 设备参数
-	beego.Router("/Device/DeviceTask_Post", &controllers.DeviceController{}, "*:DeviceTask_Post")  // 设置 设备参数
+	beego.Router("/Device/Device_List", &controllers.DeviceController{}, "*:Device_List")                                 // 获取未读消息
+	beego.Router("/Device/Device_Parameter", &controllers.DeviceController{}, "*:Device_Parameter_html")                  // 获取未读消息
+	beego.Router("/Device/Device_Parameter_Del", &controllers.DeviceController{}, "*:Device_Parameter_Del")               // 获取未读消息
+	beego.Router("/Device/Device_Parameter_Del_Device", &controllers.DeviceController{}, "*:Device_Parameter_Del_Device") // 获取未读消息
+	beego.Router("/Device/DeviceSensor_List", &controllers.DeviceController{}, "*:DeviceSensor_List")                     // 获取未读消息
+	beego.Router("/Device/DeviceSensor_List_html", &controllers.DeviceController{}, "*:DeviceSensor_List_html")           // 获取未读消息
+	beego.Router("/Device/DeviceWarning_List_html", &controllers.DeviceController{}, "*:DeviceWarning_List_html")         // 获取未读消息
+	beego.Router("/Device/DeviceWarning_List", &controllers.DeviceController{}, "*:DeviceWarning_List")                   // 获取未读消息
+	beego.Router("/Device/DeviceWarning_", &controllers.DeviceController{}, "*:DeviceWarning_")                           // 获取未读消息
+	beego.Router("/Device/DeviceWarning_M", &controllers.DeviceController{}, "*:DeviceWarning_M")                         // 获取未读消息
+	beego.Router("/Device/DeviceWarning_Post", &controllers.DeviceController{}, "*:DeviceWarning_Post")                   // 获取未读消息
+	beego.Router("/Device/DeviceWarning_Data_Excel", &controllers.DeviceController{}, "*:DeviceWarning_Data_Excel")       // 获取未读消息
+	beego.Router("/Device/DeviceWarning_Del", &controllers.DeviceController{}, "*:DeviceWarning_Del")                     // 获取未读消息
+	beego.Router("/Device/DeviceWarningListT_Tips", &controllers.DeviceController{}, "*:DeviceWarningList_T_Tips")        // 获取未读消息
 
 
+	beego.Router("/Device/UpDeviceSensor_Tsort", &controllers.DeviceController{}, "*:UpDeviceSensor_Tsort")           // 获取未读消息
+	beego.Router("/Device/UpDeviceSensor_T_datashow", &controllers.DeviceController{}, "*:UpDeviceSensor_T_datashow") // 获取未读消息
 
 
+	beego.Router("/Device/DeviceTask_List", &controllers.DeviceController{}, "*:DeviceTask_List") // 设置 设备参数
+	beego.Router("/Device/DeviceTask_Post", &controllers.DeviceController{}, "*:DeviceTask_Post") // 设置 设备参数
 
 
 }
 }

+ 0 - 58
routers/Panel.go

@@ -1,58 +0,0 @@
-package routers
-
-import (
-	"Cold_Api/controllers"
-	"Cold_Api/controllers/WebSocketPanel"
-	beego "github.com/beego/beego/v2/server/web"
-)
-
-func init() {
-
-
-
-	// 网关 WebSocket
-	beego.Router("/wsPanel/join", &WebSocketPanel.WebSocketPanelController{}, "get:Join")
-
-
-	//// 模板
-	beego.Router("/Panel/Layer_Mould_Save", &controllers.PanelController{}, "*:Layer_Mould_Save") // *全部;  get,post:
-	beego.Router("/Panel/Layer_Mould_List", &controllers.PanelController{}, "*:Layer_Mould_List") // *全部;  get,post:
-	beego.Router("/Panel/PaneView_Get", &controllers.PanelController{}, "*:PaneView_Get")         // *全部;  get,post:
-	beego.Router("/Panel/PaneView_Post", &controllers.PanelController{}, "*:PaneView_Post")       // *全部;  get,post:
-	//
-	beego.Router("/Panel/PaneView_E", &controllers.PanelController{}, "*:PaneView_Get_htmlE")     // *全部;  get,post:
-	//beego.Router("/Panel/PaneView_V", &controllers.PanelController{}, "*:PaneView_Get_htmlV")     // *全部;  get,post:
-
-	// 视图
-	beego.Router("/Panel/Index_plan", &controllers.PanelController{}, "*:Index_Html_plan")              // *全部;  get,post:
-	//beego.Router("/Panel/Index_Class_Html", &controllers.PanelController{}, "*:PaneView_Class_Get_htmlV")
-
-
-
-	//----------- 模板管理
-	beego.Router("/Panel/PanelLayerMould_Get", &controllers.PanelController{}, "*:PanelLayerMould_Get")   //
-	beego.Router("/Panel/PanelLayerMould_List", &controllers.PanelController{}, "*:PanelLayerMould_List") //
-	beego.Router("/Panel/PanelLayerMould_Post", &controllers.PanelController{}, "*:PanelLayerMould_Post") //
-	beego.Router("/Panel/PanelLayerMould_Del", &controllers.PanelController{}, "*:PanelLayerMould_Del")   //
-
-
-	//----------- 组件管理
-	beego.Router("/Panel/PanelTool_Get", &controllers.PanelController{}, "*:PanelTool_Get")   //
-	beego.Router("/Panel/PanelTool_List", &controllers.PanelController{}, "*:PanelTool_List") // *全部;  get,post:
-	beego.Router("/Panel/PanelTool_Post", &controllers.PanelController{}, "*:PanelTool_Post") //
-	beego.Router("/Panel/PanelTool_Del", &controllers.PanelController{}, "*:PanelTool_Del")   //
-
-
-	//----------- 配置图片
-	beego.Router("/Config/UpFileToken", &controllers.UpFileController{}, "*:ConfigUpFileToken") // *全部;  get,post:
-
-	beego.Router("/Config/ConfigImg_Get", &controllers.PanelController{}, "*:ConfigImg_Get")   //
-	beego.Router("/Config/ConfigImg_List", &controllers.PanelController{}, "*:ConfigImg_List") //
-	beego.Router("/Config/ConfigImg_Post", &controllers.PanelController{}, "*:ConfigImg_Post") //
-	beego.Router("/Config/ConfigImg_Del", &controllers.PanelController{}, "*:ConfigImg_Del")   //
-	//----------- 配置图片
-	beego.Router("/Config/ConfiglibImg_Get", &controllers.PanelController{}, "*:ConfiglibImg_Get")   //
-	beego.Router("/Config/ConfiglibImg_List", &controllers.PanelController{}, "*:ConfiglibImg_List") //
-	beego.Router("/Config/ConfiglibImg_Post", &controllers.PanelController{}, "*:ConfiglibImg_Post") //
-	beego.Router("/Config/ConfiglibImg_Del", &controllers.PanelController{}, "*:ConfiglibImg_Del")   //
-}

+ 22 - 24
routers/User.go

@@ -13,31 +13,29 @@ func init() {
 	//3.4用户可对子账号分配管理权限,包括:设备数据查看权限,设备运行参数修改权限。
 	//3.4用户可对子账号分配管理权限,包括:设备数据查看权限,设备运行参数修改权限。
 	//-----------
 	//-----------
 
 
-	beego.Router("/User/Admin_html", &controllers.UserController{}, "*:Admin_html")  // 获取未读消息
-	beego.Router("/User/Admin_", &controllers.UserController{}, "*:Admin_")  // 获取未读消息
-	beego.Router("/User/Admin_Post", &controllers.UserController{}, "*:Admin_Post")  // 获取未读消息
-	beego.Router("/User/Admin_Del", &controllers.UserController{}, "*:Admin_Del")  // 获取未读消息
-
-
-	beego.Router("/User/User_html", &controllers.UserController{}, "*:User_html")  // 获取未读消息
-	beego.Router("/User/User_", &controllers.UserController{}, "*:User_")  // 获取未读消息
-	beego.Router("/User/User_Get", &controllers.UserController{}, "*:User_Get")  // 获取未读消息
-	beego.Router("/User/User_Info", &controllers.UserController{}, "*:User_Info")  // 获取未读消息
-	beego.Router("/User/User_Info_", &controllers.UserController{}, "*:User_Info_")  // 获取未读消息
-	beego.Router("/User/User_Post", &controllers.UserController{}, "*:User_Post")  // 获取未读消息
-	beego.Router("/User/User_Del", &controllers.UserController{}, "*:User_Del")  // 获取未读消息
-	beego.Router("/User/User_Entry", &controllers.UserController{}, "*:User_Entry")  // 获取未读消息
-
-	beego.Router("/User/Power", &controllers.UserController{}, "*:Power_html")  // 获取未读消息
-	beego.Router("/User/Power_", &controllers.UserController{}, "*:Power_")  // 获取未读消息
-	beego.Router("/User/Power_Post", &controllers.UserController{}, "*:Power_Post")  // 获取未读消息
-	beego.Router("/User/Power_Del", &controllers.UserController{}, "*:Power_Del")  // 获取未读消息
-
-
-	beego.Router("/User/Panel_plan_Syn", &controllers.UserController{}, "*:Panel_plan_Syn")  // 获取未读消息
-
+	beego.Router("/User/Admin_html", &controllers.UserController{}, "*:Admin_html") // 获取未读消息
+	beego.Router("/User/Admin_", &controllers.UserController{}, "*:Admin_")         // 获取未读消息
+	beego.Router("/User/Admin_Post", &controllers.UserController{}, "*:Admin_Post") // 获取未读消息
+	beego.Router("/User/Admin_Del", &controllers.UserController{}, "*:Admin_Del")   // 获取未读消息
+
+	beego.Router("/User/User_html", &controllers.UserController{}, "*:User_html")   // 获取未读消息
+	beego.Router("/User/User_", &controllers.UserController{}, "*:User_")           // 获取未读消息
+	beego.Router("/User/User_Get", &controllers.UserController{}, "*:User_Get")     // 获取未读消息
+	beego.Router("/User/User_Info", &controllers.UserController{}, "*:User_Info")   // 获取未读消息
+	beego.Router("/User/User_Info_", &controllers.UserController{}, "*:User_Info_") // 获取未读消息
+	beego.Router("/User/User_Post", &controllers.UserController{}, "*:User_Post")   // 获取未读消息
+	beego.Router("/User/User_Del", &controllers.UserController{}, "*:User_Del")     // 获取未读消息
+	beego.Router("/User/User_Entry", &controllers.UserController{}, "*:User_Entry") // 获取未读消息
+
+	beego.Router("/User/Power", &controllers.UserController{}, "*:Power_html")      // 获取未读消息
+	beego.Router("/User/Power_", &controllers.UserController{}, "*:Power_")         // 获取未读消息
+	beego.Router("/User/Power_Post", &controllers.UserController{}, "*:Power_Post") // 获取未读消息
+	beego.Router("/User/Power_Del", &controllers.UserController{}, "*:Power_Del")   // 获取未读消息
+
+	beego.Router("/User/Panel_plan_Syn", &controllers.UserController{}, "*:Panel_plan_Syn") // 获取未读消息
+	beego.Router("/User/InspectTokey", &controllers.UserController{}, "*:InspectTokey")     // 获取未读消息
 
 
 	// 日志
 	// 日志
-	beego.Router("/User/UserLogs", &controllers.LogsController{}, "*:UserLogs")  // 获取未读消息
+	beego.Router("/User/UserLogs", &controllers.LogsController{}, "*:UserLogs") // 获取未读消息
 
 
 }
 }

+ 12 - 20
routers/router.go

@@ -21,40 +21,32 @@ func init() {
 	// 网关 WebSocket
 	// 网关 WebSocket
 	beego.Router("/ws/join", &WebSocket.WebSocketController{}, "get:Join")
 	beego.Router("/ws/join", &WebSocket.WebSocketController{}, "get:Join")
 
 
-
 	beego.Router("/UpFile", &controllers.UpFileController{}, "*:UpFile") // *全部;  get,post:
 	beego.Router("/UpFile", &controllers.UpFileController{}, "*:UpFile") // *全部;  get,post:
 
 
-
 	beego.Router("/Login", &controllers.AdminController{}, "*:Login")                           // *全部;  get,post:
 	beego.Router("/Login", &controllers.AdminController{}, "*:Login")                           // *全部;  get,post:
 	beego.Router("/Login_verification", &controllers.AdminController{}, "*:Login_verification") // *全部;  get,post:
 	beego.Router("/Login_verification", &controllers.AdminController{}, "*:Login_verification") // *全部;  get,post:
 
 
-
 	beego.Router("/Index", &controllers.AdminController{}, "*:Index")
 	beego.Router("/Index", &controllers.AdminController{}, "*:Index")
 	beego.Router("/Home", &controllers.AdminController{}, "*:Home")
 	beego.Router("/Home", &controllers.AdminController{}, "*:Home")
 	beego.Router("/User/Info", &controllers.AdminController{}, "*:Info")
 	beego.Router("/User/Info", &controllers.AdminController{}, "*:Info")
 
 
-	beego.Router("/Nows_rend", &controllers.AdminController{}, "*:Nows_rend")  // 获取未读消息
+	beego.Router("/Nows_rend", &controllers.AdminController{}, "*:Nows_rend") // 获取未读消息
 	// 日志
 	// 日志
-	beego.Router("/System/Logs", &controllers.LogsController{}, "*:List")  // 获取未读消息
-
+	beego.Router("/System/Logs", &controllers.LogsController{}, "*:List") // 获取未读消息
 
 
 	// 微信服务端
 	// 微信服务端
-	beego.Router("/Wx/Wx_handler", &controllers.WxController{}, "*:Wx_handler")  // 获取未读消息
+	//beego.Router("/Wx/Wx_handler", &controllers.WxController{}, "*:Wx_handler")  // 获取未读消息
 	//beego.Router("/Wx/Wx_handler", &controllers.WxController{}, "*:Wx")  // 获取未读消息
 	//beego.Router("/Wx/Wx_handler", &controllers.WxController{}, "*:Wx")  // 获取未读消息
 
 
 	// 模板路由
 	// 模板路由
-	beego.Router("/Template/List", &controllers.TemplateController{}, "*:List")  // 获取未读消息
-	beego.Router("/Template/List_", &controllers.TemplateController{}, "*:List_")  // 获取未读消息
-	beego.Router("/Template/List_Post", &controllers.TemplateController{}, "*:List_Post")  // 获取未读消息
-	beego.Router("/Template/List_Del", &controllers.TemplateController{}, "*:List_Del")  // 获取未读消息
-
-	beego.Router("/Template/Class", &controllers.TemplateController{}, "*:Class")  // 获取未读消息
-	beego.Router("/Template/Class_", &controllers.TemplateController{}, "*:Class_")  // 获取未读消息
-	beego.Router("/Template/Class_Post", &controllers.TemplateController{}, "*:Class_Post")  // 获取未读消息
-	beego.Router("/Template/Class_Del", &controllers.TemplateController{}, "*:Class_Del")  // 获取未读消息
-
-
-
-
+	beego.Router("/Template/List", &controllers.TemplateController{}, "*:List")           // 获取未读消息
+	beego.Router("/Template/List_", &controllers.TemplateController{}, "*:List_")         // 获取未读消息
+	beego.Router("/Template/List_Post", &controllers.TemplateController{}, "*:List_Post") // 获取未读消息
+	beego.Router("/Template/List_Del", &controllers.TemplateController{}, "*:List_Del")   // 获取未读消息
+
+	beego.Router("/Template/Class", &controllers.TemplateController{}, "*:Class")           // 获取未读消息
+	beego.Router("/Template/Class_", &controllers.TemplateController{}, "*:Class_")         // 获取未读消息
+	beego.Router("/Template/Class_Post", &controllers.TemplateController{}, "*:Class_Post") // 获取未读消息
+	beego.Router("/Template/Class_Del", &controllers.TemplateController{}, "*:Class_Del")   // 获取未读消息
 
 
 }
 }

+ 0 - 32
tests/default_test.go

@@ -1,42 +1,10 @@
 package test
 package test
 
 
 import (
 import (
-	"net/http"
-	"net/http/httptest"
 	"testing"
 	"testing"
-	"runtime"
-	"path/filepath"
-
-    "github.com/beego/beego/v2/core/logs"
-
-	_ "Cold_Api/routers"
-
-	beego "github.com/beego/beego/v2/server/web"
-	. "github.com/smartystreets/goconvey/convey"
 )
 )
 
 
-func init() {
-	_, file, _, _ := runtime.Caller(0)
-	apppath, _ := filepath.Abs(filepath.Dir(filepath.Join(file, ".." + string(filepath.Separator))))
-	beego.TestBeegoInit(apppath)
-}
-
-
 // TestBeego is a sample to run an endpoint test
 // TestBeego is a sample to run an endpoint test
 func TestBeego(t *testing.T) {
 func TestBeego(t *testing.T) {
-	r, _ := http.NewRequest("GET", "/", nil)
-	w := httptest.NewRecorder()
-	beego.BeeApp.Handlers.ServeHTTP(w, r)
 
 
-	logs.Trace("testing", "TestBeego", "Code[%d]\n%s", w.Code, w.Body.String())
-
-	Convey("Subject: Test Station Endpoint\n", t, func() {
-	        Convey("Status Code Should Be 200", func() {
-	                So(w.Code, ShouldEqual, 200)
-	        })
-	        Convey("The Result Should Not Be Empty", func() {
-	                So(w.Body.Len(), ShouldBeGreaterThan, 0)
-	        })
-	})
 }
 }
-

+ 66 - 0
tests/logs/logx/logx.log

@@ -0,0 +1,66 @@
+2022/07/12 16:54:19.474 [I]  2022-07-12 16:54:19>%!(EXTRA []interface {}=[nats OK!])
+2022/07/12 16:54:19.477 [I]  2022-07-12 16:54:19>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"","dbNum":"","password":""}])
+2022/07/12 16:54:19.477 [I]  2022-07-12 16:54:19>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:54:19.477 [I]  2022-07-12 16:54:19>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"","dbNum":"","password":""}])
+2022/07/12 16:54:19.477 [I]  2022-07-12 16:54:19>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:54:19.477 [I]  2022-07-12 16:54:19>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"","dbNum":"","password":""}])
+2022/07/12 16:54:19.477 [I]  2022-07-12 16:54:19>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:54:19.477 [I]  2022-07-12 16:54:19>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"","dbNum":"","password":""}])
+2022/07/12 16:54:19.477 [I]  2022-07-12 16:54:19>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:54:19.477 [I]  2022-07-12 16:54:19>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"","dbNum":"","password":""}])
+2022/07/12 16:54:19.477 [I]  2022-07-12 16:54:19>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:54:45.055 [I]  2022-07-12 16:54:45>%!(EXTRA []interface {}=[nats OK!])
+2022/07/12 16:54:45.057 [I]  2022-07-12 16:54:45>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"","dbNum":"","password":""}])
+2022/07/12 16:54:45.057 [I]  2022-07-12 16:54:45>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:54:45.057 [I]  2022-07-12 16:54:45>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"","dbNum":"","password":""}])
+2022/07/12 16:54:45.057 [I]  2022-07-12 16:54:45>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:54:45.057 [I]  2022-07-12 16:54:45>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"","dbNum":"","password":""}])
+2022/07/12 16:54:45.057 [I]  2022-07-12 16:54:45>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:54:45.057 [I]  2022-07-12 16:54:45>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"","dbNum":"","password":""}])
+2022/07/12 16:54:45.057 [I]  2022-07-12 16:54:45>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:54:45.057 [I]  2022-07-12 16:54:45>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"","dbNum":"","password":""}])
+2022/07/12 16:54:45.057 [I]  2022-07-12 16:54:45>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:57:02.236 [I]  2022-07-12 16:57:02>%!(EXTRA []interface {}=[nats OK!])
+2022/07/12 16:57:02.238 [I]  2022-07-12 16:57:02>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"","dbNum":"","password":""}])
+2022/07/12 16:57:02.238 [I]  2022-07-12 16:57:02>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:57:02.238 [I]  2022-07-12 16:57:02>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"","dbNum":"","password":""}])
+2022/07/12 16:57:02.238 [I]  2022-07-12 16:57:02>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:57:02.239 [I]  2022-07-12 16:57:02>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"","dbNum":"","password":""}])
+2022/07/12 16:57:02.239 [I]  2022-07-12 16:57:02>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:57:02.239 [I]  2022-07-12 16:57:02>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"","dbNum":"","password":""}])
+2022/07/12 16:57:02.239 [I]  2022-07-12 16:57:02>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:57:02.239 [I]  2022-07-12 16:57:02>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"","dbNum":"","password":""}])
+2022/07/12 16:57:02.239 [I]  2022-07-12 16:57:02>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:57:11.223 [I]  2022-07-12 16:57:11>%!(EXTRA []interface {}=[nats OK!])
+2022/07/12 16:57:11.225 [I]  2022-07-12 16:57:11>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"","dbNum":"","password":""}])
+2022/07/12 16:57:11.225 [I]  2022-07-12 16:57:11>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:57:11.225 [I]  2022-07-12 16:57:11>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"","dbNum":"","password":""}])
+2022/07/12 16:57:11.225 [I]  2022-07-12 16:57:11>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:57:11.225 [I]  2022-07-12 16:57:11>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"","dbNum":"","password":""}])
+2022/07/12 16:57:11.225 [I]  2022-07-12 16:57:11>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:57:11.225 [I]  2022-07-12 16:57:11>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"","dbNum":"","password":""}])
+2022/07/12 16:57:11.225 [I]  2022-07-12 16:57:11>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:57:11.225 [I]  2022-07-12 16:57:11>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"","dbNum":"","password":""}])
+2022/07/12 16:57:11.225 [I]  2022-07-12 16:57:11>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:57:29.417 [I]  2022-07-12 16:57:29>%!(EXTRA []interface {}=[nats OK!])
+2022/07/12 16:57:29.419 [I]  2022-07-12 16:57:29>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"","dbNum":"","password":""}])
+2022/07/12 16:57:29.419 [I]  2022-07-12 16:57:29>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:57:29.419 [I]  2022-07-12 16:57:29>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"","dbNum":"","password":""}])
+2022/07/12 16:57:29.419 [I]  2022-07-12 16:57:29>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:57:29.419 [I]  2022-07-12 16:57:29>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"","dbNum":"","password":""}])
+2022/07/12 16:57:29.419 [I]  2022-07-12 16:57:29>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:57:29.419 [I]  2022-07-12 16:57:29>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"","dbNum":"","password":""}])
+2022/07/12 16:57:29.419 [I]  2022-07-12 16:57:29>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:57:29.419 [I]  2022-07-12 16:57:29>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"","dbNum":"","password":""}])
+2022/07/12 16:57:29.419 [I]  2022-07-12 16:57:29>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:58:00.464 [I]  2022-07-12 16:58:00>%!(EXTRA []interface {}=[nats OK!])
+2022/07/12 16:58:00.466 [I]  2022-07-12 16:58:00>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"","dbNum":"","password":""}])
+2022/07/12 16:58:00.466 [I]  2022-07-12 16:58:00>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:58:00.466 [I]  2022-07-12 16:58:00>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"","dbNum":"","password":""}])
+2022/07/12 16:58:00.466 [I]  2022-07-12 16:58:00>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:58:00.466 [I]  2022-07-12 16:58:00>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"","dbNum":"","password":""}])
+2022/07/12 16:58:00.466 [I]  2022-07-12 16:58:00>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:58:00.466 [I]  2022-07-12 16:58:00>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"","dbNum":"","password":""}])
+2022/07/12 16:58:00.466 [I]  2022-07-12 16:58:00>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])
+2022/07/12 16:58:00.466 [I]  2022-07-12 16:58:00>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"","dbNum":"","password":""}])
+2022/07/12 16:58:00.467 [I]  2022-07-12 16:58:00>%!(EXTRA []interface {}=[failed to init redis dial tcp: missing address])

+ 14 - 33
views/Data/DataRealCalss.html

@@ -199,7 +199,6 @@
         }
         }
         T_page = page
         T_page = page
 
 
-
         T_sn = $("#D_T_sn").val();
         T_sn = $("#D_T_sn").val();
         T_name = $("#D_Name").val();
         T_name = $("#D_Name").val();
         T_class_id = $("#Class_1").val();
         T_class_id = $("#Class_1").val();
@@ -215,7 +214,7 @@
                 page_z: 30,
                 page_z: 30,
             },
             },
             success: function (result) {
             success: function (result) {
-                console.log(result)
+                // console.log(result)
                 if (result.Code == 200) {
                 if (result.Code == 200) {
                     $('#DeviceSensor_list').html("")
                     $('#DeviceSensor_list').html("")
                     $('#DeviceSensor_list_Pages').html("")
                     $('#DeviceSensor_list_Pages').html("")
@@ -262,12 +261,22 @@
                 //
                 //
                 // }
                 // }
 
 
+                // 是否 离线
+                if(Ds.T_online > 1)  {
+                    // 传感器超时
+                    src_img = "离线-线.png"
+                    if(Ds.T_sn.indexOf("YD") != -1){
+                        src_img = "离线.png"
+                    }
+                    break;
+                }
 
 
                 // 传感器正常
                 // 传感器正常
                 if(Ds.T_sn.indexOf("YD") != -1){
                 if(Ds.T_sn.indexOf("YD") != -1){
                     if(Ds.T_monitor == 0 ){
                     if(Ds.T_monitor == 0 ){
                         src_img = "停止.png"
                         src_img = "停止.png"
                     }
                     }
+                    break;
                 }
                 }
 
 
                 // 是否 超时
                 // 是否 超时
@@ -293,7 +302,7 @@
             }
             }
             DeviceTask_on = ""
             DeviceTask_on = ""
             if(Ds.T_sn.indexOf("YD") != -1){
             if(Ds.T_sn.indexOf("YD") != -1){
-                DeviceTask_on = "onclick='DeviceTask_Post("+i+")'"
+                DeviceTask_on = "onclick='DeviceTask_Post()'"
             }
             }
 
 
             hidden = ""
             hidden = ""
@@ -398,35 +407,8 @@
 
 
 <script>
 <script>
 
 
-    function DeviceTask_Post(i) {
-        console.log(DeviceSensor_lite[i])
-        confirm_str = "停止"
-        T_task = "stop"
-        if(DeviceSensor_lite[i].T_monitor == 0){
-            confirm_str = "开始"
-            T_task = "start"
-        }
-
-        layer.confirm("确定"+confirm_str+"记录?", {
-            btn: ['确定'] //可以无限个按钮
-            ,btn1: function(index, layero){
-                $.ajax({
-                    type: 'POST',
-                    url: '../../Device/DeviceTask_Post',//发送请求
-                    data: {
-
-                        T_sn: DeviceSensor_lite[i].T_sn,
-                        T_task: T_task,
-                    },
-                    success: function (result) {
-                        console.log(result)
-                        layer.msg('提示:'+confirm_str+"记录 发送成功!请 等待同步显示",{time: 3000});
-                    }
-                });
-                return false
-            }
-        });
-
+    function DeviceTask_Post() {
+        layer.msg('远程启停 请到设备管理里面操作!');
 
 
 
 
     }
     }
@@ -449,7 +431,6 @@
             }else {
             }else {
                 websocket = new WebSocket("ws://"+window.location.host+"/ws/join?User_tokey="+$.cookie('User_tokey'));
                 websocket = new WebSocket("ws://"+window.location.host+"/ws/join?User_tokey="+$.cookie('User_tokey'));
             }
             }
-
         } else {
         } else {
             alert('Dont support websocket')
             alert('Dont support websocket')
         }
         }

+ 101 - 14
views/Device/Device.html

@@ -12,6 +12,8 @@
         <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
         <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
         <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
         <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
         <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
         <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
+
+        <script src="https://cdn.staticfile.org/jquery/3.4.0/jquery.min.js"></script>
     </head>
     </head>
     
     
     <body>
     <body>
@@ -47,7 +49,10 @@
 <!--                            <button class="layui-btn layui-btn-danger" onclick="delAll()">-->
 <!--                            <button class="layui-btn layui-btn-danger" onclick="delAll()">-->
 <!--                                <i class="layui-icon"></i>批量删除</button>-->
 <!--                                <i class="layui-icon"></i>批量删除</button>-->
                             <button class="layui-btn  layui-btn-normal" onclick="xadmin.open('添加','Device_',450,300,false);">
                             <button class="layui-btn  layui-btn-normal" onclick="xadmin.open('添加','Device_',450,300,false);">
-                                <i class="layui-icon"></i>添加</button></div>
+                                <i class="layui-icon"></i>添加</button>
+                            <button class="layui-btn  layui-btn-normal" style="float: right;color: #ffffff" onclick="f_tishi();">
+                                <i class="layui-icon">&#xe705;</i>  说明</button>
+                        </div>
                         {{end}}
                         {{end}}
                         <div class="layui-card-body ">
                         <div class="layui-card-body ">
                             {{range $index, $elem := .Device_lite}}
                             {{range $index, $elem := .Device_lite}}
@@ -57,23 +62,61 @@
                                     <div style="float: left;margin-left: 20px;margin-top: 4px;font-size: 15px">SN:{{$elem.T_sn}}</div>
                                     <div style="float: left;margin-left: 20px;margin-top: 4px;font-size: 15px">SN:{{$elem.T_sn}}</div>
                                     <div style="float: left;margin-left: 20px;margin-top: 4px;font-size: 15px">主机名称:{{$elem.T_devName}} {{if eq 0 $elem.T_give }}<span style="background-color: #ff8d8d">弃用设备</span>{{end}}</div>
                                     <div style="float: left;margin-left: 20px;margin-top: 4px;font-size: 15px">主机名称:{{$elem.T_devName}} {{if eq 0 $elem.T_give }}<span style="background-color: #ff8d8d">弃用设备</span>{{end}}</div>
                                     <div style="float: left;margin-left: 20px;margin-top: 4px;font-size: 15px">传感器数量:{{$elem.T_sensor}}</div>
                                     <div style="float: left;margin-left: 20px;margin-top: 4px;font-size: 15px">传感器数量:{{$elem.T_sensor}}</div>
-                                    <div style="float: left;margin-left: 20px;margin-top: 4px;font-size: 15px">状态:
-                                        {{if eq 1 $elem.T_monitor }}
-                                        <span style="color: #00FF00">监控状态 </span>
+                                    <div style="float: left;margin-left: 20px;margin-top: 4px;font-size: 15px">连接状态:
+                                        {{if eq 1 $elem.T_online }}
+                                        <span style="color: #00FF00">通讯正常 </span>
                                         {{else}}
                                         {{else}}
-                                        <span style="color: #ff7d7d">未监控</span>
+                                            {{if eq 2 $elem.T_online }}
+                                            <span style="color: #ff7d7d">设备已关机 </span>
+                                            {{else}}
+                                            <span style="color: #ff7d7d">设备无网络</span>
+                                            {{end}}
+
                                         {{end}}
                                         {{end}}
                                     </div>
                                     </div>
+                                    <div style="float: left;margin-left: 20px;margin-top: 4px;font-size: 15px">监控状态:
+                                        {{if eq 1 $elem.T_online }}
+                                            {{if eq 1 $elem.T_monitor }}
+                                            <span style="color: #00FF00">监控状态 </span>
+                                            {{else}}
+                                            <span style="color: #ff7d7d">未监控</span>
+                                            {{end}}
+                                        {{else}}
+                                            {{if eq 2 $elem.T_online }}
+                                            <span style="color: #ff7d7d">未监控 </span>
+                                            {{else}}
+                                            <span style="color: #ff7d7d">未知状态</span>
+                                            {{end}}
+                                        {{end}}
+                                    </div>
+<!--                                    <div style="float: left;margin-left: 20px;margin-top: 4px;font-size: 15px">电量状态:-->
+<!--                                        {-{$elem.T_Dattery }}-->
+
+<!--                                    </div>-->
                                     <div style="float: left;margin-left: 20px;margin-top: 4px;font-size: 15px">MSISDN(物联网卡号):{{$elem.T_MSISDN}}</div>
                                     <div style="float: left;margin-left: 20px;margin-top: 4px;font-size: 15px">MSISDN(物联网卡号):{{$elem.T_MSISDN}}</div>
-                                    {{if eq 1 $.Admin_Power.Power_Device_Parameter_e }}
+
+
+
+
                                     <div class="layui-card-header" style="border-bottom-width: 0px;">
                                     <div class="layui-card-header" style="border-bottom-width: 0px;">
                                         <!--                            <button class="layui-btn layui-btn-danger" onclick="delAll()">-->
                                         <!--                            <button class="layui-btn layui-btn-danger" onclick="delAll()">-->
                                         <!--                                <i class="layui-icon"></i>批量删除</button>-->
                                         <!--                                <i class="layui-icon"></i>批量删除</button>-->
-                                        <button class="layui-btn  layui-btn-normal" style="float: right;margin-top: 2px"
+
+
+
+                                        <button class="layui-btn  layui-btn-normal" style="float: right;margin-top: 2px;margin-left: 20px"
+                                                onclick="xadmin.open('设备日志','DeviceLogs?T_sn={{$elem.T_sn}}',700,'',false);"
+                                        >
+                                            <i class="layui-icon" style="margin-right: 4px">&#xe63c;</i> 设备日志</button>
+
+                                        {{if eq 1 $.Admin_Power.Power_Device_Parameter_e }}
+                                       ` <button class="layui-btn  layui-btn-normal" style="float: right;margin-top: 2px"
                                                 onclick="xadmin.open('设备管理','Device_Parameter?Sn={{$elem.T_sn}}','',800,false);"
                                                 onclick="xadmin.open('设备管理','Device_Parameter?Sn={{$elem.T_sn}}','',800,false);"
                                                 >
                                                 >
-                                            <i class="iconfont" style="margin-right: 4px">&#xe6ae;</i> 设备管理</button></div>
-                                    {{end}}
+                                            <i class="iconfont" style="margin-right: 4px">&#xe6ae;</i> 设备管理</button>`
+                                        {{end}}
+
+                                    </div>
 
 
                                 </div>
                                 </div>
                                 <div class="layui-col" style="margin-left: 40px;max-height: 163px;overflow-y: auto" >
                                 <div class="layui-col" style="margin-left: 40px;max-height: 163px;overflow-y: auto" >
@@ -99,11 +142,11 @@
                                                     </div>
                                                     </div>
                                                     <div class="layui-col-md8" style="margin-top: 3px;white-space:nowrap">
                                                     <div class="layui-col-md8" style="margin-top: 3px;white-space:nowrap">
 
 
-                                                        <div style="{{if and (eq 1 $elem.T_sn_yd) (eq 0 $.Admin_r.Admin_rh)}}margin-top: 10px;{{end}} width: 98%;height:20px;float: left;font-size: 15px;text-overflow:ellipsis; overflow:hidden;">
+                                                        <div style="{{if and (eq 1 ($elem.T_sn | IsYD)) (eq 0 $.Admin_r.Admin_rh)}}margin-top: 10px;{{end}} width: 98%;height:20px;float: left;font-size: 15px;text-overflow:ellipsis; overflow:hidden;">
                                                             <span style="width: 48px;float: left" > <span class="ChangeDivNum">{{$elem_s.T_t}}</span>℃</span>
                                                             <span style="width: 48px;float: left" > <span class="ChangeDivNum">{{$elem_s.T_t}}</span>℃</span>
                                                             <span style="font-size: 10px;float: left" >{{$elem_s.T_Tlower}}~{{$elem_s.T_Tupper}}</span>
                                                             <span style="font-size: 10px;float: left" >{{$elem_s.T_Tlower}}~{{$elem_s.T_Tupper}}</span>
                                                         </div>
                                                         </div>
-                                                        {{if or (eq 0 $elem.T_sn_yd) (eq 1 $.Admin_r.Admin_rh)}}
+                                                        {{if or (eq 0 ($elem.T_sn | IsYD)) (eq 1 $.Admin_r.Admin_rh)}}
                                                             <div style="width: 98%;height:20px;float: left;font-size: 15px;text-overflow:ellipsis; overflow:hidden;">
                                                             <div style="width: 98%;height:20px;float: left;font-size: 15px;text-overflow:ellipsis; overflow:hidden;">
                                                                 <span style="width: 48px;float: left" ><span class="ChangeDivNum">{{$elem_s.T_rh}}</span>%</span>
                                                                 <span style="width: 48px;float: left" ><span class="ChangeDivNum">{{$elem_s.T_rh}}</span>%</span>
                                                                 <span style="font-size: 10px;float: left">{{$elem_s.T_RHlower}}~{{$elem_s.T_RHupper}}</span>
                                                                 <span style="font-size: 10px;float: left">{{$elem_s.T_RHlower}}~{{$elem_s.T_RHupper}}</span>
@@ -112,7 +155,7 @@
                                                         {{end}}
                                                         {{end}}
                                                     </div>
                                                     </div>
                                                     <div class=" layui-col-md12 " style="padding-top: -2px;font-size: 16px;text-align: center;margin-top: -2px;border-top:1px solid  #000">
                                                     <div class=" layui-col-md12 " style="padding-top: -2px;font-size: 16px;text-align: center;margin-top: -2px;border-top:1px solid  #000">
-                                                        {{ $elem_s.T_time.Format "2006-01-02 15:04:05"}}
+                                                        {{ $elem_s.T_time}}
                                                     </div>
                                                     </div>
                                                 </div>
                                                 </div>
 
 
@@ -183,7 +226,7 @@
             }
             }
 
 
         }
         }
-        layui.use(['laydate', 'form'],
+        layui.use(['laydate', 'form', 'layer'],
             function() {
             function() {
                 var laydate = layui.laydate;
                 var laydate = layui.laydate;
 
 
@@ -195,8 +238,31 @@
                 //执行一个laydate实例
                 //执行一个laydate实例
                 laydate.render({
                 laydate.render({
                     elem: '#end' //指定元素
                     elem: '#end' //指定元素
+                });
+
+
+                // 鼠标悬浮提示文字
+                var tip_html = "<p>12312312312313123123</p>";
+                var tip_index = 0;
+
+
+
+        });
+
+        $(document).on('mouseenter', '.tishi_lianj', function(){  // 监听鼠标移入事件
+            console.log("mouseenter")
+            tip_index = layer.tips(tip_html, '#tableTopLeft', {
+                tips: [1, "#"],  //1-4表示上右下左四个方向,# 可带背景色
+                area: ['450px', 'auto'], // 提示框宽高
+                time: 0  //自动关闭所需毫秒,0表示不自动关闭
             });
             });
+        }).on('mouseleave', '#tableTopLeft', function(){ // 监听鼠标移出事件
+            console.log("mouseleave")
+            layer.close(tip_index);
         });
         });
+
+
+
         /*用户-删除*/
         /*用户-删除*/
         function member_del(obj, id) {
         function member_del(obj, id) {
             layer.confirm('确认要删除吗?',
             layer.confirm('确认要删除吗?',
@@ -230,5 +296,26 @@
             });
             });
         }
         }
     </script>
     </script>
+    <script>
+
+    function f_tishi() {
+        layer.open({
+            title: '说明'
+            ,content: '<h2 style="color: #d80000">设备管理里面 温湿度 不是实时数据</h2>' +
+                '<h2>连接状态:</h2>' +
+                '<p>1、通讯正常</p>' +
+                '<p>2、设备已关机</p>' +
+                '<p>3、设备无网络(设备信号弱,或无信号)</p>' +
+                '<h2>监控状态:</h2>' +
+                '<p>1、监控状态</p>' +
+                '<p>2、未监控</p>' +
+                '<p>3、未知状态(由于设备异常断开网络,请以设备实际显示为准)</p>'+
+                '<h2>弃用设备:</h2>' +
+                '<p>1、本设备所有探头 在数据展示中将会隐藏,可以通过指定SN搜索到历史数据</p>'
+        });
+    }
+
+
+    </script>
+</html>
 
 
-</html>

+ 278 - 48
views/Device/DeviceClass-.html

@@ -28,6 +28,15 @@
                 -khtml-user-select: none; /*早期浏览器*/
                 -khtml-user-select: none; /*早期浏览器*/
                 user-select: none;
                 user-select: none;
             }
             }
+            .box_x{
+                border: 1px solid #1E9FFF;
+                width: 42px;
+                height: 16px;
+                margin: 0;
+                padding: 4px;
+                float: left;
+                text-align: center;
+            }
 
 
         </style>
         </style>
     <body>
     <body>
@@ -45,13 +54,19 @@
                     {{if ne .id 0 }}
                     {{if ne .id 0 }}
                         <div class="layui-tab layui-tab-card">
                         <div class="layui-tab layui-tab-card">
                             <ul class="layui-tab-title">
                             <ul class="layui-tab-title">
-                                <li class="layui-this">微信通知</li>
-                                <li class="">电话通知</li>
+                                <li class="layui-this">通知规则</li>
+                                <li class="">微信通知</li>
                                 <li class="">短信通知</li>
                                 <li class="">短信通知</li>
+                                <li class="">电话通知</li>
                                 <li class="">邮箱通知</li>
                                 <li class="">邮箱通知</li>
                             </ul>
                             </ul>
-                            <div class="layui-tab-content" style="height: 350px;">
-                                <div class="layui-tab-item layui-show" >
+                            <div class="layui-tab-content" style="height: 340px;overflow-y: auto;">
+                                <div id="T_Notice_mechanism" class="layui-tab-item layui-show" style="" >
+
+
+
+                                </div>
+                                <div class="layui-tab-item " >
                                     <div class="layui-row" style="margin: 0px 10px">
                                     <div class="layui-row" style="margin: 0px 10px">
                                         <div class="layui-col-xs6" >
                                         <div class="layui-col-xs6" >
                                             <div class="layui-row no_select" style="margin: 10px 0px;font-size: 15px;color: #1E9FFF">
                                             <div class="layui-row no_select" style="margin: 10px 0px;font-size: 15px;color: #1E9FFF">
@@ -64,12 +79,12 @@
                                                 <img id="myimg" style="width: 150px;height: 150px;float: left" src="https://osscold.baozhida.cn/images/二维码.png">
                                                 <img id="myimg" style="width: 150px;height: 150px;float: left" src="https://osscold.baozhida.cn/images/二维码.png">
 
 
                                             </div>
                                             </div>
-                                            <div class="layui-row no_select" style="margin: 10px 0px;font-size: 15px;color: #1E9FFF;margin-top: 18px">
-                                                方式二:回复内容
-                                            </div>
-                                            <div id="Code" class="layui-row" style="height: 50px;margin: 0px 10px;border:1px solid  #cbcbcb;box-shadow: 0px 0px 8px #316fe7;padding: 6px;border-radius:5px;">
+<!--                                            <div class="layui-row no_select" style="margin: 10px 0px;font-size: 15px;color: #1E9FFF;margin-top: 18px">-->
+<!--                                                方式二:回复内容-->
+<!--                                            </div>-->
+<!--                                            <div id="Code" class="layui-row" style="height: 50px;margin: 0px 10px;border:1px solid  #cbcbcb;box-shadow: 0px 0px 8px #316fe7;padding: 6px;border-radius:5px;">-->
 
 
-                                            </div>
+<!--                                            </div>-->
                                         </div>
                                         </div>
                                         <div id="Notice_wx_list" class="layui-col-xs6" style="padding-left: 6px;padding-right: 6px;height: 350px;border-left:1px solid  #cbcbcb;overflow-y:auto;">
                                         <div id="Notice_wx_list" class="layui-col-xs6" style="padding-left: 6px;padding-right: 6px;height: 350px;border-left:1px solid  #cbcbcb;overflow-y:auto;">
 <!--                                            <div class="layui-col" style="height: 32px;background-color: #fafafa;border-radius:5px;margin-bottom: 4px;">-->
 <!--                                            <div class="layui-col" style="height: 32px;background-color: #fafafa;border-radius:5px;margin-bottom: 4px;">-->
@@ -96,31 +111,30 @@
                                                 <label for="T_name" class="layui-form-label" style="margin-left: 6px;margin-top: 6px;padding:0px;padding-right: 10px">
                                                 <label for="T_name" class="layui-form-label" style="margin-left: 6px;margin-top: 6px;padding:0px;padding-right: 10px">
                                                     <span class="x-red">*</span>添加手机号码</label>
                                                     <span class="x-red">*</span>添加手机号码</label>
                                                 <div class="layui-input-inline">
                                                 <div class="layui-input-inline">
-                                                    <input  type="text" id="E_phone" name="E_phone" required=""  class="layui-input">
+                                                    <input  type="text" id="E_message" name="E_message" required="" class="layui-input">
                                                 </div>
                                                 </div>
                                             </div>
                                             </div>
                                             <div class="layui-row" style="margin: 0px 10px">
                                             <div class="layui-row" style="margin: 0px 10px">
                                                 <div class="layui-form-item" style="text-align: center;margin-top: 30px">
                                                 <div class="layui-form-item" style="text-align: center;margin-top: 30px">
-                                                    <button class="layui-btn layui-btn-normal" onclick="Add_Notice_phone()">添加</button>
+                                                    <button class="layui-btn layui-btn-normal" onclick="Add_Notice_message()">添加</button>
                                                 </div>
                                                 </div>
                                             </div>
                                             </div>
                                         </div>
                                         </div>
-                                        <div id="Notice_phone_list" class="layui-col-xs6" style="padding-left: 6px;padding-right: 6px;height: 350px;border-left:1px solid  #cbcbcb;overflow-y:auto;">
-    <!--                                        <div class="layui-col" style="height: 32px;background-color: #fafafa;border-radius:5px;margin-bottom: 4px;">-->
-    <!--                                            <img style="float: left;width: 30px;margin: 0px 10px;margin-top: 2px;" src="https://osscold.baozhida.cn/images/微信.png" height="30"-->
-    <!--                                                 width="30"/>-->
-    <!--                                            <div style="float: left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">-->
-    <!--                                                <div style="margin-top: 8px;font-size: 15px">SN:KF20210510143443</div>-->
-    <!--                                            </div>-->
-    <!--                                            <div class="layui-card-header" style="float: right; padding: 0px;height: 0px;">-->
-    <!--                                                <span style="float: right;margin-top: 0px;color: rgba(255,73,91,0.95);height: 20px;margin-right: 6px;margin-top: -4px;"-->
-    <!--                                                      onclick="Add_Notice_phone()"><i class="iconfont" style="margin-right: 2px">&#xe69d;</i>删除</span>-->
-    <!--                                            </div>-->
-    <!--                                        </div>-->
+                                        <div id="Notice_message_list" class="layui-col-xs6" style="padding-left: 6px;padding-right: 6px;height: 350px;border-left:1px solid  #cbcbcb;overflow-y:auto;">
+                                            <!--                                        <div class="layui-col" style="height: 32px;background-color: #fafafa;border-radius:5px;margin-bottom: 4px;">-->
+                                            <!--                                            <img style="float: left;width: 30px;margin: 0px 10px;margin-top: 2px;" src="https://osscold.baozhida.cn/images/微信.png" height="30"-->
+                                            <!--                                                 width="30"/>-->
+                                            <!--                                            <div style="float: left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">-->
+                                            <!--                                                <div style="margin-top: 8px;font-size: 15px">SN:KF20210510143443</div>-->
+                                            <!--                                            </div>-->
+                                            <!--                                            <div class="layui-card-header" style="float: right; padding: 0px;height: 0px;">-->
+                                            <!--                                                <span style="float: right;margin-top: 0px;color: rgba(255,73,91,0.95);height: 20px;margin-right: 6px;margin-top: -4px;"-->
+                                            <!--                                                      onclick="Add_Notice_phone()"><i class="iconfont" style="margin-right: 2px">&#xe69d;</i>删除</span>-->
+                                            <!--                                            </div>-->
+                                            <!--                                        </div>-->
 
 
                                         </div>
                                         </div>
                                     </div>
                                     </div>
-
                                 </div>
                                 </div>
                                 <div class="layui-tab-item">
                                 <div class="layui-tab-item">
                                     <div class="layui-row" style="margin: 0px 10px">
                                     <div class="layui-row" style="margin: 0px 10px">
@@ -129,31 +143,33 @@
                                                 <label for="T_name" class="layui-form-label" style="margin-left: 6px;margin-top: 6px;padding:0px;padding-right: 10px">
                                                 <label for="T_name" class="layui-form-label" style="margin-left: 6px;margin-top: 6px;padding:0px;padding-right: 10px">
                                                     <span class="x-red">*</span>添加手机号码</label>
                                                     <span class="x-red">*</span>添加手机号码</label>
                                                 <div class="layui-input-inline">
                                                 <div class="layui-input-inline">
-                                                    <input  type="text" id="E_message" name="E_message" required="" class="layui-input">
+                                                    <input  type="text" id="E_phone" name="E_phone" required=""  class="layui-input">
                                                 </div>
                                                 </div>
                                             </div>
                                             </div>
                                             <div class="layui-row" style="margin: 0px 10px">
                                             <div class="layui-row" style="margin: 0px 10px">
                                                 <div class="layui-form-item" style="text-align: center;margin-top: 30px">
                                                 <div class="layui-form-item" style="text-align: center;margin-top: 30px">
-                                                    <button class="layui-btn layui-btn-normal" onclick="Add_Notice_message()">添加</button>
+                                                    <button class="layui-btn layui-btn-normal" onclick="Add_Notice_phone()">添加</button>
                                                 </div>
                                                 </div>
                                             </div>
                                             </div>
                                         </div>
                                         </div>
-                                        <div id="Notice_message_list" class="layui-col-xs6" style="padding-left: 6px;padding-right: 6px;height: 350px;border-left:1px solid  #cbcbcb;overflow-y:auto;">
-                                            <!--                                        <div class="layui-col" style="height: 32px;background-color: #fafafa;border-radius:5px;margin-bottom: 4px;">-->
-                                            <!--                                            <img style="float: left;width: 30px;margin: 0px 10px;margin-top: 2px;" src="https://osscold.baozhida.cn/images/微信.png" height="30"-->
-                                            <!--                                                 width="30"/>-->
-                                            <!--                                            <div style="float: left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">-->
-                                            <!--                                                <div style="margin-top: 8px;font-size: 15px">SN:KF20210510143443</div>-->
-                                            <!--                                            </div>-->
-                                            <!--                                            <div class="layui-card-header" style="float: right; padding: 0px;height: 0px;">-->
-                                            <!--                                                <span style="float: right;margin-top: 0px;color: rgba(255,73,91,0.95);height: 20px;margin-right: 6px;margin-top: -4px;"-->
-                                            <!--                                                      onclick="Add_Notice_phone()"><i class="iconfont" style="margin-right: 2px">&#xe69d;</i>删除</span>-->
-                                            <!--                                            </div>-->
-                                            <!--                                        </div>-->
+                                        <div id="Notice_phone_list" class="layui-col-xs6" style="padding-left: 6px;padding-right: 6px;height: 350px;border-left:1px solid  #cbcbcb;overflow-y:auto;">
+    <!--                                        <div class="layui-col" style="height: 32px;background-color: #fafafa;border-radius:5px;margin-bottom: 4px;">-->
+    <!--                                            <img style="float: left;width: 30px;margin: 0px 10px;margin-top: 2px;" src="https://osscold.baozhida.cn/images/微信.png" height="30"-->
+    <!--                                                 width="30"/>-->
+    <!--                                            <div style="float: left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">-->
+    <!--                                                <div style="margin-top: 8px;font-size: 15px">SN:KF20210510143443</div>-->
+    <!--                                            </div>-->
+    <!--                                            <div class="layui-card-header" style="float: right; padding: 0px;height: 0px;">-->
+    <!--                                                <span style="float: right;margin-top: 0px;color: rgba(255,73,91,0.95);height: 20px;margin-right: 6px;margin-top: -4px;"-->
+    <!--                                                      onclick="Add_Notice_phone()"><i class="iconfont" style="margin-right: 2px">&#xe69d;</i>删除</span>-->
+    <!--                                            </div>-->
+    <!--                                        </div>-->
 
 
                                         </div>
                                         </div>
                                     </div>
                                     </div>
+
                                 </div>
                                 </div>
+
                                 <div class="layui-tab-item">
                                 <div class="layui-tab-item">
                                     <div class="layui-row" style="margin: 0px 10px">
                                     <div class="layui-row" style="margin: 0px 10px">
                                         <div class="layui-col-xs6" >
                                         <div class="layui-col-xs6" >
@@ -192,7 +208,7 @@
 
 
                     {{end}}
                     {{end}}
                     <div class="layui-form-item" style="text-align: center;margin-top: 20px">
                     <div class="layui-form-item" style="text-align: center;margin-top: 20px">
-                        <button class="layui-btn layui-btn-normal" onclick="DeviceClass_Post()">提交 {{if gt .id 0 }}(点击提交后生效){{end}}</button>
+                        <button class="layui-btn layui-btn-normal" onclick="DeviceClass_Post(true)">提交 {{if gt .id 0 }}(点击提交后生效){{end}}</button>
                     </div>
                     </div>
 
 
             </div>
             </div>
@@ -257,7 +273,7 @@
                     element.innerHTML = this.value == oldhtml ? oldhtml : this.value;
                     element.innerHTML = this.value == oldhtml ? oldhtml : this.value;
                     T_Notice_wx = plusXing(T_Notice_wx,tid,this.value == oldhtml ? oldhtml : this.value)
                     T_Notice_wx = plusXing(T_Notice_wx,tid,this.value == oldhtml ? oldhtml : this.value)
                     console.log("T_Notice_wx:",T_Notice_wx)
                     console.log("T_Notice_wx:",T_Notice_wx)
-                    DeviceClass_Post()
+                    DeviceClass_Post(false)
 
 
                     setTimeout(hello_s5,5000);//5秒后执行
                     setTimeout(hello_s5,5000);//5秒后执行
                     //当触发时判断新增元素值是否为空,为空则不修改,并返回原有值
                     //当触发时判断新增元素值是否为空,为空则不修改,并返回原有值
@@ -276,6 +292,7 @@
             var T_Notice_phone = "{{.T.T_Notice_phone}}"
             var T_Notice_phone = "{{.T.T_Notice_phone}}"
             var T_Notice_message = "{{.T.T_Notice_message}}"
             var T_Notice_message = "{{.T.T_Notice_message}}"
             var T_Notice_mailbox = "{{.T.T_Notice_mailbox}}"
             var T_Notice_mailbox = "{{.T.T_Notice_mailbox}}"
+            var T_Notice_mechanism = "{{.T.T_Notice_mechanism}}"
             var Onload = true
             var Onload = true
             var forNotice_wx = true
             var forNotice_wx = true
             // 页面 加载完成后执行
             // 页面 加载完成后执行
@@ -283,6 +300,7 @@
                 console.log("页面 加载完成后执行")
                 console.log("页面 加载完成后执行")
                 if(Onload && parseInt(getPar("id")) > 0){
                 if(Onload && parseInt(getPar("id")) > 0){
                     Onload =false;
                     Onload =false;
+                    Show_Notice_T_Notice_mechanism();  // 报警机制
                     Show_Notice_phone_list();
                     Show_Notice_phone_list();
                     Show_Notice_message_list();
                     Show_Notice_message_list();
                     Show_Notice_mailbox_list();
                     Show_Notice_mailbox_list();
@@ -316,7 +334,7 @@
                 }
                 }
                 T_Notice_wx = T_Notice_wx.replace(srt_r + "|", "")
                 T_Notice_wx = T_Notice_wx.replace(srt_r + "|", "")
                 Show_Notice_wx_list()
                 Show_Notice_wx_list()
-                DeviceClass_Post()
+                DeviceClass_Post(false)
             }
             }
             function Show_Notice_wx_list() {
             function Show_Notice_wx_list() {
                 var scores = T_Notice_wx.split("|");
                 var scores = T_Notice_wx.split("|");
@@ -491,7 +509,7 @@
                         console.log(result)
                         console.log(result)
                         if (result.Code == 200 ){
                         if (result.Code == 200 ){
                             $("#myimg").attr('src',result.Data.QR);
                             $("#myimg").attr('src',result.Data.QR);
-                            $('#Code').html(result.Data.Code);
+                            // $('#Code').html(result.Data.Code);
                         }else {
                         }else {
                             layer.msg('二维码生成失败!', {
                             layer.msg('二维码生成失败!', {
                                 time: 2000
                                 time: 2000
@@ -506,7 +524,6 @@
                     type: 'POST',
                     type: 'POST',
                     url: 'Get_DeviceClassId',//发送请求
                     url: 'Get_DeviceClassId',//发送请求
                     data: {
                     data: {
-                        User_tokey: $.cookie("User_tokey"),
                         T_class_id: parseInt(getPar("id")),
                         T_class_id: parseInt(getPar("id")),
                     },
                     },
                     success: function(result) {
                     success: function(result) {
@@ -515,7 +532,7 @@
                             T_Notice_wx = result.Data.T_Notice_wx
                             T_Notice_wx = result.Data.T_Notice_wx
                             Show_Notice_wx_list()
                             Show_Notice_wx_list()
                         }else {
                         }else {
-                            layer.msg('二维码生成失败!', {
+                            layer.msg('获取数据失败!', {
                                 time: 2000
                                 time: 2000
                             });
                             });
                         }
                         }
@@ -523,7 +540,11 @@
                     }
                     }
                 });
                 });
             }
             }
-            function DeviceClass_Post(){
+            function DeviceClass_Post(is){
+                var loading = layer.load(0, {
+                    shade: false,
+                    time: 99*1000
+                });
                 $.ajax({
                 $.ajax({
                     type: 'POST',
                     type: 'POST',
                     url: 'DeviceClass_Post',//发送请求
                     url: 'DeviceClass_Post',//发送请求
@@ -534,19 +555,228 @@
                         T_Notice_phone:T_Notice_phone,
                         T_Notice_phone:T_Notice_phone,
                         T_Notice_message:T_Notice_message,
                         T_Notice_message:T_Notice_message,
                         T_Notice_mailbox:T_Notice_mailbox,
                         T_Notice_mailbox:T_Notice_mailbox,
+                        T_Notice_mechanism:Get_Notice_T_Notice_mechanism(),
 
 
                     },
                     },
                     success: function(result) {
                     success: function(result) {
                         console.log(result)
                         console.log(result)
+                        layer.close(loading)
+                        if(result.Code == 200){
+                            if(is){
+                                //关闭当前frame
+                                parent.layer.close();
+                                parent.location.reload();
+                            }
+
+                        }
 
 
-                        //关闭当前frame
-                        parent.layer.close();
-                        parent.location.reload();
                     }
                     }
                 });
                 });
             }
             }
+
+
         </script>
         </script>
+        <script>
+            // 初始化 报警规则机制
+            function T_Notice_mechanism_initialization(){
+                var loading = layer.load(0, {
+                    shade: false,
+                    time: 99*1000
+                });
+                $.ajax({
+                    type: 'POST',
+                    url: 'DeviceWarningListT_Tips',//发送请求
+                    success: function(result) {
+                        console.log(result)
+                        layer.close(loading)
+                        //关闭当前frame
+                        // parent.layer.close();
+                        // parent.location.reload();
+                        T_Notice_mechanism = result.Data
+                        Show_Notice_T_Notice_mechanism()
+                    }
+                });
+            }
+            function Get_Notice_T_Notice_mechanism() {
+                box = $(".box_x")
+                if(box.length < 8){
+                    return ""
+                }
+                box_x = (box.length / 15) - 1
+                console.log("box_x:",box_x)
+                i_v = 15
+                str_ = ""
+                for (let i = 0; i < box_x; i++) {
+                    i_ = 15 + 15 * i
+
+
+                    str_ += box[i_+0].textContent + ","
+                    i_++
+                    if(box[i_].firstElementChild.checked == true){
+                        str_ += "1,"
+                    }else {
+                        str_ += "0,"
+                    }
+                    i_++
+                    if(box[i_].firstElementChild.checked == true){
+                        str_ += "1,"
+                    }else {
+                        str_ += "0,"
+                    }
+                    i_++
+                    if(box[i_].firstElementChild.checked == true){
+                        str_ += "1,"
+                    }else {
+                        str_ += "0,"
+                    }
+                    i_++
+                    str_ += box[i_].firstElementChild.value + ","
+                    i_++
+                    str_ += box[i_].firstElementChild.value + ","
+                    i_++
+                    if(box[i_].firstElementChild.checked == true){
+                        str_ += "1,"
+                    }else {
+                        str_ += "0,"
+                    }
+                    i_++
+                    str_ += box[i_].firstElementChild.value + ","
+                    i_++
+                    str_ += box[i_].firstElementChild.value + ","
+                    i_++
+                    if(box[i_].firstElementChild.checked == true){
+                        str_ += "1,"
+                    }else {
+                        str_ += "0,"
+                    }
+                    i_++
+                    str_ += box[i_].firstElementChild.value + ","
+                    i_++
+                    str_ += box[i_].firstElementChild.value + ","
+                    i_++
+                    if(box[i_].firstElementChild.checked == true){
+                        str_ += "1,"
+                    }else {
+                        str_ += "0,"
+                    }
+                    i_++
+                    str_ += box[i_].firstElementChild.value + ","
+                    i_++
+                    str_ += box[i_].firstElementChild.value + ""
+                    str_ += "|"
+                }
+                return str_
+            }
+            function Show_Notice_T_Notice_mechanism() {
+                console.log("======")
+                var scores = T_Notice_mechanism.split("|");
+                $('#T_Notice_mechanism').html("<div class=\"layui-row\">\n" +
+                    "                                        <span class=\"box_x\" style=\"margin-left: -1px;width: 120px;\">报警类型</span>\n" +
+                    "                                        <span class=\"box_x\" style=\"margin-left: 1px;\">记录</span>\n" +
+                    "                                        <span class=\"box_x\" style=\"margin-left: 1px;\">处理</span>\n" +
+                    "                                        <span class=\"box_x\" style=\"margin-left: 1px;\">微信</span>\n" +
+                    "                                        <span class=\"box_x\" style=\"margin-left: -1px;\">触发数</span>\n" +
+                    "                                        <span class=\"box_x\" style=\"margin-left: -1px;\">上限数</span>\n" +
+                    "                                        <span class=\"box_x\" style=\"margin-left: 1px;\">短信</span>\n" +
+                    "                                        <span class=\"box_x\" style=\"margin-left: -1px;\">触发数</span>\n" +
+                    "                                        <span class=\"box_x\" style=\"margin-left: -1px;\">上限数</span>\n" +
+                    "                                        <span class=\"box_x\" style=\"margin-left: 1px;\">手机</span>\n" +
+                    "                                        <span class=\"box_x\" style=\"margin-left: -1px;\">触发数</span>\n" +
+                    "                                        <span class=\"box_x\" style=\"margin-left: -1px;\">上限数</span>\n" +
+                    "                                        <span class=\"box_x\" style=\"margin-left: 1px;\">邮箱</span>\n" +
+                    "                                        <span class=\"box_x\" style=\"margin-left: -1px;\">触发数</span>\n" +
+                    "                                        <span class=\"box_x\" style=\"margin-left: -1px;\">上限数</span>\n" +
+                    "                                    </div>");
+                for (let i = 0; i < scores.length; i++) {
+                    if(scores[i].length == 0){
+                        break
+                    }
+                    row = scores[i].split(",");
+                    $('#T_Notice_mechanism').append("" +
+                        "\n" +
+                        "                                    <div class=\"layui-row\">\n" +
+                        "                                        <div class=\"box_x\" style=\"margin-left: -1px;width: 120px;\">"+row[0]+"</div>\n" +
+                        "                                        <div class=\"box_x\" style=\"margin-left: 1px;\">\n" +
+                        "                                            <input type=\"checkbox\">\n" +
+                        "                                        </div>\n" +
+                        "                                        <div class=\"box_x\" style=\"margin-left: 1px;\">\n" +
+                        "                                            <input type=\"checkbox\">\n" +
+                        "                                        </div>\n" +
+                        "\n" +
+                        "                                        <div class=\"box_x\" style=\"margin-left: 1px;\">\n" +
+                        "                                            <input type=\"checkbox\">\n" +
+                        "                                        </div>\n" +
+                        "                                        <div class=\"box_x\" style=\"margin-left: -1px;\">\n" +
+                        "                                            <input type=\"text\" style=\"width: 40px;\" value='"+row[4]+"'>\n" +
+                        "                                        </div>\n" +
+                        "                                        <div class=\"box_x\" style=\"margin-left: -1px;\">\n" +
+                        "                                            <input type=\"text\" style=\"width: 40px;\" value='"+row[5]+"'>\n" +
+                        "                                        </div>\n" +
+                        "\n" +
+                        "                                        <div class=\"box_x\" style=\"margin-left: 1px;\">\n" +
+                        "                                            <input type=\"checkbox\">\n" +
+                        "                                        </div>\n" +
+                        "                                        <div class=\"box_x\" style=\"margin-left: -1px;\">\n" +
+                        "                                            <input type=\"text\" style=\"width: 40px;\" value='"+row[7]+"'>\n" +
+                        "                                        </div>\n" +
+                        "                                        <div class=\"box_x\" style=\"margin-left: -1px;\">\n" +
+                        "                                            <input type=\"text\" style=\"width: 40px;\" value='"+row[8]+"'>\n" +
+                        "                                        </div>\n" +
+                        "\n" +
+                        "                                        <div class=\"box_x\" style=\"margin-left: 1px;\">\n" +
+                        "                                            <input type=\"checkbox\">\n" +
+                        "                                        </div>\n" +
+                        "                                        <div class=\"box_x\" style=\"margin-left: -1px;\">\n" +
+                        "                                            <input type=\"text\" style=\"width: 40px;\" value='"+row[10]+"'>\n" +
+                        "                                        </div>\n" +
+                        "                                        <div class=\"box_x\" style=\"margin-left: -1px;\">\n" +
+                        "                                            <input type=\"text\" style=\"width: 40px;\" value='"+row[11]+"'>\n" +
+                        "                                        </div>\n" +
+                        "\n" +
+                        "                                        <div class=\"box_x\" style=\"margin-left: 1px;\">\n" +
+                        "                                            <input type=\"checkbox\">\n" +
+                        "                                        </div>\n" +
+                        "                                        <div class=\"box_x\" style=\"margin-left: -1px;\">\n" +
+                        "                                            <input type=\"text\" style=\"width: 40px;\" value='"+row[13]+"'>\n" +
+                        "                                        </div>\n" +
+                        "                                        <div class=\"box_x\" style=\"margin-left: -1px;\">\n" +
+                        "                                            <input type=\"text\" style=\"width: 40px;\" value='"+row[14]+"'>\n" +
+                        "                                        </div>\n" +
+                        "\n" +
+                        "\n" +
+                        "                                    </div>\n")
+
+
+                    box = $(".box_x")
+                    if(row[1] == 1){
+                        box[box.length-1-13].firstElementChild.checked = true
+                    }
+                    if(row[2] == 1){
+                        box[box.length-1-12].firstElementChild.checked = true
+                    }
+                    if(row[3] == 1){
+                        box[box.length-1-11].firstElementChild.checked = true
+                    }
+                    if(row[6] == 1){
+                        box[box.length-1-8].firstElementChild.checked = true
+                    }
+                    if(row[9] == 1){
+                        box[box.length-1-5].firstElementChild.checked = true
+                    }
+                    if(row[12] == 1){
+                        box[box.length-1-2].firstElementChild.checked = true
+                    }
 
 
+                }
+
+
+                $('#T_Notice_mechanism').append("<div class='layui-row' style='text-align: center;margin-top: 20px'> " +
+                    "<button class=\"layui-btn layui-btn-normal\" onclick=\"T_Notice_mechanism_initialization()\">重置数据</button><button class=\"layui-btn layui-btn-normal\" onclick=\"\">说明</button>" +
+                    " </div>" )
+
+
+            }
+        </script>
     </body>
     </body>
 
 
 </html>
 </html>

+ 1 - 1
views/Device/DeviceClass.html

@@ -61,7 +61,7 @@
                             <td class="td-manage">
                             <td class="td-manage">
                                 <button class="layui-btn layui-btn layui-btn-normal"  onclick="xadmin.open('绑定传感器','DeviceClassBind_html?class_id={{$elem.Id}}')" ><i class="iconfont" style="margin-right: 8px;">&#xe6f7;</i>绑定传感器</button>
                                 <button class="layui-btn layui-btn layui-btn-normal"  onclick="xadmin.open('绑定传感器','DeviceClassBind_html?class_id={{$elem.Id}}')" ><i class="iconfont" style="margin-right: 8px;">&#xe6f7;</i>绑定传感器</button>
 
 
-                                <button class="layui-btn layui-btn layui-btn-xs" style="margin-left: 8px" onclick="xadmin.open('编辑','DeviceClass_?id={{$elem.Id}}',700,600)" ><i class="layui-icon">&#xe642;</i>编辑</button>
+                                <button class="layui-btn layui-btn layui-btn-xs" style="margin-left: 8px" onclick="xadmin.open('编辑','DeviceClass_?id={{$elem.Id}}',990,600)" ><i class="layui-icon">&#xe642;</i>编辑</button>
                                 <button class="layui-btn-danger layui-btn layui-btn-xs"  onclick="member_del(this,'{{$elem.Id}}')" href="javascript:;" ><i class="layui-icon" >&#xe640;</i>删除</button>
                                 <button class="layui-btn-danger layui-btn layui-btn-xs"  onclick="member_del(this,'{{$elem.Id}}')" href="javascript:;" ><i class="layui-icon" >&#xe640;</i>删除</button>
                             </td>
                             </td>
                         </tr>
                         </tr>

+ 7 - 9
views/Device/DeviceClassBind-.html

@@ -314,11 +314,6 @@
 
 
     function Checkboxs_GetAll () {
     function Checkboxs_GetAll () {
 
 
-        var loading = layer.load(0, {
-            shade: false,
-            time: 99*1000
-        });
-
         for(var i = 0;i < checkboxs.length; i++){
         for(var i = 0;i < checkboxs.length; i++){
             if(checkboxs[i].checked){
             if(checkboxs[i].checked){
                 d_sn_id = checkboxs[i].value.split(",")
                 d_sn_id = checkboxs[i].value.split(",")
@@ -333,7 +328,7 @@
 
 
         setTimeout(function(){
         setTimeout(function(){
             get_DeviceSensor_calss_list(0)
             get_DeviceSensor_calss_list(0)
-            layer.close(loading)
+
             setTimeout(function(){
             setTimeout(function(){
                 layer.msg('成功绑定传感器');
                 layer.msg('成功绑定传感器');
                 //要执行的代码
                 //要执行的代码
@@ -569,7 +564,7 @@
 
 
                 } else {
                 } else {
 
 
-
+                    layer.msg(result.Msg);
                 }
                 }
             }
             }
         });
         });
@@ -622,7 +617,10 @@
 
 
     // 绑定操作
     // 绑定操作
     function DeviceBind_Add(T_sn,T_id,T_class_id,show) {
     function DeviceBind_Add(T_sn,T_id,T_class_id,show) {
-
+        loading = layer.load(0, {
+            shade: false,
+            time: 99*1000
+        });
         $.ajax({
         $.ajax({
             type: 'POST',
             type: 'POST',
             url: 'DeviceClassBind_Add',//发送请求
             url: 'DeviceClassBind_Add',//发送请求
@@ -633,7 +631,7 @@
                 T_class_id: T_class_id,
                 T_class_id: T_class_id,
             },
             },
             success: function (result) {
             success: function (result) {
-
+                layer.close(loading)
                 if(show){
                 if(show){
                     console.log(result)
                     console.log(result)
                     if (result.Code == 203) {
                     if (result.Code == 203) {

+ 87 - 0
views/Device/DeviceLogs.html

@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html class="x-admin-sm">
+    
+    <head>
+        <meta charset="UTF-8">
+        <meta name="renderer" content="webkit">
+        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
+        <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
+        <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
+        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
+        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
+        <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
+        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
+    </head>
+    
+    <body>
+
+        <div class="layui-fluid">
+            <div class="layui-row layui-col-space15">
+                <div class="layui-col-md12">
+                    <div class="layui-card">
+
+                        <div class="layui-card-body " >
+                            <table class="layui-table layui-form">
+                                <thead>
+                                    <tr>
+                                        <th>内容</th>
+<!--                                        <th>时间</th>-->
+                                    </tr>
+                                </thead>
+                                <tbody>
+                                {{range $index, $elem := .List}}
+                                    <tr>
+                                        <td>{{$elem.Logs_Txt}}</td>
+<!--                                        <td>{{$elem.CreateTime}}</td>-->
+                                    </tr>
+
+                                {{end}}
+
+
+                                </tbody>
+                            </table>
+                        </div>
+                        <div class="layui-card-body ">
+                            <div class="page">
+                                <div>
+
+                                    {{range $index, $elem := .Pages}}
+                                        {{if eq $elem.A 1}}
+                                        <a class="prev" href="?page={{$elem.V}}&T_sn={{$.T_sn}}">&lt;&lt;</a>
+                                        {{end}}
+                                        {{if eq $elem.A 2}}
+                                        <a class="num" href="?page={{$elem.V}}&T_sn={{$.T_sn}}">{{$elem.V}}</a>
+                                        {{end}}
+                                        {{if eq $elem.A 3}}
+                                        <span class="current">{{$elem.V}}</span>
+                                        {{end}}
+                                        {{if eq $elem.A 4}}
+                                        <a class="num" href="?page={{$elem.V}}&T_sn={{$.T_sn}}">{{$elem.V}}</a>
+                                        {{end}}
+                                        {{if eq $elem.A 5}}
+                                        <a class="next" href="?page={{$elem.V}}&T_sn={{$.T_sn}}">&gt;&gt;</a>
+                                        {{end}}
+
+
+
+                                    {{end}}
+
+
+
+                                </div>
+                                Page:{{.Page}}-
+                                Page_size:{{.Page_size}}-
+                                cnt:{{.cnt}}
+                            </div>
+                        </div>
+
+
+                    </div>
+                </div>
+            </div>
+        </div>
+    </body>
+
+
+</html>

+ 2 - 2
views/Device/DeviceWarning.html

@@ -84,7 +84,7 @@
                                 </thead>
                                 </thead>
                                 <tbody>
                                 <tbody>
                                 {{range $index, $elem := .List}}
                                 {{range $index, $elem := .List}}
-                                    <tr {{if compare $elem.T_State 1 }} style="background-color: rgba(255,0,0,0.23)" {{end}} >
+                                    <tr {{if eq $elem.T_State 2 }} style="background-color: rgba(255,0,0,0.23)" {{end}} >
 
 
                                         <td style="min-width: 30px;">
                                         <td style="min-width: 30px;">
                                              <input type="checkbox" name='checkboxxx' class='checkboxxx'  value='{{$elem.Id}}'  style='float: left;width: 10px;height: 10px;margin-top: 16px;margin-left: 10px;' />
                                              <input type="checkbox" name='checkboxxx' class='checkboxxx'  value='{{$elem.Id}}'  style='float: left;width: 10px;height: 10px;margin-top: 16px;margin-left: 10px;' />
@@ -95,7 +95,7 @@
                                         <td>[{{$elem.T_Id}}]-{{$elem.T_Name}}</td>
                                         <td>[{{$elem.T_Id}}]-{{$elem.T_Name}}</td>
                                         <td>{{$elem.T_T}}</td>
                                         <td>{{$elem.T_T}}</td>
                                         <td>
                                         <td>
-                                            {{if or (eq 0 $elem.T_State) (eq 1 $.Admin_r.Admin_rh)}}
+                                            {{if or (eq 0 ($elem.T_sn | IsYD)) (eq 1 $.Admin_r.Admin_rh)}}
                                                 {{$elem.T_RH}}
                                                 {{$elem.T_RH}}
                                             {{end}}
                                             {{end}}
                                         </td>
                                         </td>

+ 11 - 3
views/Device/Device_Parameter-.html

@@ -390,10 +390,18 @@
                             },
                             },
                             success: function (result) {
                             success: function (result) {
                                 console.log(result)
                                 console.log(result)
+
                                 layer.close(loading)
                                 layer.close(loading)
-                                //关闭当前frame
-                                parent.layer.close(parent.layer.getFrameIndex(window.name));
-                                parent.location.reload();
+
+                                if(result.Code == 200){
+                                    //关闭当前frame
+                                    parent.layer.close(parent.layer.getFrameIndex(window.name));
+                                    parent.location.reload();
+
+                                }else {
+
+                                    layer.msg(result.Msg);
+                                }
 
 
                                 // return false;
                                 // return false;
                             }
                             }

+ 10 - 11
views/Device/Device_Sensor-.html

@@ -160,7 +160,7 @@
                 </form>
                 </form>
 
 
 
 
-                <fieldset class="layui-elem-field layui-field-title" style="margin-top: -10px;">
+                <fieldset class="layui-elem-field layui-field-title" style="margin-top: 10px;">
                     <legend>设备操作</legend>
                     <legend>设备操作</legend>
                 </fieldset>
                 </fieldset>
 
 
@@ -266,9 +266,9 @@
                         console.log(result)
                         console.log(result)
                         layer.close(loading)
                         layer.close(loading)
                         //关闭当前frame
                         //关闭当前frame
-                        parent.layer.close(parent.layer.getFrameIndex(window.name));
+                        var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
+                        parent.layer.close(index); //再执行关闭
                         parent.location.reload();
                         parent.location.reload();
-
                         // return false;
                         // return false;
                     }
                     }
                 });
                 });
@@ -294,11 +294,9 @@
                     },
                     },
                     success: function (result) {
                     success: function (result) {
                         console.log(result)
                         console.log(result)
-                        layer.close(loading)
-                        //关闭当前frame
-                        parent.layer.close(parent.layer.getFrameIndex(window.name));
+                        var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
+                        parent.layer.close(index); //再执行关闭
                         parent.location.reload();
                         parent.location.reload();
-
                         // return false;
                         // return false;
                     }
                     }
                 });
                 });
@@ -322,9 +320,9 @@
                 console.log(result)
                 console.log(result)
 
 
                 //关闭当前frame
                 //关闭当前frame
-                parent.layer.close(parent.layer.getFrameIndex(window.name));
+                var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
+                parent.layer.close(index); //再执行关闭
                 parent.location.reload();
                 parent.location.reload();
-
                 // return false;
                 // return false;
             }
             }
         });
         });
@@ -416,8 +414,9 @@
                         success: function (result) {
                         success: function (result) {
                             console.log(result)
                             console.log(result)
                             //关闭当前frame
                             //关闭当前frame
-                            parent.layer.close(parent.layer.getFrameIndex(window.name));
-
+                            var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
+                            parent.layer.close(index); //再执行关闭
+                            parent.location.reload();
 
 
                             // return false;
                             // return false;
                         }
                         }

+ 0 - 894
views/Panel/Index.html

@@ -1,894 +0,0 @@
-<!doctype html>
-<html>
-<title>宝智达物联网平台</title>
-<head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-    <script type="text/javascript" src="{{.OSS_Static}}/panel/jquery.min.js"></script>
-    <script type="text/javascript" src="{{.OSS_Static}}/panel/layer/layer.js"></script>
-    <script type="text/javascript" src="{{.OSS_Static}}/panel/context/context.js"></script>
-    <script type="text/javascript" src="{{.OSS_Static}}/panel/drag.js"></script>
-    <link rel="stylesheet" type="text/css" href="{{.OSS_Static}}/panel/context/context.standalone.css">
-    <!--右侧菜单-->
-    <link rel="stylesheet" type="text/css" href="{{.OSS_Static}}/panel/SlidePushMenus/css/default.css"/>
-    <link rel="stylesheet" type="text/css" href="{{.OSS_Static}}/panel/SlidePushMenus/css/component.css"/>
-    <script src="{{.OSS_Static}}/panel/SlidePushMenus/js/modernizr.custom.js"></script>
-    <script src="{{.OSS_Static}}/panel/SlidePushMenus/js/classie.js"></script>
-    <meta name="page-view-size" content="2920*1080" />
-    <link rel="stylesheet" type="text/css" href="https://www.jq22.com/demo/csstoggle202003032356/style.css"/>
-
-    <style type="text/css">
-        html, body {
-            margin: 0;
-            padding: 0;
-            overflow: hidden;
-        }
-
-        .transparent {
-            filter: alpha(opacity=50);
-            -moz-opacity: 0.5;
-            -khtml-opacity: 0.5;
-            /*opacity: 0.5; // 模糊*/
-        }
-
-        .box {
-            width: 200px;
-            height: 100px;
-            cursor: move;
-            position: absolute;
-            top: 30px;
-            left: 30px;
-            z-index: 99;
-        }
-
-        .box .bg {
-            width: 100%;
-            height: 100%;
-            background-color: orange;
-        }
-
-        .box .coor {
-            width: 10px;
-            height: 10px;
-            overflow: hidden;
-            cursor: se-resize;
-            position: absolute;
-            right: 0;
-            bottom: 0;
-            background-color: red;
-            z-index: 9999999999;
-        }
-
-        .box .content {
-            position: absolute;
-            left: 50%;
-            top: 50%;
-            z-index: 99;
-            text-align: center;
-            font: bold 14px/1.5em simsun;
-        }
-
-        #debug {
-            position: absolute;
-            right: 10px;
-            top: 10px;
-            z-index: 88;
-            border: 1px solid #ccc;
-            width: 100px;
-            height: 100px;
-            background: #fff;
-        }
-
-        #toolbar {
-            position: absolute;
-            left: 10px;
-            top: 10px;
-            z-index: 88;
-        }
-
-    </style>
-
-    <style>
-
-
-        .help-left {
-            width: 310px;
-            font-family: 'microsoft YaHei';
-            float: left;
-            overflow-x: hidden;
-            max-height: 100%;
-            overflow-y: auto;
-        }
-
-        .menu {
-            border-left: 1px solid #ccc;
-            border-right: 1px solid #ccc;
-            background-color:#FEFEFE;
-            width:100%;
-            float: left;
-        }
-
-        .menu:last-child {
-            border-bottom: 1px solid #ccc;
-        }
-
-
-        .menu summary {
-            height: 40px;
-            line-height: 40px;
-            text-indent: 10px;
-            outline: none;
-            font-size: 14px;
-            font-weight: 700;
-            border-top: 1px solid #ddd;
-            background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #FEFEFE), color-stop(1, #CCCCCC));
-            cursor: pointer;
-            width:100%;
-            float: left;
-            text-align: left;
-        }
-
-
-        .menu summary::-webkit-details-marker {
-            display: none;
-
-        }
-
-
-
-
-        .menu .divul {
-
-            padding: 10px 0;
-            clear:left;
-            width:100%;
-            float: left;
-            margin-left: 1px;
-        }
-
-
-        .menu .divulli {
-            padding: 10px 0;
-            width:97px;
-            height: 100px;
-            float: left;
-            cursor: move;
-        }
-        .menu .divulli img {
-            width:60px;
-            height:60px;
-            -webkit-user-select: none;
-            cursor: default;
-            pointer-events: none;
-        }
-        .menu .divulli div {
-            width:97%;
-            margin-top:-8px;
-            overflow: hidden;
-            text-overflow: ellipsis;
-            white-space: nowrap;
-            text-align: center;
-            display:inline-block
-        }
-        .menu .divulli pre {
-            width:0px;
-            height:0px;
-            overflow: hidden;
-        }
-        .menu .divulli:hover {
-            background-color: #ececec;
-            /*text-decoration: underline;*/
-
-        }
-
-    </style>
-
-    <style>
-
-        #tab-header span {
-            padding: 0px 10px ;
-            height: 38px;
-            font-size: 20px;
-            border-radius: 5px;
-            padding-bottom: 10px;
-            padding-top: 4px;
-        }
-
-        #tab-content .dom {
-            display: none;
-        }
-
-
-        .open_layer_layui-layer-input {
-            /*display: block;*/
-            width: 220px;
-            height: 30px;
-            margin: 0 auto;
-            line-height: 30px;
-            padding: 0 5px;
-            border: 1px solid #ccc;
-            box-shadow: 1px 1px 5px rgba(0, 0, 0, .1) inset;
-            color: #333;
-            user-select: auto;
-        }
-        #open_layer_save_layer button {
-            display: block;
-            height: 38px;
-            line-height: 38px;
-            border: 1px solid transparent;
-            padding: 0 18px;
-            margin: 20px auto;
-            background-color: #1E9FFF;;
-            color: #fff;
-            white-space: nowrap;
-            text-align: center;
-            font-size: 14px;
-            border-radius: 2px;
-            cursor: pointer;
-        }
-        .layer_tool_tab{
-            position: absolute;
-            top: 10px;
-            right: 10px;
-            /*background:#FFF;*/
-            width: 80px;
-            height: 30px;
-            z-index:999999999999999999999;
-        }
-        .layer_tool_tab button {
-            height: 28px;
-            line-height: 28px;
-            float: left;
-            border: 1px solid transparent;
-            padding: 0 18px;
-            margin: 1px;
-            background-color: #1E9FFF;;
-            color: #fff;
-            white-space: nowrap;
-            text-align: center;
-            font-size: 12px;
-            border-radius: 2px;
-            cursor: pointer;
-        }
-        .layer_tool_tab  button:hover {
-            background-color: #0092ff;;
-            font-size: 12px;
-        }
-
-        .PanelCanvas_div{
-            cursor: default;
-            user-select: none;
-            position: absolute;
-            border: 2px dashed transparent;
-            /*padding: 10px;*/
-        }
-
-        .PanelCanvas_rel_div{
-            border: 2px dashed transparent;
-        }
-
-        .gridbackground { /*网格背景*/
-            /*!*90度直线,100灰度,0.1透明度,5%宽度,0透明度背景*!*/
-            /*background: linear-gradient(90deg, rgba(141, 128, 128, 0.1) 5%, transparent 0),*/
-            /*    !*0度直线,100灰度,0.1透明度,5%宽度,0透明度背景*!*/
-            /*linear-gradient(rgba(100, 100, 100, 0.1) 5%, transparent 0);*/
-            /*!*横纵向宽距*!*/
-            /*background-size: 20px 20px;*/
-        }
-    </style>
-
-
-    <style>
-        /*#open_layer_Class select {*/
-        /*    margin-top: 2px;*/
-        /*    appearance: none;*/
-        /*    -webkit-appearance: none;*/
-        /*    -moz-appearance: none;*/
-        /*    border: 1px solid #e1e1e1;*/
-        /*    border-radius: 4px;*/
-        /*    height: 2.2em;*/
-        /*    padding: 0 24px 0 8px;*/
-        /*    font-family: inherit;*/
-        /*    color: #666;*/
-        /*    cursor: pointer;*/
-        /*    position: relative;*/
-        /*    background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAASFBMVEUAAAD////Nzc3Nzc3V1dXNzc3MzMzMzMzMzMzNzc3Ozs7j4+PMzMzMzMzMzMzPz8/MzMzNzc3Ozs7Ozs7MzMzNzc3Nzc3Nzc1mbvnCAAAAGHRSTlMAAymOBrtVs9RlPgnPltxPlWwvRJzBt+CSuXutAAAAM0lEQVR4nGMYBbgALycjiGIUZEaTEBLl4WJgEOZgZcLQwybOLsbHj800bhEBFqo7cfACACvdARau8cpxAAAAAElFTkSuQmCC') no-repeat right center;*/
-        /*}*/
-
-        .layui-layer-iframe iframe {
-            display: block;
-            width: 100%;
-            height: 600px;
-        }
-    </style>
-
-
-
-</head>
-
-<body>
-
-<input hidden type="file" id="UpLoadFile"/>
-
-<div id="PanelCanvas" class="gridbackground" draggable="false" style="user-select: none;height: 4000px;width: 4000px;position: absolute;left: 0px;top: 0px;background-color: #f0f0f0">
-
-
-</div>
-
-
-{{if le .admin_r.Admin_power  6}}
-<div class="layer_tool_tab" >
-    <button onclick="f_PaneView_E();">编辑</button>
-</div>
-<script>
-    // 切换编辑
-    function f_PaneView_E() {
-        ToUrl = encodeURIComponent('../..'+window.location.pathname+'?T_viewid='+T_viewid)
-        window.location.href='PaneView_E?T_viewid='+T_viewid+"&ToUrl="+ToUrl
-    }
-
-</script>
-{{end}}
-
-<!--页面 加载完成后执行-->
-<script>
-    var OSS_Static = "{{.OSS_Static}}"
-
-    var T_viewid = "{{.T_viewid}}"
-    console.log("T_viewid:",T_viewid)
-    var PanelCanvas_lock = true; //区块锁定标识
-
-    // 页面 加载完成后执行
-    window.onload = function () {
-        console.log("页面 加载完成后执行")
-
-        $('img').on('dragstart', function(event) { event.preventDefault(); });
-        if(T_viewid.length > 0){
-            f_PaneView_Get()
-        }
-
-    }
-    // 切换试图
-    function f_PaneView_V() {
-        window.location.href='../..'+window.location.pathname+'?T_viewid='+T_viewid
-    }
-    // 调整视图 大小
-    function win_show() {
-
-        PC_width = parseFloat($("#PanelCanvas").css("width"))
-        PC_height = parseFloat($("#PanelCanvas").css("height"))
-
-
-
-        setInterval(function(){
-
-            Width = $(window).width();
-            Height = $(window).height();
-            //
-            // console.log("W:",Width,Height)
-            // console.log("PC:",PC_width,PC_height)
-            //
-            // console.log("X:",Width/PC_width)
-            // console.log("Y:",Height/PC_height)
-            //
-
-            $("#PanelCanvas").css({
-                'transform': 'scale('+Width/PC_width+', '+Height/PC_height+')',
-                'transform-origin': '0 0'
-            });
-        },500);
-
-
-    }
-</script>
-
-
-<!--移动面板-->
-<script>
-    //创建拖拽方法
-    PanelCanvas_move = true
-
-    // $("#PanelCanvas").mousedown(function(e){
-    //     if(!PanelCanvas_move){return;}
-    //
-    //     var canvas = $(this);
-    //     var pos = $(this).position();
-    //     this.posix = {'x': e.pageX - pos.left, 'y': e.pageY - pos.top};
-    //     $.extend(document, {'move': true, 'move_target': this, 'call_down' : function(e, posix){
-    //             canvas.css({
-    //                 'cursor': 'move',
-    //                 'top': e.pageY - posix.y,
-    //                 'left': e.pageX - posix.x
-    //             });
-    //         }, 'call_up' : function(){
-    //             canvas.css('cursor', 'default');
-    //         }});
-    // })
-
-
-    function f_PanelCanvas_onmouseover() {
-        // console.log("进入")
-        PanelCanvas_move = false
-    }
-
-
-    function f_PanelCanvas_onmouseout() {
-        // console.log("出去")
-        PanelCanvas_move = true
-    }
-
-
-</script>
-<!--数据缓存-->
-<script>
-    var Public_Value_map = new Map();
-
-    //读取 同步缓存数据
-    function f_Public_Value_get(tab) {
-        if(Public_Value_map.has(tab)){                 //判断映射是否存在
-            return Public_Value_map.get(tab),true
-        }
-        return 0,false
-    }
-    //设置 同步缓存数据
-    function f_Public_Value_set(tab,value) {
-        Public_Value_map.set(tab,value);      //添加设置映射
-
-    }
-
-</script>
-
-<!--画板入口-->
-<script src="{{.OSS_Static}}/panel/PanelCanvas.js"></script>
-<script>
-    var V_PanelCanvas_Map = new Map();
-    // 层背景图片 回调函数
-    function f_Layer_background_picture(H_img_id) {
-        $('#UpLoadFile').click();
-        F_c = function(up_url) {
-            if (H_img_id.length > 1) {
-                $("#" + H_img_id).attr("src", up_url)
-            }
-        }
-    }
-    function f_PaneView_Get() {
-        $.ajax({
-            type: 'POST',
-            url: '../../Panel/PaneView_Get',//发送请求
-            data: {
-                T_viewid: "{{.T_viewid}}",
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    T_PanelCanvas = result.Data
-
-                    PanelCanvas_mode = T_PanelCanvas.T_mode
-                    console.log("PanelCanvas_mode:",PanelCanvas_mode)
-                    switch (PanelCanvas_mode) {
-                        case 0:
-                            f_PanelCanvas_mode_0(result)
-                            break
-                        case 1:
-                            f_PanelCanvas_mode_1(result)
-
-                            break
-                        case 2:
-                            f_PanelCanvas_mode_0(result)
-                            win_show() // 调整视图 大小
-                            break
-                    }
-
-                } else {
-                    layer.msg('视图获取错误!');
-                }
-            }
-        });
-    }
-
-    // 自由模式
-    function f_PanelCanvas_mode_0(result) {
-        T_PanelCanvas = result.Data
-        // CSS 样式
-        $('#PanelCanvas').css({
-            width: T_PanelCanvas.T_width + "px",
-            height: T_PanelCanvas.T_height + "px"
-        });
-
-        // CSS 自定义样式
-        f_Up_css(T_PanelCanvas.T_css,"PanelCanvas")
-
-        // 加载 组件
-        if(result.Data.T_text.length < 10 ){
-            return;
-        }
-        PaneView_json = JSON.parse(result.Data.T_text)
-        for(var i = 0;i < PaneView_json.length;i++){
-            Layer_Mould_json = PaneView_json[i]
-            console.log("创建面板 PaneView_json",Layer_Mould_json)
-
-            V_PanelCanvas = new f_canvas2(Layer_Mould_json.PanelCanvas_top,Layer_Mould_json.PanelCanvas_left,Layer_Mould_json.PanelCanvas_width, Layer_Mould_json.PanelCanvas_height, Layer_Mould_json.PanelCanvas_z, JSON.stringify(Layer_Mould_json.PanelCanvas_map), Layer_Mould_json.PanelCanvas_css)
-            V_PanelCanvas_Map.set(V_PanelCanvas.PanelCanvas_id,V_PanelCanvas)
-
-            for(var row_i = 0; row_i < Layer_Mould_json.Data_list.length; row_i++){
-                // rowjson = Layer_Mould_json.Data_list[i]
-                console.log("row json+ ",Layer_Mould_json.Data_list[row_i])
-                V_PanelCanvas.F_CreateBox(Layer_Mould_json.Data_list[row_i]);
-            }
-
-        }
-    }
-
-
-    // 瀑瀑模式
-    function f_PanelCanvas_mode_1(result){
-        T_PanelCanvas = result.Data
-        // CSS 样式
-        $('#PanelCanvas').css({
-            width: '100%',
-            height: '100%',
-            overflowX: "hidden",
-            overflowY: "auto",
-        });
-        // CSS 自定义样式
-        f_Up_css(T_PanelCanvas.T_css,"PanelCanvas")
-
-        // 加载 组件
-        if(result.Data.T_text.length < 10 ){
-            return;
-        }
-
-        // 获取数据源
-        T_PanelCanvas_T_data_list = []
-        if(T_PanelCanvas.T_data.search('http') >= 0){
-            // 接口
-
-        }else {
-            T_PanelCanvas_T_data_list = T_PanelCanvas.T_data.split("\n")
-
-        }
-        if(T_PanelCanvas_T_data_list.length == 0){
-            layer.msg('没有数据');
-            return;
-        }
-        console.log("T_PanelCanvas_T_data_list:",T_PanelCanvas_T_data_list)
-
-
-        PaneView_json = JSON.parse(T_PanelCanvas.T_text)
-        if(PaneView_json.length == 0){
-            layer.msg('没有面板');
-            return;
-        }
-        Layer_Mould_json = PaneView_json[0]
-        console.log("创建面板 PaneView_json",Layer_Mould_json)
-        //
-        console.log("PanelCanvas 宽度:",$("#PanelCanvas").width())
-        console.log("组件 高度:",Layer_Mould_json.PanelCanvas_height)
-
-        width_num = Math.floor($("#PanelCanvas").width()/Layer_Mould_json.PanelCanvas_width)
-        width_num_left = Math.floor(($("#PanelCanvas").width() - (width_num * Layer_Mould_json.PanelCanvas_width)) / width_num)
-        console.log("宽度数量:",width_num,"  每个左边距:",width_num_left)
-
-
-        P_top = 70  // 初始化 顶高度
-        P_top -= Number(Layer_Mould_json.PanelCanvas_height)  //
-        P_top -= Number(width_num_left)  //
-        P_left = 0
-        P_map = JSON.stringify(Layer_Mould_json.PanelCanvas_map)
-        P_map = JSON.parse(P_map)
-        console.log("P_map:",P_map)
-        for(var i = 0;i < T_PanelCanvas_T_data_list.length;i++){
-            P_map.sn_sn = T_PanelCanvas_T_data_list[i]
-            if(i % width_num == 0){
-
-                P_top += Number(Layer_Mould_json.PanelCanvas_height)
-                P_top += width_num_left
-
-                P_left = 0
-            }
-
-            P_left += Math.floor(width_num_left / 2)
-
-            V_PanelCanvas = new f_canvas2(P_top,P_left,Layer_Mould_json.PanelCanvas_width, Layer_Mould_json.PanelCanvas_height, Layer_Mould_json.PanelCanvas_z, JSON.stringify(P_map), Layer_Mould_json.PanelCanvas_css)
-            V_PanelCanvas_Map.set(V_PanelCanvas.PanelCanvas_id,V_PanelCanvas)
-
-            for(var row_i = 0; row_i < Layer_Mould_json.Data_list.length; row_i++){
-                // rowjson = Layer_Mould_json.Data_list[i]
-                console.log("row json+ ",Layer_Mould_json.Data_list[row_i])
-                V_PanelCanvas.F_CreateBox(Layer_Mould_json.Data_list[row_i]);
-            }
-
-            P_left += Number(Layer_Mould_json.PanelCanvas_width) + Math.floor(width_num_left / 2)
-        }
-
-    }
-
-</script>
-
-<!--发布订阅模式-->
-<script>
-    // 控制中心
-    var pubSub = {
-        list: {},
-        // 订阅
-        subscribe: function(key, fn) {
-            console.log("加入:",key)
-            if (!this.list[key]) this.list[key] = [];
-            this.list[key].push(fn);
-            key_list = key.split("/")
-            if(key_list[0].length > 3){
-                NewSubscribe(key_list[0]) // 订阅SN
-                f_Data_Read(key_list[0],key_list[1])
-            }
-        },
-        //取消订阅
-        unsubscribe: function(key, fn) {
-            let fnList = this.list[key];
-            if (!fnList) return false;
-            if (!fn) { // 不传入指定的方法,清空所用 key 下的订阅
-                fnList && (fnList.length = 0);
-            } else {
-                fnList.forEach((item, index) => {
-                    item === fn && fnList.splice(index, 1);
-                });
-            }
-        },
-        // 发布
-        publish: function(key, ...args) {
-            if (this.list[key]){
-
-                for (let fn of this.list[key]) fn.call(this, ...args);
-            }
-
-        }
-    }
-
-    function f_Data_Read(T_sn,T_tab) {
-        $.ajax({
-            type: 'POST',
-            url: '../../Device/Data_Read',//发送请求
-            data: {
-                T_sn: T_sn,
-                T_tab: T_tab,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    pubSub.publish(T_sn+'/'+T_tab, result.Data.T_value);
-                }
-            }
-        });
-    }
-
-</script>
-
-<!--websocket-->
-<script src="{{.OSS_Static}}/js/jquery.cookie.min.js"></script>
-<script>
-    var websocket = null;
-
-    //判断当前浏览器是否支持WebSocket
-    run_WebSocket()
-    function run_WebSocket() {
-        console.log("run_WebSocket");
-        if ('WebSocket' in window) {
-            url = window.location.host
-            if (url.indexOf("127.0.0.1") != -1) {
-                websocket = new WebSocket("ws://" + window.location.host + "/ws/join?User_tokey=" + $.cookie('User_tokey'));
-            } else {
-                websocket = new WebSocket("wss://" + window.location.host + "/ws/join?User_tokey=" + $.cookie('User_tokey'));
-            }
-
-        } else {
-            alert('Dont support websocket')
-        }
-    }
-
-    //连接成功建立的回调方法
-    websocket.onopen = function () {
-        console.log("websocket open");
-        // get_DeviceCh_List(0)
-
-        setTimeout(function(){
-            SubscribeSend()
-        },2000);
-
-        // send("{\"Sn\":\"" + getQueryString("Sn") + "\"}")
-    };
-
-    //接收到消息的回调方法
-    websocket.onmessage = function (event) {
-
-        var obj = JSON.parse(event.data);
-        // console.log(obj.type)
-        if(!SbscribeMap.has(obj.sn)){
-            console.log(obj.sn,"跳过。。  Device_Sn = ",obj.sn)
-            return
-        }
-        console.log("websocket:",event.data)
-        pubSub.publish(obj.sn+'/'+obj.tab, obj.value);
-        f_Public_Value_set(obj.sn+'/'+obj.tab, obj.value)
-        // op:类型u8,  //操作  0-主动上传  1-读  2- 写     3-成功  4-失败
-        switch (obj.op) {
-        case 3:
-            Del_Mid(obj.mid)
-            break;
-        case 4:
-            Err_Mid(obj.mid)
-            break;
-        }
-
-        // console.log(obj.sn,"进入。。  Device_Sn = ",obj.sn)
-        // Pu_DeviceCh_List_g(obj.sn,obj.tab,obj.value)
-
-        // if (obj.type == 0) {
-        //     // console.log("data.length:",obj.sensor.length)
-        //
-        //     Pu_DeviceCh_List_g(obj.sn, obj.sensor)
-        //
-        //     if (obj.type == 0) {
-        //         $("#T_time").html("刷新时间:" + dateChangeFormat_x('YYYY-mm-dd HH:MM:SS', obj.sensor[0].UT) + "   上传刷新间隔:" + Math.abs(timestamp_V - obj.sensor[0].UT).toFixed(0) + "s")
-        //
-        //         // console.log(timestamp_V, obj.sensor[0].UT, "   刷新间隔:" + (timestamp_V - obj.sensor[0].UT) + "s")
-        //         timestamp_V = obj.sensor[0].UT
-        //
-        //     }
-        //
-        //
-        // }
-        //
-
-    };
-
-    //连接关闭的回调方法
-    websocket.onclose = function () {
-        console.log("close");
-        // setTimeout(function () {
-        //     //要执行的代码
-        //     run_WebSocket();
-        // }, 2000);
-
-
-    };
-
-    //连接发生错误的回调方法
-    websocket.onerror = function () {
-        console.log("error");
-        setTimeout(function () {
-            //要执行的代码
-            run_WebSocket();
-        }, 2000);
-    };
-
-    //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
-    window.onbeforeunload = function () {
-        websocket.close();
-        console.log("窗口关闭事件");
-    };
-
-    //关闭连接
-    function closeWebSocket() {
-        websocket.close();
-        console.log("onbeforeunload");
-        window.clearInterval(intervalId);
-    }
-
-    //发送消息
-    function send(message) {
-        websocket.send(message);
-    }
-    var SbscribeMap = new Set();
-    // 订阅 SN
-    function Subscribe(SN) {
-        if(!SbscribeMap.has(SN)){
-            console.log("加入订阅:",SN)
-            SbscribeMap.add(SN)
-        }
-        //
-    }
-    // 订阅 SN
-    function NewSubscribe(SN) {
-        if(!SbscribeMap.has(SN)){
-            console.log("加入订阅:",SN)
-            SbscribeMap.add(SN)
-            send("{ \"Sn\":\""+SN+"\"}")
-        }
-        //
-    }
-    // 订阅 SN
-    function SubscribeSend() {
-        for (var SN of SbscribeMap) { // 遍历Set
-            send("{ \"Sn\":\""+SN+"\"}")
-        }
-        console.log("开始订阅:",SbscribeMap)
-    }
-
-
-</script>
-
-<!--远程执行-->
-<script>
-    var Data_Write_Map = new Map();
-    // 执行
-    function f_Data_Write(V_id,T_sn,T_tab,T_value) {
-        $.ajax({
-            type: 'POST',
-            url: '../../Device/Data_Write',//发送请求
-            async: false,
-            data: {
-                T_sn:T_sn,
-                T_tab:T_tab,
-                T_value:T_value,
-            },
-            success: function(result) {
-                console.log(result)
-                pubSub.publish(T_sn+'/'+T_tab, T_value);
-                f_Public_Value_set(T_sn+'/'+T_tab, T_value)  //同步缓存数据
-
-                Data_Write_Map.set(result.Data,{V_id:V_id,Munm:1});
-
-            }
-        });
-    }
-
-    setInterval(function(){
-        // 遍历
-        $(".Mid").remove() //  清空
-        for(let [Mid,v] of Data_Write_Map) {
-            console.log("Mid:", Mid,v);
-            Data_Write_Map.set(Mid,{V_id:v.V_id,Munm:v.Munm + 1});
-            if(v.Munm > 3 && v.Munm < 20 && v.Munm % 2 == 0){
-                $("body").append('<div class="Mid" style="user-select: none;position: absolute;left: '+$("#"+v.V_id).offset().left+'px;top: '+$("#"+v.V_id).offset().top+'px;z-index: 999999999999999;width: 20px;height: 20px;background-color:rgb(255, 0, 0);border-radius: 25px;"></div>')
-            }
-
-            if(v.Munm > 10){
-                Del_Mid(Mid)
-            }
-        }
-    },1000);
-
-    
-    function Del_Mid(Mid) {
-        if(Data_Write_Map.has(Mid)){                 //判断映射是否存在
-            // console.log("delete:",Data_Write_Map.get(Data_Write_Map))
-            Data_Write_Map.delete(Mid);
-        }
-    }
-
-    function Err_Mid(Mid) {
-        // if(Data_Write_Map.has(Mid)){                 //判断映射是否存在
-        //     console.log(Data_Write_Map.get(Data_Write_Map))
-        // }
-    }
-
-</script>
-
-<script>
-    function detectZoom (){
-        var ratio = 0,
-            screen = window.screen,
-            ua = navigator.userAgent.toLowerCase();
-
-        if (window.devicePixelRatio !== undefined) {
-            ratio = window.devicePixelRatio;
-        }
-        else if (~ua.indexOf('msie')) {
-            if (screen.deviceXDPI && screen.logicalXDPI) {
-                ratio = screen.deviceXDPI / screen.logicalXDPI;
-            }
-        }
-        else if (window.outerWidth !== undefined && window.innerWidth !== undefined) {
-            ratio = window.outerWidth / window.innerWidth;
-        }
-
-        if (ratio){
-            ratio = Math.round(ratio * 100);
-        }
-
-        return ratio;
-    };
-
-</script>
-
-
-</body>
-</html>

+ 0 - 825
views/Panel/Index_plan.html

@@ -1,825 +0,0 @@
-<!doctype html>
-<html>
-<title>宝智达物联网平台</title>
-<head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-    <script type="text/javascript" src="{{.OSS_Static}}/panel/jquery.min.js"></script>
-    <script type="text/javascript" src="{{.OSS_Static}}/panel/layer/layer.js"></script>
-    <script type="text/javascript" src="{{.OSS_Static}}/panel/context/context.js"></script>
-    <script type="text/javascript" src="{{.OSS_Static}}/panel/drag.js"></script>
-    <link rel="stylesheet" type="text/css" href="{{.OSS_Static}}/panel/context/context.standalone.css">
-    <!--右侧菜单-->
-    <link rel="stylesheet" type="text/css" href="{{.OSS_Static}}/panel/SlidePushMenus/css/default.css"/>
-    <link rel="stylesheet" type="text/css" href="{{.OSS_Static}}/panel/SlidePushMenus/css/component.css"/>
-    <script src="{{.OSS_Static}}/panel/SlidePushMenus/js/modernizr.custom.js"></script>
-    <script src="{{.OSS_Static}}/panel/SlidePushMenus/js/classie.js"></script>
-    <meta name="page-view-size" content="2920*1080" />
-    <link rel="stylesheet" type="text/css" href="https://www.jq22.com/demo/csstoggle202003032356/style.css"/>
-
-    <style type="text/css">
-        html, body {
-            margin: 0;
-            padding: 0;
-            overflow: hidden;
-        }
-
-        .transparent {
-            filter: alpha(opacity=50);
-            -moz-opacity: 0.5;
-            -khtml-opacity: 0.5;
-            /*opacity: 0.5; // 模糊*/
-        }
-
-        .box {
-            width: 200px;
-            height: 100px;
-            cursor: move;
-            position: absolute;
-            top: 30px;
-            left: 30px;
-            z-index: 99;
-        }
-
-        .box .bg {
-            width: 100%;
-            height: 100%;
-            background-color: orange;
-        }
-
-        .box .coor {
-            width: 10px;
-            height: 10px;
-            overflow: hidden;
-            cursor: se-resize;
-            position: absolute;
-            right: 0;
-            bottom: 0;
-            background-color: red;
-            z-index: 9999999999;
-        }
-
-        .box .content {
-            position: absolute;
-            left: 50%;
-            top: 50%;
-            z-index: 99;
-            text-align: center;
-            font: bold 14px/1.5em simsun;
-        }
-
-        #debug {
-            position: absolute;
-            right: 10px;
-            top: 10px;
-            z-index: 88;
-            border: 1px solid #ccc;
-            width: 100px;
-            height: 100px;
-            background: #fff;
-        }
-
-        #toolbar {
-            position: absolute;
-            left: 10px;
-            top: 10px;
-            z-index: 88;
-        }
-
-    </style>
-
-    <style>
-
-
-        .help-left {
-            width: 310px;
-            font-family: 'microsoft YaHei';
-            float: left;
-            overflow-x: hidden;
-            max-height: 100%;
-            overflow-y: auto;
-        }
-
-        .menu {
-            border-left: 1px solid #ccc;
-            border-right: 1px solid #ccc;
-            background-color:#FEFEFE;
-            width:100%;
-            float: left;
-        }
-
-        .menu:last-child {
-            border-bottom: 1px solid #ccc;
-        }
-
-
-        .menu summary {
-            height: 40px;
-            line-height: 40px;
-            text-indent: 10px;
-            outline: none;
-            font-size: 14px;
-            font-weight: 700;
-            border-top: 1px solid #ddd;
-            background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #FEFEFE), color-stop(1, #CCCCCC));
-            cursor: pointer;
-            width:100%;
-            float: left;
-            text-align: left;
-        }
-
-
-        .menu summary::-webkit-details-marker {
-            display: none;
-
-        }
-
-
-
-
-        .menu .divul {
-
-            padding: 10px 0;
-            clear:left;
-            width:100%;
-            float: left;
-            margin-left: 1px;
-        }
-
-
-        .menu .divulli {
-            padding: 10px 0;
-            width:97px;
-            height: 100px;
-            float: left;
-            cursor: move;
-        }
-        .menu .divulli img {
-            width:60px;
-            height:60px;
-            -webkit-user-select: none;
-            cursor: default;
-            pointer-events: none;
-        }
-        .menu .divulli div {
-            width:97%;
-            margin-top:-8px;
-            overflow: hidden;
-            text-overflow: ellipsis;
-            white-space: nowrap;
-            text-align: center;
-            display:inline-block
-        }
-        .menu .divulli pre {
-            width:0px;
-            height:0px;
-            overflow: hidden;
-        }
-        .menu .divulli:hover {
-            background-color: #ececec;
-            /*text-decoration: underline;*/
-
-        }
-
-    </style>
-
-    <style>
-
-        #tab-header span {
-            padding: 0px 10px ;
-            height: 38px;
-            font-size: 20px;
-            border-radius: 5px;
-            padding-bottom: 10px;
-            padding-top: 4px;
-        }
-
-        #tab-content .dom {
-            display: none;
-        }
-
-
-        .open_layer_layui-layer-input {
-            /*display: block;*/
-            width: 220px;
-            height: 30px;
-            margin: 0 auto;
-            line-height: 30px;
-            padding: 0 5px;
-            border: 1px solid #ccc;
-            box-shadow: 1px 1px 5px rgba(0, 0, 0, .1) inset;
-            color: #333;
-            user-select: auto;
-        }
-        #open_layer_save_layer button {
-            display: block;
-            height: 38px;
-            line-height: 38px;
-            border: 1px solid transparent;
-            padding: 0 18px;
-            margin: 20px auto;
-            background-color: #1E9FFF;;
-            color: #fff;
-            white-space: nowrap;
-            text-align: center;
-            font-size: 14px;
-            border-radius: 2px;
-            cursor: pointer;
-        }
-        .layer_tool_tab{
-            position: absolute;
-            top: 10px;
-            right: 10px;
-            /*background:#FFF;*/
-            width: 80px;
-            height: 30px;
-            z-index:999999999999999999999;
-        }
-        .layer_tool_tab button {
-            height: 28px;
-            line-height: 28px;
-            float: left;
-            border: 1px solid transparent;
-            padding: 0 18px;
-            margin: 1px;
-            background-color: #1E9FFF;;
-            color: #fff;
-            white-space: nowrap;
-            text-align: center;
-            font-size: 12px;
-            border-radius: 2px;
-            cursor: pointer;
-        }
-        .layer_tool_tab  button:hover {
-            background-color: #0092ff;;
-            font-size: 12px;
-        }
-
-        .PanelCanvas_div{
-            cursor: default;
-            user-select: none;
-            position: absolute;
-            border: 2px dashed transparent;
-            /*padding: 10px;*/
-        }
-
-        .PanelCanvas_rel_div{
-            border: 2px dashed transparent;
-        }
-
-        .gridbackground { /*网格背景*/
-            /*!*90度直线,100灰度,0.1透明度,5%宽度,0透明度背景*!*/
-            /*background: linear-gradient(90deg, rgba(141, 128, 128, 0.1) 5%, transparent 0),*/
-            /*    !*0度直线,100灰度,0.1透明度,5%宽度,0透明度背景*!*/
-            /*linear-gradient(rgba(100, 100, 100, 0.1) 5%, transparent 0);*/
-            /*!*横纵向宽距*!*/
-            /*background-size: 20px 20px;*/
-        }
-    </style>
-
-
-    <style>
-        /*#open_layer_Class select {*/
-        /*    margin-top: 2px;*/
-        /*    appearance: none;*/
-        /*    -webkit-appearance: none;*/
-        /*    -moz-appearance: none;*/
-        /*    border: 1px solid #e1e1e1;*/
-        /*    border-radius: 4px;*/
-        /*    height: 2.2em;*/
-        /*    padding: 0 24px 0 8px;*/
-        /*    font-family: inherit;*/
-        /*    color: #666;*/
-        /*    cursor: pointer;*/
-        /*    position: relative;*/
-        /*    background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAASFBMVEUAAAD////Nzc3Nzc3V1dXNzc3MzMzMzMzMzMzNzc3Ozs7j4+PMzMzMzMzMzMzPz8/MzMzNzc3Ozs7Ozs7MzMzNzc3Nzc3Nzc1mbvnCAAAAGHRSTlMAAymOBrtVs9RlPgnPltxPlWwvRJzBt+CSuXutAAAAM0lEQVR4nGMYBbgALycjiGIUZEaTEBLl4WJgEOZgZcLQwybOLsbHj800bhEBFqo7cfACACvdARau8cpxAAAAAElFTkSuQmCC') no-repeat right center;*/
-        /*}*/
-
-        .layui-layer-iframe iframe {
-            display: block;
-            width: 100%;
-            height: 600px;
-        }
-    </style>
-
-
-
-</head>
-
-<body>
-
-<input hidden type="file" id="UpLoadFile"/>
-
-<div id="PanelCanvas" class="gridbackground" draggable="false" style="user-select: none;height: 4000px;width: 4000px;position: absolute;left: 0px;top: 0px;background-color: #f0f0f0">
-
-
-</div>
-
-
-{{if le .admin_r.Admin_power  6}}
-<div class="layer_tool_tab" >
-    <button onclick="f_PaneView_E();">编辑</button>
-</div>
-<script>
-    // 切换编辑
-    function f_PaneView_E() {
-        ToUrl = encodeURIComponent('../..'+window.location.pathname+'?T_viewid='+"{{.T_viewid}}")
-        window.location.href='PaneView_E?T_viewid='+"{{.T_viewid}}"+"&ToUrl="+ToUrl
-    }
-
-</script>
-{{end}}
-
-<!--页面 加载完成后执行-->
-<script>
-    var OSS_Static = "{{.OSS_Static}}"
-    var USER_UUID = "{{.USER_UUID}}"  // 全局 USER_UUID
-    var PanelCanvas_lock = true; //区块锁定标识
-    var PanelCanvas_mode = 0; //0 自由模式    1 瀑瀑模式
-
-    // 页面 加载完成后执行
-    window.onload = function () {
-        console.log("页面 加载完成后执行")
-
-        $('img').on('dragstart', function(event) { event.preventDefault(); });
-        f_PaneView_Get()
-
-    }
-
-    // 调整视图 大小
-    function win_show() {
-
-        PC_width = parseFloat($("#PanelCanvas").css("width"))
-        PC_height = parseFloat($("#PanelCanvas").css("height"))
-
-
-
-        setInterval(function(){
-
-            Width = $(window).width();
-            Height = $(window).height();
-            //
-            // console.log("W:",Width,Height)
-            // console.log("PC:",PC_width,PC_height)
-            //
-            // console.log("X:",Width/PC_width)
-            // console.log("Y:",Height/PC_height)
-            //
-
-            $("#PanelCanvas").css({
-                'transform': 'scale('+Width/PC_width+', '+Height/PC_height+')',
-                'transform-origin': '0 0'
-            });
-        },500);
-
-
-    }
-</script>
-
-<!--移动面板-->
-<script>
-    //创建拖拽方法
-    PanelCanvas_move = true
-
-    // $("#PanelCanvas").mousedown(function(e){
-    //     if(!PanelCanvas_move){return;}
-    //
-    //     var canvas = $(this);
-    //     var pos = $(this).position();
-    //     this.posix = {'x': e.pageX - pos.left, 'y': e.pageY - pos.top};
-    //     $.extend(document, {'move': true, 'move_target': this, 'call_down' : function(e, posix){
-    //             canvas.css({
-    //                 'cursor': 'move',
-    //                 'top': e.pageY - posix.y,
-    //                 'left': e.pageX - posix.x
-    //             });
-    //         }, 'call_up' : function(){
-    //             canvas.css('cursor', 'default');
-    //         }});
-    // })
-
-
-    function f_PanelCanvas_onmouseover() {
-        // console.log("进入")
-        PanelCanvas_move = false
-    }
-
-
-    function f_PanelCanvas_onmouseout() {
-        // console.log("出去")
-        PanelCanvas_move = true
-    }
-
-
-</script>
-<!--数据缓存-->
-<script>
-    var Public_Value_map = new Map();
-
-    //读取 同步缓存数据
-    function f_Public_Value_get(tab) {
-        if(Public_Value_map.has(tab)){                 //判断映射是否存在
-            return Public_Value_map.get(tab),true
-        }
-        return 0,false
-    }
-    //设置 同步缓存数据
-    function f_Public_Value_set(tab,value) {
-        Public_Value_map.set(tab,value);      //添加设置映射
-
-    }
-
-</script>
-
-<!--画板入口-->
-<script src="{{.OSS_Static}}/panel/PanelCanvas.js"></script>
-<script>
-    // "#canvas"
-    //
-    // V_PanelCanvas1 =
-    // V_PanelCanvas2 = f_canvas2(500,500,"{{.OSS_Static}}/images/demo_picture.jpg")
-    var V_PanelCanvas_Map = new Map();
-    //
-    // V_PanelCanvas = new f_canvas2(500, 500, "{{.OSS_Static}}/images/demo_picture.jpg", 1, "{\"sn_sn\":\"866222050911984\",\"tab_tab\":\"v_do_2\",\"text1_text\":\"替换的文本\"}")
-    // V_PanelCanvas_Map.set(V_PanelCanvas.PanelCanvas_id,V_PanelCanvas)
-    // //测试加载
-    // var loadData = [
-    //
-    //     {text: "A0000001v_xx_7", rotate: 0, color: "rgb(255, 165, 0)", height: 70, width: 77, pageX: 89, pageY: 39}];
-    // $.each(loadData, function (i, row) {
-    //     V_PanelCanvas.F_CreateBox(row);
-    // });
-    //
-    //
-    // V_PanelCanvas = new f_canvas2(500, 500, "{{.OSS_Static}}/images/demo_picture.jpg", 1, "{\"sn_sn\":\"866222050911984\"}")
-    // V_PanelCanvas_Map.set(V_PanelCanvas.PanelCanvas_id,V_PanelCanvas)
-    // var loadData = [
-    //     {text: "A0000001v_xx_1", rotate: 1, color: "rgb(255, 255, 0)", height: 70, width: 77, pageX: 29, pageY: 64}
-    // ];
-    // $.each(loadData, function (i, row) {
-    //     V_PanelCanvas.F_CreateBox(row);
-    // });
-    // var V_PanelCanvas1 = new Function(f_canvas(500,500,"{{.OSS_Static}}/images/demo_picture.jpg"))
-    // var V_PanelCanvas2 = new Function(f_canvas(500,500,"{{.OSS_Static}}/images/demo_picture.jpg"))
-
-
-    Height = $(window).height();
-    $("#PanelTool_Device_List").css("height",(Height-125)+"px")
-    function f_PaneView_Get() {
-        $.ajax({
-            type: 'POST',
-            url: '../../Panel/PaneView_Get',//发送请求
-            data: {
-                T_viewid: "{{.T_viewid}}",
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    T_PanelCanvas = result.Data
-                    PanelCanvas_mode = T_PanelCanvas.T_mode
-                    f_PanelCanvas_mode_0(result)
-
-
-                    switch (PanelCanvas_mode) {
-                        case 0:
-                            $("#PanelCanvas_mode").html("自由模式")
-                            break
-                        case 1:
-                            $("#PanelCanvas_mode").html("瀑瀑模式")
-
-                            break
-                        case 2:
-                            $("#PanelCanvas_mode").html("满屏模式")
-                            win_show() // 调整视图 大小
-                            break
-                    }
-
-                    $("#PanelCanvas_wh").html("["+T_PanelCanvas.T_width+"*"+T_PanelCanvas.T_height+"]")
-                } else {
-                    layer.msg('视图获取错误!');
-                    setTimeout(function(){
-                        //要执行的代码
-                        f_PaneView_Get()
-
-                    },2000);
-                }
-            }
-        });
-    }
-
-    // 自由模式
-    function f_PanelCanvas_mode_0(result) {
-        T_PanelCanvas = result.Data
-        // CSS 样式
-        $('#PanelCanvas').css({
-            width: T_PanelCanvas.T_width + "px",
-            height: T_PanelCanvas.T_height + "px"
-        });
-
-        // CSS 自定义样式
-        f_Up_css(T_PanelCanvas.T_css,"PanelCanvas")
-
-        // 加载 组件
-        if(result.Data.T_text.length < 10 ){
-            return;
-        }
-        PaneView_json = JSON.parse(result.Data.T_text)
-        for(var i = 0;i < PaneView_json.length;i++){
-            Layer_Mould_json = PaneView_json[i]
-            console.log("创建面板 PaneView_json",Layer_Mould_json)
-
-            V_PanelCanvas = new f_canvas2(Layer_Mould_json.PanelCanvas_top,Layer_Mould_json.PanelCanvas_left,Layer_Mould_json.PanelCanvas_width, Layer_Mould_json.PanelCanvas_height, Layer_Mould_json.PanelCanvas_z, JSON.stringify(Layer_Mould_json.PanelCanvas_map), Layer_Mould_json.PanelCanvas_css)
-            V_PanelCanvas_Map.set(V_PanelCanvas.PanelCanvas_id,V_PanelCanvas)
-
-            for(var row_i = 0; row_i < Layer_Mould_json.Data_list.length; row_i++){
-                // rowjson = Layer_Mould_json.Data_list[i]
-                console.log("row json+ ",Layer_Mould_json.Data_list[row_i])
-                V_PanelCanvas.F_CreateBox(Layer_Mould_json.Data_list[row_i]);
-            }
-
-        }
-    }
-
-
-    // 瀑瀑模式
-    function f_PanelCanvas_mode_1(result){
-        T_PanelCanvas = result.Data
-        // CSS 样式
-        $('#PanelCanvas').css({
-            width: '100%',
-            height: '100%',
-            overflowX: "hidden",
-            overflowY: "auto",
-        });
-        // CSS 自定义样式
-        f_Up_css(T_PanelCanvas.T_css,"PanelCanvas")
-
-        // 加载 组件
-        if(result.Data.T_text.length < 10 ){
-            return;
-        }
-        PaneView_json = JSON.parse(result.Data.T_text)
-        for(var i = 0;i < PaneView_json.length;i++){
-            Layer_Mould_json = PaneView_json[i]
-            console.log("创建面板 PaneView_json",Layer_Mould_json)
-
-            V_PanelCanvas = new f_canvas2(Layer_Mould_json.PanelCanvas_top,Layer_Mould_json.PanelCanvas_left,Layer_Mould_json.PanelCanvas_width, Layer_Mould_json.PanelCanvas_height, Layer_Mould_json.PanelCanvas_z, JSON.stringify(Layer_Mould_json.PanelCanvas_map), Layer_Mould_json.PanelCanvas_css)
-            V_PanelCanvas_Map.set(V_PanelCanvas.PanelCanvas_id,V_PanelCanvas)
-
-            for(var row_i = 0; row_i < Layer_Mould_json.Data_list.length; row_i++){
-                // rowjson = Layer_Mould_json.Data_list[i]
-                console.log("row json+ ",Layer_Mould_json.Data_list[row_i])
-                V_PanelCanvas.F_CreateBox(Layer_Mould_json.Data_list[row_i]);
-            }
-
-        }
-    }
-    function f_PaneView_Save(T_text) {
-        $.ajax({
-            type: 'POST',
-            url: '../../Panel/PaneView_Post',//发送请求
-            data: {
-                T_viewid: "{{.T_viewid}}",
-                T_text: T_text,
-                T_mode: T_PanelCanvas.T_mode,
-                T_width: T_PanelCanvas.T_width,
-                T_height: T_PanelCanvas.T_height,
-                T_css: T_PanelCanvas.T_css,
-                T_data: T_PanelCanvas.T_data,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    layer.msg('保存成功!');
-                } else {
-                    layer.msg('保存失败!');
-                }
-            }
-        });
-    }
-
-
-</script>
-
-<!--发布订阅模式-->
-<script>
-    // 控制中心
-    var pubSub = {
-        list: {},
-        // 订阅
-        subscribe: function(key, fn) {
-            console.log("加入:",key)
-
-            Public_V = f_Public_Value_get(key)
-            if (Public_V.is){
-                this.publish(key,Public_V.V)
-            }
-            if (!this.list[key]) this.list[key] = [];
-            this.list[key].push(fn);
-            key_list = key.split("/")
-            if(key_list[0].length > 3){
-                NewSubscribe(key_list[0]) // 订阅SN
-            }
-
-
-
-        },
-        //取消订阅
-        unsubscribe: function(key, fn) {
-            let fnList = this.list[key];
-            if (!fnList) return false;
-            if (!fn) { // 不传入指定的方法,清空所用 key 下的订阅
-                fnList && (fnList.length = 0);
-            } else {
-                fnList.forEach((item, index) => {
-                    item === fn && fnList.splice(index, 1);
-                });
-            }
-        },
-        // 发布
-        publish: function(key, ...args) {
-            if (this.list[key]){
-                for (let fn of this.list[key]) fn.call(this, ...args);
-            }
-
-        }
-    }
-
-    function f_Data_Read(T_sn) {
-        T_sn_list = T_sn.split("-")
-        $.ajax({
-            type: 'POST',
-            url: '../../Data/Device_Sensor',//发送请求
-            data: {
-                T_sn: T_sn_list[0],
-                T_id: T_sn_list[1],
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    for (const [key, value] of Object.entries(result.Data)) {
-                        // console.log(key,value);
-                        pubSub.publish(T_sn+"/"+key, value);
-                        f_Public_Value_set(T_sn+"/"+key, value)
-                    }
-                }
-            }
-        });
-    }
-
-</script>
-
-<!--websocket-->
-<script src="{{.OSS_Static}}/js/jquery.cookie.min.js"></script>
-<script>
-    var websocket = null;
-
-    //判断当前浏览器是否支持WebSocket
-    run_WebSocket()
-    function run_WebSocket() {
-        console.log("run_WebSocket");
-        if ('WebSocket' in window) {
-            url = window.location.host
-            if (url.indexOf("baozhida") != -1) {
-                websocket = new WebSocket("wss://" + window.location.host + "/wsPanel/join?User_tokey=" + $.cookie('User_tokey'));
-            } else {
-
-                websocket = new WebSocket("ws://" + window.location.host + "/wsPanel/join?User_tokey=" + $.cookie('User_tokey'));
-            }
-
-        } else {
-            alert('Dont support websocket')
-        }
-    }
-
-    //连接成功建立的回调方法
-    websocket.onopen = function () {
-        console.log("websocket open");
-        // get_DeviceCh_List(0)
-
-        setTimeout(function(){
-            SubscribeSend()
-        },2000);
-
-        // send("{\"Sn\":\"" + getQueryString("Sn") + "\"}")
-    };
-
-    //接收到消息的回调方法
-    websocket.onmessage = function (event) {
-        // console.log("websocket:",event.data)
-        var obj = JSON.parse(event.data);
-        console.log("websocket:",obj)
-        if(obj.Code == 200){
-            return
-        }
-        sn_id = obj.T_sn+"-"+obj.T_id
-
-        for (const [key, value] of Object.entries(obj)) {
-            // console.log(key,value);
-            pubSub.publish(sn_id+"/"+key, value);
-            f_Public_Value_set(sn_id+"/"+key, value)
-        }
-
-        // pubSub.publish(sn_id+'/'+obj.tab, obj.value);
-
-        // // op:类型u8,  //操作  0-主动上传  1-读  2- 写     3-成功  4-失败
-        // switch (obj.op) {
-        //     case 3:
-        //         Del_Mid(obj.mid)
-        //         break;
-        //     case 4:
-        //         Err_Mid(obj.mid)
-        //         break;
-        // }
-        // console.log(obj.sn,"进入。。  Device_Sn = ",obj.sn)
-        // Pu_DeviceCh_List_g(obj.sn,obj.tab,obj.value)
-        //
-        // if (obj.type == 0) {
-        //     // console.log("data.length:",obj.sensor.length)
-        //
-        //     Pu_DeviceCh_List_g(obj.sn, obj.sensor)
-        //
-        //     if (obj.type == 0) {
-        //         $("#T_time").html("刷新时间:" + dateChangeFormat_x('YYYY-mm-dd HH:MM:SS', obj.sensor[0].UT) + "   上传刷新间隔:" + Math.abs(timestamp_V - obj.sensor[0].UT).toFixed(0) + "s")
-        //
-        //         // console.log(timestamp_V, obj.sensor[0].UT, "   刷新间隔:" + (timestamp_V - obj.sensor[0].UT) + "s")
-        //         timestamp_V = obj.sensor[0].UT
-        //
-        //     }
-        //
-        //
-        // }
-
-
-    };
-
-    //连接关闭的回调方法
-    websocket.onclose = function () {
-        console.log("close");
-        // setTimeout(function () {
-        //     //要执行的代码
-        //     run_WebSocket();
-        // }, 2000);
-
-
-    };
-
-    //连接发生错误的回调方法
-    websocket.onerror = function () {
-        console.log("error");
-        setTimeout(function () {
-            //要执行的代码
-            run_WebSocket();
-        }, 2000);
-    };
-
-    //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
-    window.onbeforeunload = function () {
-        websocket.close();
-        console.log("窗口关闭事件");
-    };
-
-    //关闭连接
-    function closeWebSocket() {
-        websocket.close();
-        console.log("onbeforeunload");
-        window.clearInterval(intervalId);
-    }
-
-    //发送消息
-    function send(message) {
-        websocket.send(message);
-    }
-    var SbscribeMap = new Set();
-    // 订阅 SN
-    function Subscribe(SN) {
-        if(!SbscribeMap.has(SN)){
-            console.log("加入订阅:",SN)
-            SbscribeMap.add(SN)
-        }
-        //
-    }
-    // 订阅 SN
-    function NewSubscribe(SN) {
-        if(!SbscribeMap.has(SN)){
-            console.log("加入订阅:",SN)
-            SbscribeMap.add(SN)
-            send("{ \"Sn\":\""+SN+"\"}")
-            f_Data_Read(SN)
-        }
-        //
-    }
-    // 订阅 SN
-    function SubscribeSend() {
-        for (var SN of SbscribeMap) { // 遍历Set
-            send("{ \"Sn\":\""+SN+"\"}")
-        }
-        console.log("开始订阅:",SbscribeMap)
-    }
-
-
-</script>
-
-
-
-</body>
-</html>

+ 0 - 2493
views/Panel/PanelE.html

@@ -1,2493 +0,0 @@
-<!doctype html>
-<html>
-<title>宝智达物联网平台-面板编辑器</title>
-<head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-    <script type="text/javascript" src="{{.OSS_Static}}/panel/jquery.min.js"></script>
-    <script type="text/javascript" src="{{.OSS_Static}}/panel/layer/layer.js"></script>
-    <script type="text/javascript" src="{{.OSS_Static}}/panel/context/context.js"></script>
-    <script type="text/javascript" src="{{.OSS_Static}}/panel/drag.js"></script>
-    <link rel="stylesheet" type="text/css" href="{{.OSS_Static}}/panel/context/context.standalone.css">
-    <!--右侧菜单-->
-    <link rel="stylesheet" type="text/css" href="{{.OSS_Static}}/panel/SlidePushMenus/css/default.css"/>
-    <link rel="stylesheet" type="text/css" href="{{.OSS_Static}}/panel/SlidePushMenus/css/component.css"/>
-    <script src="{{.OSS_Static}}/panel/SlidePushMenus/js/modernizr.custom.js"></script>
-    <script src="{{.OSS_Static}}/panel/SlidePushMenus/js/classie.js"></script>
-    <!--    <script src="{{.OSS_Static}}/panel/toggle/togglestyle.css"></script>-->
-    <link rel="stylesheet" type="text/css" href="https://www.jq22.com/demo/csstoggle202003032356/style.css"/>
-
-
-
-    <style type="text/css">
-        html, body {
-            margin: 0;
-            padding: 0;
-            overflow: hidden;
-        }
-
-
-        .transparent {
-            filter: alpha(opacity=50);
-            -moz-opacity: 0.5;
-            -khtml-opacity: 0.5;
-            /*opacity: 0.5; // 模糊*/
-        }
-
-        .box {
-            width: 200px;
-            height: 100px;
-            cursor: move;
-            position: absolute;
-            top: 30px;
-            left: 30px;
-            z-index: 99;
-        }
-
-        .box .bg {
-            width: 100%;
-            height: 100%;
-            background-color: orange;
-        }
-
-        .box .coor {
-            width: 10px;
-            height: 10px;
-            overflow: hidden;
-            cursor: se-resize;
-            position: absolute;
-            right: 0;
-            bottom: 0;
-            background-color: red;
-            z-index: 9999999999;
-        }
-
-        .box .content {
-            position: absolute;
-            left: 50%;
-            top: 50%;
-            z-index: 99;
-            text-align: center;
-            font: bold 14px/1.5em simsun;
-        }
-
-        #debug {
-            position: absolute;
-            right: 10px;
-            top: 10px;
-            z-index: 88;
-            border: 1px solid #ccc;
-            width: 100px;
-            height: 100px;
-            background: #fff;
-        }
-
-        #toolbar {
-            position: absolute;
-            left: 10px;
-            top: 10px;
-            z-index: 88;
-        }
-
-    </style>
-
-    <style>
-
-
-        .help-left {
-            width: 310px;
-            font-family: 'microsoft YaHei';
-            float: left;
-            overflow-x: hidden;
-            max-height: 100%;
-            overflow-y: auto;
-        }
-
-        .menu {
-            border-left: 1px solid #ccc;
-            border-right: 1px solid #ccc;
-            background-color:#FEFEFE;
-            width:100%;
-            float: left;
-        }
-
-        .menu:last-child {
-            border-bottom: 1px solid #ccc;
-        }
-
-
-        .menu summary {
-            height: 40px;
-            line-height: 40px;
-            text-indent: 10px;
-            outline: none;
-            font-size: 14px;
-            font-weight: 700;
-            border-top: 1px solid #ddd;
-            background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #FEFEFE), color-stop(1, #CCCCCC));
-            cursor: pointer;
-            width:100%;
-            float: left;
-            text-align: left;
-        }
-
-
-        .menu summary::-webkit-details-marker {
-            display: none;
-
-        }
-
-
-
-
-        .menu .divul {
-
-            padding: 10px 0;
-            clear:left;
-            width:100%;
-            float: left;
-            margin-left: 1px;
-        }
-
-
-        .menu .divulli {
-            padding: 10px 0;
-            width:97px;
-            height: 100px;
-            float: left;
-            cursor: move;
-        }
-        .menu .divulli img {
-            width:60px;
-            height:60px;
-            -webkit-user-select: none;
-            cursor: default;
-            pointer-events: none;
-        }
-        .menu .divulli div {
-            width:97%;
-            margin-top:-8px;
-            overflow: hidden;
-            text-overflow: ellipsis;
-            white-space: nowrap;
-            text-align: center;
-            display:inline-block
-        }
-        .menu .divulli pre {
-            width:0px;
-            height:0px;
-            overflow: hidden;
-        }
-        .menu .divulli:hover {
-            background-color: #ececec;
-            /*text-decoration: underline;*/
-
-        }
-
-    </style>
-
-    <style>
-
-        #tab-header span {
-
-            padding: 0px 10px ;
-            height: 38px;
-            font-size: 20px;
-            border-radius: 5px;
-            padding-bottom: 10px;
-            padding-top: 4px;
-        }
-
-        #tab-content .dom {
-            display: none;
-        }
-
-
-        .open_layer_layui-layer-input {
-            /*display: block;*/
-            width: 220px;
-            height: 30px;
-            margin: 0 auto;
-            line-height: 30px;
-            padding: 0 5px;
-            border: 1px solid #ccc;
-            box-shadow: 1px 1px 5px rgba(0, 0, 0, .1) inset;
-            color: #333;
-            user-select: auto;
-        }
-        #open_layer_save_layer button {
-            display: block;
-            height: 38px;
-            line-height: 38px;
-            border: 1px solid transparent;
-            padding: 0 18px;
-            margin: 20px auto;
-            background-color: #1E9FFF;;
-            color: #fff;
-            white-space: nowrap;
-            text-align: center;
-            font-size: 14px;
-            border-radius: 2px;
-            cursor: pointer;
-        }
-        .layer_mode_tab{
-            position: absolute;
-            bottom: 0px;
-            right: 300px;
-            background-color: #9AD4FF69;
-            color: #0093FF;
-            padding: 6px;
-            height: 23px;
-            z-index:999999999999999999999;
-            border-radius: 5px;
-        }
-        .layer_tool_tab{
-            position: absolute;
-            top: 0;
-            left: 10px;
-            /*background:#FFF;*/
-            width: 100%;
-            height: 30px;
-            z-index:999999999999999999999;
-        }
-        .layer_tool_tab button {
-            height: 28px;
-            line-height: 28px;
-            float: left;
-            border: 1px solid transparent;
-            padding: 0 18px;
-            margin: 1px;
-            background-color: #1E9FFF;;
-            color: #fff;
-            white-space: nowrap;
-            text-align: center;
-            font-size: 12px;
-            border-radius: 2px;
-            cursor: pointer;
-        }
-        .layer_tool_tab  button:hover {
-            background-color: #0092ff;;
-            font-size: 12px;
-        }
-
-        .PanelCanvas_div{
-            cursor: default;
-            user-select: none;
-            position: absolute;
-            border: 2px dashed rgb(204, 204, 204);
-            /*padding: 10px;*/
-        }
-
-        .PanelCanvas_rel_div{
-            border: 2px dashed rgb(204, 204, 204);
-        }
-
-        .gridbackground { /*网格背景*/
-            /*90度直线,100灰度,0.1透明度,5%宽度,0透明度背景*/
-            background: linear-gradient(90deg, rgba(141, 128, 128, 0.1) 5%, transparent 0),
-                /*0度直线,100灰度,0.1透明度,5%宽度,0透明度背景*/
-            linear-gradient(rgba(100, 100, 100, 0.1) 5%, transparent 0);
-            /*横纵向宽距*/
-            background-size: 20px 20px;
-        }
-    </style>
-</head>
-
-<div id="open_layer_Data_List" hidden style="">
-
-
-</div>
-
-<div id="open_layer_save_layer" hidden style="padding:20px">
-    <div style="">面板名称:</div>
-    <input id='open_layer_save_layer_name' ondblclick='f_attribute_Device(this)' type="'text'" class="open_layer_layui-layer-input" value="">
-    <div style="margin-top: 20px;">面板图片:</div>
-    <input id='open_layer_save_layer_img' ondblclick='f_attribute_img(this)' type="'text'" class="open_layer_layui-layer-input" value="">
-    <button onclick="f_Save_layer_choice()">保存为面板</button>
-</div>
-<!--瀑瀑模式 - 数据来源-->
-<div id="open_layer_data_layer" hidden style="padding:20px;">
-    <div style="width: 100%;float: left;margin-top: 0px;margin-bottom: 10px">数据来源:</div>
-    <textarea id="open_layer_data_layer_textarea" class="layui-layer-prompt layui-layer-input"
-              style="width: 99%;height: 400px;user-select: auto;"></textarea>
-    <!--    <div style="float: left">-->
-    <!--        方式一:-->
-    <!--            插入SN,以换行符结束-->
-    <!--    </div>-->
-
-    <!--    <div style="float: left">-->
-    <!--        方式二:-->
-    <!--    </div>-->
-</div>
-
-<!--自定义 CSS-->
-<div id="open_layer_css_layer" hidden style="padding:20px;">
-    <!--    背景图片-->
-    <div style="width: 100%;float: left;margin: 10px 0px;">
-        <div style="width: 80px;float: left">
-            背景图片:
-        </div>
-        <div style="width: 170px;float: left">
-            <input id='S_open_layer_css_layer_background_img' ondblclick='f_attribute_libimg(this)' style="user-select: auto;" type='text'  class="layui-layer-input" value="">
-        </div>
-        <div style="width: 80px;float: left">
-            背景拉伸:
-        </div>
-        <div style="width: 100px;float: left">
-            <select id="S_open_layer_css_layer_background_select">
-                <option value=" no-repeat center center/100%;">缩放背景</option>
-                <option value=" no-repeat 100% 100%;">铺满背景</option>
-                <option value="  no-repeat;height:100%;width:100%;overflow: hidden;background-size:cover;">拉伸铺满</option>
-                <option value=" repeat;">重复背景</option>
-
-            </select>
-        </div>
-        <div style="width: 20px;float: left;margin-left: 10px;" onclick="S_open_layer_css_layer_background_on()">
-            +
-        </div>
-        <script>
-            function S_open_layer_css_layer_background_on() {
-                text = "background : url('"+$("#S_open_layer_css_layer_background_img").val()+"') "+$("#S_open_layer_css_layer_background_select").val()
-                $("#open_layer_css_layer_textarea").val($("#open_layer_css_layer_textarea").val()+"\n"+text)
-            }
-        </script>
-    </div>
-    <!--    背景颜色-->
-    <div style="width: 100%;float: left;margin: 10px 0px;">
-        <div style="width: 80px;float: left">
-            背景颜色:
-        </div>
-        <div style="width: 65px;float: left">
-            <input id='S_open_layer_css_layer_backgroundcolour_colour1' ondblclick='f_attribute_color(this)' style="width: 55px;" type='text' class="layui-layer-input">
-        </div>
-        <div style="width: 20px;float: left;margin-left: 10px;" onclick="S_open_layer_css_layer_backgroundcolour_colour1_on()">
-            +
-        </div>
-
-        <script>
-            function S_open_layer_css_layer_backgroundcolour_colour1_on() {
-                text = "background-color : "+$("#S_open_layer_css_layer_backgroundcolour_colour1").val()+";"
-                $("#open_layer_css_layer_textarea").val($("#open_layer_css_layer_textarea").val()+"\n"+text)
-            }
-        </script>
-        <div style="width: 80px;float: left">
-            颜色渐变:
-        </div>
-        <div style="width: 65px;float: left">
-            <input id='S_open_layer_css_layer_backgroundcolour_colour2' ondblclick='f_attribute_color(this)' style="width: 55px;" type='text' class="layui-layer-input">
-        </div>
-        <div style="width: 65px;float: left">
-            <input id='S_open_layer_css_layer_backgroundcolour_colour3' ondblclick='f_attribute_color(this)' style="width: 55px;" type='text' class="layui-layer-input">
-        </div>
-        <div style="width: 100px;float: left">
-            <select id="S_open_layer_css_layer_backgroundcolour_select" style="width: 90px;">
-                <option value="">从上到下</option>
-                <option value=" to right,">从左到右</option>
-                <option value=" to bottom right,">对角线</option>
-            </select>
-        </div>
-        <div style="width: 40px;float: left;margin-left: 10px;" onclick="S_open_layer_css_layer_backgroundcolour_colourgradient_on()">
-            +
-        </div>
-        <script>
-            function S_open_layer_css_layer_backgroundcolour_colourgradient_on() {
-                text = "background-image : linear-gradient("+$("#S_open_layer_css_layer_backgroundcolour_select").val()+""+$("#S_open_layer_css_layer_backgroundcolour_colour2").val()+", "+$("#S_open_layer_css_layer_backgroundcolour_colour3").val()+")"+";"
-                $("#open_layer_css_layer_textarea").val($("#open_layer_css_layer_textarea").val()+"\n"+text)
-            }
-        </script>
-    </div>
-
-
-    <div style="width: 100%;float: left;margin-top: 20px;margin-bottom: 10px">样式文本:</div>
-    <textarea id="open_layer_css_layer_textarea" class="layui-layer-prompt layui-layer-input"
-              style="width: 99%;height: 400px;user-select: auto;"></textarea>
-
-</div>
-
-<body >
-<input hidden type="file" id="UpLoadFile"/>
-
-<div id="PanelCanvas" class="gridbackground" style="user-select: none;height: 4000px;width: 4000px;position: absolute;left: 0px;top: 0px;background-color: #f0f0f0">
-
-    <!--    <div id="PanelCanvas1" >-->
-    <!--        <img src="{{.OSS_Static}}/images/demo_picture.jpg" />-->
-    <!--    </div>-->
-</div>
-
-<!--左側工具欄-->
-<div style="text-align:center;margin:50px 0; font:normal 14px/24px 'MicroSoft YaHei';">
-
-    <nav class="cbp-spmenu cbp-spmenu-vertical cbp-spmenu-right" id="menuRight">
-        <!--        <div onclick="f_on_menuLeft()" style="position: relative;left: -55px;width: 80px;height: 0px;color: #FFFFFF;font-size: 20px">-->
-        <!--            <span style="background-color: #47a3da;padding: 0px 6px"> ^ </span>-->
-        <!--        </div>-->
-        <h3>宝智达冷链科技</h3>
-
-
-
-        <!-- 选项卡部分 -->
-        <div id="tab">
-            <!-- 头部区域 -->
-            <div id="tab-header" style="background:#e5e5e5;height: 30px;padding-top: 10px;overflow-y: hidden;">
-
-                <span ondblclick="f_PanelTool_Device_List()">设备</span>
-                <span >基础</span>
-
-                <span >资源</span>
-                <!--                <span >模块</span>-->
-                <span >面板</span>
-                <!--                <span >高级</span>-->
-            </div>
-            <!-- 身体部分 -->
-            <div id="tab-content">
-                <!--                设备-->
-                <div class="dom" style="background-color: #FEFEFE;display:block  ">
-
-                    <div id="PanelTool_Device_List" style="padding-top: 10px;padding-bottom: 10px;overflow-x: hidden;overflow-y: auto;">
-
-
-                    </div>
-
-                </div>
-                <!--                基础-->
-                <div class="dom" style="display: block;">
-                    <section class="help-left">
-                        <details class="menu" open>
-                            <summary>基本组件</summary>
-                            <p draggable="true">这是一个可拖动的段落。</p>
-                            <div id="PanelTool_1" class="divul">
-                            </div>
-
-                        </details>
-                        <details class="menu" open>
-                            <summary>数据组件</summary>
-                            <div id="PanelTool_2" class="divul">
-                            </div>
-                        </details>
-                        <details class="menu" open>
-                            <summary>图表组件</summary>
-                            <div id="PanelTool_3" class="divul">
-                            </div>
-                        </details>
-                        <details class="menu" open>
-                            <summary>高级组件</summary>
-                            <div id="PanelTool_4" class="divul">
-                            </div>
-                        </details>
-
-                    </section>
-
-                </div>
-
-                <!--                资源-->
-                <div class="dom">
-                    <section class="help-left">
-                        <details class="menu" open>
-                            <summary>图标资源</summary>
-                            <div id="PanelSource_1" class="divul">
-                            </div>
-                        </details>
-
-                    </section>
-
-                </div>
-                <!-- 第二部分 -->
-                <!--                <div class="dom">-->
-                <!--                    222222222-->
-                <!--                </div>-->
-                <!-- 第二部分 -->
-                <div class="dom">
-
-                    <section class="help-left">
-                        <details class="menu" open>
-                            <summary>产品面板</summary>
-
-                            <div id="LayerMould_1" class="divul">
-                                <!--                        <div class="divulli" draggable="true" data-PanelToolId="1"  ondragleave="v_ondragleave(1)">-->
-                                <!--                            <img src="{{.OSS_Static}}/images/仪器控制.png">-->
-                                <!--                            <div>设备管理</div>-->
-                                <!--                        </div>-->
-
-
-                            </div>
-
-                        </details>
-                        <!--                            <details class="menu" open>-->
-                        <!--                                <summary>设备组件</summary>-->
-                        <!--                                <div id="LayerMould_2" class="divul">-->
-                        <!--                                    &lt;!&ndash;                        <div class="divulli" draggable="true" data-PanelToolId="1"  ondragleave="v_ondragleave(1)">&ndash;&gt;-->
-                        <!--                                    &lt;!&ndash;                            <img src="{{.OSS_Static}}/images/仪器控制.png">&ndash;&gt;-->
-                        <!--                                    &lt;!&ndash;                            <div>设备管理</div>&ndash;&gt;-->
-                        <!--                                    &lt;!&ndash;                        </div>&ndash;&gt;-->
-
-                        <!--                                </div>-->
-
-                        <!--                            </details>-->
-
-                    </section>
-
-                </div>
-                <!-- 第二部分 -->
-                <!--                <div class="dom">-->
-                <!--                    222222222-->
-                <!--                </div>-->
-
-
-            </div>
-        </div>
-
-
-
-
-    </nav>
-
-</div>
-
-<!--工程管理-->
-<div class="layer_tool_tab" >
-    <button onclick="f_Save()">保存</button>
-    <button onclick="f_PaneView_V();">返回视图</button>
-    <button onclick="T_viewid_setItem();">复制底板</button>
-    <button onclick="T_viewid_getItem();">粘贴底板</button>
-</div>
-<script>
-    function T_viewid_setItem()
-    {
-        localStorage.setItem("T_viewid",T_viewid);
-        console.log(localStorage.getItem("T_viewid")," OK!")
-
-    }
-    function T_viewid_getItem()
-    {
-        console.log("T_viewid:",localStorage.getItem("T_viewid"))
-        $.ajax({
-            type: 'POST',
-            url: '../../Panel/PaneView_Get',//发送请求
-            data: {
-                T_viewid: localStorage.getItem("T_viewid"),
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    T_PanelCanvas = result.Data
-                    PanelCanvas_mode = T_PanelCanvas.T_mode
-                    f_PanelCanvas_mode_0(result)
-
-
-                    switch (PanelCanvas_mode) {
-                        case 0:
-                            $("#PanelCanvas_mode").html("自由模式")
-                            break
-                        case 1:
-                            $("#PanelCanvas_mode").html("瀑瀑模式")
-
-                            break
-                        case 2:
-                            $("#PanelCanvas_mode").html("满屏模式")
-
-                            break
-                    }
-
-                    $("#PanelCanvas_wh").html("["+T_PanelCanvas.T_width+"*"+T_PanelCanvas.T_height+"]")
-                }
-            }
-        });
-    }
-
-</script>
-
-
-<!--面板模式-->
-<div class="layer_mode_tab" >
-    <span id="PanelCanvas_mode">自由模式</span>
-    <span id="PanelCanvas_wh">[1233*3222]</span>
-</div>
-
-<!--页面 加载完成后执行-->
-<script>
-    var OSS_Static = "{{.OSS_Static}}"  // 全局 资源地址
-    var USER_UUID = "{{.USER_UUID}}"  // 全局 USER_UUID
-    var T_viewid = "{{.T_viewid}}"  // 全局 USER_UUID
-    var PanelCanvas_lock = false; //区块锁定标识
-    var PanelCanvas_mode = 0; //0 自由模式    1 瀑瀑模式
-
-    // 页面 加载完成后执行
-    window.onload = function () {
-        console.log("页面 加载完成后执行")
-        f_keydown()
-
-
-        f_PanelTool_List()
-        f_Layer_Mould_List()
-        $('img').on('dragstart', function(event) { event.preventDefault(); });
-
-        // 资源
-        f_ConfigImg_List()
-        f_Device_List("")
-
-        f_PaneView_Get()
-
-    }
-
-    // 切换试图
-    function f_PaneView_V() {
-        ToUrl = decodeURIComponent("{{.ToUrl}}")
-        console.log("跳转:",ToUrl)
-        window.location.href=ToUrl
-    }
-
-    keyCode_70 = {}
-    keyCode_17 = false
-    // 按键 功能
-    function f_keydown() {
-
-        $(document).keydown(function(event){
-            console.log("keyCode keydown:"+event.keyCode)
-            if(event.keyCode == 70){
-                console.log("keyCode_70:",keyCode_70)
-                keyCode_70()
-                return false
-            }
-            if(event.keyCode == 17){
-                keyCode_17 = true
-                $("#PanelCanvas").css('cursor', 'move');
-                return false
-            }
-            //
-            // if (event.ctrlKey && event.keyCode == 70) {
-            //     alert("‘Ctrl+Enter’");
-            // };
-            // switch (event.keyCode) {
-            //
-            // }
-            return true
-
-        });
-
-        $(document).keyup(function(event){
-            console.log("keyCode keyup:"+event.keyCode)
-            if(event.keyCode == 17){
-                keyCode_17 = false
-                $("#PanelCanvas").css('cursor', 'default');
-                return false
-            }
-            //
-            // if (event.ctrlKey && event.keyCode == 70) {
-            //     alert("‘Ctrl+Enter’");
-            // };
-            // switch (event.keyCode) {
-            //
-            // }
-            return true
-
-        });
-
-    }
-
-
-
-</script>
-<script>
-    var mousemove_x = 0
-    var mousemove_y = 0
-    addEventListener("mousemove", function (a) {
-
-
-        if (keyCode_17){
-            // console.log('top',mousemove_y - a.y,'left',mousemove_x - a.x)
-            $("#PanelCanvas").css({
-                'top': mousemove_y - a.y,
-                'left': mousemove_x - a.x,
-            });
-        }else {
-
-            mousemove_x = a.x + parseInt($("#PanelCanvas").css("left"))
-            mousemove_y = a.y + parseInt($("#PanelCanvas").css("top"))
-        }
-    });
-</script>
-<!--移动面板-->
-<script>
-    // //创建拖拽方法
-    // PanelCanvas_move = true
-    //
-    // $("#PanelCanvas").mousedown(function(e){
-    //     if(!PanelCanvas_move){return;}
-    //     if(!keyCode_17){return;}
-    //     console.log(e)
-    //     var canvas = $(this);
-    //     var pos = $(this).position();
-    //     this.posix = {'x': e.pageX - pos.left, 'y': e.pageY - pos.top};
-    //     $.extend(document, {'move': true, 'move_target': this, 'call_down' : function(e, posix){
-    //             canvas.css({
-    //                 'cursor': 'move',
-    //                 'top': e.pageY - posix.y,
-    //                 'left': e.pageX - posix.x
-    //             });
-    //         }, 'call_up' : function(){
-    //             canvas.css('cursor', 'default');
-    //         }});
-    // })
-    //
-    //
-    // function f_PanelCanvas_onmouseover() {
-    //     // console.log("进入")
-    //     PanelCanvas_move = false
-    // }
-    //
-    //
-    // function f_PanelCanvas_onmouseout() {
-    //     // console.log("出去")
-    //     PanelCanvas_move = true
-    // }
-
-
-</script>
-<!--数据缓存-->
-<script>
-    var Public_Value_map = new Map();
-
-    //读取 同步缓存数据
-    function f_Public_Value_get(tab) {
-        if(Public_Value_map.has(tab)){                 //判断映射是否存在
-            return {V:Public_Value_map.get(tab),is:true}
-        }
-        return {V:0,is:false}
-    }
-    //设置 同步缓存数据
-    function f_Public_Value_set(tab,value) {
-        Public_Value_map.set(tab,value);      //添加设置映射
-
-    }
-
-</script>
-
-<!--画板入口-->
-<script src="{{.OSS_Static}}/panel/PanelCanvas.js"></script>
-<script>
-    // "#canvas"
-    //
-    // V_PanelCanvas1 =
-    // V_PanelCanvas2 = f_canvas2(500,500,"{{.OSS_Static}}/images/demo_picture.jpg")
-    var V_PanelCanvas_Map = new Map();
-    //
-    // V_PanelCanvas = new f_canvas2(500, 500, "{{.OSS_Static}}/images/demo_picture.jpg", 1, "{\"sn_sn\":\"866222050911984\",\"tab_tab\":\"v_do_2\",\"text1_text\":\"替换的文本\"}")
-    // V_PanelCanvas_Map.set(V_PanelCanvas.PanelCanvas_id,V_PanelCanvas)
-    // //测试加载
-    // var loadData = [
-    //
-    //     {text: "A0000001v_xx_7", rotate: 0, color: "rgb(255, 165, 0)", height: 70, width: 77, pageX: 89, pageY: 39}];
-    // $.each(loadData, function (i, row) {
-    //     V_PanelCanvas.F_CreateBox(row);
-    // });
-    //
-    //
-    // V_PanelCanvas = new f_canvas2(500, 500, "{{.OSS_Static}}/images/demo_picture.jpg", 1, "{\"sn_sn\":\"866222050911984\"}")
-    // V_PanelCanvas_Map.set(V_PanelCanvas.PanelCanvas_id,V_PanelCanvas)
-    // var loadData = [
-    //     {text: "A0000001v_xx_1", rotate: 1, color: "rgb(255, 255, 0)", height: 70, width: 77, pageX: 29, pageY: 64}
-    // ];
-    // $.each(loadData, function (i, row) {
-    //     V_PanelCanvas.F_CreateBox(row);
-    // });
-    // var V_PanelCanvas1 = new Function(f_canvas(500,500,"{{.OSS_Static}}/images/demo_picture.jpg"))
-    // var V_PanelCanvas2 = new Function(f_canvas(500,500,"{{.OSS_Static}}/images/demo_picture.jpg"))
-
-
-    Height = $(window).height();
-    $("#PanelTool_Device_List").css("height",(Height-125)+"px")
-    function f_PaneView_Get() {
-        $.ajax({
-            type: 'POST',
-            url: '../../Panel/PaneView_Get',//发送请求
-            data: {
-                T_viewid: "{{.T_viewid}}",
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    T_PanelCanvas = result.Data
-                    PanelCanvas_mode = T_PanelCanvas.T_mode
-                    f_PanelCanvas_mode_0(result)
-
-
-                    switch (PanelCanvas_mode) {
-                        case 0:
-                            $("#PanelCanvas_mode").html("自由模式")
-                            break
-                        case 1:
-                            $("#PanelCanvas_mode").html("瀑瀑模式")
-
-                            break
-                        case 2:
-                            $("#PanelCanvas_mode").html("满屏模式")
-
-                            break
-                    }
-
-                    $("#PanelCanvas_wh").html("["+T_PanelCanvas.T_width+"*"+T_PanelCanvas.T_height+"]")
-                } else {
-                    layer.msg('视图获取错误!');
-                    setTimeout(function(){
-                        //要执行的代码
-                        f_PaneView_Get()
-
-                    },2000);
-                }
-            }
-        });
-    }
-
-    // 自由模式
-    function f_PanelCanvas_mode_0(result) {
-        T_PanelCanvas = result.Data
-        // CSS 样式
-        $('#PanelCanvas').css({
-            width: T_PanelCanvas.T_width + "px",
-            height: T_PanelCanvas.T_height + "px"
-        });
-
-        // CSS 自定义样式
-        f_Up_css(T_PanelCanvas.T_css,"PanelCanvas")
-
-        // 加载 组件
-        if(result.Data.T_text.length < 10 ){
-            return;
-        }
-        PaneView_json = JSON.parse(result.Data.T_text)
-        for(var i = 0;i < PaneView_json.length;i++){
-            Layer_Mould_json = PaneView_json[i]
-            console.log("创建面板 PaneView_json",Layer_Mould_json)
-
-            V_PanelCanvas = new f_canvas2(Layer_Mould_json.PanelCanvas_top,Layer_Mould_json.PanelCanvas_left,Layer_Mould_json.PanelCanvas_width, Layer_Mould_json.PanelCanvas_height, Layer_Mould_json.PanelCanvas_z, JSON.stringify(Layer_Mould_json.PanelCanvas_map), Layer_Mould_json.PanelCanvas_css)
-            V_PanelCanvas_Map.set(V_PanelCanvas.PanelCanvas_id,V_PanelCanvas)
-
-            for(var row_i = 0; row_i < Layer_Mould_json.Data_list.length; row_i++){
-                // rowjson = Layer_Mould_json.Data_list[i]
-                console.log("row json+ ",Layer_Mould_json.Data_list[row_i])
-                V_PanelCanvas.F_CreateBox(Layer_Mould_json.Data_list[row_i]);
-            }
-
-        }
-    }
-
-
-    // 瀑瀑模式
-    function f_PanelCanvas_mode_1(result){
-        T_PanelCanvas = result.Data
-        // CSS 样式
-        $('#PanelCanvas').css({
-            width: '100%',
-            height: '100%',
-            overflowX: "hidden",
-            overflowY: "auto",
-        });
-        // CSS 自定义样式
-        f_Up_css(T_PanelCanvas.T_css,"PanelCanvas")
-
-        // 加载 组件
-        if(result.Data.T_text.length < 10 ){
-            return;
-        }
-        PaneView_json = JSON.parse(result.Data.T_text)
-        for(var i = 0;i < PaneView_json.length;i++){
-            Layer_Mould_json = PaneView_json[i]
-            console.log("创建面板 PaneView_json",Layer_Mould_json)
-
-            V_PanelCanvas = new f_canvas2(Layer_Mould_json.PanelCanvas_top,Layer_Mould_json.PanelCanvas_left,Layer_Mould_json.PanelCanvas_width, Layer_Mould_json.PanelCanvas_height, Layer_Mould_json.PanelCanvas_z, JSON.stringify(Layer_Mould_json.PanelCanvas_map), Layer_Mould_json.PanelCanvas_css)
-            V_PanelCanvas_Map.set(V_PanelCanvas.PanelCanvas_id,V_PanelCanvas)
-
-            for(var row_i = 0; row_i < Layer_Mould_json.Data_list.length; row_i++){
-                // rowjson = Layer_Mould_json.Data_list[i]
-                console.log("row json+ ",Layer_Mould_json.Data_list[row_i])
-                V_PanelCanvas.F_CreateBox(Layer_Mould_json.Data_list[row_i]);
-            }
-
-        }
-    }
-    function f_PaneView_Save(T_text) {
-        $.ajax({
-            type: 'POST',
-            url: '../../Panel/PaneView_Post',//发送请求
-            data: {
-                T_viewid: "{{.T_viewid}}",
-                T_text: T_text,
-                T_mode: T_PanelCanvas.T_mode,
-                T_width: T_PanelCanvas.T_width,
-                T_height: T_PanelCanvas.T_height,
-                T_css: T_PanelCanvas.T_css,
-                T_data: T_PanelCanvas.T_data,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    layer.msg('保存成功!');
-                } else {
-                    layer.msg('保存失败!');
-                }
-            }
-        });
-    }
-
-
-</script>
-
-<!--发布订阅模式-->
-<script>
-    // 控制中心
-    var pubSub = {
-        list: {},
-        // 订阅
-        subscribe: function(key, fn) {
-            console.log("加入:",key)
-
-            Public_V = f_Public_Value_get(key)
-            if (Public_V.is){
-                this.publish(key,Public_V.V)
-            }
-            if (!this.list[key]) this.list[key] = [];
-            this.list[key].push(fn);
-            key_list = key.split("/")
-            if(key_list[0].length > 3){
-                NewSubscribe(key_list[0]) // 订阅SN
-            }
-
-
-
-        },
-        //取消订阅
-        unsubscribe: function(key, fn) {
-            let fnList = this.list[key];
-            if (!fnList) return false;
-            if (!fn) { // 不传入指定的方法,清空所用 key 下的订阅
-                fnList && (fnList.length = 0);
-            } else {
-                fnList.forEach((item, index) => {
-                    item === fn && fnList.splice(index, 1);
-                });
-            }
-        },
-        // 发布
-        publish: function(key, ...args) {
-            if (this.list[key]){
-                for (let fn of this.list[key]) fn.call(this, ...args);
-            }
-
-        }
-    }
-
-    function f_Data_Read(T_sn) {
-        T_sn_list = T_sn.split("-")
-        $.ajax({
-            type: 'POST',
-            url: '../../Data/Device_Sensor',//发送请求
-            data: {
-                T_sn: T_sn_list[0],
-                T_id: T_sn_list[1],
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    for (const [key, value] of Object.entries(result.Data)) {
-                        console.log(key,value);
-                        pubSub.publish(T_sn+"/"+key, value);
-                        f_Public_Value_set(T_sn+"/"+key, value)
-                    }
-                }
-            }
-        });
-    }
-
-</script>
-
-<!--websocket-->
-<script src="{{.OSS_Static}}/js/jquery.cookie.min.js"></script>
-<script>
-    var websocket = null;
-
-    //判断当前浏览器是否支持WebSocket
-    run_WebSocket()
-    function run_WebSocket() {
-        console.log("run_WebSocket");
-        if ('WebSocket' in window) {
-            url = window.location.host
-            if (url.indexOf("baozhida") != -1) {
-                websocket = new WebSocket("wss://" + window.location.host + "/wsPanel/join?User_tokey=" + $.cookie('User_tokey'));
-            } else {
-
-                websocket = new WebSocket("ws://" + window.location.host + "/wsPanel/join?User_tokey=" + $.cookie('User_tokey'));
-            }
-
-        } else {
-            alert('Dont support websocket')
-        }
-    }
-
-    //连接成功建立的回调方法
-    websocket.onopen = function () {
-        console.log("websocket open");
-        // get_DeviceCh_List(0)
-
-        setTimeout(function(){
-            SubscribeSend()
-        },2000);
-
-        // send("{\"Sn\":\"" + getQueryString("Sn") + "\"}")
-    };
-
-    //接收到消息的回调方法
-    websocket.onmessage = function (event) {
-        // console.log("websocket:",event.data)
-        var obj = JSON.parse(event.data);
-        console.log("websocket:",obj)
-        if(obj.Code == 200){
-            return
-        }
-        sn_id = obj.T_sn+"-"+obj.T_id
-
-        for (const [key, value] of Object.entries(obj)) {
-            // console.log(key,value);
-            pubSub.publish(sn_id+"/"+key, value);
-            f_Public_Value_set(sn_id+"/"+key, value)
-        }
-
-        // pubSub.publish(sn_id+'/'+obj.tab, obj.value);
-
-        // // op:类型u8,  //操作  0-主动上传  1-读  2- 写     3-成功  4-失败
-        // switch (obj.op) {
-        //     case 3:
-        //         Del_Mid(obj.mid)
-        //         break;
-        //     case 4:
-        //         Err_Mid(obj.mid)
-        //         break;
-        // }
-        // console.log(obj.sn,"进入。。  Device_Sn = ",obj.sn)
-        // Pu_DeviceCh_List_g(obj.sn,obj.tab,obj.value)
-        //
-        // if (obj.type == 0) {
-        //     // console.log("data.length:",obj.sensor.length)
-        //
-        //     Pu_DeviceCh_List_g(obj.sn, obj.sensor)
-        //
-        //     if (obj.type == 0) {
-        //         $("#T_time").html("刷新时间:" + dateChangeFormat_x('YYYY-mm-dd HH:MM:SS', obj.sensor[0].UT) + "   上传刷新间隔:" + Math.abs(timestamp_V - obj.sensor[0].UT).toFixed(0) + "s")
-        //
-        //         // console.log(timestamp_V, obj.sensor[0].UT, "   刷新间隔:" + (timestamp_V - obj.sensor[0].UT) + "s")
-        //         timestamp_V = obj.sensor[0].UT
-        //
-        //     }
-        //
-        //
-        // }
-
-
-    };
-
-    //连接关闭的回调方法
-    websocket.onclose = function () {
-        console.log("close");
-        // setTimeout(function () {
-        //     //要执行的代码
-        //     run_WebSocket();
-        // }, 2000);
-
-
-    };
-
-    //连接发生错误的回调方法
-    websocket.onerror = function () {
-        console.log("error");
-        setTimeout(function () {
-            //要执行的代码
-            run_WebSocket();
-        }, 2000);
-    };
-
-    //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
-    window.onbeforeunload = function () {
-        websocket.close();
-        console.log("窗口关闭事件");
-    };
-
-    //关闭连接
-    function closeWebSocket() {
-        websocket.close();
-        console.log("onbeforeunload");
-        window.clearInterval(intervalId);
-    }
-
-    //发送消息
-    function send(message) {
-        websocket.send(message);
-    }
-    var SbscribeMap = new Set();
-    // 订阅 SN
-    function Subscribe(SN) {
-        if(!SbscribeMap.has(SN)){
-            console.log("加入订阅:",SN)
-            SbscribeMap.add(SN)
-        }
-        //
-    }
-    // 订阅 SN
-    function NewSubscribe(SN) {
-        if(!SbscribeMap.has(SN)){
-            console.log("加入订阅:",SN)
-            SbscribeMap.add(SN)
-            send("{ \"Sn\":\""+SN+"\"}")
-            f_Data_Read(SN)
-        }
-        //
-    }
-    // 订阅 SN
-    function SubscribeSend() {
-        for (var SN of SbscribeMap) { // 遍历Set
-            send("{ \"Sn\":\""+SN+"\"}")
-        }
-        console.log("开始订阅:",SbscribeMap)
-    }
-
-
-</script>
-
-<!--/// ----------------------------- 编辑 -------------------------------------- -->
-
-<!--鼠标拖拽-->
-<script>
-    var isDown = false   //鼠标释放
-    var V_PanelTool_id = 0   //工具 ID
-    var V_PanelTool_class = 0   //  1 基础  2 层模型
-    var V_PanelCanvas_id = 0
-
-    function v_ondragleave(class_id,id) {
-        console.log("离开工具栏")
-        console.log(id)
-        V_PanelTool_id = id
-        V_PanelTool_class = class_id
-
-
-        setTimeout(function(){
-            //要执行的代码
-
-            console.log("释放层 id",V_PanelCanvas_id)
-
-            switch (V_PanelTool_class) {
-                case 1:
-                    console.log("加入 基础组件",PanelTool_List[V_PanelTool_id].T_text)
-
-                    V_PanelCanvas_Map.get(V_PanelCanvas_id).F_CreateBox({
-                        text: PanelTool_List[V_PanelTool_id].T_text,
-                        rotate: 0,
-                        color: PanelTool_List[V_PanelTool_id].T_color,
-                        height: PanelTool_List[V_PanelTool_id].T_height,
-                        width: PanelTool_List[V_PanelTool_id].T_width,
-                        pageX: 20, pageY: 20
-                    });
-                    break;
-                case 2:  // 弃用
-                    console.log("释放 层 模型",Layer_Mould_List[V_PanelTool_id])
-
-
-
-                    break;
-            }
-
-        },200);
-
-    }
-    // $( ".divulli" ).draggable({ cursor: "move", cursorAt: { top: 56, left: 56 } });
-    // 进入
-    function f_ondragenter(id) {
-        console.log("进入",id)
-        // document.getElementById("example").style.cursor = "move";  canvas.css('cursor', 'default');
-        $(document).css('cursor', 'move');
-    }
-    //另一对象
-    function f_ondragover(id) {
-        console.log("另一对象",id)
-        isDown = false
-        $(document).css('cursor', 'move');
-    }
-    //离开
-    function f_ondragleave(id) {
-        console.log("离开",id)
-        isDown = true
-        setTimeout(function(){
-            //要执行的代码
-            console.log(isDown)
-            if(isDown){
-                console.log("释放层 id",id)
-
-                switch (V_PanelTool_class) {
-                    case 1:
-                        console.log("释放 基础组件",PanelTool_List[V_PanelTool_id].T_text)
-
-                        V_PanelCanvas_Map.get(id).F_CreateBox({
-                            text: PanelTool_List[V_PanelTool_id].T_text,
-                            rotate: 0,
-                            color: PanelTool_List[V_PanelTool_id].T_color,
-                            height: PanelTool_List[V_PanelTool_id].T_height,
-                            width: PanelTool_List[V_PanelTool_id].T_width,
-                            pageX: 20, pageY: 20
-                        });
-                        break;
-                    case 2:  // 弃用
-                        console.log("释放 层 模型",Layer_Mould_List[V_PanelTool_id])
-
-
-
-                        break;
-                }
-
-
-
-            }
-        },200);
-    }
-
-</script>
-
-<!--底层-->
-<script>
-
-    T_PanelCanvas = {}
-    //加载layer拓展
-    layer.config({
-        extend: 'extend/layer.ext.js'
-    });
-    //右键菜单参数
-    context.init({
-        fadeSpeed: 100,
-        above: 'auto',
-        preventDoubleContext: true,
-        compress: false
-    });
-
-    context.attach('#PanelCanvas', [
-        {header: '面板模式'},
-        {
-            text: '自由模式', action: function (e) {
-                e.preventDefault();
-                T_PanelCanvas.T_mode = 0
-                $("#PanelCanvas_mode").html("自由模式")
-
-            }
-        },
-        {
-            text: '瀑瀑模式(一层)', action: function (e) {
-                e.preventDefault();
-                T_PanelCanvas.T_mode = 1
-                $("#PanelCanvas_mode").html("瀑瀑模式")
-
-
-                $("#open_layer_data_layer_textarea").val(T_PanelCanvas.T_data)
-                layer.open({
-                    title: '瀑瀑数据来源',
-                    type: 1,
-                    area: ['577px','690px'],
-                    fix: true, //不固定
-                    maxmin: false,
-                    content: $('#open_layer_data_layer'),
-                    shadeClose: true,
-                    anim: 1,
-                    shade: 0.4,
-                    isOutAnim: false,
-                    scrollbar: false,
-                    btn:["确定"],
-                    yes:function (Index) {
-
-                        T_PanelCanvas.T_data = $("#open_layer_data_layer_textarea").val()
-
-                        layer.close(Index);
-                    }
-                });
-
-                // var box = $('#PanelCanvas');
-                // box.css({
-                //     width: '100%',
-                //     height: '100%',
-                //     overflowX: "hidden",
-                //     overflowY: "auto",
-                // });
-                // T_PanelCanvas.T_width = 0;
-                // T_PanelCanvas.T_height = 0;
-                // PanelCanvas_mode = 1
-
-
-            }
-        },
-        {
-            text: '满屏模式', action: function (e) {
-                e.preventDefault();
-                T_PanelCanvas.T_mode = 2
-                $("#PanelCanvas_mode").html("满屏模式")
-
-            }
-        },
-        {header: '自定义尺寸'},
-        {
-            text: '1920x1080 (2K)', action: function (e) {
-                e.preventDefault();
-                var box = $('#PanelCanvas');
-                box.css({
-                    width: 1920,
-                    height: 1080
-                });
-                T_PanelCanvas.T_width = 1920;
-                T_PanelCanvas.T_height = 1080;
-                $("#PanelCanvas_wh").html("["+T_PanelCanvas.T_width+"*"+T_PanelCanvas.T_height+"]")
-
-            }
-        },
-        {
-            text: '3840x2160 (4K)', action: function (e) {
-                e.preventDefault();
-                var box = $('#PanelCanvas');
-                box.css({
-                    width: 3840,
-                    height: 2160
-                });
-                T_PanelCanvas.T_width = 3840;
-                T_PanelCanvas.T_height = 2160;
-                $("#PanelCanvas_wh").html("["+T_PanelCanvas.T_width+"*"+T_PanelCanvas.T_height+"]")
-
-            }
-        },
-        {
-            text: '自定义尺寸', action: function (e) {
-                e.preventDefault();
-                layer.prompt({
-                    title: '请输入区域尺寸(宽,高),最小值:30 \n4K=3840*2160\n2K= 2560*1440',
-                    formType: 0,
-                    value: Math.round(T_PanelCanvas.T_width) + "," + Math.round(T_PanelCanvas.T_height)
-                }, function (value, index, elem) {
-                    var reg = /^[0-9]+,[0-9]+$/;
-                    if (!reg.test(value)) {
-                        alert('输入格式不正确,请输入整数  如:100,100');
-                        return;
-                    }
-                    var size = value.split(',');
-                    var box = $('#PanelCanvas');
-                    box.css({
-                        width: size[0] < 30 ? 30 : size[0],
-                        height: size[1] < 30 ? 30 : size[1]
-                    });
-                    T_PanelCanvas.T_width = size[0];
-                    T_PanelCanvas.T_height = size[1];
-
-                    $("#PanelCanvas_wh").html("["+T_PanelCanvas.T_width+"*"+T_PanelCanvas.T_height+"]")
-
-                    layer.close(index);
-                });
-            }
-        },
-        {divider: true},
-        {header: '更改样式'},
-        {
-            text: 'CSS样式', action: function (e) {
-                e.preventDefault();
-                $("#open_layer_css_layer_textarea").val(T_PanelCanvas.T_css)
-                f_attribute_css_inti() // 初始化 CSS 自定义样式
-                layer.open({
-                    title: '自定义 CSS样式',
-                    type: 1,
-                    area: ['577px','690px'],
-                    fix: true, //不固定
-                    maxmin: false,
-                    content: $('#open_layer_css_layer'),
-                    shadeClose: true,
-                    anim: 1,
-                    shade: 0.4,
-                    isOutAnim: false,
-                    scrollbar: false,
-                    btn:["确定"],
-                    yes:function (Index) {
-
-                        T_PanelCanvas.T_css = $("#open_layer_css_layer_textarea").val()
-                        f_Up_css(T_PanelCanvas.T_css,"PanelCanvas")
-
-                        layer.close(Index);
-                    }
-                });
-
-
-            }
-        },
-    ]);
-
-</script>
-
-<!--保存为面板-->
-<script>
-    var Save_layer_obj = {}
-    function f_Save_layer(obj) {
-        Save_layer_obj = obj
-        Attribute_layer_id = layer.open({
-            title: '保存为面板',
-            type: 1,
-            area: ['277px','290px'],
-            fix: false, //不固定
-            maxmin: false,
-            content: $('#open_layer_save_layer'),
-            shadeClose: true,
-            anim: 1,
-            shade: 0.4,
-            isOutAnim: false,
-            scrollbar: false,
-        });
-    }
-    function f_Save_layer_choice() {
-        box_json = Save_layer_obj.F_get_box_json()
-        layer_name = $("#open_layer_save_layer_name").val()
-        layer_img = $("#open_layer_save_layer_img").val()
-        console.log("F_get_box_json:",box_json)
-        console.log("open_layer_save_layer_name:",layer_name)
-        console.log("open_layer_save_layer_img:",layer_img)
-
-        f_Save_Layer(layer_name,layer_img,JSON.stringify(box_json))
-        layer.close(Attribute_layer_id);
-    }
-
-
-    function f_Save_Layer(name,img,text) {
-        $.ajax({
-            type: 'POST',
-            url: '../../Panel/Layer_Mould_Save',//发送请求
-            data: {
-                layer_name: name,
-                layer_img: img,
-                layer_json: text,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    layer.msg('上传成功!');
-                }
-            }
-        });
-    }
-
-    // 保存工程
-    function f_Save() {
-        o_PanelCanvas_List = []
-        for(let [key,v] of V_PanelCanvas_Map) {
-            console.log("V_PanelCanvas_Map  key:", key);
-            box_json = v.F_get_box_json()
-            o_PanelCanvas_List.push(box_json)
-        }
-        //
-        console.log("o_PanelCanvas_List:",o_PanelCanvas_List)
-        // console.log(JSON.stringify(o_PanelCanvas_List))
-        f_PaneView_Save(JSON.stringify(o_PanelCanvas_List))
-    }
-
-
-</script>
-
-<!--// 左侧 工具-->
-<script>
-    var menuRight = document.getElementById('menuRight')
-    var body = document.body;
-
-    classie.toggle(body, 'cbp-spmenu-push-toright');
-    classie.toggle(body, 'cbp-spmenu-push-toright_bady');
-    classie.toggle(menuRight, 'cbp-spmenu-open');
-    console.log("menuRight.height",menuRight.clientHeight)
-    $(".help-left").css("max-height",menuRight.clientHeight - 64 + "px")
-
-    // 基础工具
-    var PanelTool_List = []
-    function f_PanelTool_List() {
-        $.ajax({
-            type: 'POST',
-            url: '../../Panel/PanelTool_List',//发送请求
-            data: {
-                page: 1,
-                page_z: 990,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-
-
-                    PanelTool_List = result.Data.List
-                    Show_PanelTool_List(PanelTool_List) // 列表
-
-                    // if(result.Data.Page_size > result.Data.Page ){
-                    //     f_PanelTool_List(result.Data.Page+1)
-                    // }
-
-                } else {
-
-                }
-            }
-        });
-    }
-
-    function Show_PanelTool_List(data) {
-        $('#PanelTool_1').append("" +
-            "<div class=\"divulli\" onmousedown='f_Add_NewLayer()' >\n" +
-            "    <img src=\"https://standardoss.baozhida.cn/UpImage/57f8984e-7327-49d3-8bc9-00719f02d61e.png\">\n" +
-            "    <div>添加层</div>\n" +
-            "</div>")
-        for (let i = 0; i < data.length; i++) {
-            switch (data[i].T_class) {
-                case 1:
-                    $('#PanelTool_1').append("" +
-                        "<div class=\"divulli\"  onmousedown='v_ondragleave(1,"+ i +")' >\n" +
-                        "    <img src=\""+data[i].T_img+"\">\n" +
-                        "    <div>"+data[i].T_name+"</div>\n" +
-                        "</div>")
-                    break
-                case 2:
-                    $('#PanelTool_2').append("" +
-                        "<div class=\"divulli\"  onmousedown='v_ondragleave(1,"+ i +")' >\n" +
-                        "    <img src=\""+data[i].T_img+"\">\n" +
-                        "    <div>"+data[i].T_name+"</div>\n" +
-                        "</div>")
-                    break
-                case 3:
-                    $('#PanelTool_3').append("" +
-                        "<div class=\"divulli\" onmousedown='v_ondragleave(1,"+ i +")' >\n" +
-                        "    <img src=\""+data[i].T_img+"\">\n" +
-                        "    <div>"+data[i].T_name+"</div>\n" +
-                        "</div>")
-                    break
-
-            }
-
-
-            // Pu_DeviceCh_View(data[i].T_sn+data[i].T_tab+"_"+data[i].T_ch,data[i].T_value)
-        }
-    }
-
-    ///////////------------   模板
-    Layer_Mould_List = []
-    function f_Layer_Mould_List() {
-        $.ajax({
-            type: 'POST',
-            url: '../../Panel/Layer_Mould_List',//发送请求
-            data: {
-                page: 1,
-                page_z: 990,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-
-
-                    Layer_Mould_List = result.Data.List
-                    Show_Layer_Mould_List(Layer_Mould_List) // 列表
-
-                    // if(result.Data.Page_size > result.Data.Page ){
-                    //     f_PanelTool_List(result.Data.Page+1)
-                    // }
-
-                } else {
-
-                }
-            }
-        });
-    }
-
-    function Show_Layer_Mould_List(data) {
-
-
-
-        for (let i = 0; i < data.length; i++) {
-            switch (data[i].T_class) {
-                case 1:
-                    $('#LayerMould_1').append("" +
-                        "<div class=\"divulli\"  ondblclick='f_Add_Layer_Mould("+ i +")' >\n" +
-                        "    <img src=\""+data[i].T_img+"\">\n" +
-                        "    <div>"+data[i].T_name+"</div>\n" +
-                        "</div>")
-                    break
-                case 2:
-                    $('#LayerMould_2').append("" +
-                        "<div class=\"divulli\" ondblclick='f_Add_Layer_Mould("+ i +")' >\n" +
-                        "    <img src=\""+data[i].T_img+"\">\n" +
-                        "    <div>"+data[i].T_name+"</div>\n" +
-                        "</div>")
-                    break
-            }
-
-
-            // Pu_DeviceCh_View(data[i].T_sn+data[i].T_tab+"_"+data[i].T_ch,data[i].T_value)
-        }
-    }
-
-    // - 添加面板
-    function f_Add_Layer_Mould(i_id) {
-        console.log("V_PanelCanvas_Map:",V_PanelCanvas_Map.size)
-        if(PanelCanvas_mode == 1 && V_PanelCanvas_Map.size != 0){
-            layer.msg('只允许一个层!');
-            return
-        }
-        Layer_Mould_json = JSON.parse(Layer_Mould_List[i_id].T_text)
-
-        console.log("释放 层 模型",Layer_Mould_json)
-        V_PanelCanvas = new f_canvas2(0,0,Layer_Mould_json.PanelCanvas_width, Layer_Mould_json.PanelCanvas_height, Layer_Mould_json.PanelCanvas_z, JSON.stringify(Layer_Mould_json.PanelCanvas_map),Layer_Mould_json.PanelCanvas_css)
-        V_PanelCanvas_Map.set(V_PanelCanvas.PanelCanvas_id,V_PanelCanvas)
-
-        //测试加载
-        // var loadData = [
-        //                 {text: "A0000001v_xx_7", rotate: 0, color: "rgb(255, 165, 0)", height: 70, width: 77, pageX: 89, pageY: 39}
-        // ];
-        for(var i = 0; i < Layer_Mould_json.Data_list.length; i++){
-            // rowjson = Layer_Mould_json.Data_list[i]
-            console.log("rowjson",Layer_Mould_json.Data_list[i])
-            V_PanelCanvas.F_CreateBox(Layer_Mould_json.Data_list[i]);
-        }
-        // $.each(, function (i, row) {
-        //
-        //     //
-        // });
-
-
-    }
-
-    // - 添加面板
-    function f_Add_NewLayer() {
-
-
-        V_PanelCanvas = new f_canvas2(0,0,600, 600, 0, "{ \"sn_sn\": \"\" }","")
-        V_PanelCanvas_Map.set(V_PanelCanvas.PanelCanvas_id,V_PanelCanvas)
-
-
-    }
-
-
-
-
-    ///////////------------
-    //获得元素
-    var lis = document.querySelectorAll('#tab-header span');
-    var content = document.querySelectorAll('#tab-content .dom');
-
-    // 遍历1级菜单里的li元素
-    for (var i = 0; i < lis.length; i++) {
-
-        // onmouseenter、onmousemove与mousemove的区别:
-        // 其支持冒泡,所以当鼠标移入或鼠标移入其子元素的时候都会触发相关事件
-        // 其不支持冒泡,所以当鼠标移入这个元素本身的时候会触发相关事件
-        // 不支持冒泡事件,当鼠标在元素上移动的时候会触发相关事件
-        lis[i].onclick = ( function (i) {
-            return function () {
-                for (var j = 0; j < lis.length; j++) {
-                    content[j].style.display = 'none';
-                    lis[j].style.color = '';
-                    lis[j].style.border = '1px solid #e5e5e5';
-                }
-                content[i].style.display = 'block';
-                lis[i].style.color = '#69d1ff';
-                lis[i].style.border = '2px solid #69d1ff';
-            }
-        })(i)
-    }
-    lis[0].onclick()
-
-</script>
-<!--// 左侧 工具 - 设备 -->
-<script>
-    // 更新列表
-    function f_PanelTool_Device_List() {
-        $('#PanelTool_Device_List').html("")
-        for (let i = 0; i < Device_List.length; i++) {
-            $('#PanelTool_Device_List').append("" +
-                "<div style='padding: 4px;margin: 5px;border:1px solid #ececec;' > " +
-                "<div>SN:"+Device_List[i].T_sn+"</div>"+
-                Device_List[i].T_name+"["+Device_List[i].T_id+"]" +
-                "</div>")
-        }
-    }
-    function open_menu(Id) {
-        layer.open({
-            title: "设备参数配置 ",
-            type: 2,
-            area: ['500px', '630px'],
-            fix: false, //不固定
-            maxmin: false,
-            content: "../../DeviceCh/DeviceChParameter_Id_Html?Id="+Id,
-            shadeClose:true,
-            anim: 1,
-            isOutAnim: false,
-
-        });
-
-    }
-
-</script>
-
-
-<!--文件上传-->
-<script src="https://cdn.staticfile.org/qiniu-js/3.4.0/qiniu.min.js"></script>
-<script>
-    var F_c=function(up_url) {}
-    // F_c = function(up_url) {
-    //     if (H_img_id.length > 1) {
-    //         $("#" + H_img_id).attr("src", up_url)
-    //     }
-    // }
-    $("#UpLoadFile").change(function () {
-        let file = this.files[0];
-        console.log(file)
-        filesplit = file.type.split("/")
-        console.log("filesplit:",filesplit[filesplit.length-1])
-        $.ajax({
-            type: 'POST',
-            url: '../../Config/UpFileToken',//发送请求
-            data: {
-                T_suffix: filesplit[filesplit.length-1],
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    f_upload(file, result.Data)
-                }
-            }
-        });
-    })
-
-    function f_upload(file, token) {
-        // let file = this.files[0];
-        let config = {
-            useCdnDomain: true,
-            region: qiniu.region.z2,
-            debugLogLevel: 'INFO',
-            useCdnDomain: true, // 表示是否使用 cdn 加速域名
-        };
-        let putExtra = {
-            fname: "",
-            params: {},
-            mimeType: null
-        };
-        // 设置next,error,complete对应的操作,分别处理相应的进度信息,错误信息,以及完成后的操作
-        var error = function (err) {
-            console.log(err);
-            alert("上传出错")
-        };
-        var complete = function (res) {
-            console.log(res)
-            if (res.key) {
-                console.log("url:", res.key)
-                F_c(res.key)
-                // if (H_img_id.length > 1) {
-                //     $("#" + H_img_id).attr("src", res.key)
-                //     H_img_id = ""
-                // }
-            }
-        };
-        var next = function (response) {
-            console.log(response)
-        };
-        var subObject = {
-            next: next,
-            error: error,
-            complete: complete
-        };
-        let subscription;
-        // 调用sdk上传接口获得相应的observable,控制上传和暂停
-        let observable = qiniu.upload(file, "key", token, putExtra, config);
-        subscription = observable.subscribe(subObject);
-    }
-</script>
-
-
-<!-- 资源库 -->
-<script>
-    var ConfigImg_List = []
-    var Device_List = []
-    var Device_List_map = new Map();
-    var ConfiglibImg_T_str = "";
-    var ConfiglibImg_page = 1;
-
-    function f_PaneView_Post(my) {
-        Attribute_my = my
-        $.ajax({
-            type: 'POST',
-            url: '../../Panel/PaneView_Post',//发送请求
-            data: {
-                T_text: "",
-                T_width: 1920,
-                T_height: 1080,
-                T_css: "",
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    $(Attribute_my).val(result.Data)
-                } else {
-                    layer.msg('新建面板失败!');
-
-                }
-            }
-        });
-    }
-    function f_ConfigImg_List() {
-        $.ajax({
-            type: 'POST',
-            url: '../../Config/ConfigImg_List',//发送请求
-            data: {
-                page: 1,
-                page_z: 9999,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    ConfigImg_List = result.Data.List
-
-                } else {
-                    layer.msg('获取图片失败!');
-                }
-            }
-        });
-    }
-
-    var ConfiglibImg_List = []
-    var ConfiglibImg_page = 0;
-    var ConfiglibImg_T_str = ""
-    function f_ConfiglibImg_List_inti(T_str0) {
-
-        ConfiglibImg_List = []
-        ConfiglibImg_page = 0;
-        ConfiglibImg_T_str = T_str0
-
-        // 更新列表
-        $('#open_layer_Data_List').html("")
-        $('#open_layer_Data_List').append("<div style='width: 100px;height: 120px;float: left;margin: 6px;text-align: center;'> " +
-            "<img onclick='f_attribute_Configlibimg_UpLoadFile();keyCode_70 = {}' style='padding: 4px;margin: 5px;border:1px solid #ececec;' src=\"https://standardoss.baozhida.cn/UpImage/2ac296ef-6a6f-4bfe-a5dc-79f4a565962d.png\" width=\"70\" height=\"70\"> " +
-            "<span>上传图片</span>"+
-            "</div>")
-
-        return
-
-    }
-    function f_ConfiglibImg_List() {
-        ConfiglibImg_page += 1;
-        $.ajax({
-            type: 'POST',
-            url: '../../Config/ConfiglibImg_List',//发送请求
-            data: {
-                T_str0: ConfiglibImg_T_str,
-                page: ConfiglibImg_page,
-                page_z: 200,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    for (let i = 0; i < result.Data.List.length; i++) {
-                        ConfiglibImg_List.push(result.Data.List[i])
-                        $('#open_layer_Data_List').append("<div style='width: 100px;height: 120px;float: left;margin: 6px;text-align: center;'> " +
-                            "<img onclick='f_attribute_Configlibimg_choice(" + (ConfiglibImg_List.length - 1) + ");keyCode_70 = {}' style='padding: 4px;margin: 5px;border:1px solid #ececec;' src=\"" + result.Data.List[i].T_img0 + "\" width=\"70\" height=\"70\"> " +
-                            "<span>"+ result.Data.List[i].T_str0+"</span>"+
-                            "</div>")
-
-                    }
-
-                } else {
-                    layer.msg('获取图片失败!');
-                }
-            }
-        });
-    }
-
-    function f_Device_List(T_name) {
-
-        $.ajax({
-            type: 'POST',
-            url: '../../../Data/Device_Sensor_List',//发送请求
-            data: {
-                // T_sn: T_sn,
-                T_name: T_name,
-                // T_class_id: parseInt(T_class_id),
-                page: 1,
-                page_z: 30,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    Device_List_r = result.Data.DeviceSensor_lite
-                    for (let i = 0; i < Device_List_r.length; i++) {
-                        Device_List_map.set(Device_List_r[i].T_sn,Device_List_r[i]);
-                        Device_List.push(Device_List_r[i])
-                    }
-                    f_PanelTool_Device_List()
-                } else {
-                    layer.msg('获取主设备失败!');
-                }
-            }
-        });
-    }
-
-</script>
-
-
-<!--图片组选择-->
-<script>
-    var Attribute_my = {}
-    var Attribute_layer_id = 0
-    function f_attribute_imggroup(my) {
-        Attribute_my = my
-        Attribute_layer_id = layer.open({
-            title: '请选择 图标',
-            type: 1,
-            area: [($(window).width() * 0.9) + 'px', ($(window).height() - 50) + 'px'],
-            fix: false, //不固定
-            maxmin: false,
-            content: $('#open_layer_Data_List'),
-            shadeClose: true,
-            anim: 1,
-            shade: 0.4,
-            isOutAnim: false,
-            scrollbar: false,
-        });
-        // 更新列表
-        $('#open_layer_Data_List').html("")
-        for (let i = 0; i < ConfigImg_List.length; i++) {
-            $('#open_layer_Data_List').append("<img onclick='f_attribute_ConfigImg_choice(" + i + ")' style='padding: 4px;margin: 5px;border:1px solid #ececec;' src=\"" + ConfigImg_List[i].T_img1 + "\" width=\"70\" height=\"70\">")
-        }
-    }
-
-
-    function f_attribute_ConfigImg_choice(id) {
-        img_str = ConfigImg_List[id].T_img0 +"|"+ ConfigImg_List[id].T_img1+"|"+ ConfigImg_List[id].T_img2+"|"+ ConfigImg_List[id].T_img3+"|"+ ConfigImg_List[id].T_img4+"|"+ ConfigImg_List[id].T_img5
-        console.log($(Attribute_my))
-        $(Attribute_my).val(img_str)
-
-        //关闭当前frame
-        console.log(Attribute_layer_id)
-        layer.close(Attribute_layer_id);
-    }
-
-
-</script>
-
-<!--CSS 自定义样式-->
-<script>
-    // 初始化 CSS 自定义样式
-    function f_attribute_css_inti() {
-        // $("#S_open_layer_css_layer_background_img").val("")
-        // $("#S_open_layer_css_layer_backgroundcolour_colour1").val("")
-    }
-    function f_attribute_libimg(my) {
-        Attribute_my = my
-        Attribute_layer_id = layer.open({
-            title: '请选择 图片(按 f 搜索关键字)',
-            type: 1,
-            area: [($(window).width() * 0.9) + 'px', ($(window).height() - 50) + 'px'],
-            fix: false, //不固定
-            maxmin: false,
-            content: $('#open_layer_Data_List'),
-            shadeClose: true,
-            anim: 1,
-            shade: 0.4,
-            isOutAnim: false,
-            scrollbar: false,
-            end:function () {
-                keyCode_70 = {}
-            }
-        });
-        console.log("Attribute_layer_id   layer:",Attribute_layer_id)
-
-
-        //
-        //
-        // layer.open($.extend({
-        //     btn: ["&#x786E;&#x5B9A;", "&#x53D6;&#x6D88;"],
-        //     content: "e",
-        //     skin: "layui-layer-prompt" + b("prompt"),
-        //     success: function (a) {
-        //         d = a.find(".layui-layer-input"), d.focus()
-        //     },
-        //     yes: function (b) {
-        //         var e = d.val();
-        //         "" === e ? d.focus() : 0 > (a.maxlength || 500) ? layer.tips("&#x6700;&#x591A;&#x8F93;&#x5165;" + (a.maxlength || 500) + "&#x4E2A;&#x5B57;&#x6570;", d, {tips: 1}) : c && c(e, b, d)
-        //     }
-        // }, a))
-
-
-        //
-        keyCode_70 = function () {
-            AAAA = layer.prompt({
-                type:1,
-                title: '请输 搜索关键字',
-                formType: 0,
-                value: ""
-            }, function (value, index, elem) {
-                //
-                console.log(value)
-                console.log(index)
-                layer.close(index);
-                f_ConfiglibImg_List_inti(value)
-                f_ConfiglibImg_List()
-            });
-            console.log("搜索关键字 layer:",AAAA)
-        }
-        f_ConfiglibImg_List_inti("")
-        f_ConfiglibImg_List()
-        // 滚轮 触发
-        $(".layui-layer-content").scroll(function () {
-            nScrollHight = $(this)[0].scrollHeight;
-            nScrollTop = $(this)[0].scrollTop;
-            if(nScrollTop + $(".layui-layer-content").height() >= nScrollHight)   {
-                //加载loadHotService();
-
-                console.log("n")
-                f_ConfiglibImg_List()
-            }
-
-        });
-
-
-
-
-    }
-
-    function f_attribute_Configlibimg_UpLoadFile() {
-        $('#UpLoadFile').click();
-        F_c = function(up_url) {
-            $(Attribute_my).val(up_url)
-            //关闭当前frame
-            layer.close(Attribute_layer_id);
-        }
-    }
-    function f_attribute_Configlibimg_choice(id) {
-        img_str = ConfiglibImg_List[id].T_img0
-        console.log($(Attribute_my))
-        $(Attribute_my).val(img_str)
-
-        //关闭当前frame
-        console.log(Attribute_layer_id)
-        layer.close(Attribute_layer_id);
-    }
-</script>
-
-<!--文字组选择-->
-<script>
-
-    function f_attribute_Textgroup(my) {
-        Attribute_my = my
-        Attribute_layer_id = layer.open({
-            title: '请选择 图标',
-            type: 1,
-            area: [($(window).width() * 0.9) + 'px', ($(window).height() - 50) + 'px'],
-            fix: false, //不固定
-            maxmin: false,
-            content: $('#open_layer_Data_List'),
-            shadeClose: true,
-            anim: 1,
-            shade: 0.4,
-            isOutAnim: false,
-            scrollbar: false,
-        });
-        // 更新列表
-        $('#open_layer_Data_List').html("")
-        for (let i = 0; i < ConfigImg_List.length; i++) {
-            $('#open_layer_Data_List').append("<img onclick='f_attribute_ConfigText_choice(" + i + ")' style='padding: 4px;margin: 5px;border:1px solid #ececec;' src=\"" + ConfigImg_List[i].T_img1 + "\" width=\"70\" height=\"70\">")
-        }
-    }
-    function f_attribute_ConfigText_choice(id) {
-        img_str = ConfigImg_List[id].T_str0 +"|"+ ConfigImg_List[id].T_str1+"|"+ ConfigImg_List[id].T_str2+"|"+ ConfigImg_List[id].T_str3+"|"+ ConfigImg_List[id].T_str4+"|"+ ConfigImg_List[id].T_str5
-        console.log($(Attribute_my))
-        $(Attribute_my).val(img_str)
-
-        //关闭当前frame
-        console.log(Attribute_layer_id)
-        layer.close(Attribute_layer_id);
-    }
-
-</script>
-
-
-<!--主设备选择-->
-<script>
-
-    f_attribute_Device_List_page = 1
-    f_attribute_Device_List_name = ""
-    function f_attribute_Device_List(page) {
-        f_attribute_Device_List_page = page
-
-        console.log("f_attribute_Device_List_name:",f_attribute_Device_List_name)
-        $.ajax({
-            type: 'POST',
-            url: '../../../Data/Device_Sensor_List',//发送请求
-            data: {
-                // T_sn: T_sn,
-                T_name: f_attribute_Device_List_name,
-                // T_class_id: parseInt(T_class_id),
-                page: f_attribute_Device_List_page,
-                page_z: 30,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    Device_List_r = result.Data.DeviceSensor_lite
-                    for (let i = 0; i < Device_List_r.length; i++) {
-                        $('#open_layer_Data_List').append("<div onclick=\"f_attribute__Device_choice(\'" + Device_List_r[i].T_sn + "\',\'" + Device_List_r[i].T_id + "\',\'\')\" style='padding: 4px;margin: 5px;border:1px solid #ececec;height: 40px' > " +
-                            "<div>SN:"+Device_List_r[i].T_sn+"["+Device_List_r[i].T_id+"]" +"</div>"+
-                            Device_List_r[i].T_name+
-                            "</div>")
-                    }
-                } else {
-                    layer.msg('获取主设备失败!');
-                }
-            }
-        });
-    }
-
-    function f_attribute_Device(my,duo) {
-        Attribute_my = my
-        Attribute_layer_id = layer.open({
-            title: '请选择 设备',
-            type: 1,
-            area: ['385px', ($(window).height() - 150) + 'px'],
-            fix: false, //不固定
-            maxmin: false,
-            content: $('#open_layer_Data_List'),
-            shadeClose: true,
-            anim: 1,
-            shade: 0.4,
-            isOutAnim: false,
-            scrollbar: true
-        });
-
-        $(".layui-layer-content").scroll(function () {
-            var scrollTop = $(this).scrollTop();
-            var scrollHeight = $("#open_layer_Data_List").height();
-            var windowHeight = $(this).height();
-            // console.log("scrollTop:",scrollTop,"      scrollHeight:",scrollHeight,"       windowHeight:",windowHeight)
-
-            if (scrollTop + windowHeight > scrollHeight) {
-                f_attribute_Device_List_page += 1
-                f_attribute_Device_List(1)
-                // alert('滑动到底部了')
-            }
-        });
-
-
-        // $('#open_layer_Data_List').css("height",($(window).height() - 150) + 'px')
-
-        f_attribute_Device_list_init()
-
-    }
-    function f_attribute_Device_list_init() {
-        f_attribute_Device_List_name = $("#D_Name").val()
-        // 更新列表
-        $('#open_layer_Data_List').html("    " +
-            "<div style='user-select: auto;' class=\"layui-input-block\">\n" +
-            "  <input id='D_Name' type=\"text\" name=\"title\" required  placeholder=\"请输入 名称\" autocomplete=\"off\" class=\"layui-input\">  " +
-            "   <button class=\"layui-btn\" onclick='f_attribute_Device_list_init()'>搜索</button> \n" +
-            "</div>")
-
-        f_attribute_Device_List(1)
-    }
-
-
-
-
-    function f_attribute__Device_choice(sn,id,duo) {
-        console.log($(Attribute_my))
-        if(duo.length > 0){
-            $(Attribute_my).val($(Attribute_my).val() + sn + "-" + id+ ""  + duo )
-        }else {
-            $(Attribute_my).val(sn + "-" + id )
-        }
-
-
-        //关闭当前frame
-        console.log(Attribute_layer_id)
-        layer.close(Attribute_layer_id);
-    }
-
-</script>
-
-<!--主设备 通道 选择-->
-<script>
-    function f_attribute_DeviceCh(my,value_map) {
-        // S_sn = $("#S_sn_sn").val()
-        // console.log("S_sn:",S_sn)
-        // if(S_sn == "[-{sn}-]"){
-        //     console.log("value_map:",value_map)
-        //     S_sn = value_map
-        // }
-        //
-        // if(S_sn == undefined){
-        //     alert("主设备(SN)参数异常,如果是全局SN,请先配置 层 SN参数!")
-        //     return
-        // }
-        //
-        // if(!Device_List_map.has(S_sn)){                 //判断映射是否存在
-        //     alert("没有找到 主设备(SN) "+S_sn)
-        // }
-
-        Attribute_my = my
-        // console.log("S_sn:",S_sn)
-        Attribute_layer_id = layer.open({
-            title: '请选择 设备',
-            type: 1,
-            area: ['315px', ($(window).height() - 150) + 'px'],
-            fix: false, //不固定
-            maxmin: false,
-            content: $('#open_layer_Data_List'),
-            shadeClose: true,
-            anim: 1,
-            shade: 0.4,
-            isOutAnim: false,
-            scrollbar: false,
-        });
-        // 更新列表
-        $('#open_layer_Data_List').html("")
-
-        $('#open_layer_Data_List').append("<div id='attribute_ProductValue_List' style='padding: 4px;margin: 5px;border:1px solid #ececec;' > </div>")
-        f_attribute_DeviceCh_ProductValue_List()
-
-    }
-
-    function f_attribute_DeviceCh_ProductValue_List() {
-        // $.ajax({
-        //     type: 'POST',
-        //     url: '../../DeviceCh/DeviceCh_List',//发送请求
-        //     data: {
-        //         T_sn: T_sn,
-        //         page: 1,
-        //         page_z: 9999,
-        //     },
-        //     success: function (result) {
-        //         console.log(result)
-        //         if (result.Code == 200) {
-        //
-        //         } else {
-        //             layer.msg('获取主设备失败!');
-        //         }
-        //     }
-        // });
-
-        T_tab_list = []
-        T_tab_list.push({
-            T_tab:"T_sn",
-            T_name:"设备SN"
-        })
-        T_tab_list.push({
-            T_tab:"T_id",
-            T_name:"传感器ID"
-        })
-        T_tab_list.push({
-            T_tab:"T_name",
-            T_name:"设备名称"
-        })
-        T_tab_list.push({
-            T_tab:"T_t",
-            T_name:"温度"
-        })
-        T_tab_list.push({
-            T_tab:"T_rh",
-            T_name:"湿度"
-        })
-        T_tab_list.push({
-            T_tab:"T_Tlower",
-            T_name:"最低温度"
-        })
-        T_tab_list.push({
-            T_tab:"T_Tupper",
-            T_name:"最高温度"
-        })
-        T_tab_list.push({
-            T_tab:"T_RHlower",
-            T_name:"最低湿度"
-        })
-        T_tab_list.push({
-            T_tab:"T_RHupper",
-            T_name:"最高湿度"
-        })
-        T_tab_list.push({
-            T_tab:"T_Site",
-            T_name:"经纬度"
-        })
-        T_tab_list.push({
-            T_tab:"T_Dattery",
-            T_name:"电量"
-        })
-        T_tab_list.push({
-            T_tab:"T_monitor",
-            T_name:"监控状态"
-        })
-        T_tab_list.push({
-            T_tab:"T_time",
-            T_name:"时间"
-        })
-
-
-        for (let i = 0; i < T_tab_list.length; i++) {
-            $('#attribute_ProductValue_List').append("<div style='padding: 4px;margin: 5px;border:1px solid #ececec;' > " +
-                "<span onclick='f_attribute_DeviceCh_Tab_choice(\"" + T_tab_list[i].T_tab + "\")' >"+T_tab_list[i].T_tab+" -> "+T_tab_list[i].T_name+"</span>"+
-                // "<span onclick='f_attribute_DeviceCh_Tab_choice(" + result.Data[i].T_tab+"_"+ch_i + ")' style='float: right;color: #ff0300' >"+">>属性 </span>"+
-                "</div>")
-
-        }
-    }
-
-    function f_attribute_DeviceCh_Tab_choice(tab) {
-        console.log($(Attribute_my))
-        $(Attribute_my).val(tab )
-
-        //关闭当前frame
-        console.log(Attribute_layer_id)
-        layer.close(Attribute_layer_id);
-    }
-
-</script>
-
-<!--颜色选择-->
-<script src="{{.OSS_Static}}/panel/colorpicker.js"></script>
-<script type="text/javascript">
-    // 编辑框
-    function f_attribute_color(my) {
-        Attribute_my = my
-        console.log("Attribute_my:",Attribute_my)
-        Colorpicker.create({
-            el: Attribute_my.id, //元素id
-            color: $(Attribute_my).val(), //默认颜色
-            change: function (elem, hex) {
-                console.log(hex)
-                //选中颜色发生改变时事件
-                // elem.style.backgroundColor = hex;
-                $(Attribute_my).val(hex)
-                $(Attribute_my).css("backgroundColor",hex)
-
-            }
-        })
-    }
-    // 组件背景
-    function f_assembly_bcolor(curNum) {
-
-
-
-        layer.open({
-            title:"调色板",
-            type: 1,
-            content: '<div id=\'f_assembly_bcolor\' style="width: 200px;height: 40px;background-color: '+curNum.css('background-color')+'" >   </div>' //这里content是一个普通的String
-        });
-
-        Attribute_my = document.getElementById("f_assembly_bcolor")
-        console.log("Attribute_my:",Attribute_my)
-        Colorpicker.create({
-            el: Attribute_my.id, //元素id
-            color: curNum.css('background-color'), //默认颜色
-            change: function (elem, hex) {
-                console.log(hex)
-                //选中颜色发生改变时事件
-                elem.style.backgroundColor = hex;
-                // $(Attribute_my).val(hex)
-                curNum.css('background-color', hex);
-            }
-        })
-    }
-</script>
-<!--图片选择-->
-<script type="text/javascript">
-    // 图片 回调函数
-    function f_attribute_img(my) {
-        $('#UpLoadFile').click();
-        F_c = function(up_url) {
-            $(my).val(up_url)
-        }
-    }
-
-</script>
-
-<!--远程执行-->
-<script>
-    // var Data_Write_Map = new Map();
-    // // 执行  V_id 标识出发位置,用来 反馈执行结果
-    // function f_Data_Write(V_id,T_sn,T_tab,T_value) {
-    //     $.ajax({
-    //         type: 'POST',
-    //         url: '../../Device/Data_Write',//发送请求
-    //         async: false,
-    //         data: {
-    //             T_sn:T_sn,
-    //             T_tab:T_tab,
-    //             T_value:T_value,
-    //         },
-    //         success: function(result) {
-    //             console.log(result)
-    //             pubSub.publish(T_sn+'/'+T_tab, T_value);
-    //             f_Public_Value_set(T_sn+'/'+T_tab, T_value)  //同步缓存数据
-    //
-    //             Data_Write_Map.set(result.Data,{V_id:V_id,Munm:1});
-    //         }
-    //     });
-    // }
-    // setInterval(function(){
-    //     // 遍历
-    //     $(".Mid").remove() //  清空
-    //     for(let [Mid,v] of Data_Write_Map) {
-    //         console.log("Mid:", Mid,v);
-    //         Data_Write_Map.set(Mid,{V_id:v.V_id,Munm:v.Munm + 1});
-    //         if(v.Munm > 3 && v.Munm < 20 && v.Munm % 2 == 0){
-    //             $("body").append('<div class="Mid" style="user-select: none;position: absolute;left: '+$("#"+v.V_id).offset().left+'px;top: '+$("#"+v.V_id).offset().top+'px;z-index: 999999999999999;width: 20px;height: 20px;background-color:rgb(255, 0, 0);border-radius: 25px;"></div>')
-    //         }
-    //
-    //         if(v.Munm > 10){
-    //             Del_Mid(Mid)
-    //         }
-    //     }
-    // },1000);
-    //
-    //
-    // function Del_Mid(Mid) {
-    //     if(Data_Write_Map.has(Mid)){                 //判断映射是否存在
-    //         // console.log("delete:",Data_Write_Map.get(Data_Write_Map))
-    //         Data_Write_Map.delete(Mid);
-    //     }
-    // }
-    //
-    // function Err_Mid(Mid) {
-    //     // if(Data_Write_Map.has(Mid)){                 //判断映射是否存在
-    //     //     console.log(Data_Write_Map.get(Data_Write_Map))
-    //     // }
-    // }
-</script>
-<script>
-    function BrowserType()
-    {
-        var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
-        var isOpera = userAgent.indexOf("Opera") > -1; //判断是否Opera浏览器
-        var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera; //判断是否IE浏览器
-        var isEdge = userAgent.indexOf("Windows NT 6.1; Trident/7.0;") > -1 && !isIE; //判断是否IE的Edge浏览器
-        var isFF = userAgent.indexOf("Firefox") > -1; //判断是否Firefox浏览器
-        var isSafari = userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Chrome") == -1; //判断是否Safari浏览器
-        var isChrome = userAgent.indexOf("Chrome") > -1 && userAgent.indexOf("Safari") > -1; //判断Chrome浏览器
-
-        if (isIE)
-        {
-            var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
-            reIE.test(userAgent);
-            var fIEVersion = parseFloat(RegExp["$1"]);
-            return {name:"IE",num: fIEVersion};
-        }//isIE end
-
-        if (isFF) { return {name:"FF",num: "FF"};}
-        if (isOpera) { return {name:"Opera",num: "Opera"};}
-        if (isSafari) { return {name:"Safari",num: "Safari"};}
-        if (isChrome) { return {name:"Chrome",num: "Chrome"};}
-        if (isEdge) { return {name:"Edge",num: "Edge"};}
-    }
-    Browser = BrowserType();
-
-
-</script>
-</body>
-</html>
-
-<!-- 通讯协议标准
-    头:sn+ch      如: A0000001v_xx_1
-
-    v_xx_1 : 值
-    v_xx_1-img : 对应图片
-    v_xx_1-color : 对应颜色
-    v_xx_1-bimg : 对应图片
-    v_xx_1-bcolor : 对应颜色
-
--->

+ 0 - 2420
views/Panel/PanelE_.html

@@ -1,2420 +0,0 @@
-<!doctype html>
-<html>
-<title>宝智达物联网平台-面板编辑器</title>
-<head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-    <script type="text/javascript" src="{{.OSS_Static}}/panel/jquery.min.js"></script>
-    <script type="text/javascript" src="{{.OSS_Static}}/panel/layer/layer.js"></script>
-    <script type="text/javascript" src="{{.OSS_Static}}/panel/context/context.js"></script>
-    <script type="text/javascript" src="{{.OSS_Static}}/panel/drag.js"></script>
-    <link rel="stylesheet" type="text/css" href="{{.OSS_Static}}/panel/context/context.standalone.css">
-    <!--右侧菜单-->
-    <link rel="stylesheet" type="text/css" href="{{.OSS_Static}}/panel/SlidePushMenus/css/default.css"/>
-    <link rel="stylesheet" type="text/css" href="{{.OSS_Static}}/panel/SlidePushMenus/css/component.css"/>
-    <script src="{{.OSS_Static}}/panel/SlidePushMenus/js/modernizr.custom.js"></script>
-    <script src="{{.OSS_Static}}/panel/SlidePushMenus/js/classie.js"></script>
-    <!--    <script src="{{.OSS_Static}}/panel/toggle/togglestyle.css"></script>-->
-    <link rel="stylesheet" type="text/css" href="https://www.jq22.com/demo/csstoggle202003032356/style.css"/>
-
-
-
-    <style type="text/css">
-        html, body {
-            margin: 0;
-            padding: 0;
-            overflow: hidden;
-        }
-
-
-        .transparent {
-            filter: alpha(opacity=50);
-            -moz-opacity: 0.5;
-            -khtml-opacity: 0.5;
-            /*opacity: 0.5; // 模糊*/
-        }
-
-        .box {
-            width: 200px;
-            height: 100px;
-            cursor: move;
-            position: absolute;
-            top: 30px;
-            left: 30px;
-            z-index: 99;
-        }
-
-        .box .bg {
-            width: 100%;
-            height: 100%;
-            background-color: orange;
-        }
-
-        .box .coor {
-            width: 10px;
-            height: 10px;
-            overflow: hidden;
-            cursor: se-resize;
-            position: absolute;
-            right: 0;
-            bottom: 0;
-            background-color: red;
-            z-index: 9999999999;
-        }
-
-        .box .content {
-            position: absolute;
-            left: 50%;
-            top: 50%;
-            z-index: 99;
-            text-align: center;
-            font: bold 14px/1.5em simsun;
-        }
-
-        #debug {
-            position: absolute;
-            right: 10px;
-            top: 10px;
-            z-index: 88;
-            border: 1px solid #ccc;
-            width: 100px;
-            height: 100px;
-            background: #fff;
-        }
-
-        #toolbar {
-            position: absolute;
-            left: 10px;
-            top: 10px;
-            z-index: 88;
-        }
-
-    </style>
-
-    <style>
-
-
-        .help-left {
-            width: 310px;
-            font-family: 'microsoft YaHei';
-            float: left;
-            overflow-x: hidden;
-            max-height: 100%;
-            overflow-y: auto;
-        }
-
-        .menu {
-            border-left: 1px solid #ccc;
-            border-right: 1px solid #ccc;
-            background-color:#FEFEFE;
-            width:100%;
-            float: left;
-        }
-
-        .menu:last-child {
-            border-bottom: 1px solid #ccc;
-        }
-
-
-        .menu summary {
-            height: 40px;
-            line-height: 40px;
-            text-indent: 10px;
-            outline: none;
-            font-size: 14px;
-            font-weight: 700;
-            border-top: 1px solid #ddd;
-            background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #FEFEFE), color-stop(1, #CCCCCC));
-            cursor: pointer;
-            width:100%;
-            float: left;
-            text-align: left;
-        }
-
-
-        .menu summary::-webkit-details-marker {
-            display: none;
-
-        }
-
-
-
-
-        .menu .divul {
-
-            padding: 10px 0;
-            clear:left;
-            width:100%;
-            float: left;
-            margin-left: 1px;
-        }
-
-
-        .menu .divulli {
-            padding: 10px 0;
-            width:97px;
-            height: 100px;
-            float: left;
-            cursor: move;
-        }
-        .menu .divulli img {
-            width:60px;
-            height:60px;
-            -webkit-user-select: none;
-            cursor: default;
-            pointer-events: none;
-        }
-        .menu .divulli div {
-            width:97%;
-            margin-top:-8px;
-            overflow: hidden;
-            text-overflow: ellipsis;
-            white-space: nowrap;
-            text-align: center;
-            display:inline-block
-        }
-        .menu .divulli pre {
-            width:0px;
-            height:0px;
-            overflow: hidden;
-        }
-        .menu .divulli:hover {
-            background-color: #ececec;
-            /*text-decoration: underline;*/
-
-        }
-
-    </style>
-
-    <style>
-
-        #tab-header span {
-
-            padding: 0px 10px ;
-            height: 38px;
-            font-size: 20px;
-            border-radius: 5px;
-            padding-bottom: 10px;
-            padding-top: 4px;
-        }
-
-        #tab-content .dom {
-            display: none;
-        }
-
-
-        .open_layer_layui-layer-input {
-            /*display: block;*/
-            width: 220px;
-            height: 30px;
-            margin: 0 auto;
-            line-height: 30px;
-            padding: 0 5px;
-            border: 1px solid #ccc;
-            box-shadow: 1px 1px 5px rgba(0, 0, 0, .1) inset;
-            color: #333;
-            user-select: auto;
-        }
-        #open_layer_save_layer button {
-            display: block;
-            height: 38px;
-            line-height: 38px;
-            border: 1px solid transparent;
-            padding: 0 18px;
-            margin: 20px auto;
-            background-color: #1E9FFF;;
-            color: #fff;
-            white-space: nowrap;
-            text-align: center;
-            font-size: 14px;
-            border-radius: 2px;
-            cursor: pointer;
-        }
-        .layer_mode_tab{
-            position: absolute;
-            bottom: 0px;
-            right: 300px;
-            background-color: #9AD4FF69;
-            color: #0093FF;
-            padding: 6px;
-            height: 23px;
-            z-index:999999999999999999999;
-            border-radius: 5px;
-        }
-        .layer_tool_tab{
-            position: absolute;
-            top: 0;
-            left: 10px;
-            /*background:#FFF;*/
-            width: 100%;
-            height: 30px;
-            z-index:999999999999999999999;
-        }
-        .layer_tool_tab button {
-            height: 28px;
-            line-height: 28px;
-            float: left;
-            border: 1px solid transparent;
-            padding: 0 18px;
-            margin: 1px;
-            background-color: #1E9FFF;;
-            color: #fff;
-            white-space: nowrap;
-            text-align: center;
-            font-size: 12px;
-            border-radius: 2px;
-            cursor: pointer;
-        }
-        .layer_tool_tab  button:hover {
-            background-color: #0092ff;;
-            font-size: 12px;
-        }
-
-        .PanelCanvas_div{
-            cursor: default;
-            user-select: none;
-            position: absolute;
-            border: 2px dashed rgb(204, 204, 204);
-            /*padding: 10px;*/
-        }
-
-        .PanelCanvas_rel_div{
-            border: 2px dashed rgb(204, 204, 204);
-        }
-
-        .gridbackground { /*网格背景*/
-            /*90度直线,100灰度,0.1透明度,5%宽度,0透明度背景*/
-            background: linear-gradient(90deg, rgba(141, 128, 128, 0.1) 5%, transparent 0),
-                /*0度直线,100灰度,0.1透明度,5%宽度,0透明度背景*/
-            linear-gradient(rgba(100, 100, 100, 0.1) 5%, transparent 0);
-            /*横纵向宽距*/
-            background-size: 20px 20px;
-        }
-    </style>
-</head>
-
-<div id="open_layer_Data_List" hidden style="">
-
-
-</div>
-
-<div id="open_layer_save_layer" hidden style="padding:20px">
-    <div style="">面板名称:</div>
-    <input id='open_layer_save_layer_name' ondblclick='f_attribute_Device(this)' type="'text'" class="open_layer_layui-layer-input" value="">
-    <div style="margin-top: 20px;">面板图片:</div>
-    <input id='open_layer_save_layer_img' ondblclick='f_attribute_img(this)' type="'text'" class="open_layer_layui-layer-input" value="">
-    <button onclick="f_Save_layer_choice()">保存为面板</button>
-</div>
-<!--瀑瀑模式 - 数据来源-->
-<div id="open_layer_data_layer" hidden style="padding:20px;">
-    <div style="width: 100%;float: left;margin-top: 0px;margin-bottom: 10px">数据来源:</div>
-    <textarea id="open_layer_data_layer_textarea" class="layui-layer-prompt layui-layer-input"
-              style="width: 99%;height: 400px;user-select: auto;"></textarea>
-    <!--    <div style="float: left">-->
-    <!--        方式一:-->
-    <!--            插入SN,以换行符结束-->
-    <!--    </div>-->
-
-    <!--    <div style="float: left">-->
-    <!--        方式二:-->
-    <!--    </div>-->
-</div>
-
-<!--自定义 CSS-->
-<div id="open_layer_css_layer" hidden style="padding:20px;">
-    <!--    背景图片-->
-    <div style="width: 100%;float: left;margin: 10px 0px;">
-        <div style="width: 80px;float: left">
-            背景图片:
-        </div>
-        <div style="width: 170px;float: left">
-            <input id='S_open_layer_css_layer_background_img' ondblclick='f_attribute_libimg(this)' style="user-select: auto;" type='text'  class="layui-layer-input" value="">
-        </div>
-        <div style="width: 80px;float: left">
-            背景拉伸:
-        </div>
-        <div style="width: 100px;float: left">
-            <select id="S_open_layer_css_layer_background_select">
-                <option value=" no-repeat center center/100%;">缩放背景</option>
-                <option value=" no-repeat 100% 100%;">铺满背景</option>
-                <option value="  no-repeat;height:100%;width:100%;overflow: hidden;background-size:cover;">拉伸铺满</option>
-                <option value=" repeat;">重复背景</option>
-
-            </select>
-        </div>
-        <div style="width: 20px;float: left;margin-left: 10px;" onclick="S_open_layer_css_layer_background_on()">
-            +
-        </div>
-        <script>
-            function S_open_layer_css_layer_background_on() {
-                text = "background : url('"+$("#S_open_layer_css_layer_background_img").val()+"') "+$("#S_open_layer_css_layer_background_select").val()
-                $("#open_layer_css_layer_textarea").val($("#open_layer_css_layer_textarea").val()+"\n"+text)
-            }
-        </script>
-    </div>
-    <!--    背景颜色-->
-    <div style="width: 100%;float: left;margin: 10px 0px;">
-        <div style="width: 80px;float: left">
-            背景颜色:
-        </div>
-        <div style="width: 65px;float: left">
-            <input id='S_open_layer_css_layer_backgroundcolour_colour1' ondblclick='f_attribute_color(this)' style="width: 55px;" type='text' class="layui-layer-input">
-        </div>
-        <div style="width: 20px;float: left;margin-left: 10px;" onclick="S_open_layer_css_layer_backgroundcolour_colour1_on()">
-            +
-        </div>
-
-        <script>
-            function S_open_layer_css_layer_backgroundcolour_colour1_on() {
-                text = "background-color : "+$("#S_open_layer_css_layer_backgroundcolour_colour1").val()+";"
-                $("#open_layer_css_layer_textarea").val($("#open_layer_css_layer_textarea").val()+"\n"+text)
-            }
-        </script>
-        <div style="width: 80px;float: left">
-            颜色渐变:
-        </div>
-        <div style="width: 65px;float: left">
-            <input id='S_open_layer_css_layer_backgroundcolour_colour2' ondblclick='f_attribute_color(this)' style="width: 55px;" type='text' class="layui-layer-input">
-        </div>
-        <div style="width: 65px;float: left">
-            <input id='S_open_layer_css_layer_backgroundcolour_colour3' ondblclick='f_attribute_color(this)' style="width: 55px;" type='text' class="layui-layer-input">
-        </div>
-        <div style="width: 100px;float: left">
-            <select id="S_open_layer_css_layer_backgroundcolour_select" style="width: 90px;">
-                <option value="">从上到下</option>
-                <option value=" to right,">从左到右</option>
-                <option value=" to bottom right,">对角线</option>
-            </select>
-        </div>
-        <div style="width: 40px;float: left;margin-left: 10px;" onclick="S_open_layer_css_layer_backgroundcolour_colourgradient_on()">
-            +
-        </div>
-        <script>
-            function S_open_layer_css_layer_backgroundcolour_colourgradient_on() {
-                text = "background-image : linear-gradient("+$("#S_open_layer_css_layer_backgroundcolour_select").val()+""+$("#S_open_layer_css_layer_backgroundcolour_colour2").val()+", "+$("#S_open_layer_css_layer_backgroundcolour_colour3").val()+")"+";"
-                $("#open_layer_css_layer_textarea").val($("#open_layer_css_layer_textarea").val()+"\n"+text)
-            }
-        </script>
-    </div>
-
-
-    <div style="width: 100%;float: left;margin-top: 20px;margin-bottom: 10px">样式文本:</div>
-    <textarea id="open_layer_css_layer_textarea" class="layui-layer-prompt layui-layer-input"
-              style="width: 99%;height: 400px;user-select: auto;"></textarea>
-
-</div>
-
-<body >
-<input hidden type="file" id="UpLoadFile"/>
-
-<div id="PanelCanvas" class="gridbackground" draggable="true" style="user-select: none;height: 4000px;width: 4000px;position: absolute;left: 0px;top: 0px;background-color: #f0f0f0">
-
-    <!--    <div id="PanelCanvas1" >-->
-    <!--        <img src="{{.OSS_Static}}/images/demo_picture.jpg" />-->
-    <!--    </div>-->
-</div>
-
-<!--左側工具欄-->
-<div style="text-align:center;margin:50px 0; font:normal 14px/24px 'MicroSoft YaHei';">
-
-    <nav class="cbp-spmenu cbp-spmenu-vertical cbp-spmenu-right" id="menuRight">
-        <!--        <div onclick="f_on_menuLeft()" style="position: relative;left: -55px;width: 80px;height: 0px;color: #FFFFFF;font-size: 20px">-->
-        <!--            <span style="background-color: #47a3da;padding: 0px 6px"> ^ </span>-->
-        <!--        </div>-->
-        <h3>宝智达冷链科技</h3>
-
-
-
-        <!-- 选项卡部分 -->
-        <div id="tab">
-            <!-- 头部区域 -->
-            <div id="tab-header" style="background:#e5e5e5;height: 30px;padding-top: 10px;overflow-y: hidden;">
-
-                <span ondblclick="f_PanelTool_Device_List()">设备</span>
-                <span >基础</span>
-
-                <span >资源</span>
-                <!--                <span >模块</span>-->
-                <span >面板</span>
-                <!--                <span >高级</span>-->
-            </div>
-            <!-- 身体部分 -->
-            <div id="tab-content">
-                <!--                设备-->
-                <div class="dom" style="background-color: #FEFEFE;display:block  ">
-
-                    <div id="PanelTool_Device_List" style="padding-top: 10px;padding-bottom: 10px;overflow-x: hidden;overflow-y: auto;">
-
-
-                    </div>
-
-                </div>
-                <!--                基础-->
-                <div class="dom" style="display: block;">
-                    <section class="help-left">
-                        <details class="menu" open>
-                            <summary>基本组件</summary>
-                            <p draggable="true">这是一个可拖动的段落。</p>
-                            <div id="PanelTool_1" class="divul">
-                            </div>
-
-                        </details>
-                        <details class="menu" open>
-                            <summary>数据组件</summary>
-                            <div id="PanelTool_2" class="divul">
-                            </div>
-                        </details>
-                        <details class="menu" open>
-                            <summary>图表组件</summary>
-                            <div id="PanelTool_3" class="divul">
-                            </div>
-                        </details>
-                        <details class="menu" open>
-                            <summary>高级组件</summary>
-                            <div id="PanelTool_4" class="divul">
-                            </div>
-                        </details>
-
-                    </section>
-
-                </div>
-
-                <!--                资源-->
-                <div class="dom">
-                    <section class="help-left">
-                        <details class="menu" open>
-                            <summary>图标资源</summary>
-                            <div id="PanelSource_1" class="divul">
-                            </div>
-                        </details>
-
-                    </section>
-
-                </div>
-                <!-- 第二部分 -->
-                <!--                <div class="dom">-->
-                <!--                    222222222-->
-                <!--                </div>-->
-                <!-- 第二部分 -->
-                <div class="dom">
-
-                    <section class="help-left">
-                        <details class="menu" open>
-                            <summary>产品面板</summary>
-
-                            <div id="LayerMould_1" class="divul">
-                                <!--                        <div class="divulli" draggable="true" data-PanelToolId="1"  ondragleave="v_ondragleave(1)">-->
-                                <!--                            <img src="{{.OSS_Static}}/images/仪器控制.png">-->
-                                <!--                            <div>设备管理</div>-->
-                                <!--                        </div>-->
-
-
-                            </div>
-
-                        </details>
-                        <!--                            <details class="menu" open>-->
-                        <!--                                <summary>设备组件</summary>-->
-                        <!--                                <div id="LayerMould_2" class="divul">-->
-                        <!--                                    &lt;!&ndash;                        <div class="divulli" draggable="true" data-PanelToolId="1"  ondragleave="v_ondragleave(1)">&ndash;&gt;-->
-                        <!--                                    &lt;!&ndash;                            <img src="{{.OSS_Static}}/images/仪器控制.png">&ndash;&gt;-->
-                        <!--                                    &lt;!&ndash;                            <div>设备管理</div>&ndash;&gt;-->
-                        <!--                                    &lt;!&ndash;                        </div>&ndash;&gt;-->
-
-                        <!--                                </div>-->
-
-                        <!--                            </details>-->
-
-                    </section>
-
-                </div>
-                <!-- 第二部分 -->
-                <!--                <div class="dom">-->
-                <!--                    222222222-->
-                <!--                </div>-->
-
-
-            </div>
-        </div>
-
-
-
-
-    </nav>
-
-</div>
-
-<!--工程管理-->
-<div class="layer_tool_tab" >
-    <button onclick="f_Save()">保存</button>
-    <button onclick="f_PaneView_V();">返回视图</button>
-    <button onclick="T_viewid_setItem();">复制底板</button>
-    <button onclick="T_viewid_getItem();">粘贴底板</button>
-</div>
-<script>
-    function T_viewid_setItem()
-    {
-        localStorage.setItem("T_viewid",T_viewid);
-        console.log(localStorage.getItem("T_viewid")," OK!")
-
-    }
-    function T_viewid_getItem()
-    {
-        console.log("T_viewid:",localStorage.getItem("T_viewid"))
-        $.ajax({
-            type: 'POST',
-            url: '../../Panel/PaneView_Get',//发送请求
-            data: {
-                T_viewid: localStorage.getItem("T_viewid"),
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    T_PanelCanvas = result.Data
-                    PanelCanvas_mode = T_PanelCanvas.T_mode
-                    f_PanelCanvas_mode_0(result)
-
-
-                    switch (PanelCanvas_mode) {
-                        case 0:
-                            $("#PanelCanvas_mode").html("自由模式")
-                            break
-                        case 1:
-                            $("#PanelCanvas_mode").html("瀑瀑模式")
-
-                            break
-                        case 2:
-                            $("#PanelCanvas_mode").html("满屏模式")
-
-                            break
-                    }
-
-                    $("#PanelCanvas_wh").html("["+T_PanelCanvas.T_width+"*"+T_PanelCanvas.T_height+"]")
-                }
-            }
-        });
-    }
-
-</script>
-
-
-<!--面板模式-->
-<div class="layer_mode_tab" >
-    <span id="PanelCanvas_mode">自由模式</span>
-    <span id="PanelCanvas_wh">[1233*3222]</span>
-</div>
-
-<!--页面 加载完成后执行-->
-<script>
-    var OSS_Static = "{{.OSS_Static}}"  // 全局 资源地址
-    var USER_UUID = "{{.USER_UUID}}"  // 全局 USER_UUID
-    var T_viewid = "{{.T_viewid}}"  // 全局 USER_UUID
-    var PanelCanvas_lock = false; //区块锁定标识
-    var PanelCanvas_mode = 0; //0 自由模式    1 瀑瀑模式
-
-    // 页面 加载完成后执行
-    window.onload = function () {
-        console.log("页面 加载完成后执行")
-        f_keydown()
-
-
-        f_PanelTool_List()
-        f_Layer_Mould_List()
-        $('img').on('dragstart', function(event) { event.preventDefault(); });
-
-        // 资源
-        f_ConfigImg_List()
-        f_Device_List("")
-
-        f_PaneView_Get()
-
-    }
-
-    // 切换试图
-    function f_PaneView_V() {
-        ToUrl = decodeURIComponent("{{.ToUrl}}")
-        console.log("跳转:",ToUrl)
-        window.location.href=ToUrl
-    }
-
-    keyCode_70 = {}
-    // 按键 功能
-    function f_keydown() {
-
-        $(document).keydown(function(event){
-            console.log("keyCode:"+event.keyCode)
-            if(event.keyCode == 70){
-                console.log("keyCode_70:",keyCode_70)
-                keyCode_70()
-                return false
-            }
-            //
-            // if (event.ctrlKey && event.keyCode == 70) {
-            //     alert("‘Ctrl+Enter’");
-            // };
-            // switch (event.keyCode) {
-            //
-            // }
-            return true
-
-        });
-
-    }
-
-
-
-</script>
-
-<!--移动面板-->
-<script>
-    //创建拖拽方法
-    PanelCanvas_move = true
-
-    $("#PanelCanvas").mousedown(function(e){
-        if(!PanelCanvas_move){return;}
-
-        var canvas = $(this);
-        var pos = $(this).position();
-        this.posix = {'x': e.pageX - pos.left, 'y': e.pageY - pos.top};
-        $.extend(document, {'move': true, 'move_target': this, 'call_down' : function(e, posix){
-                canvas.css({
-                    'cursor': 'move',
-                    'top': e.pageY - posix.y,
-                    'left': e.pageX - posix.x
-                });
-            }, 'call_up' : function(){
-                canvas.css('cursor', 'default');
-            }});
-    })
-
-
-    function f_PanelCanvas_onmouseover() {
-        // console.log("进入")
-        PanelCanvas_move = false
-    }
-
-
-    function f_PanelCanvas_onmouseout() {
-        // console.log("出去")
-        PanelCanvas_move = true
-    }
-
-
-</script>
-<!--数据缓存-->
-<script>
-    var Public_Value_map = new Map();
-
-    //读取 同步缓存数据
-    function f_Public_Value_get(tab) {
-        if(Public_Value_map.has(tab)){                 //判断映射是否存在
-            return {V:Public_Value_map.get(tab),is:true}
-        }
-        return {V:0,is:false}
-    }
-    //设置 同步缓存数据
-    function f_Public_Value_set(tab,value) {
-        Public_Value_map.set(tab,value);      //添加设置映射
-
-    }
-
-</script>
-
-<!--画板入口-->
-<script src="{{.OSS_Static}}/panel/PanelCanvas.js"></script>
-<script>
-    // "#canvas"
-    //
-    // V_PanelCanvas1 =
-    // V_PanelCanvas2 = f_canvas2(500,500,"{{.OSS_Static}}/images/demo_picture.jpg")
-    var V_PanelCanvas_Map = new Map();
-    //
-    // V_PanelCanvas = new f_canvas2(500, 500, "{{.OSS_Static}}/images/demo_picture.jpg", 1, "{\"sn_sn\":\"866222050911984\",\"tab_tab\":\"v_do_2\",\"text1_text\":\"替换的文本\"}")
-    // V_PanelCanvas_Map.set(V_PanelCanvas.PanelCanvas_id,V_PanelCanvas)
-    // //测试加载
-    // var loadData = [
-    //
-    //     {text: "A0000001v_xx_7", rotate: 0, color: "rgb(255, 165, 0)", height: 70, width: 77, pageX: 89, pageY: 39}];
-    // $.each(loadData, function (i, row) {
-    //     V_PanelCanvas.F_CreateBox(row);
-    // });
-    //
-    //
-    // V_PanelCanvas = new f_canvas2(500, 500, "{{.OSS_Static}}/images/demo_picture.jpg", 1, "{\"sn_sn\":\"866222050911984\"}")
-    // V_PanelCanvas_Map.set(V_PanelCanvas.PanelCanvas_id,V_PanelCanvas)
-    // var loadData = [
-    //     {text: "A0000001v_xx_1", rotate: 1, color: "rgb(255, 255, 0)", height: 70, width: 77, pageX: 29, pageY: 64}
-    // ];
-    // $.each(loadData, function (i, row) {
-    //     V_PanelCanvas.F_CreateBox(row);
-    // });
-    // var V_PanelCanvas1 = new Function(f_canvas(500,500,"{{.OSS_Static}}/images/demo_picture.jpg"))
-    // var V_PanelCanvas2 = new Function(f_canvas(500,500,"{{.OSS_Static}}/images/demo_picture.jpg"))
-
-
-    Height = $(window).height();
-    $("#PanelTool_Device_List").css("height",(Height-125)+"px")
-    function f_PaneView_Get() {
-        $.ajax({
-            type: 'POST',
-            url: '../../Panel/PaneView_Get',//发送请求
-            data: {
-                T_viewid: "{{.T_viewid}}",
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    T_PanelCanvas = result.Data
-                    PanelCanvas_mode = T_PanelCanvas.T_mode
-                    f_PanelCanvas_mode_0(result)
-
-
-                    switch (PanelCanvas_mode) {
-                        case 0:
-                            $("#PanelCanvas_mode").html("自由模式")
-                            break
-                        case 1:
-                            $("#PanelCanvas_mode").html("瀑瀑模式")
-
-                            break
-                        case 2:
-                            $("#PanelCanvas_mode").html("满屏模式")
-
-                            break
-                    }
-
-                    $("#PanelCanvas_wh").html("["+T_PanelCanvas.T_width+"*"+T_PanelCanvas.T_height+"]")
-                } else {
-                    layer.msg('视图获取错误!');
-                    setTimeout(function(){
-                        //要执行的代码
-                        f_PaneView_Get()
-
-                    },2000);
-                }
-            }
-        });
-    }
-
-    // 自由模式
-    function f_PanelCanvas_mode_0(result) {
-        T_PanelCanvas = result.Data
-        // CSS 样式
-        $('#PanelCanvas').css({
-            width: T_PanelCanvas.T_width + "px",
-            height: T_PanelCanvas.T_height + "px"
-        });
-
-        // CSS 自定义样式
-        f_Up_css(T_PanelCanvas.T_css,"PanelCanvas")
-
-        // 加载 组件
-        if(result.Data.T_text.length < 10 ){
-            return;
-        }
-        PaneView_json = JSON.parse(result.Data.T_text)
-        for(var i = 0;i < PaneView_json.length;i++){
-            Layer_Mould_json = PaneView_json[i]
-            console.log("创建面板 PaneView_json",Layer_Mould_json)
-
-            V_PanelCanvas = new f_canvas2(Layer_Mould_json.PanelCanvas_top,Layer_Mould_json.PanelCanvas_left,Layer_Mould_json.PanelCanvas_width, Layer_Mould_json.PanelCanvas_height, Layer_Mould_json.PanelCanvas_z, JSON.stringify(Layer_Mould_json.PanelCanvas_map), Layer_Mould_json.PanelCanvas_css)
-            V_PanelCanvas_Map.set(V_PanelCanvas.PanelCanvas_id,V_PanelCanvas)
-
-            for(var row_i = 0; row_i < Layer_Mould_json.Data_list.length; row_i++){
-                // rowjson = Layer_Mould_json.Data_list[i]
-                console.log("row json+ ",Layer_Mould_json.Data_list[row_i])
-                V_PanelCanvas.F_CreateBox(Layer_Mould_json.Data_list[row_i]);
-            }
-
-        }
-    }
-
-
-    // 瀑瀑模式
-    function f_PanelCanvas_mode_1(result){
-        T_PanelCanvas = result.Data
-        // CSS 样式
-        $('#PanelCanvas').css({
-            width: '100%',
-            height: '100%',
-            overflowX: "hidden",
-            overflowY: "auto",
-        });
-        // CSS 自定义样式
-        f_Up_css(T_PanelCanvas.T_css,"PanelCanvas")
-
-        // 加载 组件
-        if(result.Data.T_text.length < 10 ){
-            return;
-        }
-        PaneView_json = JSON.parse(result.Data.T_text)
-        for(var i = 0;i < PaneView_json.length;i++){
-            Layer_Mould_json = PaneView_json[i]
-            console.log("创建面板 PaneView_json",Layer_Mould_json)
-
-            V_PanelCanvas = new f_canvas2(Layer_Mould_json.PanelCanvas_top,Layer_Mould_json.PanelCanvas_left,Layer_Mould_json.PanelCanvas_width, Layer_Mould_json.PanelCanvas_height, Layer_Mould_json.PanelCanvas_z, JSON.stringify(Layer_Mould_json.PanelCanvas_map), Layer_Mould_json.PanelCanvas_css)
-            V_PanelCanvas_Map.set(V_PanelCanvas.PanelCanvas_id,V_PanelCanvas)
-
-            for(var row_i = 0; row_i < Layer_Mould_json.Data_list.length; row_i++){
-                // rowjson = Layer_Mould_json.Data_list[i]
-                console.log("row json+ ",Layer_Mould_json.Data_list[row_i])
-                V_PanelCanvas.F_CreateBox(Layer_Mould_json.Data_list[row_i]);
-            }
-
-        }
-    }
-    function f_PaneView_Save(T_text) {
-        $.ajax({
-            type: 'POST',
-            url: '../../Panel/PaneView_Post',//发送请求
-            data: {
-                T_viewid: "{{.T_viewid}}",
-                T_text: T_text,
-                T_mode: T_PanelCanvas.T_mode,
-                T_width: T_PanelCanvas.T_width,
-                T_height: T_PanelCanvas.T_height,
-                T_css: T_PanelCanvas.T_css,
-                T_data: T_PanelCanvas.T_data,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    layer.msg('保存成功!');
-                } else {
-                    layer.msg('保存失败!');
-                }
-            }
-        });
-    }
-
-
-</script>
-
-<!--发布订阅模式-->
-<script>
-    // 控制中心
-    var pubSub = {
-        list: {},
-        // 订阅
-        subscribe: function(key, fn) {
-            console.log("加入:",key)
-
-            Public_V = f_Public_Value_get(key)
-            if (Public_V.is){
-                this.publish(key,Public_V.V)
-            }
-            if (!this.list[key]) this.list[key] = [];
-            this.list[key].push(fn);
-            key_list = key.split("/")
-            if(key_list[0].length > 3){
-                NewSubscribe(key_list[0]) // 订阅SN
-            }
-
-
-
-        },
-        //取消订阅
-        unsubscribe: function(key, fn) {
-            let fnList = this.list[key];
-            if (!fnList) return false;
-            if (!fn) { // 不传入指定的方法,清空所用 key 下的订阅
-                fnList && (fnList.length = 0);
-            } else {
-                fnList.forEach((item, index) => {
-                    item === fn && fnList.splice(index, 1);
-                });
-            }
-        },
-        // 发布
-        publish: function(key, ...args) {
-            if (this.list[key]){
-                for (let fn of this.list[key]) fn.call(this, ...args);
-            }
-
-        }
-    }
-
-    function f_Data_Read(T_sn) {
-        T_sn_list = T_sn.split("-")
-        $.ajax({
-            type: 'POST',
-            url: '../../Data/Device_Sensor',//发送请求
-            data: {
-                T_sn: T_sn_list[0],
-                T_id: T_sn_list[1],
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    for (const [key, value] of Object.entries(result.Data)) {
-                        console.log(key,value);
-                        pubSub.publish(T_sn+"/"+key, value);
-                        f_Public_Value_set(T_sn+"/"+key, value)
-                    }
-                }
-            }
-        });
-    }
-
-</script>
-
-<!--websocket-->
-<script src="{{.OSS_Static}}/js/jquery.cookie.min.js"></script>
-<script>
-    var websocket = null;
-
-    //判断当前浏览器是否支持WebSocket
-    run_WebSocket()
-    function run_WebSocket() {
-        console.log("run_WebSocket");
-        if ('WebSocket' in window) {
-            url = window.location.host
-            if (url.indexOf("baozhida") != -1) {
-                websocket = new WebSocket("wss://" + window.location.host + "/wsPanel/join?User_tokey=" + $.cookie('User_tokey'));
-            } else {
-
-                websocket = new WebSocket("ws://" + window.location.host + "/wsPanel/join?User_tokey=" + $.cookie('User_tokey'));
-            }
-
-        } else {
-            alert('Dont support websocket')
-        }
-    }
-
-    //连接成功建立的回调方法
-    websocket.onopen = function () {
-        console.log("websocket open");
-        // get_DeviceCh_List(0)
-
-        setTimeout(function(){
-            SubscribeSend()
-        },2000);
-
-        // send("{\"Sn\":\"" + getQueryString("Sn") + "\"}")
-    };
-
-    //接收到消息的回调方法
-    websocket.onmessage = function (event) {
-        // console.log("websocket:",event.data)
-        var obj = JSON.parse(event.data);
-        console.log("websocket:",obj)
-        if(obj.Code == 200){
-            return
-        }
-        sn_id = obj.T_sn+"-"+obj.T_id
-
-        for (const [key, value] of Object.entries(obj)) {
-            // console.log(key,value);
-            pubSub.publish(sn_id+"/"+key, value);
-            f_Public_Value_set(sn_id+"/"+key, value)
-        }
-
-        // pubSub.publish(sn_id+'/'+obj.tab, obj.value);
-
-        // // op:类型u8,  //操作  0-主动上传  1-读  2- 写     3-成功  4-失败
-        // switch (obj.op) {
-        //     case 3:
-        //         Del_Mid(obj.mid)
-        //         break;
-        //     case 4:
-        //         Err_Mid(obj.mid)
-        //         break;
-        // }
-        // console.log(obj.sn,"进入。。  Device_Sn = ",obj.sn)
-        // Pu_DeviceCh_List_g(obj.sn,obj.tab,obj.value)
-        //
-        // if (obj.type == 0) {
-        //     // console.log("data.length:",obj.sensor.length)
-        //
-        //     Pu_DeviceCh_List_g(obj.sn, obj.sensor)
-        //
-        //     if (obj.type == 0) {
-        //         $("#T_time").html("刷新时间:" + dateChangeFormat_x('YYYY-mm-dd HH:MM:SS', obj.sensor[0].UT) + "   上传刷新间隔:" + Math.abs(timestamp_V - obj.sensor[0].UT).toFixed(0) + "s")
-        //
-        //         // console.log(timestamp_V, obj.sensor[0].UT, "   刷新间隔:" + (timestamp_V - obj.sensor[0].UT) + "s")
-        //         timestamp_V = obj.sensor[0].UT
-        //
-        //     }
-        //
-        //
-        // }
-
-
-    };
-
-    //连接关闭的回调方法
-    websocket.onclose = function () {
-        console.log("close");
-        // setTimeout(function () {
-        //     //要执行的代码
-        //     run_WebSocket();
-        // }, 2000);
-
-
-    };
-
-    //连接发生错误的回调方法
-    websocket.onerror = function () {
-        console.log("error");
-        setTimeout(function () {
-            //要执行的代码
-            run_WebSocket();
-        }, 2000);
-    };
-
-    //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
-    window.onbeforeunload = function () {
-        websocket.close();
-        console.log("窗口关闭事件");
-    };
-
-    //关闭连接
-    function closeWebSocket() {
-        websocket.close();
-        console.log("onbeforeunload");
-        window.clearInterval(intervalId);
-    }
-
-    //发送消息
-    function send(message) {
-        websocket.send(message);
-    }
-    var SbscribeMap = new Set();
-    // 订阅 SN
-    function Subscribe(SN) {
-        if(!SbscribeMap.has(SN)){
-            console.log("加入订阅:",SN)
-            SbscribeMap.add(SN)
-        }
-        //
-    }
-    // 订阅 SN
-    function NewSubscribe(SN) {
-        if(!SbscribeMap.has(SN)){
-            console.log("加入订阅:",SN)
-            SbscribeMap.add(SN)
-            send("{ \"Sn\":\""+SN+"\"}")
-            f_Data_Read(SN)
-        }
-        //
-    }
-    // 订阅 SN
-    function SubscribeSend() {
-        for (var SN of SbscribeMap) { // 遍历Set
-            send("{ \"Sn\":\""+SN+"\"}")
-        }
-        console.log("开始订阅:",SbscribeMap)
-    }
-
-
-</script>
-
-<!--/// ----------------------------- 编辑 -------------------------------------- -->
-
-<!--鼠标拖拽-->
-<script>
-    var isDown = false   //鼠标释放
-    var V_PanelTool_id = 0   //工具 ID
-    var V_PanelTool_class = 0   //  1 基础  2 层模型
-    var V_PanelTool_class = 0   //  1 基础  2 层模型
-
-    function v_ondragleave(class_id,id) {
-        console.log("离开工具栏")
-        console.log(id)
-        V_PanelTool_id = id
-        V_PanelTool_class = class_id
-    }
-    // $( ".divulli" ).draggable({ cursor: "move", cursorAt: { top: 56, left: 56 } });
-    // 进入
-    function f_ondragenter(id) {
-        console.log("进入",id)
-        // document.getElementById("example").style.cursor = "move";  canvas.css('cursor', 'default');
-        $(document).css('cursor', 'move');
-    }
-    //另一对象
-    function f_ondragover(id) {
-        console.log("另一对象",id)
-        isDown = false
-        $(document).css('cursor', 'move');
-    }
-    //离开
-    function f_ondragleave(id) {
-        console.log("离开",id)
-        isDown = true
-        setTimeout(function(){
-            //要执行的代码
-            console.log(isDown)
-            if(isDown){
-                console.log("释放层 id",id)
-
-                switch (V_PanelTool_class) {
-                    case 1:
-                        console.log("释放 基础组件",PanelTool_List[V_PanelTool_id].T_text)
-
-                        V_PanelCanvas_Map.get(id).F_CreateBox({
-                            text: PanelTool_List[V_PanelTool_id].T_text,
-                            rotate: 0,
-                            color: PanelTool_List[V_PanelTool_id].T_color,
-                            height: PanelTool_List[V_PanelTool_id].T_height,
-                            width: PanelTool_List[V_PanelTool_id].T_width,
-                            pageX: 20, pageY: 20
-                        });
-                        break;
-                    case 2:  // 弃用
-                        console.log("释放 层 模型",Layer_Mould_List[V_PanelTool_id])
-
-
-
-                        break;
-                }
-
-
-
-            }
-        },200);
-    }
-
-</script>
-
-<!--底层-->
-<script>
-
-    T_PanelCanvas = {}
-    //加载layer拓展
-    layer.config({
-        extend: 'extend/layer.ext.js'
-    });
-    //右键菜单参数
-    context.init({
-        fadeSpeed: 100,
-        above: 'auto',
-        preventDoubleContext: true,
-        compress: false
-    });
-
-    context.attach('#PanelCanvas', [
-        {header: '面板模式'},
-        {
-            text: '自由模式', action: function (e) {
-                e.preventDefault();
-                T_PanelCanvas.T_mode = 0
-                $("#PanelCanvas_mode").html("自由模式")
-
-            }
-        },
-        {
-            text: '瀑瀑模式(一层)', action: function (e) {
-                e.preventDefault();
-                T_PanelCanvas.T_mode = 1
-                $("#PanelCanvas_mode").html("瀑瀑模式")
-
-
-                $("#open_layer_data_layer_textarea").val(T_PanelCanvas.T_data)
-                layer.open({
-                    title: '瀑瀑数据来源',
-                    type: 1,
-                    area: ['577px','690px'],
-                    fix: true, //不固定
-                    maxmin: false,
-                    content: $('#open_layer_data_layer'),
-                    shadeClose: true,
-                    anim: 1,
-                    shade: 0.4,
-                    isOutAnim: false,
-                    scrollbar: false,
-                    btn:["确定"],
-                    yes:function (Index) {
-
-                        T_PanelCanvas.T_data = $("#open_layer_data_layer_textarea").val()
-
-                        layer.close(Index);
-                    }
-                });
-
-                // var box = $('#PanelCanvas');
-                // box.css({
-                //     width: '100%',
-                //     height: '100%',
-                //     overflowX: "hidden",
-                //     overflowY: "auto",
-                // });
-                // T_PanelCanvas.T_width = 0;
-                // T_PanelCanvas.T_height = 0;
-                // PanelCanvas_mode = 1
-
-
-            }
-        },
-        {
-            text: '满屏模式', action: function (e) {
-                e.preventDefault();
-                T_PanelCanvas.T_mode = 2
-                $("#PanelCanvas_mode").html("满屏模式")
-
-            }
-        },
-        {header: '自定义尺寸'},
-        {
-            text: '1920x1080 (2K)', action: function (e) {
-                e.preventDefault();
-                var box = $('#PanelCanvas');
-                box.css({
-                    width: 1920,
-                    height: 1080
-                });
-                T_PanelCanvas.T_width = 1920;
-                T_PanelCanvas.T_height = 1080;
-                $("#PanelCanvas_wh").html("["+T_PanelCanvas.T_width+"*"+T_PanelCanvas.T_height+"]")
-
-            }
-        },
-        {
-            text: '3840x2160 (4K)', action: function (e) {
-                e.preventDefault();
-                var box = $('#PanelCanvas');
-                box.css({
-                    width: 3840,
-                    height: 2160
-                });
-                T_PanelCanvas.T_width = 3840;
-                T_PanelCanvas.T_height = 2160;
-                $("#PanelCanvas_wh").html("["+T_PanelCanvas.T_width+"*"+T_PanelCanvas.T_height+"]")
-
-            }
-        },
-        {
-            text: '自定义尺寸', action: function (e) {
-                e.preventDefault();
-                layer.prompt({
-                    title: '请输入区域尺寸(宽,高),最小值:30 \n4K=3840*2160\n2K= 2560*1440',
-                    formType: 0,
-                    value: Math.round(T_PanelCanvas.T_width) + "," + Math.round(T_PanelCanvas.T_height)
-                }, function (value, index, elem) {
-                    var reg = /^[0-9]+,[0-9]+$/;
-                    if (!reg.test(value)) {
-                        alert('输入格式不正确,请输入整数  如:100,100');
-                        return;
-                    }
-                    var size = value.split(',');
-                    var box = $('#PanelCanvas');
-                    box.css({
-                        width: size[0] < 30 ? 30 : size[0],
-                        height: size[1] < 30 ? 30 : size[1]
-                    });
-                    T_PanelCanvas.T_width = size[0];
-                    T_PanelCanvas.T_height = size[1];
-
-                    $("#PanelCanvas_wh").html("["+T_PanelCanvas.T_width+"*"+T_PanelCanvas.T_height+"]")
-
-                    layer.close(index);
-                });
-            }
-        },
-        {divider: true},
-        {header: '更改样式'},
-        {
-            text: 'CSS样式', action: function (e) {
-                e.preventDefault();
-                $("#open_layer_css_layer_textarea").val(T_PanelCanvas.T_css)
-                f_attribute_css_inti() // 初始化 CSS 自定义样式
-                layer.open({
-                    title: '自定义 CSS样式',
-                    type: 1,
-                    area: ['577px','690px'],
-                    fix: true, //不固定
-                    maxmin: false,
-                    content: $('#open_layer_css_layer'),
-                    shadeClose: true,
-                    anim: 1,
-                    shade: 0.4,
-                    isOutAnim: false,
-                    scrollbar: false,
-                    btn:["确定"],
-                    yes:function (Index) {
-
-                        T_PanelCanvas.T_css = $("#open_layer_css_layer_textarea").val()
-                        f_Up_css(T_PanelCanvas.T_css,"PanelCanvas")
-
-                        layer.close(Index);
-                    }
-                });
-
-
-            }
-        },
-    ]);
-
-</script>
-
-<!--保存为面板-->
-<script>
-    var Save_layer_obj = {}
-    function f_Save_layer(obj) {
-        Save_layer_obj = obj
-        Attribute_layer_id = layer.open({
-            title: '保存为面板',
-            type: 1,
-            area: ['277px','290px'],
-            fix: false, //不固定
-            maxmin: false,
-            content: $('#open_layer_save_layer'),
-            shadeClose: true,
-            anim: 1,
-            shade: 0.4,
-            isOutAnim: false,
-            scrollbar: false,
-        });
-    }
-    function f_Save_layer_choice() {
-        box_json = Save_layer_obj.F_get_box_json()
-        layer_name = $("#open_layer_save_layer_name").val()
-        layer_img = $("#open_layer_save_layer_img").val()
-        console.log("F_get_box_json:",box_json)
-        console.log("open_layer_save_layer_name:",layer_name)
-        console.log("open_layer_save_layer_img:",layer_img)
-
-        f_Save_Layer(layer_name,layer_img,JSON.stringify(box_json))
-        layer.close(Attribute_layer_id);
-    }
-
-
-    function f_Save_Layer(name,img,text) {
-        $.ajax({
-            type: 'POST',
-            url: '../../Panel/Layer_Mould_Save',//发送请求
-            data: {
-                layer_name: name,
-                layer_img: img,
-                layer_json: text,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    layer.msg('上传成功!');
-                }
-            }
-        });
-    }
-
-    // 保存工程
-    function f_Save() {
-        o_PanelCanvas_List = []
-        for(let [key,v] of V_PanelCanvas_Map) {
-            console.log("V_PanelCanvas_Map  key:", key);
-            box_json = v.F_get_box_json()
-            o_PanelCanvas_List.push(box_json)
-        }
-        //
-        console.log("o_PanelCanvas_List:",o_PanelCanvas_List)
-        // console.log(JSON.stringify(o_PanelCanvas_List))
-        f_PaneView_Save(JSON.stringify(o_PanelCanvas_List))
-    }
-
-
-</script>
-
-<!--// 左侧 工具-->
-<script>
-    var menuRight = document.getElementById('menuRight')
-    var body = document.body;
-
-    classie.toggle(body, 'cbp-spmenu-push-toright');
-    classie.toggle(body, 'cbp-spmenu-push-toright_bady');
-    classie.toggle(menuRight, 'cbp-spmenu-open');
-    console.log("menuRight.height",menuRight.clientHeight)
-    $(".help-left").css("max-height",menuRight.clientHeight - 64 + "px")
-
-    // 基础工具
-    var PanelTool_List = []
-    function f_PanelTool_List() {
-        $.ajax({
-            type: 'POST',
-            url: '../../Panel/PanelTool_List',//发送请求
-            data: {
-                page: 1,
-                page_z: 990,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-
-
-                    PanelTool_List = result.Data.List
-                    Show_PanelTool_List(PanelTool_List) // 列表
-
-                    // if(result.Data.Page_size > result.Data.Page ){
-                    //     f_PanelTool_List(result.Data.Page+1)
-                    // }
-
-                } else {
-
-                }
-            }
-        });
-    }
-
-    function Show_PanelTool_List(data) {
-        $('#PanelTool_1').append("" +
-            "<div class=\"divulli\" draggable=\"true\" onmousedown='f_Add_NewLayer()' >\n" +
-            "    <img src=\"https://standardoss.baozhida.cn/UpImage/57f8984e-7327-49d3-8bc9-00719f02d61e.png\">\n" +
-            "    <div>添加层</div>\n" +
-            "</div>")
-        for (let i = 0; i < data.length; i++) {
-            switch (data[i].T_class) {
-                case 1:
-                    $('#PanelTool_1').append("" +
-                        "<div class=\"divulli\" draggable=\"true\" onmousedown='v_ondragleave(1,"+ i +")' >\n" +
-                        "    <img src=\""+data[i].T_img+"\">\n" +
-                        "    <div>"+data[i].T_name+"</div>\n" +
-                        "</div>")
-                    break
-                case 2:
-                    $('#PanelTool_2').append("" +
-                        "<div class=\"divulli\" draggable=\"true\" onmousedown='v_ondragleave(1,"+ i +")' >\n" +
-                        "    <img src=\""+data[i].T_img+"\">\n" +
-                        "    <div>"+data[i].T_name+"</div>\n" +
-                        "</div>")
-                    break
-                case 3:
-                    $('#PanelTool_3').append("" +
-                        "<div class=\"divulli\" draggable=\"true\" onmousedown='v_ondragleave(1,"+ i +")' >\n" +
-                        "    <img src=\""+data[i].T_img+"\">\n" +
-                        "    <div>"+data[i].T_name+"</div>\n" +
-                        "</div>")
-                    break
-
-            }
-
-
-            // Pu_DeviceCh_View(data[i].T_sn+data[i].T_tab+"_"+data[i].T_ch,data[i].T_value)
-        }
-    }
-
-    ///////////------------   模板
-    Layer_Mould_List = []
-    function f_Layer_Mould_List() {
-        $.ajax({
-            type: 'POST',
-            url: '../../Panel/Layer_Mould_List',//发送请求
-            data: {
-                page: 1,
-                page_z: 990,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-
-
-                    Layer_Mould_List = result.Data.List
-                    Show_Layer_Mould_List(Layer_Mould_List) // 列表
-
-                    // if(result.Data.Page_size > result.Data.Page ){
-                    //     f_PanelTool_List(result.Data.Page+1)
-                    // }
-
-                } else {
-
-                }
-            }
-        });
-    }
-
-    function Show_Layer_Mould_List(data) {
-
-
-
-        for (let i = 0; i < data.length; i++) {
-            switch (data[i].T_class) {
-                case 1:
-                    $('#LayerMould_1').append("" +
-                        "<div class=\"divulli\" draggable=\"false\" ondblclick='f_Add_Layer_Mould("+ i +")' >\n" +
-                        "    <img src=\""+data[i].T_img+"\">\n" +
-                        "    <div>"+data[i].T_name+"</div>\n" +
-                        "</div>")
-                    break
-                case 2:
-                    $('#LayerMould_2').append("" +
-                        "<div class=\"divulli\" draggable=\"false\" ondblclick='f_Add_Layer_Mould("+ i +")' >\n" +
-                        "    <img src=\""+data[i].T_img+"\">\n" +
-                        "    <div>"+data[i].T_name+"</div>\n" +
-                        "</div>")
-                    break
-            }
-
-
-            // Pu_DeviceCh_View(data[i].T_sn+data[i].T_tab+"_"+data[i].T_ch,data[i].T_value)
-        }
-    }
-
-    // - 添加面板
-    function f_Add_Layer_Mould(i_id) {
-        console.log("V_PanelCanvas_Map:",V_PanelCanvas_Map.size)
-        if(PanelCanvas_mode == 1 && V_PanelCanvas_Map.size != 0){
-            layer.msg('只允许一个层!');
-            return
-        }
-        Layer_Mould_json = JSON.parse(Layer_Mould_List[i_id].T_text)
-
-        console.log("释放 层 模型",Layer_Mould_json)
-        V_PanelCanvas = new f_canvas2(0,0,Layer_Mould_json.PanelCanvas_width, Layer_Mould_json.PanelCanvas_height, Layer_Mould_json.PanelCanvas_z, JSON.stringify(Layer_Mould_json.PanelCanvas_map),Layer_Mould_json.PanelCanvas_css)
-        V_PanelCanvas_Map.set(V_PanelCanvas.PanelCanvas_id,V_PanelCanvas)
-
-        //测试加载
-        // var loadData = [
-        //                 {text: "A0000001v_xx_7", rotate: 0, color: "rgb(255, 165, 0)", height: 70, width: 77, pageX: 89, pageY: 39}
-        // ];
-        for(var i = 0; i < Layer_Mould_json.Data_list.length; i++){
-            // rowjson = Layer_Mould_json.Data_list[i]
-            console.log("rowjson",Layer_Mould_json.Data_list[i])
-            V_PanelCanvas.F_CreateBox(Layer_Mould_json.Data_list[i]);
-        }
-        // $.each(, function (i, row) {
-        //
-        //     //
-        // });
-
-
-    }
-
-    // - 添加面板
-    function f_Add_NewLayer() {
-
-
-        V_PanelCanvas = new f_canvas2(0,0,600, 600, 0, "{ \"sn_sn\": \"\" }","")
-        V_PanelCanvas_Map.set(V_PanelCanvas.PanelCanvas_id,V_PanelCanvas)
-
-
-    }
-
-
-
-
-    ///////////------------
-    //获得元素
-    var lis = document.querySelectorAll('#tab-header span');
-    var content = document.querySelectorAll('#tab-content .dom');
-
-    // 遍历1级菜单里的li元素
-    for (var i = 0; i < lis.length; i++) {
-
-        // onmouseenter、onmousemove与mousemove的区别:
-        // 其支持冒泡,所以当鼠标移入或鼠标移入其子元素的时候都会触发相关事件
-        // 其不支持冒泡,所以当鼠标移入这个元素本身的时候会触发相关事件
-        // 不支持冒泡事件,当鼠标在元素上移动的时候会触发相关事件
-        lis[i].onclick = ( function (i) {
-            return function () {
-                for (var j = 0; j < lis.length; j++) {
-                    content[j].style.display = 'none';
-                    lis[j].style.color = '';
-                    lis[j].style.border = '1px solid #e5e5e5';
-                }
-                content[i].style.display = 'block';
-                lis[i].style.color = '#69d1ff';
-                lis[i].style.border = '2px solid #69d1ff';
-            }
-        })(i)
-    }
-    lis[0].onclick()
-
-</script>
-<!--// 左侧 工具 - 设备 -->
-<script>
-    // 更新列表
-    function f_PanelTool_Device_List() {
-        $('#PanelTool_Device_List').html("")
-        for (let i = 0; i < Device_List.length; i++) {
-            $('#PanelTool_Device_List').append("" +
-                "<div style='padding: 4px;margin: 5px;border:1px solid #ececec;' > " +
-                "<div>SN:"+Device_List[i].T_sn+"</div>"+
-                Device_List[i].T_name+"["+Device_List[i].T_id+"]" +
-                "</div>")
-        }
-    }
-    function open_menu(Id) {
-        layer.open({
-            title: "设备参数配置 ",
-            type: 2,
-            area: ['500px', '630px'],
-            fix: false, //不固定
-            maxmin: false,
-            content: "../../DeviceCh/DeviceChParameter_Id_Html?Id="+Id,
-            shadeClose:true,
-            anim: 1,
-            isOutAnim: false,
-
-        });
-
-    }
-
-</script>
-
-
-<!--文件上传-->
-<script src="https://cdn.staticfile.org/qiniu-js/3.4.0/qiniu.min.js"></script>
-<script>
-    var F_c=function(up_url) {}
-    // F_c = function(up_url) {
-    //     if (H_img_id.length > 1) {
-    //         $("#" + H_img_id).attr("src", up_url)
-    //     }
-    // }
-    $("#UpLoadFile").change(function () {
-        let file = this.files[0];
-        console.log(file)
-        filesplit = file.type.split("/")
-        console.log("filesplit:",filesplit[filesplit.length-1])
-        $.ajax({
-            type: 'POST',
-            url: '../../Config/UpFileToken',//发送请求
-            data: {
-                T_suffix: filesplit[filesplit.length-1],
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    f_upload(file, result.Data)
-                }
-            }
-        });
-    })
-
-    function f_upload(file, token) {
-        // let file = this.files[0];
-        let config = {
-            useCdnDomain: true,
-            region: qiniu.region.z2,
-            debugLogLevel: 'INFO',
-            useCdnDomain: true, // 表示是否使用 cdn 加速域名
-        };
-        let putExtra = {
-            fname: "",
-            params: {},
-            mimeType: null
-        };
-        // 设置next,error,complete对应的操作,分别处理相应的进度信息,错误信息,以及完成后的操作
-        var error = function (err) {
-            console.log(err);
-            alert("上传出错")
-        };
-        var complete = function (res) {
-            console.log(res)
-            if (res.key) {
-                console.log("url:", res.key)
-                F_c(res.key)
-                // if (H_img_id.length > 1) {
-                //     $("#" + H_img_id).attr("src", res.key)
-                //     H_img_id = ""
-                // }
-            }
-        };
-        var next = function (response) {
-            console.log(response)
-        };
-        var subObject = {
-            next: next,
-            error: error,
-            complete: complete
-        };
-        let subscription;
-        // 调用sdk上传接口获得相应的observable,控制上传和暂停
-        let observable = qiniu.upload(file, "key", token, putExtra, config);
-        subscription = observable.subscribe(subObject);
-    }
-</script>
-
-
-<!-- 资源库 -->
-<script>
-    var ConfigImg_List = []
-    var Device_List = []
-    var Device_List_map = new Map();
-    var ConfiglibImg_T_str = "";
-    var ConfiglibImg_page = 1;
-
-    function f_PaneView_Post(my) {
-        Attribute_my = my
-        $.ajax({
-            type: 'POST',
-            url: '../../Panel/PaneView_Post',//发送请求
-            data: {
-                T_text: "",
-                T_width: 1920,
-                T_height: 1080,
-                T_css: "",
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    $(Attribute_my).val(result.Data)
-                } else {
-                    layer.msg('新建面板失败!');
-
-                }
-            }
-        });
-    }
-    function f_ConfigImg_List() {
-        $.ajax({
-            type: 'POST',
-            url: '../../Config/ConfigImg_List',//发送请求
-            data: {
-                page: 1,
-                page_z: 9999,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    ConfigImg_List = result.Data.List
-
-                } else {
-                    layer.msg('获取图片失败!');
-                }
-            }
-        });
-    }
-
-    var ConfiglibImg_List = []
-    var ConfiglibImg_page = 0;
-    var ConfiglibImg_T_str = ""
-    function f_ConfiglibImg_List_inti(T_str0) {
-
-        ConfiglibImg_List = []
-        ConfiglibImg_page = 0;
-        ConfiglibImg_T_str = T_str0
-
-        // 更新列表
-        $('#open_layer_Data_List').html("")
-        $('#open_layer_Data_List').append("<div style='width: 100px;height: 120px;float: left;margin: 6px;text-align: center;'> " +
-            "<img onclick='f_attribute_Configlibimg_UpLoadFile();keyCode_70 = {}' style='padding: 4px;margin: 5px;border:1px solid #ececec;' src=\"https://standardoss.baozhida.cn/UpImage/2ac296ef-6a6f-4bfe-a5dc-79f4a565962d.png\" width=\"70\" height=\"70\"> " +
-            "<span>上传图片</span>"+
-            "</div>")
-
-        return
-
-    }
-    function f_ConfiglibImg_List() {
-        ConfiglibImg_page += 1;
-        $.ajax({
-            type: 'POST',
-            url: '../../Config/ConfiglibImg_List',//发送请求
-            data: {
-                T_str0: ConfiglibImg_T_str,
-                page: ConfiglibImg_page,
-                page_z: 200,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    for (let i = 0; i < result.Data.List.length; i++) {
-                        ConfiglibImg_List.push(result.Data.List[i])
-                        $('#open_layer_Data_List').append("<div style='width: 100px;height: 120px;float: left;margin: 6px;text-align: center;'> " +
-                            "<img onclick='f_attribute_Configlibimg_choice(" + (ConfiglibImg_List.length - 1) + ");keyCode_70 = {}' style='padding: 4px;margin: 5px;border:1px solid #ececec;' src=\"" + result.Data.List[i].T_img0 + "\" width=\"70\" height=\"70\"> " +
-                            "<span>"+ result.Data.List[i].T_str0+"</span>"+
-                            "</div>")
-
-                    }
-
-                } else {
-                    layer.msg('获取图片失败!');
-                }
-            }
-        });
-    }
-
-    function f_Device_List(T_name) {
-
-        $.ajax({
-            type: 'POST',
-            url: '../../../Data/Device_Sensor_List',//发送请求
-            data: {
-                // T_sn: T_sn,
-                T_name: T_name,
-                // T_class_id: parseInt(T_class_id),
-                page: 1,
-                page_z: 30,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    Device_List_r = result.Data.DeviceSensor_lite
-                    for (let i = 0; i < Device_List_r.length; i++) {
-                        Device_List_map.set(Device_List_r[i].T_sn,Device_List_r[i]);
-                        Device_List.push(Device_List_r[i])
-                    }
-                    f_PanelTool_Device_List()
-                } else {
-                    layer.msg('获取主设备失败!');
-                }
-            }
-        });
-    }
-
-</script>
-
-
-<!--图片组选择-->
-<script>
-    var Attribute_my = {}
-    var Attribute_layer_id = 0
-    function f_attribute_imggroup(my) {
-        Attribute_my = my
-        Attribute_layer_id = layer.open({
-            title: '请选择 图标',
-            type: 1,
-            area: [($(window).width() * 0.9) + 'px', ($(window).height() - 50) + 'px'],
-            fix: false, //不固定
-            maxmin: false,
-            content: $('#open_layer_Data_List'),
-            shadeClose: true,
-            anim: 1,
-            shade: 0.4,
-            isOutAnim: false,
-            scrollbar: false,
-        });
-        // 更新列表
-        $('#open_layer_Data_List').html("")
-        for (let i = 0; i < ConfigImg_List.length; i++) {
-            $('#open_layer_Data_List').append("<img onclick='f_attribute_ConfigImg_choice(" + i + ")' style='padding: 4px;margin: 5px;border:1px solid #ececec;' src=\"" + ConfigImg_List[i].T_img1 + "\" width=\"70\" height=\"70\">")
-        }
-    }
-
-
-    function f_attribute_ConfigImg_choice(id) {
-        img_str = ConfigImg_List[id].T_img0 +"|"+ ConfigImg_List[id].T_img1+"|"+ ConfigImg_List[id].T_img2+"|"+ ConfigImg_List[id].T_img3+"|"+ ConfigImg_List[id].T_img4+"|"+ ConfigImg_List[id].T_img5
-        console.log($(Attribute_my))
-        $(Attribute_my).val(img_str)
-
-        //关闭当前frame
-        console.log(Attribute_layer_id)
-        layer.close(Attribute_layer_id);
-    }
-
-
-</script>
-
-<!--CSS 自定义样式-->
-<script>
-    // 初始化 CSS 自定义样式
-    function f_attribute_css_inti() {
-        // $("#S_open_layer_css_layer_background_img").val("")
-        // $("#S_open_layer_css_layer_backgroundcolour_colour1").val("")
-    }
-    function f_attribute_libimg(my) {
-        Attribute_my = my
-        Attribute_layer_id = layer.open({
-            title: '请选择 图片(按 f 搜索关键字)',
-            type: 1,
-            area: [($(window).width() * 0.9) + 'px', ($(window).height() - 50) + 'px'],
-            fix: false, //不固定
-            maxmin: false,
-            content: $('#open_layer_Data_List'),
-            shadeClose: true,
-            anim: 1,
-            shade: 0.4,
-            isOutAnim: false,
-            scrollbar: false,
-            end:function () {
-                keyCode_70 = {}
-            }
-        });
-        console.log("Attribute_layer_id   layer:",Attribute_layer_id)
-
-
-        //
-        //
-        // layer.open($.extend({
-        //     btn: ["&#x786E;&#x5B9A;", "&#x53D6;&#x6D88;"],
-        //     content: "e",
-        //     skin: "layui-layer-prompt" + b("prompt"),
-        //     success: function (a) {
-        //         d = a.find(".layui-layer-input"), d.focus()
-        //     },
-        //     yes: function (b) {
-        //         var e = d.val();
-        //         "" === e ? d.focus() : 0 > (a.maxlength || 500) ? layer.tips("&#x6700;&#x591A;&#x8F93;&#x5165;" + (a.maxlength || 500) + "&#x4E2A;&#x5B57;&#x6570;", d, {tips: 1}) : c && c(e, b, d)
-        //     }
-        // }, a))
-
-
-        //
-        keyCode_70 = function () {
-            AAAA = layer.prompt({
-                type:1,
-                title: '请输 搜索关键字',
-                formType: 0,
-                value: ""
-            }, function (value, index, elem) {
-                //
-                console.log(value)
-                console.log(index)
-                layer.close(index);
-                f_ConfiglibImg_List_inti(value)
-                f_ConfiglibImg_List()
-            });
-            console.log("搜索关键字 layer:",AAAA)
-        }
-        f_ConfiglibImg_List_inti("")
-        f_ConfiglibImg_List()
-        // 滚轮 触发
-        $(".layui-layer-content").scroll(function () {
-            nScrollHight = $(this)[0].scrollHeight;
-            nScrollTop = $(this)[0].scrollTop;
-            if(nScrollTop + $(".layui-layer-content").height() >= nScrollHight)   {
-                //加载loadHotService();
-
-                console.log("n")
-                f_ConfiglibImg_List()
-            }
-
-        });
-
-
-
-
-    }
-
-    function f_attribute_Configlibimg_UpLoadFile() {
-        $('#UpLoadFile').click();
-        F_c = function(up_url) {
-            $(Attribute_my).val(up_url)
-            //关闭当前frame
-            layer.close(Attribute_layer_id);
-        }
-    }
-    function f_attribute_Configlibimg_choice(id) {
-        img_str = ConfiglibImg_List[id].T_img0
-        console.log($(Attribute_my))
-        $(Attribute_my).val(img_str)
-
-        //关闭当前frame
-        console.log(Attribute_layer_id)
-        layer.close(Attribute_layer_id);
-    }
-</script>
-
-<!--文字组选择-->
-<script>
-
-    function f_attribute_Textgroup(my) {
-        Attribute_my = my
-        Attribute_layer_id = layer.open({
-            title: '请选择 图标',
-            type: 1,
-            area: [($(window).width() * 0.9) + 'px', ($(window).height() - 50) + 'px'],
-            fix: false, //不固定
-            maxmin: false,
-            content: $('#open_layer_Data_List'),
-            shadeClose: true,
-            anim: 1,
-            shade: 0.4,
-            isOutAnim: false,
-            scrollbar: false,
-        });
-        // 更新列表
-        $('#open_layer_Data_List').html("")
-        for (let i = 0; i < ConfigImg_List.length; i++) {
-            $('#open_layer_Data_List').append("<img onclick='f_attribute_ConfigText_choice(" + i + ")' style='padding: 4px;margin: 5px;border:1px solid #ececec;' src=\"" + ConfigImg_List[i].T_img1 + "\" width=\"70\" height=\"70\">")
-        }
-    }
-    function f_attribute_ConfigText_choice(id) {
-        img_str = ConfigImg_List[id].T_str0 +"|"+ ConfigImg_List[id].T_str1+"|"+ ConfigImg_List[id].T_str2+"|"+ ConfigImg_List[id].T_str3+"|"+ ConfigImg_List[id].T_str4+"|"+ ConfigImg_List[id].T_str5
-        console.log($(Attribute_my))
-        $(Attribute_my).val(img_str)
-
-        //关闭当前frame
-        console.log(Attribute_layer_id)
-        layer.close(Attribute_layer_id);
-    }
-
-</script>
-
-
-<!--主设备选择-->
-<script>
-
-    f_attribute_Device_List_page = 1
-    f_attribute_Device_List_name = ""
-    function f_attribute_Device_List(page) {
-        f_attribute_Device_List_page = page
-
-        console.log("f_attribute_Device_List_name:",f_attribute_Device_List_name)
-        $.ajax({
-            type: 'POST',
-            url: '../../../Data/Device_Sensor_List',//发送请求
-            data: {
-                // T_sn: T_sn,
-                T_name: f_attribute_Device_List_name,
-                // T_class_id: parseInt(T_class_id),
-                page: f_attribute_Device_List_page,
-                page_z: 30,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    Device_List_r = result.Data.DeviceSensor_lite
-                    for (let i = 0; i < Device_List_r.length; i++) {
-                        $('#open_layer_Data_List').append("<div onclick=\"f_attribute__Device_choice(\'" + Device_List_r[i].T_sn + "\',\'" + Device_List_r[i].T_id + "\',\'\')\" style='padding: 4px;margin: 5px;border:1px solid #ececec;height: 40px' > " +
-                            "<div>SN:"+Device_List_r[i].T_sn+"["+Device_List_r[i].T_id+"]" +"</div>"+
-                            Device_List_r[i].T_name+
-                            "</div>")
-                    }
-                } else {
-                    layer.msg('获取主设备失败!');
-                }
-            }
-        });
-    }
-
-    function f_attribute_Device(my,duo) {
-        Attribute_my = my
-        Attribute_layer_id = layer.open({
-            title: '请选择 设备',
-            type: 1,
-            area: ['385px', ($(window).height() - 150) + 'px'],
-            fix: false, //不固定
-            maxmin: false,
-            content: $('#open_layer_Data_List'),
-            shadeClose: true,
-            anim: 1,
-            shade: 0.4,
-            isOutAnim: false,
-            scrollbar: true
-        });
-
-        $(".layui-layer-content").scroll(function () {
-            var scrollTop = $(this).scrollTop();
-            var scrollHeight = $("#open_layer_Data_List").height();
-            var windowHeight = $(this).height();
-            // console.log("scrollTop:",scrollTop,"      scrollHeight:",scrollHeight,"       windowHeight:",windowHeight)
-
-            if (scrollTop + windowHeight > scrollHeight) {
-                f_attribute_Device_List_page += 1
-                f_attribute_Device_List(1)
-                // alert('滑动到底部了')
-            }
-        });
-
-
-        // $('#open_layer_Data_List').css("height",($(window).height() - 150) + 'px')
-
-        f_attribute_Device_list_init()
-
-    }
-    function f_attribute_Device_list_init() {
-        f_attribute_Device_List_name = $("#D_Name").val()
-        // 更新列表
-        $('#open_layer_Data_List').html("    " +
-            "<div style='user-select: auto;' class=\"layui-input-block\">\n" +
-            "  <input id='D_Name' type=\"text\" name=\"title\" required  placeholder=\"请输入 名称\" autocomplete=\"off\" class=\"layui-input\">  " +
-            "   <button class=\"layui-btn\" onclick='f_attribute_Device_list_init()'>搜索</button> \n" +
-            "</div>")
-
-        f_attribute_Device_List(1)
-    }
-
-
-
-
-    function f_attribute__Device_choice(sn,id,duo) {
-        console.log($(Attribute_my))
-        if(duo.length > 0){
-            $(Attribute_my).val($(Attribute_my).val() + sn + "-" + id+ ""  + duo )
-        }else {
-            $(Attribute_my).val(sn + "-" + id )
-        }
-
-
-        //关闭当前frame
-        console.log(Attribute_layer_id)
-        layer.close(Attribute_layer_id);
-    }
-
-</script>
-
-<!--主设备 通道 选择-->
-<script>
-    function f_attribute_DeviceCh(my,value_map) {
-        // S_sn = $("#S_sn_sn").val()
-        // console.log("S_sn:",S_sn)
-        // if(S_sn == "[-{sn}-]"){
-        //     console.log("value_map:",value_map)
-        //     S_sn = value_map
-        // }
-        //
-        // if(S_sn == undefined){
-        //     alert("主设备(SN)参数异常,如果是全局SN,请先配置 层 SN参数!")
-        //     return
-        // }
-        //
-        // if(!Device_List_map.has(S_sn)){                 //判断映射是否存在
-        //     alert("没有找到 主设备(SN) "+S_sn)
-        // }
-
-        Attribute_my = my
-        // console.log("S_sn:",S_sn)
-        Attribute_layer_id = layer.open({
-            title: '请选择 设备',
-            type: 1,
-            area: ['315px', ($(window).height() - 150) + 'px'],
-            fix: false, //不固定
-            maxmin: false,
-            content: $('#open_layer_Data_List'),
-            shadeClose: true,
-            anim: 1,
-            shade: 0.4,
-            isOutAnim: false,
-            scrollbar: false,
-        });
-        // 更新列表
-        $('#open_layer_Data_List').html("")
-
-        $('#open_layer_Data_List').append("<div id='attribute_ProductValue_List' style='padding: 4px;margin: 5px;border:1px solid #ececec;' > </div>")
-        f_attribute_DeviceCh_ProductValue_List()
-
-    }
-
-    function f_attribute_DeviceCh_ProductValue_List() {
-        // $.ajax({
-        //     type: 'POST',
-        //     url: '../../DeviceCh/DeviceCh_List',//发送请求
-        //     data: {
-        //         T_sn: T_sn,
-        //         page: 1,
-        //         page_z: 9999,
-        //     },
-        //     success: function (result) {
-        //         console.log(result)
-        //         if (result.Code == 200) {
-        //
-        //         } else {
-        //             layer.msg('获取主设备失败!');
-        //         }
-        //     }
-        // });
-
-        T_tab_list = []
-        T_tab_list.push({
-            T_tab:"T_sn",
-            T_name:"设备SN"
-        })
-        T_tab_list.push({
-            T_tab:"T_id",
-            T_name:"传感器ID"
-        })
-        T_tab_list.push({
-            T_tab:"T_name",
-            T_name:"设备名称"
-        })
-        T_tab_list.push({
-            T_tab:"T_t",
-            T_name:"温度"
-        })
-        T_tab_list.push({
-            T_tab:"T_rh",
-            T_name:"湿度"
-        })
-        T_tab_list.push({
-            T_tab:"T_Tlower",
-            T_name:"最低温度"
-        })
-        T_tab_list.push({
-            T_tab:"T_Tupper",
-            T_name:"最高温度"
-        })
-        T_tab_list.push({
-            T_tab:"T_RHlower",
-            T_name:"最低湿度"
-        })
-        T_tab_list.push({
-            T_tab:"T_RHupper",
-            T_name:"最高湿度"
-        })
-        T_tab_list.push({
-            T_tab:"T_Site",
-            T_name:"经纬度"
-        })
-        T_tab_list.push({
-            T_tab:"T_Dattery",
-            T_name:"电量"
-        })
-        T_tab_list.push({
-            T_tab:"T_monitor",
-            T_name:"监控状态"
-        })
-        T_tab_list.push({
-            T_tab:"T_time",
-            T_name:"时间"
-        })
-
-
-        for (let i = 0; i < T_tab_list.length; i++) {
-            $('#attribute_ProductValue_List').append("<div style='padding: 4px;margin: 5px;border:1px solid #ececec;' > " +
-                "<span onclick='f_attribute_DeviceCh_Tab_choice(\"" + T_tab_list[i].T_tab + "\")' >"+T_tab_list[i].T_tab+" -> "+T_tab_list[i].T_name+"</span>"+
-                // "<span onclick='f_attribute_DeviceCh_Tab_choice(" + result.Data[i].T_tab+"_"+ch_i + ")' style='float: right;color: #ff0300' >"+">>属性 </span>"+
-                "</div>")
-
-        }
-    }
-
-    function f_attribute_DeviceCh_Tab_choice(tab) {
-        console.log($(Attribute_my))
-        $(Attribute_my).val(tab )
-
-        //关闭当前frame
-        console.log(Attribute_layer_id)
-        layer.close(Attribute_layer_id);
-    }
-
-</script>
-
-<!--颜色选择-->
-<script src="{{.OSS_Static}}/panel/colorpicker.js"></script>
-<script type="text/javascript">
-    // 编辑框
-    function f_attribute_color(my) {
-        Attribute_my = my
-        console.log("Attribute_my:",Attribute_my)
-        Colorpicker.create({
-            el: Attribute_my.id, //元素id
-            color: $(Attribute_my).val(), //默认颜色
-            change: function (elem, hex) {
-                console.log(hex)
-                //选中颜色发生改变时事件
-                // elem.style.backgroundColor = hex;
-                $(Attribute_my).val(hex)
-                $(Attribute_my).css("backgroundColor",hex)
-
-            }
-        })
-    }
-    // 组件背景
-    function f_assembly_bcolor(curNum) {
-
-
-
-        layer.open({
-            title:"调色板",
-            type: 1,
-            content: '<div id=\'f_assembly_bcolor\' style="width: 200px;height: 40px;background-color: '+curNum.css('background-color')+'" >   </div>' //这里content是一个普通的String
-        });
-
-        Attribute_my = document.getElementById("f_assembly_bcolor")
-        console.log("Attribute_my:",Attribute_my)
-        Colorpicker.create({
-            el: Attribute_my.id, //元素id
-            color: curNum.css('background-color'), //默认颜色
-            change: function (elem, hex) {
-                console.log(hex)
-                //选中颜色发生改变时事件
-                elem.style.backgroundColor = hex;
-                // $(Attribute_my).val(hex)
-                curNum.css('background-color', hex);
-            }
-        })
-    }
-</script>
-<!--图片选择-->
-<script type="text/javascript">
-    // 图片 回调函数
-    function f_attribute_img(my) {
-        $('#UpLoadFile').click();
-        F_c = function(up_url) {
-            $(my).val(up_url)
-        }
-    }
-
-</script>
-
-<!--远程执行-->
-<script>
-    // var Data_Write_Map = new Map();
-    // // 执行  V_id 标识出发位置,用来 反馈执行结果
-    // function f_Data_Write(V_id,T_sn,T_tab,T_value) {
-    //     $.ajax({
-    //         type: 'POST',
-    //         url: '../../Device/Data_Write',//发送请求
-    //         async: false,
-    //         data: {
-    //             T_sn:T_sn,
-    //             T_tab:T_tab,
-    //             T_value:T_value,
-    //         },
-    //         success: function(result) {
-    //             console.log(result)
-    //             pubSub.publish(T_sn+'/'+T_tab, T_value);
-    //             f_Public_Value_set(T_sn+'/'+T_tab, T_value)  //同步缓存数据
-    //
-    //             Data_Write_Map.set(result.Data,{V_id:V_id,Munm:1});
-    //         }
-    //     });
-    // }
-    // setInterval(function(){
-    //     // 遍历
-    //     $(".Mid").remove() //  清空
-    //     for(let [Mid,v] of Data_Write_Map) {
-    //         console.log("Mid:", Mid,v);
-    //         Data_Write_Map.set(Mid,{V_id:v.V_id,Munm:v.Munm + 1});
-    //         if(v.Munm > 3 && v.Munm < 20 && v.Munm % 2 == 0){
-    //             $("body").append('<div class="Mid" style="user-select: none;position: absolute;left: '+$("#"+v.V_id).offset().left+'px;top: '+$("#"+v.V_id).offset().top+'px;z-index: 999999999999999;width: 20px;height: 20px;background-color:rgb(255, 0, 0);border-radius: 25px;"></div>')
-    //         }
-    //
-    //         if(v.Munm > 10){
-    //             Del_Mid(Mid)
-    //         }
-    //     }
-    // },1000);
-    //
-    //
-    // function Del_Mid(Mid) {
-    //     if(Data_Write_Map.has(Mid)){                 //判断映射是否存在
-    //         // console.log("delete:",Data_Write_Map.get(Data_Write_Map))
-    //         Data_Write_Map.delete(Mid);
-    //     }
-    // }
-    //
-    // function Err_Mid(Mid) {
-    //     // if(Data_Write_Map.has(Mid)){                 //判断映射是否存在
-    //     //     console.log(Data_Write_Map.get(Data_Write_Map))
-    //     // }
-    // }
-</script>
-<script>
-    function BrowserType()
-    {
-        var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
-        var isOpera = userAgent.indexOf("Opera") > -1; //判断是否Opera浏览器
-        var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera; //判断是否IE浏览器
-        var isEdge = userAgent.indexOf("Windows NT 6.1; Trident/7.0;") > -1 && !isIE; //判断是否IE的Edge浏览器
-        var isFF = userAgent.indexOf("Firefox") > -1; //判断是否Firefox浏览器
-        var isSafari = userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Chrome") == -1; //判断是否Safari浏览器
-        var isChrome = userAgent.indexOf("Chrome") > -1 && userAgent.indexOf("Safari") > -1; //判断Chrome浏览器
-
-        if (isIE)
-        {
-            var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
-            reIE.test(userAgent);
-            var fIEVersion = parseFloat(RegExp["$1"]);
-            return {name:"IE",num: fIEVersion};
-        }//isIE end
-
-        if (isFF) { return {name:"FF",num: "FF"};}
-        if (isOpera) { return {name:"Opera",num: "Opera"};}
-        if (isSafari) { return {name:"Safari",num: "Safari"};}
-        if (isChrome) { return {name:"Chrome",num: "Chrome"};}
-        if (isEdge) { return {name:"Edge",num: "Edge"};}
-    }
-    Browser = BrowserType();
-
-
-</script>
-</body>
-</html>
-
-<!-- 通讯协议标准
-    头:sn+ch      如: A0000001v_xx_1
-
-    v_xx_1 : 值
-    v_xx_1-img : 对应图片
-    v_xx_1-color : 对应颜色
-    v_xx_1-bimg : 对应图片
-    v_xx_1-bcolor : 对应颜色
-
--->

+ 0 - 833
views/Panel/说明.html

@@ -1,833 +0,0 @@
-
-<!--<script src="http://192.168.1.70:8500/static/panel/jquery.min.js" type="text/javascript"></script>-->
-<!-- 通讯协议标准
-    头:sn+ch      如: A0000001v_xx_1
-
-    v_xx_1 : 值
-    v_xx_1-img : 对应图片
-    v_xx_1-color : 对应颜色
-    v_xx_1-bimg : 对应图片
-    v_xx_1-bcolor : 对应颜色
-
--->
-
-<!--    自动表单
-数据类型:
-sn: 选择设备
-snlist: 选择设备(多选) |分割
-tab:基于 sn 通道选择
-text:文字(多行)
-str:文本
-int:整数
-folat:小数
-img:图片
-font:字体
-imglist:图片列表   .png|.png|.png|.png|.png|.png|
-color:颜色
-pane:面板
-
-定义变量:
-!命名规则: 只准许 【小写字母 数值】 不能出现 任何特殊符号,
-!隐藏表单: 在动态变量名 前面加_    如:  _sn_sn
-!提示标题: 在动态变量名 后面加_提示内容    如:  w_int_宽度
-sn_sn  (动态变量名)_(数据类型)
-sn_sn="xxx"  //设备 SN
-tab_tab="xxx"
-text1_text="xxx"
-img1_img="xxx"
-img1_imglist=".png|.png|.png|.png|.png|.png|"
-text1_textlist="text1|text2|text3|text4|text5|text6|"
-
-{"sn_sn":"866222050911984","tab_tab":"v_do_2","text1_text":"替换的文本"}
-
-变量:
-[{动态变量名}]  如:[{tab}]
-
-层全局变量:
-[-{sn}-]
-
-公共变量:
-[{ID}]
-[{USER_UUID}]   当期用户 UUID
-
-
-
-
-订阅:
-sn/tab  如:866222050911984/v_do
-
-
- -->
-
-
-
-<!--data   {"sn_sn":"866222050911984","tab_tab":"v_do_1","text1_text":"替换的文本"}  data-->
-<div >
-    <span>这里是 [{text1}]<span id="xxxxx[{ID}]">xxx</span></span>
-    <script>
-        // 这里要加延时
-        setTimeout(function(){
-            // 订阅
-            pubSub.subscribe('[{sn}]/[{tab}]', T_value => {
-                console.log(`收到2:${T_value}`);
-                $("#xxxxx[{ID}]").html(T_value)
-            })
-        },2000);
-    </script>
-</div>
-
-
-<!--文字-->
-<!--data   {"text_text_替换内容":"替换的文本","color_color_字体颜色":"","size_int_字体大小":"20","font_font":"123"}  data-->
-<div >
-    <style> @font-face{ font-family:font_[{ID}];  src: url('123') }</style>
-    <span id="text[{ID}]" style="font-family: font_[{ID}];font-size: [{size}]px;color: [{color}];">[{text}]</span>
-</div>
-
-
-
-<!--图片-->
-<!--data   {"url_img":"https://standardoss.baozhida.cn/UpImage/76d52805-4540-4589-9f60-ece1cfd51a41.png"}  data-->
-<div>
-    <img src="[{url}]" width="100%" height="100%">
-</div>
-
-
-
-<!--背景图片-->
-<!--data   {"url_img":"https://standardoss.baozhida.cn/UpImage/1652941123f122d0c4-8bd9-476c-a110-425e882a64d4.svg"}  data-->
-<div  style="background: rgba(0, 0, 0, 0) url('[{url}]') repeat scroll 0% 0%;width: 100%;height: 100%">
-    <div></div>
-</div>
-
-<!--data  {}  data-->
-<div >
-</div>
-
-<!--面板页面-->
-<!--data   {"pane_pane":"","url_img":"https://standardoss.baozhida.cn/UpImage/1655261167cba53203-8326-49ea-82d7-5563ead17bc0.png"}  data-->
-<div>
-    <img src="[{url}]" onclick="window.location.href="../../Panel/Index?T_viewid=[{pane}]';"  width="100%" height="100%">
-</div>
-
-<!--图片组[数据]-->
-<!--data   {"sn_sn":"866222050911984","tab_tab":"v_do_1","img1_imglist":"https://standardoss.baozhida.cn/UpImage/93784cea-5cc7-433f-849d-991a6e56e979.png|"}  data-->
-<div >
-    <img id="img[{ID}]" src="https://standardoss.baozhida.cn/UpImage/76d52805-4540-4589-9f60-ece1cfd51a41.png" width="100%" height="100%">
-    <script>
-        v[{ID}]img_str = "[{img1}]"
-        v[{ID}]img_list = v[{ID}]img_str.split("|")
-        $("#img[{ID}]").attr("src",v[{ID}]img_list[0])
-        // 这里要加延时
-        setTimeout(function(){
-            // 订阅
-            pubSub.subscribe('[{sn}]/[{tab}]', T_value => {
-                console.log(`收到:${T_value}`);
-                $("#img[{ID}]").attr("src",v[{ID}]img_list[parseInt(T_value)])
-            })
-        },2000);
-    </script>
-</div>
-
-
-<!--文字组[数据]-->
-<!--data   {"sn_sn":"866222050911984","tab_tab":"v_do_1","text1_textlist":"等待|"}  data-->
-<div >
-    <span id="text[{ID}]">xxx</span>
-    <script>
-        v[{ID}]text_str = "[{text1}]"
-        v[{ID}]text_list = v[{ID}]text_str.split("|")
-        $("#text[{ID}]").html(v[{ID}]text_list[0])
-        // 这里要加延时
-        setTimeout(function(){
-            // 订阅
-            pubSub.subscribe('[{sn}]/[{tab}]', T_value => {
-                console.log(`收到:${T_value}`);
-                $("#text[{ID}]").html(v[{ID}]text_list[parseInt(T_value)])
-            })
-        },2000);
-    </script>
-</div>
-
-<!--文字[获取设备名称]-->
-<!--data   {"sn_sn":"[-{sn}-]","color_color_字体颜色":"","size_int_字体大小":"20","font_font":""}  data-->
-<div style="padding-top: 4px;">
-    <style> @font-face{ font-family:font_[{ID}];  src: url('[{font}]') }</style>
-
-    <span id="text[{ID}]" style="font-family: font_[{ID}];font-size: [{size}]px;color: [{color}];">设备名称</span>
-    <script>
-
-        $("#text[{ID}]").html("")
-        // 这里要加延时
-        setTimeout(function(){
-            // 订阅
-            pubSub.subscribe('[{sn}]/Device_name', T_value => {
-                console.log(`收到:${T_value}`);
-                $("#text[{ID}]").html(T_value)
-            })
-        },2000);
-    </script>
-</div>
-
-
-<!--数值[数据]-->
-<!--data   {"sn_sn":"[-{sn}-]","tab_tab":"n_temp_2","color_color_字体颜色":"","size_int_字体大小":"20","font_font":"https://standardoss.baozhida.cn/shumaguan.ttf"}  data-->
-<div style="padding-top: 4px;">
-    <style> @font-face{ font-family:font_[{ID}];  src: url('[{font}]') }</style>
-
-    <span id="text[{ID}]" style="font-family: font_[{ID}];font-size: [{size}]px;color: [{color}];">xxx</span>
-    <script>
-
-        $("#text[{ID}]").html("")
-        // 这里要加延时
-        setTimeout(function(){
-            // 订阅
-            pubSub.subscribe('[{sn}]/[{tab}]', T_value => {
-                console.log(`收到:${T_value}`);
-                $("#text[{ID}]").html(T_value)
-            })
-        },2000);
-    </script>
-</div>
-
-
-<!--触发开关[数据]-->
-<!--data   {"sn_sn":"[-{sn}-]","tab_tab":"v_do_1","img1_imglist":"https://standardoss.baozhida.cn/UpImage/300f1259-e12f-46a9-b9df-4021104e29ea.png|https://standardoss.baozhida.cn/UpImage/f52edbf2-7f87-4340-a6b8-e280bc7aae06.png|"}  data-->
-<div >
-    <img id="switch[{ID}]" onclick="f_switch[{ID}]_on()" style="user-select: auto;" src="https://standardoss.baozhida.cn/UpImage/f52edbf2-7f87-4340-a6b8-e280bc7aae06.png" width="100%" height="100%">
-    <script>
-        v[{ID}]img_str = "[{img1}]"
-        v[{ID}]img_list = v[{ID}]img_str.split("|")
-        v[{ID}]value = 1
-
-        $("#img[{ID}]").attr("src",v[{ID}]img_list[0])
-        if(Public_Value_map.has('[{sn}]/[{tab}]')){                 //判断映射是否存在
-            v[{ID}]value = parseInt(Public_Value_map.get('[{sn}]/[{tab}]'))
-            f_switch[{ID}]_show()
-        }
-        // 这里要加延时
-        setTimeout(function(){
-            // 订阅
-            pubSub.subscribe('[{sn}]/[{tab}]', T_value => {
-                console.log(`收到:${T_value}`);
-                v[{ID}]value = parseInt(T_value)
-                f_switch[{ID}]_show()
-            })
-        },2000);
-
-        function f_switch[{ID}]_on() {
-            console.log("v[{ID}]value:",v[{ID}]value)
-            if(v[{ID}]value == 0){
-                v[{ID}]value = 1
-                f_Data_Write("switch[{ID}]","[{sn}]","[{tab}]",v[{ID}]value)
-            }else{
-                v[{ID}]value = 0
-                f_Data_Write("switch[{ID}]","[{sn}]","[{tab}]",v[{ID}]value)
-            }
-        }
-        function f_switch[{ID}]_show() {
-
-            $("#switch[{ID}]").attr("src",v[{ID}]img_list[v[{ID}]value])
-        }
-
-    </script>
-</div>
-
-<!--触发开关(提示版)[数据]-->
-<!--data   {"sn_sn":"[-{sn}-]","tab_tab":"v_do_1","img1_imglist":"https://standardoss.baozhida.cn/UpImage/300f1259-e12f-46a9-b9df-4021104e29ea.png|https://standardoss.baozhida.cn/UpImage/f52edbf2-7f87-4340-a6b8-e280bc7aae06.png|"}  data-->
-<div >
-    <img id="switch[{ID}]" onclick="f_switch[{ID}]_on()" style="user-select: auto;" src="https://standardoss.baozhida.cn/UpImage/f52edbf2-7f87-4340-a6b8-e280bc7aae06.png" width="100%" height="100%">
-    <div style=""> </div>
-
-
-    <script>
-        v[{ID}]img_str = "[{img1}]"
-        v[{ID}]img_list = v[{ID}]img_str.split("|")
-        v[{ID}]value = 1
-
-        $("#img[{ID}]").attr("src",v[{ID}]img_list[0])
-        if(Public_Value_map.has('[{sn}]/[{tab}]')){                 //判断映射是否存在
-            v[{ID}]value = parseInt(Public_Value_map.get('[{sn}]/[{tab}]'))
-            f_switch[{ID}]_show()
-        }
-        // 这里要加延时
-        setTimeout(function(){
-            // 订阅
-            pubSub.subscribe('[{sn}]/[{tab}]', T_value => {
-                console.log(`收到:${T_value}`);
-                v[{ID}]value = parseInt(T_value)
-                f_switch[{ID}]_show()
-            })
-        },2000);
-
-        function f_switch[{ID}]_on() {
-
-            $("body").append('<div id="switch[{ID}]_Tips" style="padding: 10px;text-align: center;user-select: none;position: absolute;left: '+$("#switch[{ID}]").offset().left+'px;top: '+$("#switch[{ID}]").offset().top+'px;z-index: 999999999999999;width: 142px;height: 100px;background-color:rgba(238,238,238,0.62);border-radius: 5px;">' +
-                '<h3>确定操作</h3>' +
-                '<button style="border-color: #1E9FFF;background-color: #1E9FFF;color: #fff;height: 28px;line-height: 28px;margin: 0 6px;padding: 0 15px;border: 1px solid #dedede;" ' +
-                '   onclick="f_switch[{ID}]_yes()">确定</button>' +
-                '<button style="border-color: #FF1E1E;background-color: #FF1E1E;color: #fff;height: 28px;line-height: 28px;margin: 0 6px;padding: 0 15px;border: 1px solid #dedede;"' +
-                ' onclick="f_switch[{ID}]_no()">取消</button>' +
-                '</div>')
-
-        }
-        function f_switch[{ID}]_yes() {
-            console.log("v[{ID}]value:",v[{ID}]value)
-            if(v[{ID}]value == 0){
-                v[{ID}]value = 1
-                f_Data_Write("switch[{ID}]","[{sn}]","[{tab}]",v[{ID}]value)
-            }else{
-                v[{ID}]value = 0
-                f_Data_Write("switch[{ID}]","[{sn}]","[{tab}]",v[{ID}]value)
-            }
-            $("#switch[{ID}]_Tips").remove()
-        }
-        function f_switch[{ID}]_no() {
-            $("#switch[{ID}]_Tips").remove()
-        }
-        function f_switch[{ID}]_show() {
-
-            $("#switch[{ID}]").attr("src",v[{ID}]img_list[v[{ID}]value])
-        }
-
-    </script>
-</div>
-
-
-
-<!--触发模式[数据]-->
-<!--data   {"sn_sn":"866222050911984","tab_tab":"v_do_1","img1_imglist":"https://standardoss.baozhida.cn/UpImage/c14655ce-e357-44c0-b1a7-8d57df82593a.png|"}  data-->
-<div >
-    <img id="mode[{ID}]" onclick="f_mode[{ID}]_on()" style="user-select: auto;" src="https://standardoss.baozhida.cn/UpImage/c14655ce-e357-44c0-b1a7-8d57df82593a.png" width="100%" height="100%">
-    <script>
-        v[{ID}]img_str = "[{img1}]"
-        v[{ID}]img_list = v[{ID}]img_str.split("|")
-        v[{ID}]value = 0
-
-        $("#img[{ID}]").attr("src",v[{ID}]img_list[0])
-        if(Public_Value_map.has('[{sn}]/[{tab}]')){                 //判断映射是否存在
-            v[{ID}]value = parseInt(Public_Value_map.get('[{sn}]/[{tab}]'))
-            f_mode[{ID}]_show()
-        }
-        // 这里要加延时
-        setTimeout(function(){
-            // 订阅
-            pubSub.subscribe('[{sn}]/[{tab}]', T_value => {
-                console.log(`收到:${T_value}`);
-                v[{ID}]value = parseInt(T_value)
-                f_mode[{ID}]_show()
-            })
-        },2000);
-
-        function f_mode[{ID}]_on() {
-
-            console.log("v[{ID}]value:",v[{ID}]value)
-            console.log("v[{ID}]img_list.length:",v[{ID}]img_list.length)
-
-            if(v[{ID}]img_list.length < v[{ID}]value+1){
-                v[{ID}]value = 0
-                f_Data_Write("mode[{ID}]","[{sn}]","[{tab}]",v[{ID}]value)
-                return;
-            }
-            if(v[{ID}]img_list[v[{ID}]value+1].length <= 3){
-                v[{ID}]value = 0
-                f_Data_Write("mode[{ID}]","[{sn}]","[{tab}]",v[{ID}]value)
-                return;
-            }
-            v[{ID}]value += 1
-            f_Data_Write("mode[{ID}]","[{sn}]","[{tab}]",v[{ID}]value)
-
-        }
-        function f_mode[{ID}]_show() {
-
-            $("#mode[{ID}]").attr("src",v[{ID}]img_list[v[{ID}]value])
-        }
-
-    </script>
-</div>
-
-
-
-
-<!-- 数值加减 -->
-<!--data   {"sn_sn":"[-{sn}-]","tab_tab":"v_do_1","max_int":"100","min_int":"0"}  data-->
-<div >
-    <link rel="stylesheet" href="[{OSS_Static}]/panel/lib/NumBox/Panel_number-box.css">
-
-
-    <div id="Panel_on_number_[{ID}]" class="Panel_number-box">
-        <input type="button" class="Panel_on-number" onclick="Panel_number[{ID}]_on(this)" value="-" data-v="-1">
-        <input id="Panel_on_number_[{ID}]_v" type="text" value="0" >
-        <input type="button" class="Panel_on-number" onclick="Panel_number[{ID}]_on(this)" value="+" data-v="1">
-    </div>
-
-    <script>
-        // 这里要加延时
-        setTimeout(function(){
-            // 订阅
-            pubSub.subscribe('[{sn}]/[{tab}]', T_value => {
-                console.log(`收到:${T_value}`);
-                $("#Panel_on_number_[{ID}]_v").val(parseInt(T_value))
-            })
-        },2000);
-
-        function Panel_number[{ID}]_on(this_) {
-            var $val = $(this_).siblings("input[type='text']"),val = parseInt($val.val(), 10) + parseInt($(this_).data("v"));
-            V_num = isNaN(val) ? 0 : val
-
-            if([{max}] < V_num ){
-                V_num = [{max}]
-            }
-            if([{min}] > V_num ){
-                V_num = [{min}]
-            }
-            $val.val(V_num);
-            f_Data_Write("Panel_on_number_[{ID}]","[{sn}]","[{tab}]",V_num)
-        };
-    </script>
-</div>
-
-
-
-<!--数值[数据]-->
-<!--data   {"sn_sn":"[-{sn}-]","tab_tab":"n_temp_2","color_color_字体颜色":"","size_int_字体大小":"20","font_font":"https://standardoss.baozhida.cn/shumaguan.ttf"}  data-->
-<div style="padding-top: 4px;">
-
-</div>
-
-
-<!-- 弹窗-数值加减 -->
-<!--data   {"sn_sn":"[-{sn}-]","tab_tab":"v_do_1","max_int_最高温度":"100","min_int_最低温度":"0","color_color_字体颜色":"","size_int_字体大小":"20","font_font":"https://standardoss.baozhida.cn/shumaguan.ttf"}  data-->
-<div >
-    <link rel="stylesheet" href="[{OSS_Static}]/panel/lib/NumBox/Panel_number-box.css">
-
-    <style> @font-face{ font-family:font_[{ID}];  src: url('[{font}]') }</style>
-
-    <span id="text[{ID}]" style="font-family: font_[{ID}];font-size: [{size}]px;color: [{color}];"  onclick="f_open_control_[{ID}]_on()">xxx</span>
-    <script>
-
-        $("#text[{ID}]").html("")
-
-        var T_value_[{ID}]_v = 0
-        // 这里要加延时
-        setTimeout(function(){
-            // 订阅
-            pubSub.subscribe('[{sn}]/[{tab}]', T_value => {
-                console.log(`收到:${T_value}`);
-                $("#text[{ID}]").html(T_value)
-                T_value_[{ID}]_v = parseInt(T_value)
-
-            })
-        },2000);
-
-        function Panel_number[{ID}]_on(this_) {
-            var $val = $(this_).siblings("input[type='text']"),val = parseInt($val.val(), 10) + parseInt($(this_).data("v"));
-            V_num = isNaN(val) ? 0 : val
-
-            if([{max}] < V_num ){
-                V_num = [{max}]
-            }
-            if([{min}] > V_num ){
-                V_num = [{min}]
-            }
-            $val.val(V_num);
-        };
-
-        function f_button_[{ID}]_on() {
-            f_Data_Write("Panel_on_number_[{ID}]_v","[{sn}]","[{tab}]",$("#Panel_on_number_[{ID}]_v").val())
-            layer.close(layer_[{ID}]_id)
-        }
-        var layer_[{ID}]_id
-
-        layer_[{ID}]_html = "<div id=\"open_control_[{ID}]\" style=\"width: 200px;height: 150px;text-align: center\">\n" +
-            "        <div class=\"Panel_number-box\" style=\"width: 132px;margin-top: 30px\">\n" +
-            "            <input type=\"button\" class=\"Panel_on-number\" onclick=\"Panel_number[{ID}]_on(this)\" value=\"-\" data-v=\"-1\">\n" +
-            "            <input id=\"Panel_on_number_[{ID}]_v\" type=\"text\" value=\""+T_value_[{ID}]_v+"\" >\n" +
-            "            <input type=\"button\" class=\"Panel_on-number\" onclick=\"Panel_number[{ID}]_on(this)\" value=\"+\" data-v=\"1\">\n" +
-            "        </div>\n" +
-            "        <div style=\"width: 132px;margin-top: 30px;margin: 10px auto\">\n" +
-            "            <button onclick=\"f_button_[{ID}]_on()\" style=\"height: 28px;margin-top: 10px;line-height: 28px;border: 1px solid transparent;padding: 0 18px;background-color: #1E9FFF;color: #fff;white-space: nowrap;text-align: center;font-size: 12px;border-radius: 2px;cursor: pointer;\">确定</button>\n" +
-            "        </div>\n" +
-            "    </div> <script>\n" +
-        "        $(\"#Panel_on_number_[{ID}]_v\").val(parseInt(T_value_[{ID}]_v))\n" +"  <\/script>"
-        function f_open_control_[{ID}]_on() {
-            layer_[{ID}]_id = layer.open({
-                title: '设置',
-                type: 1,
-                fix: false, //不固定
-                maxmin: false,
-                content: layer_[{ID}]_html,
-                shadeClose:true,
-                anim: 1,
-                isOutAnim: false,
-                Boolean:false,
-                success: function (layero, index) {
-                },
-                end: function () {
-                }
-            });
-        }
-
-    </script>
-
-
-
-</div>
-
-
-<!-- 设备设置 -->
-<!--data   {"sn_sn":"[-{sn}-]","tab_tab":"v_do_1","url_img":"https://standardoss.baozhida.cn/UpImage/d78f68bf-a06c-45ce-9eab-a45b1ce3dec7.png"}  data-->
-<div>
-    <img src="[{url}]" width="100%" height="100%" onclick="f_open_control_[{ID}]_on()">
-    <script>
-        function f_open_control_[{ID}]_on() {
-            tab = "[{tab}]".split("_")
-            layer.open({
-                title: "设备参数配置",
-                type: 2,
-                area: ['500px', '630px'],
-                fix: false, //不固定
-                maxmin: false,
-                content: "../../DeviceCh/DeviceChParameter_Html?T_sn=[{sn}]&T_tab="+tab[0]+"_"+tab[1]+"&T_ch="+tab[2],
-                shadeClose:true,
-                anim: 1,
-                isOutAnim: false,
-            });
-        }
-    </script>
-</div>
-
-<!-- 折线图-牵引格栅  -->
-<!--data   {"sn_sn":"[-{sn}-]","tab_tab":"v_temp_1","max_int_最大值":"0","min_int_最小值":"0"}  data-->
-<div>
-    <div style="width: 100%">
-        <svg id="chart-[{ID}]" viewBox="0 0 80 40">
-        </svg>
-    </div>
-
-    <link rel="stylesheet" href="[{OSS_Static}]/panel/lib/modernizr/css/drawGridStyle.css" media="screen" type="text/css" />
-    <script src='[{OSS_Static}]/panel/jquery.min.js'></script>
-    <script src='[{OSS_Static}]/panel/lib/modernizr/js/snap.svg-min.js'></script>
-    <script src="[{OSS_Static}]/panel/lib/modernizr/js/drawGrid.js"></script>
-    <script>
-        var chart_[{ID}]_list = [
-            1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0,1,
-        ];
-        $.ajax({
-            type: 'POST',
-            url: '../../Data/Data_List',//发送请求
-            data: {
-                T_sn: '[{sn}]',
-                T_tab: "[{tab}]",
-                page: 1,
-                page_z: chart_[{ID}]_list.length,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    if(result.Data.List == null){
-                        return
-                    }
-                    for (var i = 0; i < result.Data.List.length; i++){
-                        T_value = parseFloat(result.Data.List[i].T_value)
-                        chart_[{ID}]_list.shift();
-                        chart_[{ID}]_list.push(T_value)
-                    }
-                }
-            }
-        });
-
-        drawGrid('#chart-[{ID}]');
-        drawLineGraph('#chart-[{ID}]', chart_[{ID}]_list,  1);
-        // 这里要加延时
-        setTimeout(function(){
-            // 订阅
-            pubSub.subscribe('[{sn}]/[{tab}]', T_value => {
-                console.log(`收到:${T_value}`);
-                chart_[{ID}]_list.shift();
-                chart_[{ID}]_list.push(parseFloat(T_value))
-                if(Math.abs(Math.max.apply(Math,chart_[{ID}]_list) - Math.min.apply(Math,chart_[{ID}]_list)) > 0 ){
-                    drawGrid('#chart-[{ID}]');
-                    drawLineGraph('#chart-[{ID}]', chart_[{ID}]_list,  1,[{max}],[{min}]);
-                }
-            })
-        },2000);
-    </script>
-</div>
-
-<!-- 折线图-牵引格栅-时间  -->
-<!--data   {"sn_sn":"[-{sn}-]","tab_tab":"v_temp_1","time_int_间隔时间s":"2","max_int_最大值":"0","min_int_最小值":"0"}  data-->
-<div>
-    <div style="width: 100%">
-        <svg id="chart-[{ID}]" viewBox="0 0 80 40">
-        </svg>
-    </div>
-
-    <link rel="stylesheet" href="[{OSS_Static}]/panel/lib/modernizr/css/drawGridStyle.css" media="screen" type="text/css" />
-    <script src='[{OSS_Static}]/panel/jquery.min.js'></script>
-    <script src='[{OSS_Static}]/panel/lib/modernizr/js/snap.svg-min.js'></script>
-    <script src="[{OSS_Static}]/panel/lib/modernizr/js/drawGrid.js"></script>
-    <script>
-
-        var chart_[{ID}]_list = [
-            1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0,1,
-        ];
-        var chart_[{ID}]_v = 0
-        $.ajax({
-            type: 'POST',
-            url: '../../Data/Data_List',//发送请求
-            data: {
-                T_sn: '[{sn}]',
-                T_tab: "[{tab}]",
-                page: 1,
-                page_z: chart_[{ID}]_list.length,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    if(result.Data.List == null){
-                        return
-                    }
-                    for (var i = 0; i < result.Data.List.length; i++){
-                        T_value = parseFloat(result.Data.List[i].T_value)
-                        chart_[{ID}]_list.shift();
-                        chart_[{ID}]_list.push(T_value)
-                        chart_[{ID}]_v = T_value
-                    }
-                }
-            }
-        });
-
-
-        drawGrid('#chart-[{ID}]');
-        drawLineGraph('#chart-[{ID}]', chart_[{ID}]_list,  1);
-        // 这里要加延时
-        setTimeout(function(){
-            // 订阅
-            pubSub.subscribe('[{sn}]/[{tab}]', T_value => {
-                console.log(`收到:${T_value}`);
-                chart_[{ID}]_v = T_value
-            })
-        },2000);
-
-        setInterval(function(){
-            chart_[{ID}]_list.shift();
-            chart_[{ID}]_list.push(parseFloat(chart_[{ID}]_v))
-            if(Math.abs(Math.max.apply(Math,chart_[{ID}]_list) - Math.min.apply(Math,chart_[{ID}]_list)) > 0 ){
-                drawGrid('#chart-[{ID}]');
-                drawLineGraph('#chart-[{ID}]', chart_[{ID}]_list,  1,[{max}],[{min}]);
-            }
-        },[{time}] * 1000);
-    </script>
-</div>
-
-
-<!-- 柱状图-水位 -->
-<!--data   {"sn_sn":"[-{sn}-]","tab_tab":"n_temp_2","width_int_宽度":"200","height_int_高度":"300","color_color":"skyblue","formula_str_公式":"T_value"}  data-->
-<div>
-    <div class="tank waterTankHere[{ID}]"></div>
-
-    <script src="[{OSS_Static}]/panel/jquery.min.js" type="text/javascript"></script>
-    <script src="[{OSS_Static}]/panel/lib/Poolhistogram/js/waterTank.js"></script>
-    <script>
-        $('.waterTankHere[{ID}]').waterTank({
-            width: [{width}],
-            height: [{height}],
-            color: '[{color}]',
-            level: 100
-        })
-        // 这里要加延时
-        setTimeout(function(){
-            // 订阅
-            pubSub.subscribe('[{sn}]/[{tab}]', T_value => {
-                console.log(`收到:${T_value}`);
-                T_value = parseInt(T_value)
-                $('.waterTankHere[{ID}]').waterTank([{formula}]);
-            })
-        },2000);
-
-    </script>
-</div>
-
-
-
-<!-- 弹窗-数值加减 -->
-<!--data   {"sn_sn":"[-{sn}-]","tab_tab":"v_do_1","max_int":"100","min_int":"0","url_img":"https://standardoss.baozhida.cn/UpImage/54353e11-37e4-4b15-84f5-4e91b4c1282e.png"}  data-->
-<div >
-    <link rel="stylesheet" href="[{OSS_Static}]/panel/lib/NumBox/Panel_number-box.css">
-
-    <img src="[{url}]" width="100%" height="100%" onclick="f_open_control_[{ID}]_on()">
-
-    <script>
-        var T_value_[{ID}]_v = 0
-        // 这里要加延时
-        setTimeout(function(){
-            // 订阅
-            pubSub.subscribe('[{sn}]/[{tab}]', T_value => {
-                console.log(`收到:${T_value}`);
-                T_value_[{ID}]_v = parseInt(T_value)
-                $("#Panel_on_number_[{ID}]_v").val(parseInt(T_value))
-            })
-        },2000);
-
-        function Panel_number[{ID}]_on(this_) {
-            var $val = $(this_).siblings("input[type='text']"),val = parseInt($val.val(), 10) + parseInt($(this_).data("v"));
-            V_num = isNaN(val) ? 0 : val
-
-            if([{max}] < V_num ){
-                V_num = [{max}]
-            }
-            if([{min}] > V_num ){
-                V_num = [{min}]
-            }
-            $val.val(V_num);
-        };
-
-        function f_button_[{ID}]_on() {
-            f_Data_Write("open_control_[{ID}]","[{sn}]","[{tab}]",$("#Panel_on_number_[{ID}]_v").val())
-            layer.close(layer_[{ID}]_id)
-        }
-        var layer_[{ID}]_id
-
-        layer_[{ID}]_html = "<div id=\"open_control_[{ID}]\" style=\"width: 200px;height: 150px;text-align: center\">\n" +
-            "        <div class=\"Panel_number-box\" style=\"width: 132px;margin-top: 30px\">\n" +
-            "            <input type=\"button\" class=\"Panel_on-number\" onclick=\"Panel_number[{ID}]_on(this)\" value=\"-\" data-v=\"-1\">\n" +
-            "            <input id=\"Panel_on_number_[{ID}]_v\" type=\"text\" value=\""+T_value_[{ID}]_v+"\" >\n" +
-        "            <input type=\"button\" class=\"Panel_on-number\" onclick=\"Panel_number[{ID}]_on(this)\" value=\"+\" data-v=\"1\">\n" +
-        "        </div>\n" +
-        "        <div style=\"width: 132px;margin-top: 30px;margin: 10px auto\">\n" +
-        "            <button onclick=\"f_button_[{ID}]_on()\" style=\"height: 28px;margin-top: 10px;line-height: 28px;border: 1px solid transparent;padding: 0 18px;background-color: #1E9FFF;color: #fff;white-space: nowrap;text-align: center;font-size: 12px;border-radius: 2px;cursor: pointer;\">确定</button>\n" +
-        "        </div>\n" +
-        "    </div> <script>\n" +
-        "        $(\"#Panel_on_number_[{ID}]_v\").val(parseInt(T_value_[{ID}]_v))\n" +"  <\/script>"
-        function f_open_control_[{ID}]_on() {
-            layer_[{ID}]_id = layer.open({
-                title: '设置',
-                type: 1,
-                fix: false, //不固定
-                maxmin: false,
-                content: layer_[{ID}]_html,
-                shadeClose:true,
-                anim: 1,
-                isOutAnim: false,
-                Boolean:false,
-                success: function (layero, index) {
-                },
-                end: function () {
-                }
-            });
-        }
-
-    </script>
-
-
-
-</div>
-
-
-<!--数值-可设定-->
-<!--data   {"sn_sn":"[-{sn}-]","tab_tab":"v_do_1","max_int_最高温度":"100","min_int_最低温度":"0","color_color_字体颜色":"","size_int_字体大小":"20","font_font":"https://standardoss.baozhida.cn/shumaguan.ttf"}  data-->
-<div >
-    <link rel="stylesheet" href="[{OSS_Static}]/panel/lib/NumBox/Panel_number-box.css">
-
-    <style> @font-face{ font-family:font_[{ID}];  src: url('[{font}]') }</style>
-
-    <span id="text[{ID}]" style="font-family: font_[{ID}];font-size: [{size}]px;color: [{color}];"  onclick="f_open_control_[{ID}]_on()">xxx</span>
-    <script>
-
-        $("#text[{ID}]").html("")
-
-        var T_value_[{ID}]_v = 0
-        // 这里要加延时
-        setTimeout(function(){
-            // 订阅
-            pubSub.subscribe('[{sn}]/[{tab}]', T_value => {
-                console.log(`收到:${T_value}`);
-                $("#text[{ID}]").html(T_value)
-                T_value_[{ID}]_v = parseInt(T_value)
-
-            })
-        },2000);
-
-        function Panel_number[{ID}]_on(this_) {
-            var $val = $(this_).siblings("input[type='text']"),val = parseInt($val.val(), 10) + parseInt($(this_).data("v"));
-            V_num = isNaN(val) ? 0 : val
-
-            if([{max}] < V_num ){
-                V_num = [{max}]
-            }
-            if([{min}] > V_num ){
-                V_num = [{min}]
-            }
-            $val.val(V_num);
-        };
-
-        function f_button_[{ID}]_on() {
-            f_Data_Write("text[{ID}]","[{sn}]","[{tab}]",$("#Panel_on_number_[{ID}]_v").val())
-            layer.close(layer_[{ID}]_id)
-        }
-        var layer_[{ID}]_id
-
-        layer_[{ID}]_html = "<div id=\"open_control_[{ID}]\" style=\"width: 200px;height: 150px;text-align: center\">\n" +
-            "        <div class=\"Panel_number-box\" style=\"width: 132px;margin-top: 30px\">\n" +
-            "            <input type=\"button\" class=\"Panel_on-number\" onclick=\"Panel_number[{ID}]_on(this)\" value=\"-\" data-v=\"-1\">\n" +
-            "            <input id=\"Panel_on_number_[{ID}]_v\" type=\"text\" value=\""+T_value_[{ID}]_v+"\" >\n" +
-        "            <input type=\"button\" class=\"Panel_on-number\" onclick=\"Panel_number[{ID}]_on(this)\" value=\"+\" data-v=\"1\">\n" +
-        "        </div>\n" +
-        "        <div style=\"width: 132px;margin-top: 30px;margin: 10px auto\">\n" +
-        "            <button onclick=\"f_button_[{ID}]_on()\" style=\"height: 28px;margin-top: 10px;line-height: 28px;border: 1px solid transparent;padding: 0 18px;background-color: #1E9FFF;color: #fff;white-space: nowrap;text-align: center;font-size: 12px;border-radius: 2px;cursor: pointer;\">确定</button>\n" +
-        "        </div>\n" +
-        "    </div> <script>\n" +
-        "        $(\"#Panel_on_number_[{ID}]_v\").val(parseInt(T_value_[{ID}]_v))\n" +"  <\/script>"
-        function f_open_control_[{ID}]_on() {
-            layer_[{ID}]_id = layer.open({
-                title: '设置',
-                type: 1,
-                fix: false, //不固定
-                maxmin: false,
-                content: layer_[{ID}]_html,
-                shadeClose:true,
-                anim: 1,
-                isOutAnim: false,
-                Boolean:false,
-                success: function (layero, index) {
-                },
-                end: function () {
-                }
-            });
-        }
-
-    </script>
-
-
-
-</div>
-
-
-
-<script>
-
-    $("body").append('<div style="user-select: none;position: absolute;left: 539px;top: 223px;z-index: 999999999999999;width: 20px;height: 20px;background-color: rgba(231,0,62,0.97);">1</div>')
-
-</script>
-
-
-
-<!-- 发布订阅模式
-
-
-pubSub.publish('866222050911984/v_do_4', '06:00:00');
-
-
-
-
--->
-
-
-
-
-
-<!--data   {"pane_pane":"","url_img":"https://standardoss.baozhida.cn/UpImage/1655261167cba53203-8326-49ea-82d7-5563ead17bc0.png"}  data-->
-<div>
-    <img src="[{url}]" onclick="window.location.href='../../Panel/Index_plan?T_viewid=[{pane}]';"  width="100%" height="100%">
-</div>

+ 21 - 1
views/index.html

@@ -230,7 +230,7 @@
                                     <cite>轨迹展示</cite></a>
                                     <cite>轨迹展示</cite></a>
                             </li>
                             </li>
                             <li class="open">
                             <li class="open">
-                                <a onclick="xadmin.del_all();xadmin.add_tab('平面图','/Panel/Index_plan')">
+                                <a onclick="xadmin.del_all();xadmin.add_tab('平面图','{{.Panel_url}}/Panel/Index_plan')">
                                     <i class="iconfont">&#xe6a7;</i>
                                     <i class="iconfont">&#xe6a7;</i>
                                     <cite>平面图</cite></a>
                                     <cite>平面图</cite></a>
                             </li>
                             </li>
@@ -347,10 +347,30 @@
                     Id:id,
                     Id:id,
                 },
                 },
                 success: function(result) {
                 success: function(result) {
+
                 }
                 }
             });
             });
         }
         }
 
 
 
 
     </script>
     </script>
+
+<script>
+
+    setInterval(function(){
+        $.ajax({
+            type: 'POST',
+            url: '/User/InspectTokey',//发送请求
+            success: function(result) {
+                if(result.Code != 200){
+                    location.href="/Login"
+                }
+
+            }
+        });
+
+
+
+    },1000*60*2);
+</script>
 </html>
 </html>

+ 1 - 1
views/login.html

@@ -24,7 +24,7 @@
 <body class="login-bg">
 <body class="login-bg">
 
 
 <div class="login layui-anim layui-anim-up">
 <div class="login layui-anim layui-anim-up">
-    <div class="message">宝智达-管理登录</div>
+    <div class="message">宝智达 v2.0-管理登录</div>
     <div id="darkbannerwrap"></div>
     <div id="darkbannerwrap"></div>
 
 
     <form method="post" class="layui-form" >
     <form method="post" class="layui-form" >

Some files were not shown because too many files changed in this diff