deviceservice.go 2.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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 {
  21. return nil, err
  22. }
  23. return &device, nil
  24. }
  25. func (s *DeviceService) GetMyDevices(userId uint64) ([]*models.Device, error) {
  26. var devices []*models.Device
  27. 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"
  28. err := s.rdb.Raw(sql).Scan(&devices).Error
  29. if err != nil {
  30. return nil, err
  31. }
  32. return devices, nil
  33. }
  34. func (s *DeviceService) BindDevice(userId uint64, deviceId uint64) error {
  35. var device models.Device
  36. err := s.rdb.Model(&device).Where("id = ? and delete_flag =0", deviceId).First(&device).Error
  37. if err != nil {
  38. if err == gorm.ErrRecordNotFound {
  39. return errors.New("设备不存在")
  40. }
  41. return err
  42. }
  43. dr := &models.DeviceRelate{}
  44. err = s.rdb.Model(dr).Where("device_id = ?", deviceId).First(dr).Error
  45. if err != nil {
  46. if err == gorm.ErrRecordNotFound {
  47. dr = &models.DeviceRelate{
  48. UserId: userId,
  49. DeviceId: deviceId,
  50. Name: device.DeviceName,
  51. }
  52. return s.wdb.Model(dr).Create(dr).Error
  53. }
  54. return err
  55. }
  56. if dr.UserId != userId {
  57. if dr.DeleteFlag == 0 {
  58. return errors.New("该设备已绑定其他用户")
  59. } else { //其他用户解绑了设备
  60. return s.wdb.Model(dr).Update("delete_flag", 0, "user_id", userId).Error
  61. }
  62. } else if dr.DeleteFlag == 1 { //直接解绑了该设备 重新绑定
  63. return s.wdb.Model(dr).Update("delete_flag", 0).Error
  64. } else {
  65. return errors.New("设备已绑定")
  66. }
  67. }
  68. func (s *DeviceService) UnbindDevice(userId uint64, deviceId uint64) error {
  69. var device models.Device
  70. err := s.rdb.Model(&device).Where("id = ? and delete_flag =0", deviceId).First(&device).Error
  71. if err != nil {
  72. if err == gorm.ErrRecordNotFound {
  73. return errors.New("设备不存在")
  74. }
  75. return err
  76. }
  77. dr := &models.DeviceRelate{}
  78. err = s.rdb.Model(dr).Where("device_id = ? and user_id = ?", deviceId, userId).First(dr).Error
  79. if err != nil {
  80. return err
  81. }
  82. return s.wdb.Model(dr).Update("delete_flag", 1).Error
  83. }