deviceservice.go 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package service
  2. import (
  3. "errors"
  4. "sws_xcx/models"
  5. "github.com/jinzhu/gorm"
  6. )
  7. type DeviceService struct {
  8. rdb *gorm.DB
  9. wdb *gorm.DB
  10. }
  11. func NewDeviceService() *DeviceService {
  12. return &DeviceService{
  13. rdb: ReadDB(),
  14. wdb: WriteDB(),
  15. }
  16. }
  17. func (s *DeviceService) GetDeviceInfo(id int) (models.Device, error) {
  18. var device models.Device
  19. err := s.rdb.Model(&device).First(&device, id).Error
  20. if err == nil || err == gorm.ErrRecordNotFound {
  21. err = nil
  22. }
  23. return device, err
  24. }
  25. func (s *DeviceService) GetDeviceByNo(serialno string) (models.Device, error) {
  26. var device models.Device
  27. err := s.rdb.Model(&device).Where("serialno = ?", serialno).First(&device).Error
  28. if err == nil || err == gorm.ErrRecordNotFound {
  29. err = nil
  30. }
  31. return device, err
  32. }
  33. func (s *DeviceService) GetMyDevices(userId uint64) ([]*models.Device, error) {
  34. var devices []*models.Device
  35. sql := "select d.* from device as d inner join device_relate as dr on d.id = dr.device_id where dr.user_id = ? and dr.delete_flag = 0"
  36. err := s.rdb.Raw(sql, userId).Scan(&devices).Error
  37. if err != nil {
  38. return nil, err
  39. }
  40. return devices, nil
  41. }
  42. func (s *DeviceService) BindDevice(userId uint64, qrcode string) error {
  43. var device models.Device
  44. err := s.rdb.Model(&device).Where("qr_code = ? and delete_flag =0", qrcode).First(&device).Error
  45. if err != nil {
  46. if err == gorm.ErrRecordNotFound {
  47. return errors.New("设备不存在")
  48. }
  49. return err
  50. }
  51. dr := &models.DeviceRelate{}
  52. err = s.rdb.Model(dr).Where("device_id = ?", device.Id).First(dr).Error
  53. if err != nil {
  54. if err == gorm.ErrRecordNotFound {
  55. dr = &models.DeviceRelate{
  56. UserId: userId,
  57. DeviceId: device.Id,
  58. Name: device.DeviceName,
  59. }
  60. return s.wdb.Model(dr).Create(dr).Error
  61. }
  62. return err
  63. }
  64. if dr.UserId != userId {
  65. if dr.DeleteFlag == 0 {
  66. return errors.New("该设备已绑定其他用户")
  67. } else { //其他用户解绑了设备
  68. return s.wdb.Model(dr).Update("delete_flag", 0, "user_id", userId).Error
  69. }
  70. } else if dr.DeleteFlag == 1 { //直接解绑了该设备 重新绑定
  71. return s.wdb.Model(dr).Update("delete_flag", 0).Error
  72. } else {
  73. return errors.New("设备已绑定")
  74. }
  75. }
  76. func (s *DeviceService) UnbindDevice(userId uint64, deviceId uint64) error {
  77. var device models.Device
  78. err := s.rdb.Model(&device).Where("id = ? and delete_flag =0", deviceId).First(&device).Error
  79. if err != nil {
  80. if err == gorm.ErrRecordNotFound {
  81. return errors.New("设备不存在")
  82. }
  83. return err
  84. }
  85. dr := &models.DeviceRelate{}
  86. err = s.rdb.Model(dr).Where("device_id = ? and user_id = ?", deviceId, userId).First(dr).Error
  87. if err != nil {
  88. return err
  89. }
  90. return s.wdb.Model(dr).Where("id=?", dr.Id).Update("delete_flag", 1).Error
  91. }
  92. func (s *DeviceService) CreateDeviceMessageLog(log models.DeviceMessageLog) error {
  93. return s.wdb.Model(&log).Create(&log).Error
  94. }
  95. func (s *DeviceService) GetDeviceRelateByDeviceId(deviceId uint64) (*models.DeviceRelate, error) {
  96. dr := &models.DeviceRelate{}
  97. err := s.rdb.Model(dr).Where("device_id = ?", deviceId).First(dr).Error
  98. if err != nil && err != gorm.ErrRecordNotFound {
  99. return nil, err
  100. }
  101. return dr, nil
  102. }