123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448 |
- package controllers
- import (
- "errors"
- "fmt"
- "io"
- "sparrow/pkg/models"
- "sparrow/pkg/rpcs"
- "sparrow/pkg/server"
- "sparrow/services/knowoapi/services"
- "strconv"
- "time"
- "github.com/kataras/iris/v12"
- )
- // DeviceController api
- type DeviceController struct {
- Ctx iris.Context
- Service services.DeviceService
- Token
- }
- // Get 获取激活设备列表
- // GET /device?pi=&ps=&proid=&device_id=
- func (a *DeviceController) Get() {
- pi, err := a.Ctx.URLParamInt("pi")
- if err != nil {
- badRequest(a.Ctx, err)
- return
- }
- ps, err := a.Ctx.URLParamInt("ps")
- if err != nil {
- badRequest(a.Ctx, err)
- return
- }
- proid := a.Ctx.URLParam("proid")
- deviceid := a.Ctx.URLParam("device_id")
- vid := a.getVendorID(a.Ctx)
- datas, total, err := a.Service.GetDevices(vid, proid, pi, ps, deviceid)
- if err != nil {
- responseError(a.Ctx, ErrDatabase, err.Error())
- return
- }
- done(a.Ctx, map[string]interface{}{
- "list": datas,
- "total": total,
- })
- }
- // 设备数量,包含在线数量,离线数量,总数量
- // GET /devicecount
- func (a *DeviceController) GetDevicecount() {
- vid := a.getVendorID(a.Ctx)
- data, err := a.Service.GetDevicesCountByVenderId(vid)
- if err != nil && err.Error() != "redigo: nil returned" {
- responseError(a.Ctx, ErrDatabase, err.Error())
- return
- }
- done(a.Ctx, data)
- }
- // 获取设备在线状态
- // GET /devicestatus?device_id=
- func (a *DeviceController) GetDevicestatus() {
- deviceid := a.Ctx.URLParam("device_id")
- var status int
- onlineargs := rpcs.ArgsGetDeviceOnlineStatus{
- Id: deviceid,
- }
- 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)
- responseError(a.Ctx, ErrDatabase, err.Error())
- return
- }
- if int(onlinereply.HeartbeatInterval) > 0 && len(onlinereply.ClientIP) > 0 {
- status = 1
- }
- done(a.Ctx, map[string]interface{}{
- "Status": status,
- })
- }
- // GetBannerdata 获取设备激活和活跃数据
- // GET /bannerdata?proid=
- func (a *DeviceController) GetBannerdata() {
- proid, err := a.Ctx.URLParamInt("proid")
- if err != nil {
- proid = 0
- }
- var (
- //今日激活
- tact = 0
- // 今日活跃
- tlive = 0
- // 昨日激活
- yact = 0
- // 昨日活跃
- ylive = 0
- // 累计激活
- totolact = 0
- // 环比昨日激活
- comparedWithYesterdayActive = 0.00
- //活跃占比
- rateOfTodayLive = 0.00
- //环比昨日活跃
- comparedWithYesterdayLive = 0.00
- )
- vendorid := a.getVendorID(a.Ctx)
- totolact, err = a.Service.GetDeviceCount(vendorid)
- if err != nil {
- responseError(a.Ctx, ErrDatabase, err.Error())
- return
- }
- today := time.Now().Format("2006-01-02")
- yestoday := time.Now().AddDate(0, 0, -1).Format("2006-01-02")
- tact, err = a.Service.GetActiveNumberOfDate(vendorid, today)
- if err != nil {
- responseError(a.Ctx, ErrDatabase, err.Error())
- return
- }
- tlive, err = a.Service.GetLivelyCountOfDate(vendorid, today)
- if err != nil {
- responseError(a.Ctx, ErrDatabase, err.Error())
- return
- }
- yact, err = a.Service.GetActiveNumberOfDate(vendorid, yestoday)
- if err != nil {
- responseError(a.Ctx, ErrDatabase, err.Error())
- return
- }
- ylive, err = a.Service.GetLivelyCountOfDate(vendorid, yestoday)
- if err != nil {
- responseError(a.Ctx, ErrDatabase, err.Error())
- return
- }
- if tact != 0 && yact != 0 {
- comparedWithYesterdayActive = (float64(tact) / float64(yact)) * 100
- }
- if tlive != 0 && ylive != 0 {
- comparedWithYesterdayLive = (float64(tlive) / float64(ylive)) * 100
- rateOfTodayLive = float64(tlive) / float64(totolact) * 100
- }
- //TODO 这里的productid要去掉
- result := map[string]interface{}{
- "todayAct": tact,
- "todayLive": tlive,
- "yestodayAct": yact,
- "yestodayLive": ylive,
- "totalAct": totolact,
- "comparedWithYesterdayActive": fmt.Sprintf("%s%%", strconv.FormatFloat(comparedWithYesterdayActive, 'f', 2, 64)),
- "comparedWithYesterdayLive": fmt.Sprintf("%s%%", strconv.FormatFloat(comparedWithYesterdayLive, 'f', 2, 64)),
- "rateOfTodayLive": fmt.Sprintf("%s%%", strconv.FormatFloat(rateOfTodayLive, 'f', 2, 64)),
- "productid": proid,
- }
- done(a.Ctx, result)
- }
- // GetActivechart 获取N日的激活数据趋势
- func (a *DeviceController) GetActivechart() {
- // proid, err := a.Ctx.URLParamInt("proid")
- // if err != nil {
- // proid = 0
- // }
- days, err := a.Ctx.URLParamInt("days")
- if err != nil {
- days = 7
- }
- if days > 30 {
- badRequest(a.Ctx, errors.New("非法参数"))
- return
- }
- vendorid := a.getVendorID(a.Ctx)
- datas, err := a.Service.GetActiveOfNumDays(vendorid, days)
- if err != nil {
- responseError(a.Ctx, ErrDatabase, err.Error())
- return
- }
- done(a.Ctx, map[string]interface{}{
- "chart": datas,
- })
- }
- // GetLivechart 获取N日内的活跃数据
- func (a *DeviceController) GetLivechart() {
- // proid, err := a.Ctx.URLParamInt("proid")
- // if err != nil {
- // proid = 0
- // }
- days, err := a.Ctx.URLParamInt("days")
- if err != nil {
- days = 7
- }
- if days > 30 {
- badRequest(a.Ctx, errors.New("非法参数"))
- return
- }
- vendorid := a.getVendorID(a.Ctx)
- datas, err := a.Service.GetLivelyOfNumDays(vendorid, days)
- if err != nil {
- responseError(a.Ctx, ErrDatabase, err.Error())
- return
- }
- done(a.Ctx, map[string]interface{}{
- "chart": datas,
- })
- }
- // PostOtaUpgrade ota升级
- // POST /device/ota/upgrade
- func (a *DeviceController) PostOtaUpgrade() {
- params := new(models.UpgradeParams)
- if err := parseBody(a.Ctx, params); err != nil {
- badRequest(a.Ctx, err)
- return
- }
- params.VendorID = a.Token.getVendorID(a.Ctx)
- file, header, err := a.Ctx.FormFile("file")
- if err != nil {
- responseError(a.Ctx, ErrNormal, err.Error())
- return
- }
- fileBytes, err := io.ReadAll(file)
- if err != nil {
- responseError(a.Ctx, ErrNormal, err.Error())
- return
- }
- params.FileSize = header.Size
- params.File = fileBytes
- params.FileName = header.Filename
- err = a.Service.Upgrade(params)
- if err != nil {
- responseError(a.Ctx, ErrNormal, err.Error())
- return
- }
- done(a.Ctx, params)
- }
- // GetOtaProgress ota升级
- // GET /device/ota/progress?device_id=
- func (a *DeviceController) GetOtaProgress() {
- deviceId := a.Ctx.URLParam("device_id")
- data, err := a.Service.GetUpgradeProgress(deviceId)
- if err != nil {
- responseError(a.Ctx, ErrNormal, err.Error())
- return
- }
- done(a.Ctx, map[string]interface{}{
- "progress": data.Progress,
- })
- }
- // GetStatus 获取设备信息
- // GET /device/status?device_id=
- func (a *DeviceController) GetStatus() {
- deviceId := a.Ctx.URLParam("device_id")
- data, err := a.Service.GetDeviceStatus(deviceId)
- if err != nil {
- responseError(a.Ctx, ErrNormal, err.Error())
- return
- }
- done(a.Ctx, map[string]interface{}{
- "data": data.MustToJsonString(),
- })
- }
- // PostReport 获取设备状态
- // POST /device/report
- func (a *DeviceController) PostReport() {
- params := new(models.SendCommandParams)
- if err := parseBody(a.Ctx, params); err != nil {
- badRequest(a.Ctx, err)
- return
- }
- result, err := a.Service.SetReport(*params)
- if err != nil {
- responseError(a.Ctx, ErrNormal, err.Error())
- return
- }
- done(a.Ctx, result)
- }
- // PostRestart 重启设备
- // POST /device/restart
- func (a *DeviceController) PostRestart() {
- params := new(models.SendCommandParams)
- if err := parseBody(a.Ctx, params); err != nil {
- badRequest(a.Ctx, err)
- return
- }
- err := a.Service.Restart(*params)
- if err != nil {
- responseError(a.Ctx, ErrNormal, err.Error())
- return
- }
- done(a.Ctx, params.DeviceId)
- }
- // PostClear 清除设备配置数据
- // POST /device/clear
- func (a *DeviceController) PostClear() {
- params := new(models.SendCommandParams)
- if err := parseBody(a.Ctx, params); err != nil {
- badRequest(a.Ctx, err)
- return
- }
- err := a.Service.ClearData(*params)
- if err != nil {
- responseError(a.Ctx, ErrNormal, err.Error())
- return
- }
- done(a.Ctx, params.DeviceId)
- }
- // PostDatatrans 设备端自动上报配置
- // POST /device/datarrans
- func (a *DeviceController) PostDatatrans() {
- params := new(models.SendCommandParams)
- if err := parseBody(a.Ctx, params); err != nil {
- badRequest(a.Ctx, err)
- return
- }
- err := a.Service.SetDataTrans(*params)
- if err != nil {
- responseError(a.Ctx, ErrNormal, err.Error())
- return
- }
- done(a.Ctx, params.DeviceId)
- }
- // PostInfo
- // POST /device/info
- func (a *DeviceController) PostInfo() {
- params := new(models.SendCommandParams)
- if err := parseBody(a.Ctx, params); err != nil {
- badRequest(a.Ctx, err)
- return
- }
- result, err := a.Service.GetInfo(*params)
- if err != nil {
- responseError(a.Ctx, ErrNormal, err.Error())
- return
- }
- done(a.Ctx, result)
- }
- // PostForcerun 远程控制某个模块强制运行
- // POST /device/forcerun
- func (a *DeviceController) PostForcerun() {
- params := new(models.SendCommandParams)
- if err := parseBody(a.Ctx, params); err != nil {
- badRequest(a.Ctx, err)
- return
- }
- err := a.Service.ForceRun(*params)
- if err != nil {
- responseError(a.Ctx, ErrNormal, err.Error())
- return
- }
- done(a.Ctx, params.DeviceId)
- }
- // PostId 写入设备 ID
- // POST /device/id
- func (a *DeviceController) PostId() {
- params := new(models.SendCommandParams)
- if err := parseBody(a.Ctx, params); err != nil {
- badRequest(a.Ctx, err)
- return
- }
- err := a.Service.SetDeviceId(*params)
- if err != nil {
- responseError(a.Ctx, ErrNormal, err.Error())
- return
- }
- done(a.Ctx, params.DeviceId)
- }
- // PostFjsq 智能分集水器控制
- // POST /device/fjsq
- func (a *DeviceController) PostFjsq() {
- params := new(models.SendCommandParams)
- if err := parseBody(a.Ctx, params); err != nil {
- badRequest(a.Ctx, err)
- return
- }
- err := a.Service.SetFjsqStatus(*params)
- if err != nil {
- responseError(a.Ctx, ErrNormal, err.Error())
- return
- }
- done(a.Ctx, params.DeviceId)
- }
- // PostOutdoorpower 设置水系统外机电源状态
- // POST /device/outdoorpower
- func (a *DeviceController) PostOutdoorpower() {
- params := new(models.SendCommandParams)
- if err := parseBody(a.Ctx, params); err != nil {
- badRequest(a.Ctx, err)
- return
- }
- err := a.Service.SetOutdoorPower(*params)
- if err != nil {
- responseError(a.Ctx, ErrNormal, err.Error())
- return
- }
- done(a.Ctx, params.DeviceId)
- }
- // PostOutdoortemp 设置水系统外机出水温度
- // POST /device/outdoortemp
- func (a *DeviceController) PostOutdoortemp() {
- params := new(models.SendCommandParams)
- if err := parseBody(a.Ctx, params); err != nil {
- badRequest(a.Ctx, err)
- return
- }
- err := a.Service.SetOutdoorTemp(*params)
- if err != nil {
- responseError(a.Ctx, ErrNormal, err.Error())
- return
- }
- done(a.Ctx, params.DeviceId)
- }
|