sensor.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package model
  2. import (
  3. "fmt"
  4. "sparrow/pkg/models"
  5. "github.com/jinzhu/gorm"
  6. )
  7. // Sensor ``
  8. type Sensor struct {
  9. db *gorm.DB
  10. }
  11. // Init 初始化
  12. func (a *Sensor) Init(db *gorm.DB) *Sensor {
  13. a.db = db
  14. return a
  15. }
  16. // Create 创建
  17. func (a *Sensor) Create(ptl *models.Sensor) error {
  18. cache := getCache()
  19. key := fmt.Sprintf("Sensor:%d", ptl.ID)
  20. err := a.db.Save(ptl).Error
  21. if err != nil {
  22. return err
  23. }
  24. cache.Set(key, ptl)
  25. return nil
  26. }
  27. // Delete 删除
  28. func (a *Sensor) Delete(ptl *models.Sensor) error {
  29. cache := getCache()
  30. key := fmt.Sprintf("Sensor:%d", ptl.ID)
  31. if _, ok := cache.Get(key); ok {
  32. cache.Delete(key)
  33. }
  34. return a.db.Delete(ptl).Error
  35. }
  36. // Update 更新
  37. func (a *Sensor) Update(ptl *models.Sensor) (data models.Sensor, err error) {
  38. cache := getCache()
  39. key := fmt.Sprintf("Sensor:%d", ptl.ID)
  40. if _, ok := cache.Get(key); ok {
  41. cache.Delete(key)
  42. }
  43. err = a.db.Model(&data).Update(ptl).Error
  44. return
  45. }
  46. // GetProductSensors 获取产品的传感器列表
  47. func (a *Sensor) GetProductSensors(productid uint, pi, ps int, name, label string) (datas []models.Sensor, total int, err error) {
  48. tx := a.db.Where("product_id = ? and 1 = 1", productid)
  49. if name != "" {
  50. tx = tx.Where("name like ? ", "%"+name+"%")
  51. }
  52. if label != "" {
  53. tx = tx.Where("label = ?", label)
  54. }
  55. err = tx.Limit(ps).Offset((pi - 1) * ps).Find(&datas).Error
  56. tx.Model(&models.Sensor{}).Count(&total)
  57. return
  58. }
  59. // GetSensorInfo 获取数据点内容
  60. func (a *Sensor) GetSensorInfo(sid uint) (data models.Sensor, err error) {
  61. cache := getCache()
  62. key := fmt.Sprintf("Sensor:%d", sid)
  63. if v, ok := cache.Get(key); ok {
  64. data = *(v.(*models.Sensor))
  65. } else {
  66. err = a.db.Where("id = ?", sid).First(&data).Error
  67. if err == nil {
  68. cache.Set(key, &data)
  69. }
  70. }
  71. return
  72. }