device.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package dao
  2. import (
  3. "gorm.io/gorm"
  4. "server/global"
  5. )
  6. type Device struct {
  7. global.GVA_MODEL
  8. Sn string `json:"sn" gorm:"comment:设备sn"`
  9. Name string `json:"name" gorm:"comment:名称"`
  10. State bool `json:"state" gorm:"comment:设备状态"`
  11. Address string `json:"address" gorm:"comment:设备地址"`
  12. TaskTime uint `json:"taskTime" gorm:"comment:采集时间"`
  13. WaitTime uint `json:"waitTime" gorm:"comment:延迟时间"`
  14. RadarId int8 `json:"radarId" gorm:"comment:雷达id"`
  15. SerialId int8 `json:"serialId" gorm:"comment:串口id"`
  16. Genre int `json:"genre" gorm:"index;comment:类型id"`
  17. DeviceGenre DeviceGenre `json:"deviceGenre" gorm:"foreignKey:Genre;"`
  18. TunnelId int `json:"tunnelId" gorm:"column:tunnel_id"`
  19. Tunnel Tunnel `json:"tunnel" gorm:"foreignKey:TunnelId"`
  20. DeviceRelays []DeviceRelay `json:"deviceRelays" gorm:"foreignKey:DeviceSn;references:Sn"`
  21. InductanceDetails []InductanceDetails `json:"inductanceDetails" gorm:"foreignKey:DeviceSn;references:Sn"`
  22. }
  23. func (Device) TableName() string {
  24. return "device"
  25. }
  26. func QueryAllDevices() (devices []Device, err error) {
  27. err = global.GVA_DB.Model(Device{}).Preload("DeviceGenre").Preload("DeviceRelays").Preload("Tunnel").Find(&devices).Error
  28. return
  29. }
  30. func QueryDeviceList(sn, name string, genre, limit, offset int) (devices []Device, total int64, err error) {
  31. db := global.GVA_DB.Model(Device{})
  32. if sn != "" {
  33. db = db.Where("sn LIKE ?", "%"+sn+"%")
  34. }
  35. if name != "" {
  36. db = db.Where("name LIKE ?", "%"+name+"%")
  37. }
  38. if genre != 0 {
  39. db = db.Where("genre = ?", genre)
  40. }
  41. err = db.Count(&total).Error
  42. if err != nil {
  43. return
  44. }
  45. err = db.Limit(limit).Offset(offset).Preload("DeviceGenre").Preload("DeviceRelays").Preload("Tunnel").Find(&devices).Error
  46. return
  47. }
  48. func QueryDeviceByTunnelId(id int) (devices []Device, err error) {
  49. err = global.GVA_DB.Where("tunnel_id =?", id).Preload("DeviceGenre").Preload("DeviceRelays").Preload("Tunnel").Find(&devices).Error
  50. return
  51. }
  52. func QueryGenreByTunnel(id int) (devices []Device, err error) {
  53. err = global.GVA_DB.Model(&Device{}).
  54. Select("device.*").
  55. Joins("JOIN device_genre ON device.genre = device_genre.id").
  56. Where("device.tunnel_id = ? AND device_genre.type = ?", id, "开关设备").
  57. Find(&devices).Error
  58. return
  59. }
  60. func QueryDeviceByTunnelSnAndRadarId(sn string, id int) (device Device, err error) {
  61. err = global.GVA_DB.Model(&Device{}).
  62. Select("device.*").
  63. Joins("JOIN tunnel ON device.tunnel_id = tunnel.id").
  64. Where("device.radar_id = ? AND tunnel.tunnel_sn = ?", id, sn).
  65. First(&device).Error
  66. return
  67. }
  68. func (d Device) CreateDevice() error {
  69. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  70. err := tx.Create(&d).Error
  71. if err != nil {
  72. return err
  73. }
  74. if d.Genre == 6 {
  75. var deviceRelays []DeviceRelay
  76. for i := 1; i <= 4; i++ {
  77. relay := DeviceRelay{
  78. RelayID: i,
  79. DeviceSn: d.Sn,
  80. State: false,
  81. }
  82. deviceRelays = append(deviceRelays, relay)
  83. }
  84. return tx.Create(&deviceRelays).Error
  85. }
  86. return nil
  87. })
  88. }
  89. func (d Device) UpdateDevice() error {
  90. return global.GVA_DB.Where("id = ?", d.ID).Updates(&d).Error
  91. }
  92. func DeleteDevice(id int) error {
  93. return global.GVA_DB.Unscoped().Where("id = ?", id).Delete(&Device{}).Error
  94. }