Browse Source

删除数据同步删除报警数据,设备管理显示最新温湿度,偏差值,批量设置偏差值,批量同步参数,批量数据重传

huangyan 3 months ago
parent
commit
e9e2053eee

BIN
ColdP_server


+ 1 - 0
Cold_server.go

@@ -21,6 +21,7 @@ func init() {
 		conf.MysqlServer_Username+":"+conf.MysqlServer_Password+"@tcp("+conf.MysqlServer_UrlPort+")/"+conf.MysqlServer_Database+"?charset=utf8mb4&loc=Local&parseTime=True",
 		conf.MysqlServer_MaxIdleConnections, conf.MysqlServer_MaxOpenConnections)
 	orm.RunSyncdb("default", false, false) // 创建数据库
+	//Nats.Init()
 	orm.Debug = true
 	orm2.Debug = true
 }

+ 1 - 1
Z_Build.bat

@@ -1,7 +1,7 @@
 cd %~dp0
 set GOARCH=amd64
 set GOOS=linux
-set GOPATH=C:\Users\SIKED\go
+set GOPATH=E:\gopath
 set GO111MODULE=auto
 
 go build -o ColdP_server Cold_server.go

+ 9 - 4
conf/app.conf

@@ -1,22 +1,27 @@
 appname = ColdP_server
-HTTPPort = 6200
+HTTPPort = 6300
 runmode = dev
 EnableDocs = true
 copyrequestbody = true
 
 # Nats
-NatsServer_Url = "182.44.113.60:4222"
+; NatsServer_Url = "203.34.49.130:4222"
+NatsServer_Url = "192.168.0.5:4222"
 
 # Mysql
-MysqlServer_UrlPort = "182.44.114.135:3306"
+MysqlServer_UrlPort = "192.168.0.88:3306"
+; MysqlServer_UrlPort = "203.34.49.130:3306"
 MysqlServer_Database = "cold"
 MysqlServer_Username = "cold"
+; MysqlServer_Password = "yjwyEckZS7rE5H"
 MysqlServer_Password = "yjwyEckZS7rE5H!"
 MysqlServer_MaxIdleConnections = 100
 MysqlServer_MaxOpenConnections = 200
 
 # Redis
-Redis_address = "182.44.113.60:6379"
+; Redis_address = "203.34.49.130:6379"
+Redis_address = "192.168.0.5:6379"
+; Redis_password = "redis_JJ56d5"
 Redis_password = "redis_wsxaMH"
 Redis_dbNum = "1"
 

+ 1 - 1
controllers/CommonsController.go

@@ -103,6 +103,6 @@ func (c *AdminController) Home() {
 		fmt.Println("当前未登录,请先登录!")
 		c.Ctx.Redirect(http.StatusFound, "Login")
 	}
-	c.Data["T_name"] = admin_r.T_name
+	c.Data["T_pid"] = admin_r.T_pid
 	c.TplName = "home.html"
 }

+ 22 - 1
controllers/DataController.go

@@ -5,6 +5,7 @@ import (
 	"ColdP_server/controllers/lib"
 	"ColdP_server/models/Company"
 	"ColdP_server/models/Device"
+	"ColdP_server/models/Warning"
 	"database/sql"
 	"encoding/json"
 	"fmt"
@@ -161,6 +162,24 @@ func (c *DataController) Device_Sensor_List_Delete() {
 	fmt.Println("body获取得到数据:", string(bytes))
 	json.Unmarshal(bytes, &datas)
 	fmt.Println("jsonUnmarshal获取得到数据:", datas)
+	for _, data := range datas {
+		err, m := Device.ReadDeviceSensorParameter(data.T_sp)
+		if err != nil {
+			c.Data["json"] = lib.JSONS{500, "删除失败!", nil}
+			c.ServeJSON()
+			return
+		}
+		if data.T_t < m.T_Tlower || data.T_t > m.T_Tupper || data.T_rh < m.T_RHlower || data.T_rh > m.T_RHupper {
+			log.Println("报警消息", data)
+			err := Warning.DeleteWarning(data.T_sn, data.T_time, data.T_id)
+			if err != nil {
+				log.Println("删除报警消息失败", err)
+				c.Data["json"] = lib.JSONS{500, "删除报警消息失败!", nil}
+				c.ServeJSON()
+				return
+			}
+		}
+	}
 	Device.DeleteDeviceDataByDeviceDataRList(datas)
 	c.Data["json"] = lib.JSONS{200, "删除成功!", nil}
 	c.ServeJSON()
@@ -191,12 +210,14 @@ func (c *DataController) Device_Sensor_List_Delete_Time() {
 	var affected int64
 	for i := 0; i < len(r_json.T_snid); i++ {
 		rows, err = Device.DeleteDeviceDataByTime(r_json.T_snid[i], r_json.T_id[i], r_json.Time_start, r_json.Time_end)
+		//rows, err = Device.DeleteDeviceDataByTimeWaring(r_json.T_snid[i], r_json.T_id[i], r_json.Time_start, r_json.Time_end)
 		affected, _ = rows.RowsAffected()
 		affected += affected
 	}
 	if err == nil {
 		c.Data["json"] = lib.JSONS{Code: 200, Msg: "删除成功", Data: affected}
 		c.ServeJSON()
+		return
 	}
 	c.Data["json"] = lib.JSONS{Code: 201, Msg: "删除失败", Data: affected}
 	c.ServeJSON()
@@ -379,7 +400,7 @@ func (c *DataController) GetCompanyBySn() {
 		c.ServeJSON()
 		return
 	}
-	if admin.T_name == "宝智达-魏公梅" {
+	if admin.T_pid == 0 {
 		sn := c.GetString("sn")
 		company, err := Device.GetCompanyBySn(sn)
 		if err != nil {

+ 30 - 8
controllers/DataGeneratorController.go

@@ -349,16 +349,23 @@ func normal(devices []Device.DeviceData, t_save_t, t_warn, sn string, t_tlower,
 		if timeDiff > floatSave {
 			fmt.Printf("时间差大于系统设置时间:%s 和 %s\n", devices[i].T_time, devices[i+1].T_time)
 			numInserts := int(timeDiff / floatSave)
+			ttInterval := devices[i+1].T_t - devices[i].T_t
+			ttt := devices[i].T_t // 温度临时变量
+			trhInterval := devices[i+1].T_rh - devices[i].T_rh
+			trht := devices[i].T_rh //湿度临时变量
 			for j := 1; j <= numInserts-1; j++ {
 				t := t1.Truncate(time.Minute)
 				newTime := t.Add(time.Duration(j*int(floatSave)) * time.Second)
-				T_T, T_Rh := IsNotWarn(devices, t_tlower, t_tupper, t_r_hlower, t_r_hupper)
+				//T_T, T_Rh := IsNotWarn(devices, t_tlower, t_tupper, t_r_hlower, t_r_hupper)
+				ttt += ttInterval / float64(numInserts)
+				trht += trhInterval / float64(numInserts)
 				devi := Device.DeviceData{
-					T_id:        devices[i].T_id,
-					T_sp:        devices[i].T_sp,
-					T_time:      newTime.Format(Format),
-					T_t:         T_T,
-					T_rh:        T_Rh,
+					T_id:   devices[i].T_id,
+					T_sp:   devices[i].T_sp,
+					T_time: newTime.Format(Format),
+					//T_t:         T_T,
+					T_t:         lib.Decimal(ttt),
+					T_rh:        lib.Decimal(trht),
 					T_site:      devices[i].T_site,
 					Create_time: newTime.Format(Format),
 				}
@@ -380,9 +387,24 @@ func normal(devices []Device.DeviceData, t_save_t, t_warn, sn string, t_tlower,
 // 判断是否在预警范围内,并且返回在预警内的值
 func IsNotWarn(deviceDatas []Device.DeviceData, t_tlower, t_tupper, t_r_hlower, t_r_hupper float64) (T_T, T_Rh float64) {
 	for i, _ := range deviceDatas {
+		if i == len(deviceDatas)-1 {
+			break // 最后一个元素没有下一个元素,直接跳过
+		}
 		if !(deviceDatas[i].T_t < t_tlower || deviceDatas[i].T_t > t_tupper || deviceDatas[i].T_rh < t_r_hlower || deviceDatas[i].T_rh > t_r_hupper) {
-			T_T = deviceDatas[i].T_t + rand.Float64()*0.4 - 0.2
-			T_Rh = deviceDatas[i].T_rh + rand.Float64()*0.4 - 0.2
+			if deviceDatas[i].T_rh != 0 {
+				T_Rh = deviceDatas[i].T_rh + rand.Float64()*0.1
+			}
+			T_T = deviceDatas[i].T_t + rand.Float64()*0.1
+			if T_T >= deviceDatas[i+1].T_t {
+				T_T = deviceDatas[i].T_t // 如果新温度值不小于下一个设备数据的温度值,则使用当前设备数据的温度值
+			}
+			if i > 0 && deviceDatas[i-1].T_t > deviceDatas[i+1].T_t {
+				T_T -= 0.1
+				if T_T < t_tlower {
+					T_T = t_tlower
+				}
+			}
+			T_Rh = deviceDatas[i].T_rh
 			return T_T, T_Rh
 		}
 	}

+ 446 - 64
controllers/DeviceController.go

@@ -16,6 +16,7 @@ import (
 	"math"
 	"strconv"
 	"strings"
+	"sync"
 	"time"
 )
 
@@ -58,10 +59,198 @@ func (c *DeviceController) DeviceList() {
 		pageCount = int(count) / conf.Page_size
 		pageCount++
 	}
+	deviation := make(chan string, 10)
+	done := make(chan struct{})
+	var wg sync.WaitGroup
+	defer close(done) // 确保函数结束时关闭done通道
+	for i, _ := range device_list {
+		wg.Add(1)
+		go func(deviceList *Device.DeviceSensor_) {
+			defer wg.Done()
+			t := Device.Read_DeviceData(deviceList.T_sn, deviceList.T_id)
+			topicSub := fmt.Sprintf("/sub/%s", deviceList.T_sn)
+			topicPub := fmt.Sprintf("/pub/%s", deviceList.T_sn)
+			mqttId := Device.ReadDeviceMqttId(deviceList.T_sn)
+			client, err := MqttServer.GetMqttClient(mqttId)
+			if err != nil {
+				log.Printf("Error getting MQTT client for SN: %s, %v", deviceList.T_sn, err)
+				fmt.Sprintf("设备: %s 获取MQTT客户端失败 %v", deviceList.T_sn, err)
+				return
+			}
+			// 订阅主题
+			if err := MqttServer.Subscript(client, topicSub, deviation, "\"type\":7,", done); err != nil {
+				log.Printf("Error subscribing to MQTT topic for SN: %s, %v", deviceList.T_sn, err)
+				client.Disconnect()
+				return
+			}
+			ints := make([]int, 0)
+			ints = append(ints, deviceList.T_id)
+			pubData, err := json.Marshal(MqttServer.Deviation_Pub{
+				Sn:   deviceList.T_sn,
+				Type: 7,
+				Mid:  time.Now().Unix(),
+				Data: ints,
+			})
+			if err != nil {
+				log.Printf("Error marshalling JSON for SN: %s, %v", deviceList.T_sn, err)
+				client.Disconnect()
+				return
+			}
+
+			if err := MqttServer.PubMqttMessage(client, topicPub, pubData); err != nil {
+				log.Printf("Error publishing MQTT message for SN: %s, %v", deviceList.T_sn, err)
+				client.Disconnect()
+				return
+			}
+			timeout := time.After(3 * time.Second) // 设置超时时间
+			select {
+			case v := <-deviation:
+				fmt.Println("channel收到数据:", v)
+				split := strings.Split(v, "||")
+				fmt.Println(len(split))
+				var devi Device.Deviation
+				if len(split) == 2 {
+					json.Unmarshal([]byte(split[1]), &devi)
+					fmt.Println(devi)
+					deviceList.T_tDeviation = float32(devi.Data[0].T)
+					deviceList.T_RhDeviation = float32(devi.Data[0].H)
+				}
+			case <-timeout:
+				log.Printf("连接设备超时: %s", deviceList.T_sn)
+				deviceList.T_tDeviation = 1201
+				deviceList.T_RhDeviation = 1201
+			case <-done:
+				log.Printf("任务取消: %s", deviceList.T_sn)
+				deviceList.T_tDeviation = 1201
+				deviceList.T_RhDeviation = 1201
+			}
+			deviceList.T_t = t.T_t
+			deviceList.T_rh = t.T_rh
+		}(&device_list[i])
+	}
+	wg.Wait()
 	c.Data["json"] = lib.PageHelper{int(count), pageCount, int(page), int(page) >= pageCount, page <= 1, device_list}
 	c.ServeJSON()
 	return
 }
+func (c *DeviceController) SetDeviceDataZero() {
+	is, admin := lib.VerificationController(&c.Controller)
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "用户未登录", Data: nil}
+		c.ServeJSON()
+		return
+	}
+
+	id, err := Device.Read_DeviceSensor_ALL_T_sn_T_id(admin.T_pid)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "获取设备列表失败", Data: nil}
+		c.ServeJSON()
+		return
+	}
+
+	data := make([]MqttServer.Deviation_Sub, 0)
+	for _, v := range id {
+		data = append(data, MqttServer.Deviation_Sub{
+			Sn: v.T_sn,
+			Data: []MqttServer.Deviation_Sub_Data{
+				{Id: v.T_id, H: 0, T: 0},
+			},
+		})
+	}
+
+	var wg sync.WaitGroup
+	successfulSns := make(map[string]bool) // 记录成功的SN
+	mutex := &sync.Mutex{}                 // 保护对successfulSns的访问
+	responseChan := make(chan string, len(data))
+	failSn := make([]string, 0)
+	defer close(responseChan)
+
+	handleResult := func(sn string, success bool) {
+		mutex.Lock()
+		defer mutex.Unlock()
+		if success {
+			successfulSns[sn] = true
+		} else {
+			failSn = append(failSn, sn)
+		}
+	}
+
+	for _, v := range data {
+		wg.Add(1)
+		go func(v MqttServer.Deviation_Sub) {
+			defer wg.Done()
+			v.Type = 8
+			v.Mid = int(time.Now().Unix())
+			mqttId := Device.ReadDeviceMqttId(v.Sn)
+			client, err := MqttServer.GetMqttClient(mqttId)
+			if err != nil {
+				log.Printf("Error getting MQTT client for SN: %s, %v", v.Sn, err)
+				handleResult(v.Sn, false)
+				return
+			}
+			defer client.Disconnect()
+			defer client.Terminate()
+			msgBytes, err := json.Marshal(v)
+			if err != nil {
+				log.Printf("Error marshalling JSON for SN: %s, %v", v.Sn, err)
+				handleResult(v.Sn, false)
+				return
+			}
+
+			subTopic := fmt.Sprintf("/sub/%s", v.Sn)
+			err = MqttServer.Subscript(client, subTopic, responseChan, "\"type\":8,", nil)
+			if err != nil {
+				log.Printf("Error subscribing to topic for SN: %s, %v", v.Sn, err)
+				handleResult(v.Sn, false)
+				return
+			}
+
+			pubTopic := fmt.Sprintf("/pub/%s", v.Sn)
+			for i := 0; i < 2; i++ {
+				time.Sleep(time.Second * time.Duration(i+1))
+				if err := MqttServer.PubMqttMessage(client, pubTopic, msgBytes); err != nil {
+					log.Printf("设备参数设置失败: %s, %v", v.Sn, err)
+					continue
+				}
+				break // 成功后跳出循环
+			}
+
+			select {
+			case vs := <-responseChan:
+				fmt.Println("channel收到数据:", vs)
+				handleResult(v.Sn, true)
+			case <-time.After(3 * time.Second):
+				log.Printf("连接设备超时: %s", v.Sn)
+				handleResult(v.Sn, false)
+			}
+		}(v)
+	}
+
+	wg.Wait()
+
+	if len(failSn) > 0 {
+		c.Data["json"] = lib.JSONS{Code: 1201, Msg: "部分设置失败", Data: failSn}
+	} else {
+		c.Data["json"] = lib.JSONS{Code: 200, Msg: "设置偏差值成功!", Data: nil}
+	}
+	c.ServeJSON()
+}
+
+// 辅助函数用于处理成功的情况
+func handleSuccess(sn string, mutex *sync.Mutex, successfulSns map[string]bool) {
+	mutex.Lock()
+	defer mutex.Unlock()
+	successfulSns[sn] = true // 标记为成功
+}
+
+// 辅助函数用于处理失败的情况
+func handleFailure(sn string, failSn *[]string, mutex *sync.Mutex, successfulSns map[string]bool) {
+	mutex.Lock()
+	defer mutex.Unlock()
+	if !successfulSns[sn] {
+		*failSn = append(*failSn, sn)
+	}
+}
 
 // CompanyClass 获取公司设备类目
 func (c *DeviceController) CompanyClass() {
@@ -93,36 +282,69 @@ func (c *DeviceController) DataRepeat() {
 	fmt.Println("浏览器接收数据:", t)
 	s, _ := time.Parse("2006-01-02 15:04:05", t.StartTime)
 	e, _ := time.Parse("2006-01-02 15:04:05", t.EndTime)
-
+	var wg sync.WaitGroup
+	successfulSns := make(map[string]bool) // 记录成功的SN
+	mutex := &sync.Mutex{}                 // 保护对successfulSns的访问
+	responseChan := make(chan string, len(t.Sns))
+	failSn := make([]string, 0)
+	defer close(responseChan)
+	handleResult := func(sn string, success bool) {
+		mutex.Lock()
+		defer mutex.Unlock()
+		if success {
+			successfulSns[sn] = true
+		} else {
+			failSn = append(failSn, sn)
+		}
+	}
 	// 发送MQTT
 	for k, v := range t.Sns {
-		topic := fmt.Sprintf("/pub/%s", k)
-		repeatPub := MqttServer.DataRepeat_Pub{Sn: k, Type: 9, Mid: time.Now().Unix(), Data: MqttServer.DataRepeat_Pub_Data{Start: s.Unix(), End: e.Unix(), Id: v}}
-		msg, _ := json.Marshal(repeatPub)
-		mqttId := strings.Split(Device.ReadDeviceMqttId(k), "\"")[0]
+		wg.Add(1)
+		go func(k string, v []int) {
+			defer wg.Done()
+			topic := fmt.Sprintf("/pub/%s", k)
+			repeatPub := MqttServer.DataRepeat_Pub{Sn: k, Type: 9, Mid: time.Now().Unix(), Data: MqttServer.DataRepeat_Pub_Data{Start: s.Unix(), End: e.Unix(), Id: v}}
+			msg, _ := json.Marshal(repeatPub)
+			mqttId := strings.Split(Device.ReadDeviceMqttId(k), "\"")[0]
 
-		client, err := MqttServer.GetMqttClient(mqttId)
-		if err != nil {
-			log.Printf("Error getting MQTT client for SN: %s, %v", k, err)
-			continue
-		}
+			client, err := MqttServer.GetMqttClient(mqttId)
+			if err != nil {
+				log.Printf("Error getting MQTT client for SN: %s, %v", k, err)
+				handleResult(k, false)
+				return
+			}
+			defer client.Disconnect()
+			defer client.Terminate()
+			subTopic := fmt.Sprintf("/sub/%s", k)
+			err = MqttServer.Subscript(client, subTopic, responseChan, "\"type\":9,", nil)
+			if err != nil {
+				log.Printf("Error subscribing to topic for SN: %s, %v", k, err)
+				handleResult(k, false)
+				return
+			}
 
-		for i := 0; i < 3; i++ {
-			time.Sleep(time.Second * time.Duration(i+1))
 			if err := MqttServer.PubMqttMessage(client, topic, msg); err != nil {
 				log.Printf("Error publishing MQTT message for SN: %s, %v", k, err)
-				c.Data["json"] = lib.JSONS{Code: 0, Msg: "设置失败", Data: k}
+				//c.Data["json"] = lib.JSONS{Code: 0, Msg: "设置失败", Data: k}
 				return
 			}
-		}
-
-		client.Disconnect()
-		client.Terminate()
+			select {
+			case vs := <-responseChan:
+				fmt.Println("channel收到数据:", vs)
+				handleResult(k, true)
+			case <-time.After(3 * time.Second):
+				log.Printf("连接设备超时: %s", k)
+				handleResult(k, false)
+			}
+		}(k, v)
+	}
+	wg.Wait()
+	if len(failSn) > 0 {
+		c.Data["json"] = lib.JSONS{Code: 1201, Msg: "部分重传失败", Data: failSn}
+	} else {
+		c.Data["json"] = lib.JSONS{Code: 200, Msg: "重传数据成功!", Data: nil}
 	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "数据重传成功", Data: nil}
 	c.ServeJSON()
-	return
 }
 
 // ReadDeviation 读取偏差值
@@ -135,7 +357,13 @@ func (c *DeviceController) ReadDeviation() {
 	}
 
 	t := make(map[string][]int)
-	bytes, _ := io.ReadAll(c.Ctx.Request.Body)
+	bytes, err := io.ReadAll(c.Ctx.Request.Body)
+	if err != nil {
+		log.Printf("Error reading request body: %v", err)
+		c.Data["json"] = lib.JSONS{Code: 400, Msg: "Bad Request"}
+		c.ServeJSON()
+		return
+	}
 	if err := json.Unmarshal(bytes, &t); err != nil {
 		log.Printf("Error unmarshalling JSON: %v", err)
 		c.Data["json"] = lib.JSONS{Code: 400, Msg: "Bad Request"}
@@ -147,7 +375,13 @@ func (c *DeviceController) ReadDeviation() {
 	// MQTT发送
 	fmt.Println("发送MQTT t:", t)
 	deviation := make(chan string, 10)
-	var count = 0
+	done := make(chan struct{})
+	defer close(done) // 确保函数结束时关闭done通道
+
+	var wg sync.WaitGroup
+	var mu sync.Mutex
+	var deviceRepeatData []string
+	var errors []string
 
 	for k, v := range t {
 		topicSub := fmt.Sprintf("/sub/%s", k)
@@ -157,54 +391,68 @@ func (c *DeviceController) ReadDeviation() {
 		client, err := MqttServer.GetMqttClient(mqttId)
 		if err != nil {
 			log.Printf("Error getting MQTT client for SN: %s, %v", k, err)
+			errors = append(errors, fmt.Sprintf("设备: %s 获取MQTT客户端失败 %v", k, err))
 			continue
 		}
 
 		// 订阅主题
-		if err := MqttServer.Subscript(client, topicSub, deviation, "\"type\":7,"); err != nil {
+		if err := MqttServer.Subscript(client, topicSub, deviation, "\"type\":7,", done); err != nil {
 			log.Printf("Error subscribing to MQTT topic for SN: %s, %v", k, err)
-			c.Data["json"] = lib.JSONS{Code: 1, Msg: "mqtt订阅连接失败", Data: nil}
-			return
+			errors = append(errors, fmt.Sprintf("设备: %s 获取参数失败 %v", k, err))
+			client.Disconnect()
 			continue
 		}
 
-		pubData, _ := json.Marshal(MqttServer.Deviation_Pub{
+		pubData, err := json.Marshal(MqttServer.Deviation_Pub{
 			Sn:   k,
 			Type: 7,
 			Mid:  time.Now().Unix(),
 			Data: v,
 		})
+		if err != nil {
+			log.Printf("Error marshalling JSON for SN: %s, %v", k, err)
+			errors = append(errors, fmt.Sprintf("设备: %s 序列化消息失败 %v", k, err))
+			client.Disconnect()
+			continue
+		}
 
 		if err := MqttServer.PubMqttMessage(client, topicPub, pubData); err != nil {
 			log.Printf("Error publishing MQTT message for SN: %s, %v", k, err)
-			c.Data["json"] = lib.JSONS{Code: 1, Msg: "mqtt发送失败", Data: k}
+			errors = append(errors, fmt.Sprintf("设备: %s 发布消息失败 %v", k, err))
+			client.Disconnect()
 			continue
 		}
-		count++
-	}
 
-	deviceRepeatData := make([]string, 0)
-	timeout := time.After(10 * time.Second) // 设置超时时间
-	for count > 0 {
-		select {
-		case v := <-deviation:
-			fmt.Println("channel收到数据:", v)
-			fmt.Println("count:", count)
-			deviceRepeatData = append(deviceRepeatData, v)
-			count--
-		case <-timeout:
-			log.Println("Timeout waiting for MQTT responses")
-			c.Data["json"] = lib.JSONS{Code: 500, Msg: "Timeout waiting for MQTT responses"}
-			c.ServeJSON()
-			return
-		}
+		wg.Add(1)
+		go func(sn string) {
+			defer wg.Done()
+			timeout := time.After(3 * time.Second) // 设置超时时间
+			select {
+			case v := <-deviation:
+				mu.Lock()
+				fmt.Println("接收到设备返回数据:", v)
+				deviceRepeatData = append(deviceRepeatData, v)
+				mu.Unlock()
+			case <-timeout:
+				log.Printf("连接设备超时: %s", sn)
+				mu.Lock()
+				errors = append(errors, fmt.Sprintf("连接设备超时: %s", sn))
+				mu.Unlock()
+			case <-done:
+				log.Printf("任务取消: %s", sn)
+			}
+		}(k)
 	}
 
-	close(deviation)
-	fmt.Println("响应数据:", deviceRepeatData)
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "偏差值上传成功", Data: deviceRepeatData}
+	wg.Wait()
+	close(deviation) // 在所有goroutine完成之后关闭通道
+
+	if len(errors) > 0 {
+		c.Data["json"] = lib.JSONS{Code: 500, Msg: "部分设备操作失败", Data: errors}
+	} else {
+		c.Data["json"] = lib.JSONS{Code: 200, Msg: "偏差值上传成功", Data: deviceRepeatData}
+	}
 	c.ServeJSON()
-	return
 }
 
 // WriteDeviation 设置偏差值
@@ -222,49 +470,180 @@ func (c *DeviceController) WriteDeviation() {
 	data := make([]MqttServer.Deviation_Sub, 0)
 	if err := json.Unmarshal(bytes, &data); err != nil {
 		log.Printf("Error unmarshalling JSON: %v", err)
-		c.Data["json"] = lib.JSONS{Code: 400, Msg: "Bad Request"}
+		c.Data["json"] = lib.JSONS{Code: 400, Msg: "mqtt请求失败"}
 		c.ServeJSON()
 		return
 	}
+	var wg sync.WaitGroup
+	successfulSns := make(map[string]bool) // 记录成功的SN
+	mutex := &sync.Mutex{}                 // 保护对successfulSns的访问
+	responseChan := make(chan string, len(data))
+	failSn := make([]string, 0)
+	handleResult := func(sn string, success bool) {
+		mutex.Lock()
+		defer mutex.Unlock()
+		if success {
+			successfulSns[sn] = true
+		} else {
+			failSn = append(failSn, sn)
+		}
+	}
 
+	defer close(responseChan)
 	// 处理每个设备的数据
 	for _, v := range data {
+		wg.Add(1)
 		go func(v MqttServer.Deviation_Sub) {
+			defer wg.Done()
 			v.Type = 8
 			v.Mid = int(time.Now().Unix())
 			mqttId := Device.ReadDeviceMqttId(v.Sn)
-
 			client, err := MqttServer.GetMqttClient(mqttId)
 			if err != nil {
 				log.Printf("Error getting MQTT client for SN: %s, %v", v.Sn, err)
+				handleResult(v.Sn, false)
 				return
 			}
+			defer client.Disconnect()
 
 			msgBytes, err := json.Marshal(v)
 			if err != nil {
 				log.Printf("Error marshalling JSON for SN: %s, %v", v.Sn, err)
-				client.Disconnect()
-				client.Terminate()
+				handleResult(v.Sn, false)
 				return
 			}
-
-			for i := 0; i < 3; i++ {
+			subTopic := fmt.Sprintf("/sub/%s", v.Sn)
+			err = MqttServer.Subscript(client, subTopic, responseChan, "\"type\":8,", nil)
+			if err != nil {
+				log.Printf("Error subscribing to topic for SN: %s, %v", v.Sn, err)
+				handleResult(v.Sn, false)
+				return
+			}
+			for i := 0; i < 2; i++ {
 				time.Sleep(time.Second * time.Duration(i+1))
 				if err := MqttServer.PubMqttMessage(client, fmt.Sprintf("/pub/%s", v.Sn), msgBytes); err != nil {
-					log.Printf("Error publishing MQTT message for SN: %s, %v", v.Sn, err)
-					c.Data["json"] = lib.JSONS{Code: 0, Msg: "设置失败", Data: v.Sn}
-					return
+					log.Printf("设备参数设置失败: %s, %v", v.Sn, err)
+					c.Data["json"] = lib.JSONS{Code: 500, Msg: "设置失败", Data: v.Sn}
+					continue
 				}
+				break
+			}
+			select {
+			case vs := <-responseChan:
+				fmt.Println("channel收到数据:", vs)
+				handleResult(v.Sn, true)
+			case <-time.After(3 * time.Second):
+				log.Printf("连接设备超时: %s", v.Sn)
+				handleResult(v.Sn, false)
 			}
-
-			client.Disconnect()
-			client.Terminate()
 		}(v)
 	}
+	wg.Wait()
+	if len(failSn) > 0 {
+		c.Data["json"] = lib.JSONS{Code: 1201, Msg: "部分设置失败", Data: failSn}
+	} else {
+		c.Data["json"] = lib.JSONS{Code: 200, Msg: "设置偏差值成功!", Data: nil}
+	}
+	c.ServeJSON()
+}
 
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "设置偏差值成功!", Data: nil}
+// WriteDeviationAll 批量设置偏差值
+func (c *DeviceController) WriteDeviationAll() {
+	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
+	}
+
+	bytes, _ := io.ReadAll(c.Ctx.Request.Body)
+	fmt.Println("请求json:", string(bytes))
+
+	var data MqttServer.Deviation_SubAll
+	if err := json.Unmarshal(bytes, &data); err != nil {
+		log.Printf("Error unmarshalling JSON: %v", err)
+		c.Data["json"] = lib.JSONS{Code: 400, Msg: "mqtt请求失败"}
+		c.ServeJSON()
+		return
+	}
+	var wg sync.WaitGroup
+	successfulSns := make(map[string]bool) // 记录成功的SN
+	mutex := &sync.Mutex{}                 // 保护对successfulSns的访问
+	responseChan := make(chan string, len(data.Sn))
+	failSn := make([]string, 0)
+	handleResult := func(sn string, success bool) {
+		mutex.Lock()
+		defer mutex.Unlock()
+		if success {
+			successfulSns[sn] = true
+		} else {
+			failSn = append(failSn, sn)
+		}
+	}
+
+	defer close(responseChan)
+	// 处理每个设备的数据
+	for i, sn := range data.Sn {
+		subData := data.Data[i]
+		wg.Add(1)
+		go func(sn string, subData MqttServer.Deviation_Sub_Data) {
+			defer wg.Done()
+			sub_data := make([]MqttServer.Deviation_Sub_Data, 0)
+			sub_data = append(sub_data, subData)
+			v := MqttServer.Deviation_Sub{
+				Type: 8,
+				Sn:   sn,
+				Mid:  int(time.Now().Unix()),
+				Data: sub_data,
+			}
+			mqttId := Device.ReadDeviceMqttId(v.Sn)
+			client, err := MqttServer.GetMqttClient(mqttId)
+			if err != nil {
+				log.Printf("Error getting MQTT client for SN: %s, %v", v.Sn, err)
+				handleResult(v.Sn, false)
+				return
+			}
+			defer client.Disconnect()
+
+			msgBytes, err := json.Marshal(v)
+			if err != nil {
+				log.Printf("Error marshalling JSON for SN: %s, %v", v.Sn, err)
+				handleResult(v.Sn, false)
+				return
+			}
+			subTopic := fmt.Sprintf("/sub/%s", v.Sn)
+			err = MqttServer.Subscript(client, subTopic, responseChan, "\"type\":8,", nil)
+			if err != nil {
+				log.Printf("Error subscribing to topic for SN: %s, %v", v.Sn, err)
+				handleResult(v.Sn, false)
+				return
+			}
+			for i := 0; i < 2; i++ {
+				time.Sleep(time.Second * time.Duration(i+1))
+				if err := MqttServer.PubMqttMessage(client, fmt.Sprintf("/pub/%s", v.Sn), msgBytes); err != nil {
+					log.Printf("设备参数设置失败: %s, %v", v.Sn, err)
+					c.Data["json"] = lib.JSONS{Code: 500, Msg: "设置失败", Data: v.Sn}
+					continue
+				}
+				break
+			}
+			select {
+			case vs := <-responseChan:
+				fmt.Println("channel收到数据:", vs)
+				handleResult(v.Sn, true)
+			case <-time.After(3 * time.Second):
+				log.Printf("连接设备超时: %s", v.Sn)
+				handleResult(v.Sn, false)
+			}
+		}(sn, subData)
+	}
+	wg.Wait()
+	if len(failSn) > 0 {
+		c.Data["json"] = lib.JSONS{Code: 1201, Msg: "部分设置失败", Data: failSn}
+	} else {
+		c.Data["json"] = lib.JSONS{Code: 200, Msg: "设置偏差值成功!", Data: nil}
+	}
 	c.ServeJSON()
-	return
 }
 
 // ReadSensor 读取偏差值
@@ -289,6 +668,7 @@ func (c *DeviceController) ReadSensor() {
 	// MQTT发送
 	fmt.Println("发送MQTT t:", t)
 	deviation := make(chan string, 10)
+	done := make(chan struct{})
 	var count = 0
 
 	for k, v := range t {
@@ -303,7 +683,7 @@ func (c *DeviceController) ReadSensor() {
 		}
 
 		// 订阅主题
-		if err := MqttServer.Subscript(client, topicSub, deviation, "\"type\":5,"); err != nil {
+		if err := MqttServer.Subscript(client, topicSub, deviation, "\"type\":5,", done); err != nil {
 			log.Printf("Error subscribing to MQTT topic for SN: %s, %v", k, err)
 			continue
 		}
@@ -342,6 +722,7 @@ func (c *DeviceController) ReadSensor() {
 	}
 
 	close(deviation)
+	close(done)
 	fmt.Println("响应数据:", deviceRepeatData)
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "偏差值上传成功", Data: deviceRepeatData}
 	c.ServeJSON()
@@ -419,7 +800,8 @@ func (c *DeviceController) WriteSensor() {
 
 				if err := MqttServer.PubMqttMessage(client, fmt.Sprintf("/pub/%s", v.Sn), msgBytes); err != nil {
 					log.Printf("Error publishing MQTT message for SN: %s, %v", v.Sn, err)
-					c.Data["json"] = lib.JSONS{Code: 0, Msg: "设置失败", Data: v.Sn}
+					sprintf := fmt.Sprintf("设备参数设置失败: %s, %v", v.Sn, err)
+					c.Data["json"] = lib.JSONS{Code: 0, Msg: sprintf, Data: v.Sn}
 					return
 				}
 			}

+ 61 - 23
controllers/MqttServer/MqttServev2.go

@@ -1,6 +1,7 @@
 package MqttServer
 
 import (
+	"errors"
 	"fmt"
 	beego "github.com/beego/beego/v2/server/web"
 	"github.com/yosssi/gmq/mqtt"
@@ -45,22 +46,37 @@ func init() {
 func GetMqttClient(mqttAddrPrefix string) (*client.Client, error) {
 	r := rand.New(rand.NewSource(time.Now().Unix()))
 	options := client.ConnectOptions{
-		Network:  "tcp",
-		Address:  fmt.Sprintf("%s.%s:%s", mqttAddrPrefix, mqttSuffix, mqttPort),
-		UserName: []byte(mqttUsername),
-		Password: []byte(mqttPassword),
-		ClientID: []byte(fmt.Sprintf("ColdP_server_%d", r.Intn(9))),
+		Network:      "tcp",
+		Address:      fmt.Sprintf("%s.%s:%s", mqttAddrPrefix, mqttSuffix, mqttPort),
+		UserName:     []byte(mqttUsername),
+		Password:     []byte(mqttPassword),
+		ClientID:     []byte(fmt.Sprintf("ColdP_server_%d", r.Intn(9))),
+		CleanSession: false, // 保持会话,有助于自动重连
 	}
-
 	cli := client.New(&client.Options{
 		ErrorHandler: func(e error) {
 			log.Printf("MQTT Error: %v", e)
 		},
 	})
 
-	if err := cli.Connect(&options); err != nil {
-		log.Printf("MQTT 连接失败: %v", err)
-		return nil, err
+	// 尝试连接并处理重试逻辑
+	var err error
+	for i := 0; i <= 3; i++ {
+		if err = cli.Connect(&options); err == nil {
+			log.Printf("MQTT 连接成功")
+			break
+		}
+		log.Printf("MQTT 连接失败: %v,正在重试... (尝试次数: %d/%d)", err, i+1, 3)
+
+		// 如果不是最后一次尝试,则等待一段时间再重试
+		if i < 3 {
+			time.Sleep(time.Second * time.Duration(i+1))
+		}
+	}
+
+	if err != nil {
+		log.Printf("MQTT 连接失败,已达到最大重试次数")
+		return nil, fmt.Errorf("MQTT 连接失败: %w", err)
 	}
 
 	return cli, nil
@@ -71,38 +87,60 @@ func PubMqttMessage(cli *client.Client, topic string, msg []byte) error {
 	fmt.Printf("发布主题:%s -> 发布内容:%s\n", topic, string(msg))
 
 	opts := &client.PublishOptions{
-		QoS:       mqtt.QoS0,
+		QoS:       mqtt.QoS1, // 根据需求调整QoS级别
 		TopicName: []byte(topic),
 		Message:   msg,
 	}
 
-	if err := cli.Publish(opts); err != nil {
-		log.Printf("MQTT 发布失败: %v", err)
-		return err
+	for i := 0; i <= 3; i++ {
+		if err := cli.Publish(opts); err == nil {
+			log.Printf("MQTT 发送成功, 主题: %s", topic)
+			return nil
+		}
+		log.Printf("MQTT 发布失败, 主题: %s, 错误: %v,正在重试... (尝试次数: %d)", topic, i+1, 3)
+		// 如果不是最后一次尝试,则等待一段时间再重试
+		if i < 3 {
+			time.Sleep(time.Second * time.Duration(i+1))
+		}
 	}
 
-	fmt.Println("MQTT发送成功!")
-	return nil
+	// 如果所有重试都失败了,返回错误
+	return fmt.Errorf("MQTT 发布失败, 主题: %s, 最大重试次数已达到", topic)
 }
 
 // Subscript 订阅信息
-func Subscript(cli *client.Client, topic string, msg chan string, isStr string) error {
+// Subscript 订阅信息并将接收到的消息通过通道返回
+func Subscript(cli *client.Client, topic string, msg chan string, isStr string, done chan struct{}) error {
 	fmt.Println("连接成功", time.Now().Format("2006-01-02 15:04:05"))
 	fmt.Printf("订阅主题:%s\n", topic)
 
 	subOpts := &client.SubscribeOptions{
 		SubReqs: []*client.SubReq{
-			&client.SubReq{
+			{
 				TopicFilter: []byte(topic),
-				QoS:         mqtt.QoS0,
+				QoS:         mqtt.QoS1,
 				Handler: func(topicName, message []byte) {
+					select {
+					case <-done:
+						fmt.Println("任务取消,不再接收消息")
+						return // 如果done通道关闭,则直接返回,不再处理消息
+					default:
+						// 继续处理消息
+					}
+
 					fmt.Println("MQTT接收到信息:", string(message))
 					if strings.Contains(strings.ReplaceAll(string(message), " ", ""), isStr) {
-						msg <- topic + "||" + string(message)
-						if _, ok := <-msg; !ok {
-							cli.Disconnect()
-							cli.Terminate()
+						select {
+						case msg <- topic + "||" + string(message):
+							fmt.Println("接收到数据", topic, string(message))
+						case <-done:
+							fmt.Println("通道已关闭,无法发送消息")
+							return
+						case <-time.After(time.Millisecond * 100): // 防止阻塞太久
+							fmt.Println("通道已满,无法发送消息")
 						}
+					} else {
+						fmt.Println("消息不符合条件,未发送")
 					}
 				},
 			},
@@ -111,7 +149,7 @@ func Subscript(cli *client.Client, topic string, msg chan string, isStr string)
 
 	if err := cli.Subscribe(subOpts); err != nil {
 		log.Printf("MQTT 订阅失败: %v", err)
-		return err
+		return errors.New("订阅消息失败")
 	}
 
 	return nil

+ 6 - 0
controllers/MqttServer/MqttServevStructv2.go

@@ -41,6 +41,12 @@ type Deviation_Sub struct {
 	Mid  int                  `json:"mid"`
 	Data []Deviation_Sub_Data `json:"data"`
 }
+type Deviation_SubAll struct {
+	Type int                  `json:"type"`
+	Sn   []string             `json:"sn"`
+	Mid  int                  `json:"mid"`
+	Data []Deviation_Sub_Data `json:"data"`
+}
 
 type Deviation_Sub_Data struct {
 	Id int     `json:"id"`

+ 1 - 1
lastupdate.tmp

@@ -1 +1 @@
-{"E:\\WebstormProjects\\ColdP_server\\controllers":1730689691305635800}
+{"E:\\WebstormProjects\\ColdP_server\\controllers":1734574838357853100}

+ 382 - 0
logs/logx/logx.log

@@ -105488,3 +105488,385 @@
 2024/11/04 11:08:29.954 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
 2024/11/04 13:38:32.296 [E] [WarningType.go:202]  ColdP_server/models/Warning.Read_WarningType_All_Maps invalid connection
 2024/11/04 13:58:06.632 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/11/04 18:14:43.308 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/11/04 18:15:12.666 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/11/04 18:16:55.144 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/11/04 18:19:30.034 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/11/11 15:11:20.322 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/11/11 15:15:23.202 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/11/11 17:37:10.716 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/11/11 17:40:08.248 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/11/12 09:14:34.593 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/11/12 14:52:47.412 [E] [WarningType.go:202]  ColdP_server/models/Warning.Read_WarningType_All_Maps invalid connection
+2024/12/04 22:02:51.508 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/05 09:05:36.237 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/05 09:30:26.729 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/05 09:33:21.080 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/05 09:39:39.731 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/05 09:44:00.676 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/05 09:48:03.912 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/05 10:14:42.890 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/05 10:19:10.755 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/05 11:02:45.560 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/05 11:09:43.355 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/05 11:28:56.088 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/10 21:20:03.795 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 09:16:30.961 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 09:54:05.834 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 09:54:33.732 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 09:55:36.448 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 10:21:31.539 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 10:24:12.433 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 10:27:52.320 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 10:34:04.913 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 10:34:36.421 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 10:38:25.175 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 10:48:02.647 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 10:49:47.291 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 11:00:30.241 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 11:01:37.123 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 11:12:01.854 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 11:15:04.991 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 11:20:30.436 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 11:23:09.547 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 11:24:34.476 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 14:11:25.458 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 14:11:40.521 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373571693878 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:11:40.534 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024371932184246 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:12:33.558 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 14:12:45.982 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373571693878 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:12:45.997 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024371932184246 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:13:33.384 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 14:13:53.342 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373571693878 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:22.432 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 14:15:29.594 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373571693878 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:29.609 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024371932184246 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:29.617 [E] [DeviceData.go:181]  ColdP_server/models/Device.Read_DeviceData <QuerySeter> no row found
+2024/12/11 14:15:29.637 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024371395166474 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:29.644 [E] [DeviceData.go:181]  ColdP_server/models/Device.Read_DeviceData <QuerySeter> no row found
+2024/12/11 14:15:29.651 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024377382447596 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:29.658 [E] [DeviceData.go:181]  ColdP_server/models/Device.Read_DeviceData <QuerySeter> no row found
+2024/12/11 14:15:29.665 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:29.680 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378330698241 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:29.694 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024495864629053 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:29.708 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:42.616 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378330698241 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:42.630 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373572612683 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:42.645 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:42.661 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024384833622576 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:42.676 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024386035197589 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:42.691 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024405132748138 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:42.707 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024389082148672 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:42.721 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024381320595947 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:42.734 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:42.750 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024388276714468 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:43.201 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024389082148672 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:43.215 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024388251896637 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:43.231 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024417675321594 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:43.246 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024381359773698 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:43.261 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378137180923 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:43.276 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024417826068147 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:43.290 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024375342710652 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:43.305 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024403892445676 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:43.320 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024403768991528 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:43.334 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024406591838527 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:45.022 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024434148895035 WHERE t_id = 4 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:45.037 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024406591838527 WHERE t_id = 4 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:45.053 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024488526395473 WHERE t_id = 4 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:45.067 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024428037739221 WHERE t_id = 4 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:45.081 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 4 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:45.097 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024428037739221 WHERE t_id = 5 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:45.112 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373571693878 WHERE t_id = 5 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:45.123 [E] [DeviceData.go:181]  ColdP_server/models/Device.Read_DeviceData <QuerySeter> no row found
+2024/12/11 14:15:45.129 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 5 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:45.146 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024434148895035 WHERE t_id = 5 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:45.160 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024428574256849 WHERE t_id = 5 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:47.835 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373571693878 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:47.851 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024371932184246 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:47.858 [E] [DeviceData.go:181]  ColdP_server/models/Device.Read_DeviceData <QuerySeter> no row found
+2024/12/11 14:15:47.881 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024371395166474 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:47.889 [E] [DeviceData.go:181]  ColdP_server/models/Device.Read_DeviceData <QuerySeter> no row found
+2024/12/11 14:15:47.897 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024377382447596 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:47.904 [E] [DeviceData.go:181]  ColdP_server/models/Device.Read_DeviceData <QuerySeter> no row found
+2024/12/11 14:15:47.912 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:47.926 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378330698241 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:47.942 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024495864629053 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:15:47.957 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:18:27.171 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:18:27.187 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 2 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:18:27.203 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 3 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:18:27.218 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 4 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:18:27.233 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 5 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:18:27.250 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 6 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:18:27.267 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 7 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:18:27.282 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 8 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:18:27.301 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 9 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:18:27.315 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 10 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:19:31.865 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373571693878 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:19:31.879 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024371932184246 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:19:31.887 [E] [DeviceData.go:181]  ColdP_server/models/Device.Read_DeviceData <QuerySeter> no row found
+2024/12/11 14:19:31.907 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024371395166474 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:19:31.915 [E] [DeviceData.go:181]  ColdP_server/models/Device.Read_DeviceData <QuerySeter> no row found
+2024/12/11 14:19:31.922 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024377382447596 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:19:31.930 [E] [DeviceData.go:181]  ColdP_server/models/Device.Read_DeviceData <QuerySeter> no row found
+2024/12/11 14:19:31.937 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:19:31.950 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378330698241 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:19:31.965 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024495864629053 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:19:31.980 [D] [DeviceData.go:178]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/11 14:20:34.516 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 14:22:13.672 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 14:57:14.540 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 15:41:35.916 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 15:41:45.475 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242'
+2024/12/11 15:54:48.038 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 15:54:52.234 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242'
+2024/12/11 16:02:41.064 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242'
+2024/12/11 16:04:34.563 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 16:04:42.158 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242'
+2024/12/11 16:05:19.155 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242'
+2024/12/11 16:07:48.697 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 16:09:28.123 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 16:09:33.701 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 16:17:07.038 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 16:17:14.342 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 16:34:17.362 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 16:34:32.234 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 16:37:32.102 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 16:38:44.657 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 16:43:51.133 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 16:45:58.989 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 16:46:32.592 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 16:47:18.037 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 16:48:09.300 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 16:50:01.400 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 16:53:04.874 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 16:58:05.048 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 16:58:52.218 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 21:29:52.499 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 21:31:04.205 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 21:39:24.036 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 21:39:31.754 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 21:46:56.982 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 21:47:05.703 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 21:48:37.642 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 22:08:20.294 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 22:10:33.147 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 22:14:13.983 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 22:14:24.769 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 22:21:11.047 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 22:25:52.483 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 22:26:03.707 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 22:39:38.062 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 22:39:44.419 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 22:43:50.921 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/11 22:44:09.699 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/11 22:44:27.139 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/12 09:18:09.142 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/12 09:19:19.911 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/12 09:19:37.539 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/12 09:22:53.400 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/12 09:25:37.427 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/12 09:26:21.840 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/12 09:28:05.715 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/12 10:32:19.095 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/12 10:34:14.091 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/12 10:34:26.356 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/12 10:34:54.680 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/12 10:38:45.326 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/12 10:42:01.965 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/12 10:44:59.582 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/12 10:45:05.704 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/12 10:45:41.907 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/12 10:46:28.194 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/12 10:57:09.956 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/12 10:57:51.406 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/12 11:06:06.912 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/12 11:13:13.119 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/12 11:14:24.227 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/12 11:14:30.120 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/12 11:14:43.553 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/12 11:15:02.353 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/12 11:15:14.350 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/12 11:15:30.048 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/12 12:31:16.310 [E] [WarningType.go:202]  ColdP_server/models/Warning.Read_WarningType_All_Maps dial tcp 192.168.0.88:3306: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
+2024/12/14 17:10:31.379 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/14 17:11:27.729 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024462674079198 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/14 17:11:32.001 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 17:18:53.157 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/14 17:21:58.391 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/14 17:23:32.075 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 17:26:41.716 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/14 17:27:15.958 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 17:27:27.436 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 17:33:26.307 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/14 17:33:35.976 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 17:33:48.731 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 17:38:42.295 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/14 17:39:00.867 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 17:39:32.808 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 17:40:01.016 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 17:48:39.980 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 17:49:55.432 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 17:51:34.268 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 17:51:52.848 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 17:52:57.719 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 17:53:10.049 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 17:58:18.525 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/14 17:58:42.551 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 17:59:12.566 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 17:59:25.962 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 17:59:46.764 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 18:00:42.536 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/14 18:00:46.744 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 18:01:08.757 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 18:05:12.434 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/14 18:05:19.338 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 18:06:59.122 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/14 18:07:03.163 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 18:18:42.589 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/14 18:18:52.083 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 18:19:06.330 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 18:22:53.901 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/14 18:23:02.979 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 18:24:21.519 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/14 18:42:51.952 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/16 14:49:14.309 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/16 14:49:57.370 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/16 14:52:46.984 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/16 15:21:36.606 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/16 15:22:23.129 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/16 15:40:12.998 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/16 15:40:39.217 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/16 15:42:56.507 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/16 15:43:43.865 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/16 15:47:18.633 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/16 15:48:36.451 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/16 15:49:14.675 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/16 15:50:43.828 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/16 15:51:19.279 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/16 16:41:09.470 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/16 16:41:46.503 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/16 16:44:53.167 [D] [DeviceSensor.go:581]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/18 10:24:43.291 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/18 10:56:17.113 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/18 11:00:26.062 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/18 11:04:24.452 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/18 11:06:39.645 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/18 11:10:28.130 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/18 11:15:08.549 [D] [DeviceSensor.go:583]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/18 11:16:08.202 [D] [DeviceSensor.go:583]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/18 11:18:47.709 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/18 11:19:41.993 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/18 11:29:29.468 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/18 11:40:27.200 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/18 11:43:06.165 [D] [DeviceSensor.go:583]  SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '242' AND t__state=1
+2024/12/18 14:45:35.018 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/18 14:46:08.399 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:46:08.401 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:47:40.644 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024405132748138 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:47:40.667 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024495864629053 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:47:40.668 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:47:40.669 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:48:01.396 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:48:01.423 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:50:20.635 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:50:20.660 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:50:50.841 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:50:50.842 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024405132748138 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:50:50.844 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024495864629053 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:50:50.845 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:50:59.357 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024406591838527 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:50:59.385 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024409344566078 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:50:59.389 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024417679336441 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:51:00.395 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:51:12.354 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 3 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:51:12.354 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024434148895035 WHERE t_id = 4 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:51:12.354 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024406591838527 WHERE t_id = 3 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:51:12.377 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024428037739221 WHERE t_id = 3 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:51:12.377 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024478532092934 WHERE t_id = 3 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:51:12.378 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373571693878 WHERE t_id = 3 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:51:12.378 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024406591838527 WHERE t_id = 4 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:51:12.378 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 3 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:51:12.378 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024428574256849 WHERE t_id = 4 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:51:12.378 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 4 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:51:12.401 [E] [DeviceData.go:180]  ColdP_server/models/Device.Read_DeviceData <QuerySeter> no row found
+2024/12/18 14:51:22.300 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:51:22.323 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:54:53.019 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378330698241 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:54:53.020 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024495878634014 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:54:53.021 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024371932184246 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:54:53.022 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:54:53.023 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:54:53.024 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373571693878 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:54:53.027 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024377382447596 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:54:53.027 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024371395166474 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 14:54:53.033 [E] [DeviceData.go:180]  ColdP_server/models/Device.Read_DeviceData <QuerySeter> no row found
+2024/12/18 14:54:53.041 [E] [DeviceData.go:180]  ColdP_server/models/Device.Read_DeviceData <QuerySeter> no row found
+2024/12/18 14:54:53.041 [E] [DeviceData.go:180]  ColdP_server/models/Device.Read_DeviceData <QuerySeter> no row found
+2024/12/18 15:04:12.422 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 15:04:12.422 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 15:05:43.034 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 15:05:43.036 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 15:08:46.341 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 15:08:46.347 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 15:11:37.152 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 15:11:37.200 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 15:40:45.789 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 15:40:45.789 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 15:44:44.917 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/18 15:44:55.497 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 15:44:55.505 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 15:46:35.675 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/18 15:47:34.310 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/18 15:47:42.059 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 15:47:42.301 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 15:59:18.574 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/18 15:59:25.601 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 15:59:25.625 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 16:01:50.266 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373571693878 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 16:01:50.266 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 16:01:50.268 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024495878634014 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 16:01:50.287 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 16:01:50.288 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024371932184246 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 16:01:50.290 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024371395166474 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 16:01:50.290 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024377382447596 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 16:01:50.291 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378330698241 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 16:01:50.300 [E] [DeviceData.go:180]  ColdP_server/models/Device.Read_DeviceData <QuerySeter> no row found
+2024/12/18 16:01:50.300 [E] [DeviceData.go:180]  ColdP_server/models/Device.Read_DeviceData <QuerySeter> no row found
+2024/12/18 16:01:50.300 [E] [DeviceData.go:180]  ColdP_server/models/Device.Read_DeviceData <QuerySeter> no row found
+2024/12/18 16:08:18.080 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 16:08:18.080 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 16:10:45.474 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 16:10:45.503 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 16:18:20.292 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 16:18:20.293 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 16:19:26.153 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 16:19:26.156 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 16:31:27.375 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/18 16:32:35.061 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 16:32:35.062 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 16:34:19.554 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/18 16:35:24.250 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 16:35:24.255 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/18 22:26:36.439 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/19 09:24:31.804 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/19 09:25:34.753 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378737659116 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/19 09:25:34.777 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024377382447596 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/19 09:25:34.777 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024371932184246 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/19 09:25:34.777 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024371395166474 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/19 09:25:34.778 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373571693878 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/19 09:25:34.778 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024495878634014 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/19 09:25:34.778 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024373764352840 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/19 09:25:34.779 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2024378330698241 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2024/12/19 09:25:34.784 [E] [DeviceData.go:180]  ColdP_server/models/Device.Read_DeviceData <QuerySeter> no row found
+2024/12/19 09:25:34.816 [E] [DeviceData.go:180]  ColdP_server/models/Device.Read_DeviceData <QuerySeter> no row found
+2024/12/19 09:25:34.817 [E] [DeviceData.go:180]  ColdP_server/models/Device.Read_DeviceData <QuerySeter> no row found
+2024/12/19 09:39:00.667 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/19 09:40:36.265 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/19 09:55:01.393 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/19 10:27:50.750 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/19 10:29:25.576 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/19 10:31:19.730 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/19 10:51:55.558 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/19 11:05:47.460 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2024/12/19 11:19:36.485 [I] [WarningType.go:193]  =========== 初始化报警类型 =========

+ 10 - 1
models/Device/Device.go

@@ -50,7 +50,16 @@ type Device struct {
 	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 保存时都会对时间自动更新
 }
-
+type Deviation struct {
+	Dut  int `json:"dut"`
+	Type int `json:"type"`
+	Data []struct {
+		Id int `json:"id"`
+		T  int `json:"t"`
+		H  int `json:"h"`
+	} `json:"data"`
+	Mid int `json:"mid"`
+}
 type Device_R struct {
 	T_sn              string // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
 	T_devName         string // 设备名称

+ 190 - 0
models/Device/DeviceData.go

@@ -3,8 +3,10 @@ package Device
 import (
 	"ColdP_server/conf"
 	"ColdP_server/controllers/lib"
+	"ColdP_server/logs"
 	"database/sql"
 	"encoding/json"
+	"errors"
 	"fmt"
 	"github.com/astaxie/beego/cache"
 	_ "github.com/astaxie/beego/cache/redis"
@@ -149,6 +151,37 @@ func RedisDeviceData_Get(key string) (r DeviceData_R, is bool) {
 	}
 	return DeviceData_R{}, false
 }
+func RedisDeviceData(key string) (r DeviceData_, is bool) {
+	if redis_DeviceData.IsExist(key) {
+		v := redis_DeviceData.Get(key)
+		err := json.Unmarshal(v.([]byte), &r)
+		if err != nil {
+			logs.Error(lib.FuncName(), err)
+			return DeviceData_{}, false
+		}
+
+		return r, true
+	}
+	return DeviceData_{}, false
+}
+
+// 获取设备最新数据
+func Read_DeviceData(T_sn string, T_id int) (t DeviceData_) {
+	key := T_sn + "|" + strconv.Itoa(T_id)
+	if t, is := RedisDeviceData(key); is {
+		return t
+	}
+	o := orm.NewOrm()
+	var maps DeviceData_
+	sql := "SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_" + T_sn + " WHERE" + " t_id = " + strconv.Itoa(T_id) + " ORDER BY t_time1 DESC LIMIT 0,1"
+	logs.Debug(sql)
+	err := o.Raw(sql).QueryRow(&maps)
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+		return t
+	}
+	return maps
+}
 
 // -------------------------------------------------------
 // 创建数据库  Device.CREATE_DeviceData("")
@@ -384,8 +417,34 @@ func DeleteDeviceDataByDeviceDataRList(datas []DeviceData_R) {
 		}
 	}
 }
+
+func ReadDeviceSensorParameter(TSp int) (error, DeviceSensorParameter_M) {
+	o := orm.NewOrm()
+	var deviceParameter DeviceSensorParameter_M
+	deviceSensorParameter := fmt.Sprintf("SELECT id,t_name,t__tlower,t__tupper,t__r_hlower,t__r_hupper FROM device_sensor_parameter WHERE  id='%v'", TSp)
+	log.Println(deviceSensorParameter)
+	err := o.Raw(deviceSensorParameter).QueryRow(&deviceParameter)
+	if err != nil {
+		log.Println(err.Error())
+		return errors.New("设备不存在"), DeviceSensorParameter_M{}
+	}
+	return nil, deviceParameter
+}
+
 func DeleteDeviceDataByTime(sn, t_id, time_start, time_end string) (sql.Result, error) {
 	o := orm.NewOrm()
+	err := o.Begin()
+	if err != nil {
+		err := o.Rollback()
+		if err != nil {
+			return nil, err
+		}
+	} else {
+		err := o.Commit()
+		if err != nil {
+			return nil, err
+		}
+	}
 	sprintf := fmt.Sprintf("delete from z_device_data_%s where t_id=%s and t_time >= '%s' and t_time <= '%s'", sn, t_id, time_start, time_end)
 	log.Println(sprintf)
 	count, err := o.Raw(sprintf).Exec()
@@ -393,9 +452,140 @@ func DeleteDeviceDataByTime(sn, t_id, time_start, time_end string) (sql.Result,
 		log.Println(err.Error())
 		return count, err
 	}
+	warningsql := fmt.Sprintf("delete from warning where t_sn='%s' and t_id=%s and t__ut >= '%s' and t__ut <= '%s'", sn, t_id, time_start, time_end)
+	log.Println(sprintf)
+	count, err = o.Raw(warningsql).Exec()
+	if err != nil {
+		log.Println(err.Error())
+		return count, err
+	}
+	startTime, err := time.Parse("2006-01-02 15:04:05", time_start)
+	if err != nil {
+		return nil, errors.New("时间格式错误")
+	}
+	endTime, err := time.Parse("2006-01-02 15:04:05", time_end)
+	if err != nil {
+		return nil, errors.New("时间格式错误")
+	}
+	//判断开始时间和结束时间是否属于同一个月
+	if startTime.Month() == endTime.Month() && startTime.Year() == endTime.Year() {
+		formatMonth := startTime.Format("01")
+		tableName := "warning" + "_" + strconv.Itoa(startTime.Year()) + "_" + formatMonth
+		sql := fmt.Sprintf("delete from %s where t_sn='%s' and t_id='%s' and t__ut >= '%s' and t__ut <= '%s'", tableName, sn, t_id, time_start, time_end)
+		count, err := o.Raw(sql).Exec()
+		if err != nil {
+			log.Println(err.Error())
+			return count, err
+		}
+	} else {
+		// 不同的月份
+		stas, ends, err := getMonthlyTimeRanges(time_start, time_end)
+		if err != nil {
+			return nil, errors.New("时间格式错误")
+		}
+		for i := 0; i < len(stas); i++ {
+			fmt.Println(stas[i], ends[i])
+			parse, err := time.Parse("2006-01-02 15:04:05", stas[i])
+			if err != nil {
+				return nil, errors.New("时间格式错误")
+			}
+			formatMonth := parse.Format("01")
+			tableName := "warning" + "_" + strconv.Itoa(parse.Year()) + "_" + formatMonth
+			sqls := fmt.Sprintf("delete from %s where t_sn='%s' and t_id=%s and t__ut >= '%s' and t__ut <= '%s'", tableName, sn, t_id, stas[i], ends[i])
+			count, err := o.Raw(sqls).Exec()
+			if err != nil {
+				log.Println(err.Error())
+				return count, err
+			}
+		}
+	}
 	return count, nil
 }
 
+// DeleteDeviceDataByTimeWaring 删除对应报警时间范围
+func DeleteDeviceDataByTimeWaring(sn, t_id, time_start, time_end string) (sql.Result, error) {
+	o := orm.NewOrm()
+	sprintf := fmt.Sprintf("delete from warning where t_sn='%s' and t_id=%s and t__ut >= '%s' and t__ut <= '%s'", sn, t_id, time_start, time_end)
+	log.Println(sprintf)
+	count, err := o.Raw(sprintf).Exec()
+	if err != nil {
+		log.Println(err.Error())
+		return count, err
+	}
+	startTime, err := time.Parse("2006-01-02 15:04:05", time_start)
+	if err != nil {
+		return nil, errors.New("时间格式错误")
+	}
+	endTime, err := time.Parse("2006-01-02 15:04:05", time_end)
+	if err != nil {
+		return nil, errors.New("时间格式错误")
+	}
+	//判断开始时间和结束时间是否属于同一个月
+	if startTime.Month() == endTime.Month() && startTime.Year() == endTime.Year() {
+		tableName := "warning" + "_" + strconv.Itoa(startTime.Year()) + "_" + strconv.Itoa(int(startTime.Month()))
+		sql := fmt.Sprintf("delete from %s where t_sn='%s' and t_id='%s' and t__ut >= '%s' and t__ut <= '%s'", tableName, sn, t_id, time_start, time_end)
+		count, err := o.Raw(sql).Exec()
+		if err != nil {
+			log.Println(err.Error())
+			return count, err
+		}
+	} else {
+		// 不同的月份
+		stas, ends, err := getMonthlyTimeRanges(time_start, time_end)
+		if err != nil {
+			return nil, errors.New("时间格式错误")
+		}
+		for i := 0; i < len(stas); i++ {
+			fmt.Println(stas[i], ends[i])
+			parse, err := time.Parse("2006-01-02 15:04:05", stas[i])
+			if err != nil {
+				return nil, errors.New("时间格式错误")
+			}
+			tableName := "warning" + "_" + strconv.Itoa(parse.Year()) + "_" + strconv.Itoa(int(parse.Month()))
+			sqls := fmt.Sprintf("delete from %s where t_sn=%s and t_id='%s' and t__ut >= '%s' and t__ut <= '%s'", tableName, sn, t_id, stas[i], ends[i])
+			count, err := o.Raw(sqls).Exec()
+			if err != nil {
+				log.Println(err.Error())
+				return count, err
+			}
+		}
+	}
+	return nil, nil
+}
+func getMonthlyTimeRanges(startStr, endStr string) ([]string, []string, error) {
+	startTime, err := time.Parse("2006-01-02 15:04:05", startStr)
+	if err != nil {
+		return nil, nil, err
+	}
+
+	endTime, err := time.Parse("2006-01-02 15:04:05", endStr)
+	if err != nil {
+		return nil, nil, err
+	}
+
+	var startMonths, endMonths []string
+	currentTime := startTime
+
+	for currentTime.Before(endTime) || currentTime.Equal(endTime) {
+		monthStart := time.Date(currentTime.Year(), currentTime.Month(), 1, 0, 0, 0, 0, time.UTC)
+		monthEnd := monthStart.AddDate(0, 1, -1)
+
+		if monthStart.Before(startTime) {
+			monthStart = startTime
+		}
+		if monthEnd.After(endTime) {
+			monthEnd = endTime
+		}
+
+		startMonths = append(startMonths, monthStart.Format("2006-01-02 15:04:05"))
+		endMonths = append(endMonths, monthEnd.Format("2006-01-02 15:04:05"))
+
+		currentTime = monthEnd.AddDate(0, 1, 1)
+	}
+
+	return startMonths, endMonths, nil
+}
+
 // ImportDeviceData 批量导入
 func ImportDeviceData(reader *excelize.File, sn string) string {
 	sheetName := reader.GetSheetName(0)

+ 20 - 3
models/Device/DeviceSensor.go

@@ -6,6 +6,7 @@ import (
 	"ColdP_server/logs"
 	"ColdP_server/models/Account"
 	"encoding/json"
+	"errors"
 	"fmt"
 	"github.com/astaxie/beego/cache"
 	_ "github.com/astaxie/beego/cache/redis"
@@ -114,9 +115,13 @@ type DeviceSensor_P struct {
 }
 
 type DeviceSensor_ struct {
-	T_sn   string // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
-	T_id   int    // 传感器编号
-	T_name string // 标题
+	T_sn          string  // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
+	T_id          int     // 传感器编号
+	T_name        string  // 标题
+	T_t           float32 // 温度
+	T_rh          float32 // 湿度
+	T_tDeviation  float32 //温度偏差值
+	T_RhDeviation float32 //湿度偏差值
 }
 
 type DataOld struct {
@@ -571,6 +576,18 @@ func Read_DeviceSensor_ALL_T_sn_T_id_T_Class(T_sn string, T_id int, T_Class_id i
 
 	return r
 }
+func Read_DeviceSensor_ALL_T_sn_T_id(T_pid int) ([]DeviceSensor_Del, error) {
+	o := orm.NewOrm()
+	var devices []DeviceSensor_Del
+	sql := fmt.Sprintf("SELECT t_sn,t_id FROM `device_sensor` WHERE `t_pid` = '%v' AND t__state=1", T_pid)
+	logs.Debug(sql)
+	_, err := o.Raw(sql).QueryRows(&devices)
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+		return []DeviceSensor_Del{}, errors.New("获取设备列表失败")
+	}
+	return devices, nil
+}
 
 // 获取列表
 func Read_DeviceSensor_ALL_List_T_sn(T_sn string) (r []DeviceSensor) {

+ 18 - 0
models/Warning/Warning.go

@@ -4,6 +4,7 @@ import (
 	"ColdP_server/conf"
 	"ColdP_server/controllers/lib"
 	"ColdP_server/logs"
+	"errors"
 	"fmt"
 	"github.com/beego/beego/v2/adapter/orm"
 	orm2 "github.com/beego/beego/v2/client/orm"
@@ -304,6 +305,23 @@ func Delete_Warning_List(id, ut string, pid int) (err error) {
 	}
 	return
 }
+func DeleteWarning(sn, ut string, id int) error {
+	o := orm.NewOrm()
+	layout := "2006-01-02 15:04:05"
+	parse, _ := time.Parse(layout, ut)
+	year := parse.Year()
+	formatMonth := parse.Format("01")
+	years := strconv.Itoa(year)
+	Wtab := "warning_" + years + "_" + formatMonth
+	sql1 := fmt.Sprintf("DELETE FROM %v WHERE t_sn='%v' AND t__ut='%v' AND t_id = '%v'", Wtab, sn, ut, id)
+	sql2 := fmt.Sprintf("DELETE FROM warning WHERE t_sn='%v' AND t__ut='%v' AND t_id = '%v'", sn, ut, id)
+	_, err := o.Raw(sql1).Exec()
+	_, err = o.Raw(sql2).Exec()
+	if err != nil {
+		return errors.New("删除失败")
+	}
+	return nil
+}
 
 // Update_DeviceParameter_Warning更新
 func Update_DeviceParameter_Warning(columnName, newValue, rowId, T_Ut string) {

+ 33 - 1
nats/Nats.go

@@ -4,6 +4,8 @@ import (
 	"ColdP_server/conf"
 	"ColdP_server/controllers/lib"
 	"ColdP_server/models/Account"
+	"ColdP_server/models/Device"
+	"errors"
 	"fmt"
 	"github.com/nats-io/nats.go"
 	"github.com/vmihailenco/msgpack/v5"
@@ -22,7 +24,37 @@ func Init() {
 	fmt.Println("nats OK!")
 
 }
-
+func Read_New_DeviceData(T_sn string, T_id int) (Device.DeviceData_, error) {
+	type T_R struct {
+		Code int16              `xml:"Code"`
+		Msg  string             `xml:"Msg"`
+		Data Device.DeviceData_ `xml:"Data"`
+	}
+	type T_Req struct {
+		T_sn string `xml:"T_sn"`
+		T_id int    `xml:"T_id"`
+	}
+	var t_Req T_Req
+	t_Req.T_sn = T_sn
+	t_Req.T_id = T_id
+	marshal, err2 := msgpack.Marshal(&t_Req)
+	if err2 != nil {
+		return Device.DeviceData_{}, err2
+	}
+	var t_R T_R
+	request, err := lib.Nats.Request("Read_New_DeviceData", marshal, 3*time.Second)
+	if err != nil {
+		return Device.DeviceData_{}, err
+	}
+	err = msgpack.Unmarshal(request.Data, &t_R)
+	if err != nil {
+		return Device.DeviceData_{}, errors.New(t_R.Msg)
+	}
+	if t_R.Code == 200 {
+		return t_R.Data, nil
+	}
+	return Device.DeviceData_{}, errors.New(t_R.Msg)
+}
 func Verification(GetCookie string, GetString string) (bool, Account.Admin) {
 
 	Admin_tokey := GetCookie

+ 3 - 0
routers/DeviceRouter.go

@@ -12,12 +12,15 @@ func init() {
 	beego.Router("/Device/CompanyClass", &controllers.DeviceController{}, "*:CompanyClass")
 	//设备列表
 	beego.Router("/Device/DeviceList", &controllers.DeviceController{}, "*:DeviceList")
+	//一键归零
+	beego.Router("/Device/SetDeviceDataZero", &controllers.DeviceController{}, "*:SetDeviceDataZero")
 	//数据重传
 	beego.Router("/Device/DataRepeat", &controllers.DeviceController{}, "POST:DataRepeat")
 	//数据偏差值读取
 	beego.Router("/Device/ReadDeviation", &controllers.DeviceController{}, "POST:ReadDeviation")
 	//数据偏差值写入
 	beego.Router("/Device/WriteDeviation", &controllers.DeviceController{}, "POST:WriteDeviation")
+	beego.Router("/Device/WriteDeviationAll", &controllers.DeviceController{}, "POST:WriteDeviationAll")
 	//数据偏差值读取
 	beego.Router("/Device/ReadSensor", &controllers.DeviceController{}, "POST:ReadSensor")
 	//数据偏差值写入

+ 13 - 6
views/Data/DataList.html

@@ -160,9 +160,8 @@
                         <button class="layui-btn layui-btn-normal" onclick="reverseSelect()">反选</button>
                         <button class="layui-btn layui-btn-normal" onclick="noSelect()">全不选</button>
                         <button class="layui-btn layui-btn-danger" onclick="deleteSelect()">删除</button>
-                        <button class="layui-btn layui-btn-danger" onclick="deleteSelectTime()">删除选择时间范围
+                        <button class="layui-btn layui-btn-danger" onclick="deleteSelectTime()">删除选择时间范围同时删除报警信息
                         </button>
-
                     </div>
                 </div>
 
@@ -177,6 +176,7 @@
                             <col>
                             <col>
                             <col>
+                            <col>
                         </colgroup>
                         <thead>
                         <tr>
@@ -195,6 +195,7 @@
                             <th>GPS</th>
                             <th>录入时间</th>
                             <th>操作</th>
+                            <th style="display: none">操作</th>
                         </tr>
                         </thead>
                         <tbody id="DeviceSensor_data">
@@ -271,7 +272,7 @@
         //获取要取得的get参数位置
         var get = local_url.indexOf(par + "=")
         ;
-        if (get == -1) {
+        if (get === -1) {
             return false;
         }
         //截取字符串
@@ -280,7 +281,7 @@
         //判断截取后的字符串是否还有其他get参数
         var nextPar = get_par.indexOf("&")
         ;
-        if (nextPar != -1) {
+        if (nextPar !== -1) {
             get_par = get_par.slice(0, nextPar);
         }
         return get_par;
@@ -540,6 +541,8 @@
                     t_t: Number.parseFloat($(e).attr('data-tt')),
                     t_rh: Number.parseFloat($(e).attr('data-trh')),
                     t_site: $(e).attr('data-site'),
+                    t_sp : Number.parseFloat($(e).attr('data-sp')),
+                    t_time: $(e).attr('data-time'),
                 }
                 sensors.push(t)
             }
@@ -597,7 +600,7 @@
         if (querys.length === 0) {
             layui.layer.msg('没有选中要删除的记录哦!')
         }else {
-            layui.layer.confirm(`是否删除选中时间: ${Time_start}-------${Time_end} 的数据`, function (index) {
+            layui.layer.confirm(`是否删除选中时间: ${Time_start}-------${Time_end} 的数据,同时会删除对应时间报警数据!!!!!!`, function (index) {
                 $.ajax({
                     type: "POST",
                     url: `/Data/Device_Sensor_List_Delete_Time`,
@@ -631,6 +634,8 @@
             t_t: Number.parseFloat($(e).attr('data-tt')),
             t_rh: Number.parseFloat($(e).attr('data-trh')),
             t_site: $(e).attr('data-site'),
+            t_sp : Number.parseFloat($(e).attr('data-sp')),
+            t_time: $(e).attr('data-time'),
         }
         layui.layer.confirm(`是否删除选中 sn: ${t.t_sn} 1 条记录`, {title: '删除记录'}, function (index) {
             $.ajax({
@@ -864,7 +869,7 @@
             }
             $('#DeviceSensor_data').append(`
             <tr>
-                <td><input type="checkbox" class="layui-form-checkbox" data-sn="${v.t_sn}" data-sp="${v.t_sp}" data-id="${v.t_id}" data-tt="${v.t_t}" data-trh="${v.t_rh}" data-site="${v.t_site}" data-createTime="${v.create_time}"/></td>
+                <td><input type="checkbox" class="layui-form-checkbox" data-sn="${v.t_sn}" data-sp="${v.t_sp}" data-time="${v.t_time}" data-id="${v.t_id}" data-tt="${v.t_t}" data-trh="${v.t_rh}" data-site="${v.t_site}" data-createTime="${v.create_time}" data-tsp="${v.t_sp}"/></td>
                 <td ondblclick="changeData(this)" data-type="t_time">${v.t_time}</td>
                 <td ondblclick="changeData(this)" data-type="t_t">${v.t_t}</td>
                 <td ondblclick="changeData(this)" data-type="t_rh">${v.t_rh}</td>
@@ -875,6 +880,8 @@
                     <button class="layui-btn layui-btn-danger layui-btn-sm" onclick="deleteOne(this)">删除</button>
                     <button class="layui-btn layui-bg-blue layui-btn-sm" onclick="copyAndAdds(this, '${v.t_sn}', ${v.t_id}, ${v.t_t}, ${v.t_rh}, '${v.t_site}', '${v.create_time}')">复制添加</button>
                     </td>
+                <td ondblclick="changeData(this)" data-type="t_sp" style="display: none">${v.t_sp}</td>
+
             </tr>
             `)
             /*

+ 247 - 52
views/Device/Device.html

@@ -15,7 +15,7 @@
     <link rel="stylesheet" href="/static/layui/css/modules/laydate/default/laydate.css">
     <script src="/static/js/jquery.min.js"></script>
     <script src="/static/lib/layui/layui.js" charset="utf-8"></script>
-    <script src="/static/lib/layui/lay/modules/laydate.js"/>
+    <!--    <script src="/static/lib/layui/lay/modules/laydate.js"/>-->
     <script src="/static/lib/layui/lay/modules/layer.js" charset="utf-8"></script>
     <script type="text/javascript" src="/static/js/xadmin.js"></script>
 </head>
@@ -53,23 +53,50 @@
                                     onclick="getDeviceDataList(1)">
                                 <i class="layui-icon">&#xe615;</i></button>
                         </div>
+<!--                        <button class="layui-btn layui-btn-normal" onclick="Zero()">一键归零</button>-->
+                        <div class="layui-card-body"
+                             style="display: flex;justify-content: space-between;align-items: center">
+                            <div>
+                                <button class="layui-btn layui-btn-sm layui-btn-normal" id="selectAllBtn"
+                                        onclick="selectAll()">
+                                    全选本页
+                                </button>
+                                <button class="layui-btn layui-btn-sm layui-btn-normal" onclick="reverseSelect()">反选
+                                </button>
+                                <button class="layui-btn layui-btn-sm layui-btn-normal" id="noSelectAllBtn"
+                                        onclick="noSelect()">全不选
+                                </button>
+                                <button class="layui-btn layui-btn-sm layui-btn-normal" onclick="dataRepeat()">数据重传
+                                </button>
+                                <button class="layui-btn layui-btn-sm layui-btn-normal" onclick="SensorAll()">偏差值
+                                </button>
+                            </div>
+                        </div>
                     </div>
                 </div>
                 <!--数据列表部分-->
                 <div class="layui-card-body " style="height: 663px">
                     <table class="layui-table" lay-size="lg">
                         <colgroup>
-<!--                            <col width="20">-->
+                            <col width="20">
+                            <col>
+                            <col>
+                            <col>
+                            <col>
                             <col>
                             <col>
                             <col>
                             <col>
                         </colgroup>
                         <thead>
-<!--                        <th>选择</th>-->
+                        <th>选择</th>
                         <th>SN</th>
                         <th>编号</th>
                         <th>传感器名称</th>
+                        <th>最新温度</th>
+                        <th>最新湿度</th>
+                        <th>温度偏差值</th>
+                        <th>湿度偏差值</th>
                         <th>操作</th>
                         </thead>
                         <tbody id="tableBody">
@@ -86,31 +113,15 @@
                     </div>
                 </div>
                 <!--设别列表部分end-->
-                <div class="layui-card-body" style="justify-content: space-between;align-items: center;color: #ed3f35;height: 110px;">
-                    <h2  class="layui-col-md12">注意:</h2>
-                    <h3  class="layui-col-md12">1、修改参数 提示成功后,为了确保设备修改成功,请再次读取确定!!!</h3>
-                    <h3  class="layui-col-md12">2、此页面功能项目都属于敏感参数,没有修改记录!!!</h3>
-                    <h3  class="layui-col-md12">3、没有多选操作功能,因为修改以上参数必须设备在线与真实成功,为了可靠性,所以取消了多选操作功能!!!</h3>
+                <div class="layui-card-body"
+                     style="justify-content: space-between;align-items: center;color: #ed3f35;height: 110px;">
+                    <h2 class="layui-col-md12">注意:</h2>
+                    <h3 class="layui-col-md12">1、修改参数 提示成功后,为了确保设备修改成功,请再次读取确定!!!</h3>
+                    <h3 class="layui-col-md12">2、此页面功能项目都属于敏感参数,没有修改记录!!!</h3>
+                    <h3 class="layui-col-md12">
+                        3、没有多选操作功能,因为修改以上参数必须设备在线与真实成功,为了可靠性,所以取消了多选操作功能!!!</h3>
                 </div>
                 <!--分页、选择区域 start-->
-<!--                <div class="layui-card-body" style="display: flex;justify-content: space-between;align-items: center">-->
-<!--                    <div>-->
-<!--                        <button class="layui-btn layui-btn-sm layui-btn-normal" id="selectAllBtn" onclick="selectAll()">-->
-<!--                            全选-->
-<!--                        </button>-->
-<!--                        <button class="layui-btn layui-btn-sm layui-btn-normal" onclick="reverseSelect()">反选</button>-->
-<!--                        <button class="layui-btn layui-btn-sm layui-btn-normal" id="noSelectAllBtn"-->
-<!--                                onclick="noSelect()">全不选-->
-<!--                        </button>-->
-<!--                        <button class="layui-btn layui-btn-sm layui-btn-normal" onclick="dataRepeat()">数据重传-->
-<!--                        </button>-->
-<!--                        <button class="layui-btn layui-btn-sm layui-btn-normal" onclick="deviation()">偏差值-->
-<!--                        </button>-->
-<!--                    </div>-->
-<!--                    <div id="pageTool">-->
-<!--                        &lt;!&ndash;上一页&ndash;&gt;-->
-<!--                    </div>-->
-<!--                </div>-->
                 <!-- 分页、选择区域 end -->
             </div>
         </div>
@@ -129,6 +140,18 @@
         </div>
     </form>
 </div>
+<div id="deviationall" style="display: none;margin-top: 20px;text-align: center">
+    <form class="layui-form" lay-filter="dataRepeat" style="text-align: center">
+        <div class="layui-form-item">
+            <label class="layui-form-label">温度补偿:</label>
+            <input type="text" id="wdbcall" class="layui-input layui-input-inline"/>
+        </div>
+        <div class="layui-form-item">
+            <label class="layui-form-label">湿度补偿: </label>
+            <input type="text" id="sdbcall" class="layui-input layui-input-inline"/>
+        </div>
+    </form>
+</div>
 
 
 <div id="Sensor" style="display: none;margin-top: 20px;text-align: center">
@@ -141,7 +164,7 @@
         <div class="layui-form-item">
             <label class="layui-form-label" style="width: 120px;">传感器灵敏度:</label>
             <input type="text" id="sense" class="layui-input layui-input-inline"/>
-            <label class="layui-form-label" style="width: 120px;">s(0~600)  默认:60 </label>
+            <label class="layui-form-label" style="width: 120px;">s(0~600) 默认:60 </label>
         </div>
     </form>
 </div>
@@ -167,6 +190,8 @@
     let currentPage = 1
 
     function getDeviceDataList(currentPage) {
+        // 显示加载页面
+        layui.layer.load();
         let searchDeviceName = $('#deviceName').val()
         let searchDeviceClass = $('#searchClass').val()
         console.log(searchDeviceName, searchDeviceClass)
@@ -185,13 +210,22 @@
                 let b = $('#tableBody')
                 b.html("")
                 if (result.list != null) {
+                    layui.layer.closeAll("loading");
                     for (let v of result.list) {
                         b.append(`
                     <tr>
-<!--                        <td><input type="checkbox" class="layui-form-checkbox" data-sn="${v.T_sn}" data-id="${v.T_id}"/></td>-->
+                        <td><input type="checkbox" class="layui-form-checkbox" data-sn="${v.T_sn}" data-id="${v.T_id}"/></td>
                         <td>${v.T_sn}</td>
                         <td>${v.T_id}</td>
                         <td>${v.T_name}</td>
+                        <td>${v.T_t}</td>
+                        <td>${v.T_rh}</td>
+                        <td>
+        ${v.T_tDeviation === 1201 ? '<span style="color: red;">未获取到设备参数</span>' : v.T_tDeviation}
+    </td>
+    <td>
+        ${v.T_RhDeviation === 1201 ? '<span style="color: red;">未获取到设备参数</span>' : v.T_RhDeviation}
+    </td>
                         <td>
                             <button onclick="deviation('${v.T_sn}','${v.T_id}')" class="layui-btn layui-btn-normal layui-btn-sm">偏差值</button>
                             <button onclick="Sensor('${v.T_sn}','${v.T_id}')" class="layui-btn layui-btn-normal layui-btn-sm">传感器参数</button>
@@ -258,18 +292,16 @@
                 $('#wdbc').val("")
                 $('#sdbc').val("")
             }
-
             layui.layer.msg('请 确您勾选的设备 一定在线! 一定在线! 一定在线!,否则本次设置的参数可能无效!')
         })
 
 
-        if (sn == null && selectSns.length == 0) {
+        if (sn == null && selectSns.length === 0) {
             layui.layer.msg('没有可以操作的设备')
             return
         }
         let deviationData = [{}]
         console.log("选择数据:", selectSns)
-
         $.ajax({
             type: 'POST',
             url: '/Device/ReadDeviation',
@@ -281,9 +313,9 @@
                 if (rlt.Code === 200) {
                     if (rlt.Data.length === 1) {
                         let t = JSON.parse(rlt.Data[0].split("||")[1])
-                        for(let i = 0; i < t.data.length; i++) {
+                        for (let i = 0; i < t.data.length; i++) {
                             console.log(t.data[i]);
-                            if (t.data[i].id == id){
+                            if (t.data[i].id == id) {
                                 $('#wdbc').val(t.data[i].t)
                                 $('#sdbc').val(t.data[i].h)
                                 deviationData.push({
@@ -296,12 +328,11 @@
                                 })
                             }
                         }
-
-
                     } else {
                         $('#wdbc').disabled()
                         $('#sdbc').disabled()
                         for (let v of rlt.Data) {
+                            console.log(rlt.Data)
                             let parameter = v.split("||");
                             let sn = parameter[0].substring(parameter.lastIndex("/"))
                             let t = JSON.parse(parameter[1])
@@ -331,7 +362,8 @@
             btnAlign: 'c',
             yes(index, elem) {
                 console.log("偏差值数据:", deviationData)
-                if (deviationData.length == 1) {
+                layui.layer.load();
+                if (deviationData.length === 1) {
                     deviationData[0].data[0].t = Number.parseFloat($('#wdbc').val())
                     deviationData[0].data[0].h = Number.parseFloat($('#sdbc').val())
                 }
@@ -342,8 +374,31 @@
                     data: JSON.stringify(deviationData),
                     processData: false,
                     success: function (rlt) {
-                        layui.layer.msg(rlt.Msg)
-                    }
+                        layui.layer.closeAll('loading');
+                        if (rlt.Code === 200) {
+                            layui.layer.msg(rlt.Msg);
+                            location.reload()
+                        } else if (rlt.Code === 1201) {
+                            if (Array.isArray(rlt.Data) && rlt.Data.length > 0) {
+                                // 构建失败SN的列表字符串
+                                const failedSns = rlt.Data.join('<br>'); // 使用<br>标签换行
+                                // 显示弹窗,用户可以选择关闭
+                                layui.layer.alert('部分设置失败:\n' + failedSns, {
+                                    closeBtn: 0,
+                                    btn: ['关闭']
+                                });
+                            } else {
+                                layui.layer.msg(rlt.Msg || '未知错误');
+                            }
+                        } else {
+                            layui.layer.msg(rlt.Msg || '未知错误');
+                        }
+                    },
+                    error: function () {
+                        // 关闭加载页面
+                        layui.layer.closeAll('loading');
+                        layui.layer.msg('请求失败,请重试');
+                    },
                 })
                 layui.layer.close(index)
             }
@@ -374,7 +429,7 @@
         })
 
 
-        if (sn == null && selectSns.length == 0) {
+        if (sn == null && selectSns.length === 0) {
             layui.layer.msg('没有可以操作的设备')
             return
         }
@@ -392,10 +447,9 @@
                 if (rlt.Code === 200) {
                     if (rlt.Data.length === 1) {
                         let t = JSON.parse(rlt.Data[0].split("||")[1])
-
-                        for(let i = 0; i < t.data.length; i++) {
+                        for (let i = 0; i < t.data.length; i++) {
                             console.log(t.data[i]);
-                            if (t.data[i].id == id){
+                            if (t.data[i].id == id) {
                                 $('#speed').val(t.data[i].speed)
                                 $('#sense').val(t.data[i].sense)
                                 SensorData.push({
@@ -408,9 +462,6 @@
                                 })
                             }
                         }
-
-
-
                     } else {
                         $('#speed').disabled()
                         $('#sense').disabled()
@@ -428,10 +479,9 @@
                             })
                         }
                     }
+                } else {
+                    layui.layer.msg(rlt.Msg)
                 }
-                // } else {
-                //     layui.layer.msg(rlt.Msg)
-                // }
             }
         })
 
@@ -462,7 +512,92 @@
             }
         })
     }
+    function SensorAll(){
+        let selectSns = {}
+        $('#tableBody > tr > td > input[type="checkbox"]').each((i, e) => {
+            if ($(e).prop('checked')) {
+                let sn = $(e).attr('data-sn')
+                let id = parseInt($(e).attr('data-id'))
+                console.log(sn, id)
+                if (selectSns[sn] === undefined) {
+                    selectSns[sn] = [id]
+                } else {
+                    selectSns[sn].push(id)
+                }
+                $('#speed').val("")
+                $('#sense').val("")
+            }
+            layui.layer.msg('请 确您勾选的设备 一定在线! 一定在线! 一定在线!,否则本次设置的参数可能无效!')
+        })
+        if (selectSns.length === 0) {
+            layui.layer.msg('没有可以操作的设备')
+            return
+        }
 
+        console.log("选择数据:", selectSns)
+        layer.open({
+            type: 1,
+            title: '偏差值',
+            area: ['400px', '230px'],
+            content: $('#deviationall'),
+            btn: ['提交'],
+            btnAlign: 'c',
+            yes(index, elem) {
+                console.log("偏差值数据:", selectSns)
+                layui.layer.load();
+                console.log(Number.parseFloat($('#wdbcall').val()))
+                console.log(Number.parseFloat($('#sdbcall').val()))
+                let t = parseFloat($('#wdbcall').val());
+                let h = parseFloat($('#sdbcall').val());
+                let SensorData = {
+                    type: 0, // 根据实际情况设置类型
+                    sn: Object.keys(selectSns),
+                    mid: 0,
+                    data: []
+                };
+                for (let sn in selectSns) {
+                    selectSns[sn].forEach(id => {
+                        SensorData.data.push({ id, t, h });
+                    });
+                }
+                console.log(JSON.stringify(SensorData))
+                $.ajax({
+                    type: "POST",
+                    url: "/Device/WriteDeviationAll",
+                    contentType: "application/json",
+                    data: JSON.stringify(SensorData),
+                    processData: false,
+                    success: function (rlt) {
+                        layui.layer.closeAll('loading');
+                        if (rlt.Code === 200) {
+                            layui.layer.msg(rlt.Msg);
+                            location.reload()
+                        } else if (rlt.Code === 1201) {
+                            if (Array.isArray(rlt.Data) && rlt.Data.length > 0) {
+                                // 构建失败SN的列表字符串
+                                const failedSns = rlt.Data.join('<br>'); // 使用<br>标签换行
+                                // 显示弹窗,用户可以选择关闭
+                                layui.layer.alert('部分设置失败:\n' + failedSns, {
+                                    closeBtn: 0,
+                                    btn: ['关闭']
+                                });
+                            } else {
+                                layui.layer.msg(rlt.Msg || '未知错误');
+                            }
+                        } else {
+                            layui.layer.msg(rlt.Msg || '未知错误');
+                        }
+                    },
+                    error: function () {
+                        // 关闭加载页面
+                        layui.layer.closeAll('loading');
+                        layui.layer.msg('请求失败,请重试');
+                    },
+                })
+                layui.layer.close(index)
+            }
+        })
+    }
     //数据重传
     function dataRepeat(sn, type) {
         let selectSns = {}
@@ -482,6 +617,7 @@
             layui.layer.msg('没有可以操作的设备')
             return
         }
+
         let startTime, endTime;
         layui.layer.open({
             type: 1,
@@ -491,6 +627,7 @@
             btn: ['提交'],
             btnAlign: 'c',
             yes(index, elem) {
+                layui.layer.load();
                 startTime = $("#startTime").val();
                 endTime = $("#endTime").val();
                 console.log(`开始时间:${startTime},结束时间:${endTime}`)
@@ -499,7 +636,7 @@
                     return
                 }
                 //如果sn存在则表示针对单个设备
-                if (sn != null && sn != undefined) {
+                if (sn != null) {
                     selectSns = {}
                     selectSns[sn] = [type]
                 }
@@ -514,11 +651,31 @@
                     contentType: "application/json;charset=utf-8",
                     processData: false,
                     success: function (rlt) {
+                        // 关闭加载页面
+                        layui.layer.closeAll('loading');
+
                         if (rlt.Code === 200) {
-                            //关闭窗口
-                            layui.layer.close(index)
+                            layui.layer.msg(rlt.Msg);
+                        } else if (rlt.Code === 1201) {
+                            if (Array.isArray(rlt.Data) && rlt.Data.length > 0) {
+                                // 构建失败SN的列表字符串
+                                var failedSns = rlt.Data.join('<br>'); // 使用<br>标签换行
+                                // 显示弹窗,用户可以选择关闭
+                                layui.layer.alert('部分重传失败:\n' + failedSns, {
+                                    closeBtn: 0,
+                                    btn: ['关闭']
+                                });
+                            } else {
+                                layui.layer.msg(rlt.Msg || '未知错误');
+                            }
+                        } else {
+                            layui.layer.msg(rlt.Msg || '未知错误');
                         }
-                        layui.layer.msg(rlt.Msg)
+                    },
+                    error: function () {
+                        // 关闭加载页面
+                        layui.layer.closeAll('loading');
+                        layui.layer.msg('请求失败,请重试');
                     }
                 })
             }
@@ -574,6 +731,44 @@
     $(function () {
         getDeviceDataList(1) //获取数据列表
     })
+
+    function Zero() {
+        // 显示加载页面
+        layui.layer.load();
+
+        $.ajax({
+            type: "POST",
+            url: "/Device/SetDeviceDataZero",
+            contentType: "application/json",
+            success: function (rlt) {
+                // 关闭加载页面
+                layui.layer.closeAll('loading');
+
+                if (rlt.Code === 200) {
+                    layui.layer.msg(rlt.Msg);
+                } else if (rlt.Code === 1201) {
+                    if (Array.isArray(rlt.Data) && rlt.Data.length > 0) {
+                        // 构建失败SN的列表字符串
+                        var failedSns = rlt.Data.join('<br>'); // 使用<br>标签换行
+                        // 显示弹窗,用户可以选择关闭
+                        layui.layer.alert('部分设置失败:\n' + failedSns, {
+                            closeBtn: 0,
+                            btn: ['关闭']
+                        });
+                    } else {
+                        layui.layer.msg(rlt.Msg || '未知错误');
+                    }
+                } else {
+                    layui.layer.msg(rlt.Msg || '未知错误');
+                }
+            },
+            error: function () {
+                // 关闭加载页面
+                layui.layer.closeAll('loading');
+                layui.layer.msg('请求失败,请重试');
+            }
+        });
+    }
 </script>
 </body>
 

+ 1 - 2
views/home.html

@@ -68,8 +68,7 @@
 <script>
     window.onload = function () {
         // 页面加载完成后执行的代码
-        console.log("页面加载完成",{{.T_name}});
-        if ({{.T_name}}!="宝智达-魏公梅") {
+        if ({{.T_pid}}!=0) {
              var elementsByClassName = document.querySelector(".getCompany");
              elementsByClassName.style.display = 'none';
         }else{