package service import ( "basic.com/valib/bhomeclient.git" "basic.com/valib/bhomedbapi.git" "basic.com/valib/logger.git" "context" "encoding/json" "time" "vamicro/system-service/models" ) func CollectDeviceInfo(ctx context.Context, bk bhomeclient.Broker) { tk := time.NewTicker(time.Second * 10) for { select { case <-ctx.Done(): logger.Debug("ctx done") return case <-tk.C: collect(bk) default: time.Sleep(time.Second) } } } type DevCollect struct { DeviceList []models.Device `json:"deviceList"` Sdks []SdkFill `json:"sdks"` Apps []AppFill `json:"apps"` } type SdkFill struct { models.DeviceSdk SdkName string `json:"sdkName"` //汇总展现到页面上,此进程无法获取app和sdks表信息 IconBlob string `json:"iconBlob"` IconBlob2 string `json:"iconBlob2"` Version string `json:"version"` Upgrade bool `json:"upgrade"` //判断是否需要升级 } type AppFill struct { models.DeviceApp AppName string `json:"appName"` //汇总展现到页面上,此进程无法获取app和sdks表信息 IconBlob string `json:"iconBlob"` IconBlob2 string `json:"iconBlob2"` Version string `json:"version"` IsDefault bool `json:"isDefault"` Upgrade bool `json:"upgrade"` //判断是否需要升级 } func collect(bk bhomeclient.Broker) { var dc DevCollect var d models.Device var ds models.DeviceSdk var da models.DeviceApp dc.DeviceList = d.FindAll() dsArr := ds.FindAll() daArr := da.FindAll() sdkApi := bhomedbapi.SdkApi{} appApi := bhomedbapi.AppApi{} sdkMap := sdkApi.FindAllMap() appMap := appApi.FindAppMap() for _, s := range dsArr { sf := SdkFill{} sf.DeviceSdk = s if v,ok := sdkMap[s.SdkId];ok { sf.SdkName = v.SdkName sf.IconBlob = v.IconBlob sf.IconBlob2 = v.IconBlob2 sf.Version = v.Version } dc.Sdks = append(dc.Sdks, sf) } for _, a := range daArr { af := AppFill{} af.DeviceApp = a if v,ok := appMap[a.AppId];ok { af.AppName = v.Name af.IconBlob = v.IconBlob af.IconBlob2 = v.IconBlob2 af.Version = v.Version af.IsDefault = v.IsDefault } dc.Apps = append(dc.Apps, af) } data, err := json.Marshal(dc) if err == nil { bk.Publish("collect-manage-device-info", data) } else { logger.Error("marshal err:", err) } }