package openApi import ( "Cold_Api/models/Device" "bytes" "encoding/json" "github.com/beego/beego/v2/adapter/orm" "github.com/beego/beego/v2/core/logs" beego "github.com/beego/beego/v2/server/web" "io" "net/http" "strconv" "strings" "time" ) type T struct { Msg string `json:"msg"` Code int `json:"code"` Data struct { Code int `json:"code"` Data []struct { DeviceGuid string `json:"deviceGuid"` SubUid int `json:"subUid"` DeviceName string `json:"deviceName"` Tmp1 string `json:"tmp1"` Tmp2 string `json:"tmp2"` Tmp3 string `json:"tmp3"` Tmp4 string `json:"tmp4"` Hum1 string `json:"hum1"` Hum2 string `json:"hum2"` Lux1 string `json:"lux1"` Power string `json:"power"` Signal string `json:"signal"` Position string `json:"position"` Address string `json:"address"` LastDataTime int64 `json:"lastDataTime"` LastSessionTime int64 `json:"lastSessionTime"` LastAddressTime string `json:"lastAddressTime"` AlarmState bool `json:"alarmState"` WarnState bool `json:"warnState"` WaybillStart string `json:"waybillStart"` WaybillEnd string `json:"waybillEnd"` WaybillState string `json:"waybillState"` } `json:"data"` Time string `json:"time"` Message string `json:"message"` Error string `json:"error"` } `json:"data"` } func GetRealtime() { url, err := beego.AppConfig.String("apiurl") if err != nil { logs.Debug("无法获取apiurl:", err) return } o := orm.NewOrm() var DeviceList []string //查询设备表中精创设备 sql := "select t_sn from device where Islocal = '1'" rows, err := o.Raw(sql).QueryRows(&DeviceList) if rows == 0 { logs.Debug("未查询到设备") return } if err != nil { logs.Debug("查询设备表失败:", err) return } marshal, err := json.Marshal(DeviceList) if err != nil { logs.Debug("json转换失败:", err) return } resp, err := http.Post(url+"getRealTimeData", "application/json", bytes.NewReader(marshal)) if err != nil { logs.Debug("请求失败:", err) return } defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) var temp T err = json.Unmarshal(body, &temp) if err != nil { logs.Error("解析失败:", err) return } if temp.Code != 0 { logs.Error("请求失败:", temp.Msg) return } for _, v := range temp.Data.Data { var T_t, T_rh float64 if len(v.Tmp1) != 0 { Tmp1 := strings.Trim(v.Tmp1, "℃") T_t, err = strconv.ParseFloat(Tmp1, 32) if err != nil { logs.Error("转换温度失败:", err) return } } if len(v.Hum1) != 0 { Hum1 := strings.Trim(v.Hum1, "%RH") T_rh, err = strconv.ParseFloat(Hum1, 32) if err != nil { logs.Error("转换湿度失败:", err) return } } var T_time time.Time if v.LastSessionTime != 0 { T_time = time.Unix(v.LastSessionTime, 0).Local() } key := v.DeviceGuid + "|" + strconv.Itoa(v.SubUid+1) r, is := Device.Read_DeviceSensorParameter(v.DeviceGuid, v.SubUid+1) if !is { logs.Error("获取最新设备参数失败:", err) return } Device.RedisDeviceData_Set(key, Device.DeviceData_{ T_rh: float32(T_rh), T_t: float32(T_t), T_time: T_time, T_site: v.Position, T_sp: r.Id, T_id: v.SubUid + 1, }) } }