| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- package busmodels
- import (
- "device-manage/app/admin/models"
- orm "device-manage/common/global"
- "errors"
- "fmt"
- "strconv"
- "time"
- )
- //ServerIp mqtt server ip地址, 因为设备可能会在多个mqtt 服务切换, 保存最近一次的mqtt ip
- //LastTime 最后在线时间, 每次设备报上报, lasttime都会更新, 是最后在线时间,也是当前设备在线时间.
- type BusDevice struct {
- DeviceId int `json:"deviceId" gorm:"primary_key;AUTO_INCREMENT"`
- DeviceName string `json:"deviceName" gorm:"size:128;"`
- DeviceSn string `json:"deviceSn" gorm:"size:128; unique; not null"`
- DeviceType string `json:"deviceType" gorm:"size:128;"`
- GroupId int `json:"groupId"`
- Gps string `json:"gps" gorm:"size:128;"`
- DeviceIp string `json:"deviceIp" gorm:"size:32;"`
- ServerIp string `json:"serverIp" gorm:"size:32;"`
- Remark string `json:"remark" gorm:"size:255;"`
- Status int `json:"status"`
- Nettype int `json:"nettype"`
- LastTime time.Time `json:"lastTime"`
- OnlineTime string `json:"onlineTime" gorm:"size:128;"`
- TotallTime string `json:"totallTime" gorm:"size:255;"`
- IsRegister int `json:"isRegister"`
- RegisterTime time.Time `json:"registerTime"`
- CreateBy string `json:"createBy" gorm:"size:128;"`
- UpdateBy string `json:"updateBy" gorm:"size:128;"`
- BaseModel
- BusAppDeviceBind BusAppDeviceBind `gorm:"foreignKey:DeviceId;references:DeviceId"`
- BusDeviceLog BusDeviceLog `gorm:"foreignKey:DeviceSn;references:DeviceSn"`
- }
- type DeviceInfo struct {
- BusDevice
- GroupName string `json:"groupName" gorm:"size:128;"`
- }
- func (BusDevice) TableName() string {
- return "bus_device"
- }
- type QueryParams struct {
- DeviceName string `json:"deviceName" gorm:"size:128;"`
- DeviceSn string `json:"deviceSn" gorm:"size:128;"`
- Status int `json:"status"`
- PageSize int `json:"pageSize"`
- PageIndex int `json:"pageIndex"`
- Gids []int `json:"gids"`
- }
- type StaticticsParams struct {
- Gids []int `json:"gids"`
- }
- type Statictics struct {
- OnlineCount int `json:"onlineCount"`
- OfflineCount int `json:"offlineCount"`
- }
- func (e *BusDevice) Get() (DeviceInfo, error) {
- var doc DeviceInfo
- var group BusGroup
- table := orm.Eloquent.Table(e.TableName())
- tableGroup := orm.Eloquent.Table("bus_group")
- if e.DeviceId != 0 {
- table = table.Where("device_id = ?", e.DeviceId)
- }
- if err := table.First(&doc).Error; err != nil {
- return doc, err
- }
- if err := tableGroup.Where("group_id = ?", doc.GroupId).Find(&group).Error; err != nil {
- return doc, err
- } else {
- doc.GroupName = group.GroupName
- }
- fmt.Println(doc.ServerIp)
- return doc, nil
- }
- func (e *BusDevice) GetDeviceByDeviceSn() (BusDevice, error) {
- var doc BusDevice
- table := orm.Eloquent.Table(e.TableName())
- if e.DeviceId != 0 {
- table = table.Where("device_sn = ?", e.DeviceSn)
- }
- if err := table.First(&doc).Error; err != nil {
- return doc, err
- }
- fmt.Println(doc.ServerIp)
- return doc, nil
- }
- //根据群组id查询所有的设备
- func (e *BusDevice) GetDevices() ([]DeviceInfo, error) {
- var doc []DeviceInfo
- table := orm.Eloquent.Table(e.TableName())
- if e.GroupId != 0 {
- table = table.Where("group_id = ?", e.GroupId)
- }
- if err := table.Find(&doc).Error; err != nil {
- return doc, err
- }
- return doc, nil
- }
- //查询设备是否已经注册 IsRegister:1 已经注册, IsRegister:0 未注册.
- func (e *BusDevice) IsRegist() bool {
- var result bool = true
- var deviceInfo BusDevice
- table := orm.Eloquent.Table(e.TableName())
- if e.DeviceSn != "" {
- table = table.Where("device_sn = ?", e.DeviceSn)
- }
- if err := table.Find(&deviceInfo).Error; err != nil {
- result = false
- }
- if deviceInfo.IsRegister == 0 {
- result = false
- }
- return result
- }
- //查询设备是否存在, 新设备添加, 已添加才能注册.
- func (e *BusDevice) IsExist() bool {
- var result bool = true
- var count int64
- table := orm.Eloquent.Table(e.TableName())
- if e.DeviceSn != "" {
- table = table.Where("device_sn = ?", e.DeviceSn)
- }
- if err := table.Find(&BusDevice{}).Count(&count).Error; err != nil {
- result = false
- }
- if count <= 0 {
- result = false
- }
- return result
- }
- func (e *BusDevice) GetPage(pageSize int, pageIndex int, gids []int) ([]DeviceInfo, int, error) {
- var doc []DeviceInfo
- table := orm.Eloquent.Table(e.TableName())
- tableUser := orm.Eloquent.Table("sys_user")
- if e.DeviceName != "" {
- table = table.Where("device_name like ?", "%"+e.DeviceName+"%")
- }
- if e.DeviceSn != "" {
- table = table.Where("device_sn like ?", "%"+e.DeviceSn+"%")
- }
- if len(gids) > 0 {
- table = table.Where("group_id in (?)", gids)
- }
- var count int64
- if err := table.Order("device_id desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil {
- return nil, 0, err
- }
- for k, v := range doc {
- //fmt.Println(v)
- var group BusGroup
- tableGroup := orm.Eloquent.Table("bus_group")
- user := models.SysUser{}
- id, _ := strconv.Atoi(v.CreateBy)
- if err := tableUser.Where("user_id = ?", id).Find(&user).Error; err == nil {
- doc[k].CreateBy = user.Username
- }
- tableUser := orm.Eloquent.Table("sys_user")
- id, _ = strconv.Atoi(v.UpdateBy)
- if err := tableUser.Where("user_id = ?", id).Find(&user).Error; err == nil {
- doc[k].UpdateBy = user.Username
- }
- if err := tableGroup.Where("group_id = ?", v.GroupId).Find(&group).Error; err == nil {
- doc[k].GroupName = group.GroupName
- }
- }
- return doc, int(count), nil
- }
- func (e *BusDevice) GetDeviceStatistics(gids []int) (Statictics, error) {
- var statictics Statictics
- if len(gids) <= 0 {
- return statictics, errors.New("null")
- }
- var onlineCount, offlineCount int64
- if err := orm.Eloquent.Table(e.TableName()).Where("group_id in (?)", gids).Where("status = ?", 1).Find(&[]BusDevice{}).Count(&onlineCount).Error; err != nil {
- return statictics, err
- }
- statictics.OnlineCount = int(onlineCount)
- if err := orm.Eloquent.Table(e.TableName()).Where("group_id in (?)", gids).Where("status = ?", 0).Find(&[]BusDevice{}).Count(&offlineCount).Error; err != nil {
- return statictics, err
- }
- statictics.OfflineCount = int(offlineCount)
- return statictics, nil
- }
- func (e *BusDevice) GetMonitorPage(pageSize int, pageIndex int, gids []int) ([]DeviceInfo, int, error) {
- var doc []DeviceInfo
- table := orm.Eloquent.Table(e.TableName())
- tableUser := orm.Eloquent.Table("sys_user")
- if e.DeviceName != "" {
- table = table.Where("device_name like ?", "%"+e.DeviceName+"%")
- }
- if e.DeviceSn != "" {
- table = table.Where("device_sn like ?", "%"+e.DeviceSn+"%")
- }
- if len(gids) > 0 {
- table = table.Where("group_id in (?)", gids)
- }
- //status 0 离线设备, status 1 在线设备. status x 其他设备.
- fmt.Println("status", e.Status)
- if e.Status == 0 || e.Status == 1 {
- table = table.Where("status = ?", e.Status)
- }
- if e.IsRegister > 0 {
- table = table.Where("is_register = ?", e.IsRegister)
- }
- var count int64
- if err := table.Order("device_id desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil {
- return nil, 0, err
- }
- for k, v := range doc {
- fmt.Println(v)
- var group BusGroup
- tableGroup := orm.Eloquent.Table("bus_group")
- user := models.SysUser{}
- id, _ := strconv.Atoi(v.CreateBy)
- if err := tableUser.Where("user_id = ?", id).Find(&user).Error; err == nil {
- doc[k].CreateBy = user.Username
- }
- tableUser := orm.Eloquent.Table("sys_user")
- id, _ = strconv.Atoi(v.UpdateBy)
- if err := tableUser.Where("user_id = ?", id).Find(&user).Error; err == nil {
- doc[k].UpdateBy = user.Username
- }
- if err := tableGroup.Where("group_id = ?", v.GroupId).Find(&group).Error; err == nil {
- doc[k].GroupName = group.GroupName
- }
- }
- return doc, int(count), nil
- }
- func (e *BusDevice) GetOnlineDevices() (devs []BusDevice, err error) {
- if err = orm.Eloquent.Table(e.TableName()).Where("status = ?", 1).Find(&devs).Error; err != nil {
- fmt.Println(err)
- }
- return devs, err
- }
- func (e *BusDevice) Insert() (id int, err error) {
- // check 用户名
- var count int64
- orm.Eloquent.Table(e.TableName()).Where("device_sn = ?", e.DeviceSn).Count(&count)
- if count > 0 {
- err = errors.New("device 已存在!")
- return
- }
- //添加数据
- if err = orm.Eloquent.Table(e.TableName()).Create(&e).Error; err != nil {
- return
- }
- id = e.DeviceId
- return
- }
- func (e *BusDevice) Update(id int) (update BusDevice, err error) {
- if err = orm.Eloquent.Table(e.TableName()).First(&update, id).Error; err != nil {
- return
- }
- //参数1:是要修改的数据
- //参数2:是修改的数据
- //fmt.Println("new data:", e)
- //fmt.Println("old data:", update)
- if err = orm.Eloquent.Table(e.TableName()).Model(&update).Updates(&e).Error; err != nil {
- return
- }
- return
- }
- //gorm int类型字段 默认值是0,通过struct更新, 不能直接更新为0.通过map可以将int字段更新为0值
- func (e *BusDevice) UpdateByMap(id int) (update BusDevice, err error) {
- if err = orm.Eloquent.Table(e.TableName()).First(&update, id).Error; err != nil {
- return
- }
- //参数1:是要修改的数据
- //参数2:是修改的数据
- fmt.Println("new data:", e)
- fmt.Println("old data:", update)
- if err = orm.Eloquent.Table(e.TableName()).Model(&update).Updates(map[string]interface{}{"status": e.Status, "online_time": e.OnlineTime, "nettype": e.Nettype}).Error; err != nil {
- return
- }
- return
- }
- //delelte log
- func (e *BusDevice) Delete(id int) (success bool, err error) {
- if err = orm.Eloquent.Table(e.TableName()).Where("device_id = ?", id).Delete(&BusDevice{}).Error; err != nil {
- success = false
- return
- }
- success = true
- return
- }
- func (e *BusDevice) BatchDelete(id []int) (Result bool, err error) {
- if err = orm.Eloquent.Table(e.TableName()).Where("device_id in (?)", id).Delete(&BusDevice{}).Error; err != nil {
- return
- }
- Result = true
- return
- }
|