123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- package services
- import (
- "github.com/gogf/gf/util/guid"
- "sparrow/pkg/models"
- "sparrow/pkg/rpcs"
- "sparrow/pkg/server"
- "sparrow/services/knowoapi/model"
- )
- // DeviceService device service接口
- type DeviceService interface {
- // 获取厂商已经激活的设备总数
- GetDeviceCount(vendorid string) (int, error)
- //返回厂商某天激活的设备数
- GetActiveNumberOfDate(vendor string, datetime string) (int, error)
- //获取厂商某天活跃的设备数
- GetLivelyCountOfDate(string, string) (int, error)
- //获取近N日激活设备数据
- GetActiveOfNumDays(string, int) ([]map[string]interface{}, error)
- //获取近N日活跃设备数据
- GetLivelyOfNumDays(string, int) ([]map[string]interface{}, error)
- //获取已经激活的设备列表
- GetDevices(vendorid, proid string, pi, ps int, deviceid string) ([]*models.Devices, int, error)
- //获取用户下所有设备的数量,在线设备的数量,离线设备的数量
- GetDevicesCountByVenderId(vendorid string) (map[string]interface{}, error)
- // 发起设备OTA升级
- Upgrade(params *models.UpgradeParams) error
- // GetUpgradeProgress 获取ota升级进度
- GetUpgradeProgress(deviceId string) (rpcs.ReplyOtaProgress, error)
- }
- type deviceservice struct {
- models *model.All
- }
- // NewDeviceService create device service
- func NewDeviceService(models *model.All) DeviceService {
- return deviceservice{
- models: models,
- }
- }
- func (a deviceservice) GetDevices(vendorid, proid string, pi, ps int, deviceid string) ([]*models.Devices, int, error) {
- data, total, err := a.models.Device.GetDevices(vendorid, proid, pi, ps, deviceid)
- if err != nil {
- return nil, 0, err
- }
- dataMap := make([]*models.Devices, 0)
- for _, device := range data {
- onlineargs := rpcs.ArgsGetDeviceOnlineStatus{
- Id: device.DeviceIdentifier,
- }
- onlinereply := rpcs.ReplyGetDeviceOnlineStatus{}
- err = server.RPCCallByName(nil, rpcs.DeviceManagerName, "DeviceManager.GetDeviceOnlineStatus", onlineargs, &onlinereply)
- if err != nil && err.Error() != "redigo: nil returned" {
- server.Log.Errorf("get devie online status error: %v", err)
- return nil, 0, err
- }
- devices := new(models.Devices)
- devices.Device = device
- if int(onlinereply.HeartbeatInterval) > 0 && len(onlinereply.ClientIP) > 0 {
- devices.Status = 1
- }
- dataMap = append(dataMap, devices)
- }
- return dataMap, total, nil
- }
- func (a deviceservice) GetDeviceCount(vendorid string) (int, error) {
- return a.models.Device.GetDeviceCount(vendorid)
- }
- func (a deviceservice) GetActiveNumberOfDate(vendorid string, datetime string) (int, error) {
- return a.models.Device.GetActiveNumberOfDate(vendorid, datetime)
- }
- func (a deviceservice) GetLivelyCountOfDate(vendorid string, datetime string) (int, error) {
- return a.models.Device.GetLivelyCountOfDate(vendorid, datetime)
- }
- func (a deviceservice) GetActiveOfNumDays(vendorid string, days int) ([]map[string]interface{}, error) {
- return a.models.Device.GetActiveOfNumDays(vendorid, days)
- }
- func (a deviceservice) GetLivelyOfNumDays(vendorid string, days int) ([]map[string]interface{}, error) {
- return a.models.Device.GetLivelyOfNumDays(vendorid, days)
- }
- func (a deviceservice) GetDevicesCountByVenderId(vendorid string) (map[string]interface{}, error) {
- data, err := a.models.Device.GetDevicesByVenderId(vendorid)
- if err != nil {
- return nil, err
- }
- var onlineCount int
- var offlineCount int
- for _, device := range data {
- onlineargs := rpcs.ArgsGetDeviceOnlineStatus{
- Id: device.DeviceIdentifier,
- }
- onlinereply := rpcs.ReplyGetDeviceOnlineStatus{}
- err = server.RPCCallByName(nil, rpcs.DeviceManagerName, "DeviceManager.GetDeviceOnlineStatus", onlineargs, &onlinereply)
- if err != nil && err.Error() != "redigo: nil returned" {
- server.Log.Errorf("get devie online status error: %v", err)
- return nil, err
- }
- if int(onlinereply.HeartbeatInterval) > 0 && len(onlinereply.ClientIP) > 0 {
- onlineCount += 1
- } else {
- offlineCount += 1
- }
- }
- deviceCount := map[string]interface{}{
- "TotalData": len(data),
- "OnlineCount": onlineCount,
- "OfflineCount": offlineCount,
- }
- return deviceCount, nil
- }
- func (a deviceservice) Upgrade(param *models.UpgradeParams) error {
- var fileArgs rpcs.ArgsOtaFile
- fileArgs.FileData = param.File
- fileArgs.FileId = guid.S()
- var reply rpcs.ReplyEmptyResult
- err := server.RPCCallByName(nil, rpcs.DeviceManagerName, "DeviceManager.SavaFile", fileArgs, &reply)
- if err != nil {
- server.Log.Errorf("OTA升级文件保存失败:%v", err)
- return err
- }
- var args rpcs.ArgsUpgrade4G
- args.DeviceId = param.DeviceID
- args.FileId = fileArgs.FileId
- args.FileSize = param.FileSize
- err = server.RPCCallByName(nil, rpcs.MQTTAccessName, "Access.UpgradeFor4G", args, &reply)
- if err != nil {
- server.Log.Errorf("4G模组OTA升级失败:%v", err)
- return err
- }
- return nil
- }
- func (a deviceservice) GetUpgradeProgress(deviceId string) (rpcs.ReplyOtaProgress, error) {
- var args rpcs.ArgsOtaProgress
- args.DeviceId = deviceId
- var reply rpcs.ReplyOtaProgress
- err := server.RPCCallByName(nil, rpcs.DeviceManagerName, "DeviceManager.GetProgress", args, &reply)
- if err != nil {
- server.Log.Errorf("OTA升级进度获取失败:%v", err)
- return reply, err
- }
- return reply, nil
- }
|