device.go 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. package busmodels
  2. import (
  3. "device-manage/app/admin/models"
  4. orm "device-manage/common/global"
  5. "errors"
  6. "fmt"
  7. "strconv"
  8. "time"
  9. )
  10. //ServerIp mqtt server ip地址, 因为设备可能会在多个mqtt 服务切换, 保存最近一次的mqtt ip
  11. //LastTime 最后在线时间, 每次设备报上报, lasttime都会更新, 是最后在线时间,也是当前设备在线时间.
  12. type BusDevice struct {
  13. DeviceId int `json:"deviceId" gorm:"primary_key;AUTO_INCREMENT"`
  14. DeviceName string `json:"deviceName" gorm:"size:128;"`
  15. DeviceSn string `json:"deviceSn" gorm:"size:128; unique; not null"`
  16. DeviceType string `json:"deviceType" gorm:"size:128;"`
  17. GroupId int `json:"groupId"`
  18. Gps string `json:"gps" gorm:"size:128;"`
  19. DeviceIp string `json:"deviceIp" gorm:"size:32;"`
  20. ServerIp string `json:"serverIp" gorm:"size:32;"`
  21. Remark string `json:"remark" gorm:"size:255;"`
  22. Status int `json:"status"`
  23. Nettype int `json:"nettype"`
  24. LastTime time.Time `json:"lastTime"`
  25. OnlineTime string `json:"onlineTime" gorm:"size:128;"`
  26. TotallTime string `json:"totallTime" gorm:"size:255;"`
  27. IsRegister int `json:"isRegister"`
  28. RegisterTime time.Time `json:"registerTime"`
  29. CreateBy string `json:"createBy" gorm:"size:128;"`
  30. UpdateBy string `json:"updateBy" gorm:"size:128;"`
  31. BaseModel
  32. BusAppDeviceBind BusAppDeviceBind `gorm:"foreignKey:DeviceId;references:DeviceId"`
  33. BusDeviceLog BusDeviceLog `gorm:"foreignKey:DeviceSn;references:DeviceSn"`
  34. }
  35. type DeviceInfo struct {
  36. BusDevice
  37. GroupName string `json:"groupName" gorm:"size:128;"`
  38. }
  39. func (BusDevice) TableName() string {
  40. return "bus_device"
  41. }
  42. type QueryParams struct {
  43. DeviceName string `json:"deviceName" gorm:"size:128;"`
  44. DeviceSn string `json:"deviceSn" gorm:"size:128;"`
  45. Status int `json:"status"`
  46. PageSize int `json:"pageSize"`
  47. PageIndex int `json:"pageIndex"`
  48. Gids []int `json:"gids"`
  49. }
  50. type StaticticsParams struct {
  51. Gids []int `json:"gids"`
  52. }
  53. type Statictics struct {
  54. OnlineCount int `json:"onlineCount"`
  55. OfflineCount int `json:"offlineCount"`
  56. }
  57. func (e *BusDevice) Get() (DeviceInfo, error) {
  58. var doc DeviceInfo
  59. var group BusGroup
  60. table := orm.Eloquent.Table(e.TableName())
  61. tableGroup := orm.Eloquent.Table("bus_group")
  62. if e.DeviceId != 0 {
  63. table = table.Where("device_id = ?", e.DeviceId)
  64. }
  65. if err := table.First(&doc).Error; err != nil {
  66. return doc, err
  67. }
  68. if err := tableGroup.Where("group_id = ?", doc.GroupId).Find(&group).Error; err != nil {
  69. return doc, err
  70. } else {
  71. doc.GroupName = group.GroupName
  72. }
  73. fmt.Println(doc.ServerIp)
  74. return doc, nil
  75. }
  76. func (e *BusDevice) GetDeviceByDeviceSn() (BusDevice, error) {
  77. var doc BusDevice
  78. table := orm.Eloquent.Table(e.TableName())
  79. if e.DeviceId != 0 {
  80. table = table.Where("device_sn = ?", e.DeviceSn)
  81. }
  82. if err := table.First(&doc).Error; err != nil {
  83. return doc, err
  84. }
  85. fmt.Println(doc.ServerIp)
  86. return doc, nil
  87. }
  88. //根据群组id查询所有的设备
  89. func (e *BusDevice) GetDevices() ([]DeviceInfo, error) {
  90. var doc []DeviceInfo
  91. table := orm.Eloquent.Table(e.TableName())
  92. if e.GroupId != 0 {
  93. table = table.Where("group_id = ?", e.GroupId)
  94. }
  95. if err := table.Find(&doc).Error; err != nil {
  96. return doc, err
  97. }
  98. return doc, nil
  99. }
  100. //查询设备是否已经注册 IsRegister:1 已经注册, IsRegister:0 未注册.
  101. func (e *BusDevice) IsRegist() bool {
  102. var result bool = true
  103. var deviceInfo BusDevice
  104. table := orm.Eloquent.Table(e.TableName())
  105. if e.DeviceSn != "" {
  106. table = table.Where("device_sn = ?", e.DeviceSn)
  107. }
  108. if err := table.Find(&deviceInfo).Error; err != nil {
  109. result = false
  110. }
  111. if deviceInfo.IsRegister == 0 {
  112. result = false
  113. }
  114. return result
  115. }
  116. //查询设备是否存在, 新设备添加, 已添加才能注册.
  117. func (e *BusDevice) IsExist() bool {
  118. var result bool = true
  119. var count int64
  120. table := orm.Eloquent.Table(e.TableName())
  121. if e.DeviceSn != "" {
  122. table = table.Where("device_sn = ?", e.DeviceSn)
  123. }
  124. if err := table.Find(&BusDevice{}).Count(&count).Error; err != nil {
  125. result = false
  126. }
  127. if count <= 0 {
  128. result = false
  129. }
  130. return result
  131. }
  132. func (e *BusDevice) GetPage(pageSize int, pageIndex int, gids []int) ([]DeviceInfo, int, error) {
  133. var doc []DeviceInfo
  134. table := orm.Eloquent.Table(e.TableName())
  135. tableUser := orm.Eloquent.Table("sys_user")
  136. if e.DeviceName != "" {
  137. table = table.Where("device_name like ?", "%"+e.DeviceName+"%")
  138. }
  139. if e.DeviceSn != "" {
  140. table = table.Where("device_sn like ?", "%"+e.DeviceSn+"%")
  141. }
  142. if len(gids) > 0 {
  143. table = table.Where("group_id in (?)", gids)
  144. }
  145. var count int64
  146. if err := table.Order("device_id desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil {
  147. return nil, 0, err
  148. }
  149. for k, v := range doc {
  150. //fmt.Println(v)
  151. var group BusGroup
  152. tableGroup := orm.Eloquent.Table("bus_group")
  153. user := models.SysUser{}
  154. id, _ := strconv.Atoi(v.CreateBy)
  155. if err := tableUser.Where("user_id = ?", id).Find(&user).Error; err == nil {
  156. doc[k].CreateBy = user.Username
  157. }
  158. tableUser := orm.Eloquent.Table("sys_user")
  159. id, _ = strconv.Atoi(v.UpdateBy)
  160. if err := tableUser.Where("user_id = ?", id).Find(&user).Error; err == nil {
  161. doc[k].UpdateBy = user.Username
  162. }
  163. if err := tableGroup.Where("group_id = ?", v.GroupId).Find(&group).Error; err == nil {
  164. doc[k].GroupName = group.GroupName
  165. }
  166. }
  167. return doc, int(count), nil
  168. }
  169. func (e *BusDevice) GetDeviceStatistics(gids []int) (Statictics, error) {
  170. var statictics Statictics
  171. if len(gids) <= 0 {
  172. return statictics, errors.New("null")
  173. }
  174. var onlineCount, offlineCount int64
  175. if err := orm.Eloquent.Table(e.TableName()).Where("group_id in (?)", gids).Where("status = ?", 1).Find(&[]BusDevice{}).Count(&onlineCount).Error; err != nil {
  176. return statictics, err
  177. }
  178. statictics.OnlineCount = int(onlineCount)
  179. if err := orm.Eloquent.Table(e.TableName()).Where("group_id in (?)", gids).Where("status = ?", 0).Find(&[]BusDevice{}).Count(&offlineCount).Error; err != nil {
  180. return statictics, err
  181. }
  182. statictics.OfflineCount = int(offlineCount)
  183. return statictics, nil
  184. }
  185. func (e *BusDevice) GetMonitorPage(pageSize int, pageIndex int, gids []int) ([]DeviceInfo, int, error) {
  186. var doc []DeviceInfo
  187. table := orm.Eloquent.Table(e.TableName())
  188. tableUser := orm.Eloquent.Table("sys_user")
  189. if e.DeviceName != "" {
  190. table = table.Where("device_name like ?", "%"+e.DeviceName+"%")
  191. }
  192. if e.DeviceSn != "" {
  193. table = table.Where("device_sn like ?", "%"+e.DeviceSn+"%")
  194. }
  195. if len(gids) > 0 {
  196. table = table.Where("group_id in (?)", gids)
  197. }
  198. //status 0 离线设备, status 1 在线设备. status x 其他设备.
  199. fmt.Println("status", e.Status)
  200. if e.Status == 0 || e.Status == 1 {
  201. table = table.Where("status = ?", e.Status)
  202. }
  203. if e.IsRegister > 0 {
  204. table = table.Where("is_register = ?", e.IsRegister)
  205. }
  206. var count int64
  207. if err := table.Order("device_id desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil {
  208. return nil, 0, err
  209. }
  210. for k, v := range doc {
  211. fmt.Println(v)
  212. var group BusGroup
  213. tableGroup := orm.Eloquent.Table("bus_group")
  214. user := models.SysUser{}
  215. id, _ := strconv.Atoi(v.CreateBy)
  216. if err := tableUser.Where("user_id = ?", id).Find(&user).Error; err == nil {
  217. doc[k].CreateBy = user.Username
  218. }
  219. tableUser := orm.Eloquent.Table("sys_user")
  220. id, _ = strconv.Atoi(v.UpdateBy)
  221. if err := tableUser.Where("user_id = ?", id).Find(&user).Error; err == nil {
  222. doc[k].UpdateBy = user.Username
  223. }
  224. if err := tableGroup.Where("group_id = ?", v.GroupId).Find(&group).Error; err == nil {
  225. doc[k].GroupName = group.GroupName
  226. }
  227. }
  228. return doc, int(count), nil
  229. }
  230. func (e *BusDevice) GetOnlineDevices() (devs []BusDevice, err error) {
  231. if err = orm.Eloquent.Table(e.TableName()).Where("status = ?", 1).Find(&devs).Error; err != nil {
  232. fmt.Println(err)
  233. }
  234. return devs, err
  235. }
  236. func (e *BusDevice) Insert() (id int, err error) {
  237. // check 用户名
  238. var count int64
  239. orm.Eloquent.Table(e.TableName()).Where("device_sn = ?", e.DeviceSn).Count(&count)
  240. if count > 0 {
  241. err = errors.New("device 已存在!")
  242. return
  243. }
  244. //添加数据
  245. if err = orm.Eloquent.Table(e.TableName()).Create(&e).Error; err != nil {
  246. return
  247. }
  248. id = e.DeviceId
  249. return
  250. }
  251. func (e *BusDevice) Update(id int) (update BusDevice, err error) {
  252. if err = orm.Eloquent.Table(e.TableName()).First(&update, id).Error; err != nil {
  253. return
  254. }
  255. //参数1:是要修改的数据
  256. //参数2:是修改的数据
  257. //fmt.Println("new data:", e)
  258. //fmt.Println("old data:", update)
  259. if err = orm.Eloquent.Table(e.TableName()).Model(&update).Updates(&e).Error; err != nil {
  260. return
  261. }
  262. return
  263. }
  264. //gorm int类型字段 默认值是0,通过struct更新, 不能直接更新为0.通过map可以将int字段更新为0值
  265. func (e *BusDevice) UpdateByMap(id int) (update BusDevice, err error) {
  266. if err = orm.Eloquent.Table(e.TableName()).First(&update, id).Error; err != nil {
  267. return
  268. }
  269. //参数1:是要修改的数据
  270. //参数2:是修改的数据
  271. fmt.Println("new data:", e)
  272. fmt.Println("old data:", update)
  273. 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 {
  274. return
  275. }
  276. return
  277. }
  278. //delelte log
  279. func (e *BusDevice) Delete(id int) (success bool, err error) {
  280. if err = orm.Eloquent.Table(e.TableName()).Where("device_id = ?", id).Delete(&BusDevice{}).Error; err != nil {
  281. success = false
  282. return
  283. }
  284. success = true
  285. return
  286. }
  287. func (e *BusDevice) BatchDelete(id []int) (Result bool, err error) {
  288. if err = orm.Eloquent.Table(e.TableName()).Where("device_id in (?)", id).Delete(&BusDevice{}).Error; err != nil {
  289. return
  290. }
  291. Result = true
  292. return
  293. }