device.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. package parking
  2. import (
  3. "errors"
  4. "server/dao"
  5. "server/global"
  6. "server/model/parking/request"
  7. )
  8. type deviceService struct{}
  9. func NewDeviceService() *deviceService {
  10. return &deviceService{}
  11. }
  12. // CreateDevice 创建设备
  13. func (s *deviceService) CreateDevice(req request.DeviceCreate) error {
  14. // 检查设备编码是否已存在
  15. var existingDevice dao.Device
  16. result := global.GVA_DB.Where("device_code = ?", req.DeviceCode).First(&existingDevice)
  17. if result.RowsAffected > 0 {
  18. return errors.New("设备编码已存在")
  19. }
  20. device := dao.Device{
  21. DeviceCode: req.DeviceCode,
  22. DeviceName: req.DeviceName,
  23. DeviceType: req.DeviceType,
  24. IPAddress: req.IPAddress,
  25. Port: req.Port,
  26. Status: "offline", // 初始状态为离线
  27. Description: req.Description,
  28. }
  29. return global.GVA_DB.Create(&device).Error
  30. }
  31. // UpdateDevice 更新设备
  32. func (s *deviceService) UpdateDevice(req request.DeviceUpdate) error {
  33. var device dao.Device
  34. result := global.GVA_DB.First(&device, req.ID)
  35. if result.RowsAffected == 0 {
  36. return errors.New("设备不存在")
  37. }
  38. // 检查设备编码是否被其他设备使用
  39. var existingDevice dao.Device
  40. result = global.GVA_DB.Where("device_code = ? AND id != ?", req.DeviceCode, req.ID).First(&existingDevice)
  41. if result.RowsAffected > 0 {
  42. return errors.New("设备编码已被其他设备使用")
  43. }
  44. device.DeviceCode = req.DeviceCode
  45. device.DeviceName = req.DeviceName
  46. device.DeviceType = req.DeviceType
  47. device.IPAddress = req.IPAddress
  48. device.Port = req.Port
  49. device.Description = req.Description
  50. return global.GVA_DB.Save(&device).Error
  51. }
  52. // GetDeviceByID 根据ID获取设备
  53. func (s *deviceService) GetDeviceByID(id uint) (dao.Device, error) {
  54. var device dao.Device
  55. result := global.GVA_DB.First(&device, id)
  56. if result.RowsAffected == 0 {
  57. return dao.Device{}, errors.New("设备不存在")
  58. }
  59. return device, nil
  60. }
  61. // GetDeviceByCode 根据编码获取设备
  62. func (s *deviceService) GetDeviceByCode(code string) (dao.Device, error) {
  63. var device dao.Device
  64. result := global.GVA_DB.Where("device_code = ?", code).First(&device)
  65. if result.RowsAffected == 0 {
  66. return dao.Device{}, errors.New("设备不存在")
  67. }
  68. return device, nil
  69. }
  70. // ListDevices 获取设备列表
  71. func (s *deviceService) ListDevices(req request.DeviceQuery) (int64, []dao.Device, error) {
  72. var devices []dao.Device
  73. var total int64
  74. query := global.GVA_DB.Model(&dao.Device{})
  75. if req.DeviceCode != "" {
  76. query = query.Where("device_code LIKE ?", "%"+req.DeviceCode+"%")
  77. }
  78. if req.DeviceName != "" {
  79. query = query.Where("device_name LIKE ?", "%"+req.DeviceName+"%")
  80. }
  81. if req.DeviceType != "" {
  82. query = query.Where("device_type = ?", req.DeviceType)
  83. }
  84. if req.Status != "" {
  85. query = query.Where("status = ?", req.Status)
  86. }
  87. // 计算总数
  88. query.Count(&total)
  89. // 分页查询
  90. offset := (req.Page - 1) * req.PageSize
  91. result := query.Offset(offset).Limit(req.PageSize).Find(&devices)
  92. if result.Error != nil {
  93. return 0, nil, result.Error
  94. }
  95. return total, devices, nil
  96. }
  97. // DeleteDevice 删除设备
  98. func (s *deviceService) DeleteDevice(id uint) error {
  99. result := global.GVA_DB.Delete(&dao.Device{}, id)
  100. if result.RowsAffected == 0 {
  101. return errors.New("设备不存在")
  102. }
  103. return result.Error
  104. }
  105. // UpdateDeviceStatus 更新设备状态
  106. func (s *deviceService) UpdateDeviceStatus(id uint, status string) error {
  107. var device dao.Device
  108. result := global.GVA_DB.First(&device, id)
  109. if result.RowsAffected == 0 {
  110. return errors.New("设备不存在")
  111. }
  112. device.Status = status
  113. return global.GVA_DB.Save(&device).Error
  114. }