deviceservice.go 6.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  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) GetDeviceList(pageNum int, pageSize int, deviceType string) (devices []*models.Device, total int, err error) {
  18. offset := (pageNum - 1) * pageSize
  19. db := s.rdb.Model(&models.Device{}).Where("1=1")
  20. if deviceType != "" {
  21. db = db.Where("device_type = ?", deviceType)
  22. }
  23. err = db.Count(&total).Offset(offset).Limit(pageSize).Find(&devices).Error
  24. return
  25. }
  26. func (s *DeviceService) GetDeviceList1(pageNum int, pageSize int, deviceType string) (devices []*models.DeviceVO, total int, err error) {
  27. offset := (pageNum - 1) * pageSize
  28. sql := "select a.*,b.batch_num ,b.production_date ,b.expire_date ,b.register_num ,v.name as vendor_name,v.address ,v.contact ,v.production_license ,v.production_corporate ,v.production_address from device as a inner join device_batch as b on a.batch_number =b.id inner join vendor v on b.vendor_id =v.id where 1=1"
  29. dbc := s.rdb.Model(&models.Device{})
  30. if deviceType != "" {
  31. dbc = dbc.Where("device_type = ?", deviceType)
  32. sql = sql + " and a.device_type = ?"
  33. }
  34. err = dbc.Count(&total).Error
  35. if err != nil {
  36. return
  37. }
  38. db := s.rdb.Raw(sql)
  39. if deviceType != "" {
  40. db = s.rdb.Raw(sql, deviceType)
  41. }
  42. err = db.Offset(offset).Limit(pageSize).Find(&devices).Error
  43. return
  44. }
  45. func (s *DeviceService) GetDeviceInfo1(id int) (models.DeviceVO, error) {
  46. var device models.DeviceVO
  47. sql := "select a.*,b.batch_num ,b.production_date ,b.expire_date ,b.register_num ,v.name as vendor_name,v.address ,v.contact ,v.production_license ,v.production_corporate ,v.production_address from device as a inner join device_batch as b on a.batch_number =b.id inner join vendor v on b.vendor_id =v.id where a.id=? "
  48. err := s.rdb.Raw(sql, id).First(&device).Error
  49. if err == gorm.ErrRecordNotFound {
  50. err = nil
  51. }
  52. return device, err
  53. }
  54. func (s *DeviceService) GetDeviceInfo(id int) (models.Device, error) {
  55. var device models.Device
  56. err := s.rdb.Model(&device).First(&device, id).Error
  57. if err == gorm.ErrRecordNotFound {
  58. err = nil
  59. }
  60. return device, err
  61. }
  62. // func (s *DeviceService) GetDeviceBind(deviceId uint64, userId uint64) (models.DeviceRelate, error) {
  63. // var device_relate models.DeviceRelate
  64. // db := s.rdb.Model(&device_relate)
  65. // if deviceId > 0 {
  66. // db = db.Where("device_id = ?", deviceId)
  67. // }
  68. // if userId > 0 {
  69. // db = db.Where("user_id = ?", userId)
  70. // }
  71. // err := db.First(&device_relate).Error
  72. // if err == gorm.ErrRecordNotFound {
  73. // err = nil
  74. // }
  75. // return device_relate, err
  76. // }
  77. func (s *DeviceService) GetDeviceByNo(serialno string) (models.Device, error) {
  78. var device models.Device
  79. err := s.rdb.Model(&device).Where("serialno = ?", serialno).First(&device).Error
  80. if err == gorm.ErrRecordNotFound {
  81. err = nil
  82. }
  83. return device, err
  84. }
  85. func (s *DeviceService) GetMyDevices(userId uint64) ([]*models.Device, error) {
  86. var devices []*models.Device
  87. 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"
  88. err := s.rdb.Raw(sql, userId).Scan(&devices).Error
  89. if err != nil {
  90. return nil, err
  91. }
  92. return devices, nil
  93. }
  94. func (s *DeviceService) BindDevice(userId uint64, qrcode string) error {
  95. var device models.Device
  96. err := s.rdb.Model(&device).Where("qr_code = ? and delete_flag =0", qrcode).First(&device).Error
  97. if err != nil {
  98. if err == gorm.ErrRecordNotFound {
  99. return errors.New("设备不存在")
  100. }
  101. return err
  102. }
  103. dr := &models.DeviceRelate{}
  104. err = s.rdb.Model(dr).Where("device_id = ?", device.Id).First(dr).Error
  105. if err != nil {
  106. if err == gorm.ErrRecordNotFound {
  107. dr = &models.DeviceRelate{
  108. UserId: userId,
  109. DeviceId: device.Id,
  110. Name: device.DeviceName,
  111. }
  112. return s.wdb.Model(dr).Create(dr).Error
  113. }
  114. return err
  115. }
  116. if dr.UserId != userId {
  117. if dr.DeleteFlag == 0 {
  118. return errors.New("该设备已绑定其他用户")
  119. } else { //其他用户解绑了设备
  120. return s.wdb.Model(dr).Updates(map[string]interface{}{"delete_flag": 0, "user_id": userId}).Error
  121. }
  122. } else if dr.DeleteFlag == 1 { //直接解绑了该设备 重新绑定
  123. return s.wdb.Model(dr).Update("delete_flag", 0).Error
  124. } else {
  125. return errors.New("设备已绑定")
  126. }
  127. }
  128. func (s *DeviceService) BindDeviceById(userId, deviceId uint64) error {
  129. var device models.Device
  130. err := s.rdb.Model(&device).Where("id= ? and delete_flag =0", deviceId).First(&device).Error
  131. if err != nil {
  132. if err == gorm.ErrRecordNotFound {
  133. return errors.New("设备不存在")
  134. }
  135. return err
  136. }
  137. dr := &models.DeviceRelate{}
  138. err = s.rdb.Model(dr).Where("device_id = ?", device.Id).First(dr).Error
  139. if err != nil {
  140. if err == gorm.ErrRecordNotFound {
  141. dr = &models.DeviceRelate{
  142. UserId: userId,
  143. DeviceId: device.Id,
  144. Name: device.DeviceName,
  145. }
  146. return s.wdb.Model(dr).Create(dr).Error
  147. }
  148. return err
  149. }
  150. if dr.UserId != userId {
  151. if dr.DeleteFlag == 0 {
  152. return errors.New("该设备已绑定其他用户")
  153. } else { //其他用户解绑了设备
  154. return s.wdb.Model(dr).Updates(map[string]interface{}{"delete_flag": 0, "user_id": userId}).Error
  155. }
  156. } else if dr.DeleteFlag == 1 { //直接解绑了该设备 重新绑定
  157. return s.wdb.Model(dr).Update("delete_flag", 0).Error
  158. } else {
  159. return errors.New("设备已绑定")
  160. }
  161. }
  162. func (s *DeviceService) UnbindDevice(userId uint64, deviceId uint64) error {
  163. var device models.Device
  164. err := s.rdb.Model(&device).Where("id = ? and delete_flag =0", deviceId).First(&device).Error
  165. if err != nil {
  166. if err == gorm.ErrRecordNotFound {
  167. return errors.New("设备不存在")
  168. }
  169. return err
  170. }
  171. dr := &models.DeviceRelate{}
  172. err = s.rdb.Model(dr).Where("device_id = ? and user_id = ?", deviceId, userId).First(dr).Error
  173. if err != nil {
  174. return err
  175. }
  176. return s.wdb.Model(dr).Where("id=?", dr.Id).Update("delete_flag", 1).Error
  177. }
  178. func (s *DeviceService) CreateDeviceMessageLog(log models.DeviceMessageLog) error {
  179. return s.wdb.Model(&log).Create(&log).Error
  180. }
  181. func (s *DeviceService) GetDeviceRelateByDeviceId(deviceId uint64) (*models.DeviceRelate, error) {
  182. dr := &models.DeviceRelate{}
  183. err := s.rdb.Model(dr).Where("device_id = ?", deviceId).First(dr).Error
  184. if err != nil && err != gorm.ErrRecordNotFound {
  185. return nil, err
  186. }
  187. return dr, nil
  188. }