package service import ( "encoding/json" "fmt" "time" "gat1400Exchange/config" "gat1400Exchange/models" "gat1400Exchange/util" ) type DevReportData struct { Code string `json:"code"` // 设备ID Type string `json:"type"` // 设备类型 Model string `json:"model"` // 设备型号 SerialNum string `json:"serialNum"` // 硬件序列号 Name string `json:"name"` // 设备名称 Org string `json:"org"` // 所属机构 Position string `json:"position"` // 具体位置 Addr string `json:"addr"` // 地址 Longitude string `json:"lon"` // 经度 Latitude string `json:"lat"` // 纬度 Desc string `json:"desc"` // 设备描述 InstallTime string `json:"installTime"` // 安装时间 UpTime string `json:"upTime"` // 启动时间 Hardware map[string]interface{} `json:"hardware"` // 硬件信息 IpAddr string `json:"ip"` } func DeviceInfoReportTask() error { if config.ServeConf.Role == "agent" { return nil } var d models.Ape devices, err := d.FindAll() if err != nil { return err } for _, dev := range devices { // 级联的设备不检查心跳 if dev.FromId == "" { hTime, err := time.ParseInLocation("2006-01-02 15:04:05", dev.HeartbeatTime, time.Local) if err != nil { dev.HeartbeatTime = time.Now().Format("2006-01-02 15:04:05") dev.Ext.IsOnline = "1" } else { if hTime.Unix()+120 >= time.Now().Unix() { dev.Ext.IsOnline = "1" } else { dev.Ext.IsOnline = "2" } } // 更新在线状态 dev.Save() // 离线设备不执行上报 if dev.Ext.IsOnline == "2" { continue } } // 配置了上报地址, 推送数据 if config.ForwardConf.ReportServer == "" { continue } device := DevReportData{ Code: dev.Id, Model: dev.Ext.Model, Type: "camera", Name: dev.Name, Addr: dev.Ext.Place, IpAddr: dev.Ext.IPAddr, Latitude: fmt.Sprintf("%f", dev.Ext.Latitude), Longitude: fmt.Sprintf("%f", dev.Ext.Longitude), } data, err := json.Marshal(device) if err != nil { return err } headers := map[string]string{"Content-Type": "application/json; charset=UTF-8"} _, err = util.HttpPost(config.ForwardConf.ReportServer, headers, data) if err != nil { return err } } return nil }