Browse Source

获取设备在线状态

baozhensong 6 years ago
parent
commit
dc8a0666b6
2 changed files with 37 additions and 3 deletions
  1. 5 0
      pkg/models/device.go
  2. 32 3
      services/knowoapi/services/device.go

+ 5 - 0
pkg/models/device.go

@@ -32,6 +32,11 @@ type DeviceQuery struct {
 	ProductName string
 }
 
+type Devices struct {
+	Device
+	Status int
+}
+
 // DeviceChartData 设备数据图表
 type DeviceChartData struct {
 	Dt    string

+ 32 - 3
services/knowoapi/services/device.go

@@ -2,6 +2,8 @@ package services
 
 import (
 	"sparrow/pkg/models"
+	"sparrow/pkg/rpcs"
+	"sparrow/pkg/server"
 	"sparrow/services/knowoapi/model"
 )
 
@@ -18,7 +20,7 @@ type DeviceService interface {
 	//获取近N日活跃设备数据
 	GetLivelyOfNumDays(uint, int) ([]map[string]interface{}, error)
 	//获取已经激活的设备列表
-	GetDevices(vendorid uint, proid, pi, ps int, deviceid string) ([]models.Device, int, error)
+	GetDevices(vendorid uint, proid, pi, ps int, deviceid string) ([]*models.Devices, int, error)
 }
 
 type deviceservice struct {
@@ -31,8 +33,35 @@ func NewDeviceService(models *model.All) DeviceService {
 		models: models,
 	}
 }
-func (a deviceservice) GetDevices(vendorid uint, proid, pi, ps int, deviceid string) ([]models.Device, int, error) {
-	return a.models.Device.GetDevices(vendorid, proid, pi, ps, deviceid)
+func (a deviceservice) GetDevices(vendorid uint, proid, pi, ps int, deviceid string) ([]*models.Devices, int, error) {
+
+	datas, total, err := a.models.Device.GetDevices(vendorid, proid, pi, ps, deviceid)
+
+	devicedatas := make([]*models.Devices, 0)
+
+	for _, device := range datas {
+		onlineargs := rpcs.ArgsGetDeviceOnlineStatus{
+			Id: uint64(device.ID),
+		}
+
+		onlinereply := rpcs.ReplyGetDeviceOnlineStatus{}
+		err = server.RPCCallByName(nil, "devicemanager", "DeviceManager.GetDeviceOnlineStatus", onlineargs, &onlinereply)
+		if err != nil {
+			server.Log.Errorf("get devie online status error: %v", err)
+		}
+
+		devices := new(models.Devices)
+
+		devices.Device = device
+
+		if int(onlinereply.HeartbeatInterval) > 0 {
+
+			devices.Status = 1
+		}
+		devicedatas = append(devicedatas, devices)
+	}
+
+	return devicedatas, total, err
 }
 func (a deviceservice) GetDeviceCount(vendorid uint) (int, error) {
 	return a.models.Device.GetDeviceCount(vendorid)