uhf_service.go 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. package uhf
  2. import (
  3. "fmt"
  4. "server/dao"
  5. "server/global"
  6. "server/model/uhf/request"
  7. "server/model/uhf/response"
  8. )
  9. type uhfService struct{}
  10. var UHFService = new(uhfService)
  11. // CreateReader 创建UHF读写器
  12. func (s *uhfService) CreateReader(req request.UHFReaderCreate) error {
  13. var reader dao.UHFReader
  14. result := global.GVA_DB.Where("device_code = ?", req.DeviceCode).First(&reader)
  15. if result.RowsAffected > 0 {
  16. return fmt.Errorf("设备编码已存在")
  17. }
  18. reader = dao.UHFReader{
  19. DeviceCode: req.DeviceCode,
  20. DeviceName: req.DeviceName,
  21. ConnectType: req.ConnectType,
  22. IPAddress: req.IPAddress,
  23. Port: req.Port,
  24. COMPort: req.COMPort,
  25. BaudRate: req.BaudRate,
  26. IsActive: req.IsActive,
  27. Description: req.Description,
  28. ParkingLotID: req.ParkingLotID,
  29. }
  30. return global.GVA_DB.Create(&reader).Error
  31. }
  32. // UpdateReader 更新UHF读写器
  33. func (s *uhfService) UpdateReader(req request.UHFReaderUpdate) error {
  34. var reader dao.UHFReader
  35. result := global.GVA_DB.Where("id = ?", req.ID).First(&reader)
  36. if result.RowsAffected == 0 {
  37. return fmt.Errorf("设备不存在")
  38. }
  39. updateData := map[string]interface{}{
  40. "device_name": req.DeviceName,
  41. "connect_type": req.ConnectType,
  42. "ip_address": req.IPAddress,
  43. "port": req.Port,
  44. "com_port": req.COMPort,
  45. "baud_rate": req.BaudRate,
  46. "is_active": req.IsActive,
  47. "description": req.Description,
  48. "parking_lot_id": req.ParkingLotID,
  49. }
  50. return global.GVA_DB.Model(&reader).Updates(updateData).Error
  51. }
  52. // GetReaderByID 根据ID获取设备
  53. func (s *uhfService) GetReaderByID(id uint) (response.UHFReaderResponse, error) {
  54. var reader dao.UHFReader
  55. result := global.GVA_DB.Where("id = ?", id).First(&reader)
  56. if result.RowsAffected == 0 {
  57. return response.UHFReaderResponse{}, fmt.Errorf("设备不存在")
  58. }
  59. return response.UHFReaderResponse{
  60. ID: reader.ID,
  61. DeviceCode: reader.DeviceCode,
  62. DeviceName: reader.DeviceName,
  63. ConnectType: reader.ConnectType,
  64. IPAddress: reader.IPAddress,
  65. Port: reader.Port,
  66. COMPort: reader.COMPort,
  67. BaudRate: reader.BaudRate,
  68. Status: reader.Status,
  69. IsActive: reader.IsActive,
  70. Description: reader.Description,
  71. ParkingLotID: reader.ParkingLotID,
  72. CreatedAt: reader.CreatedAt,
  73. UpdatedAt: reader.UpdatedAt,
  74. }, nil
  75. }
  76. // GetReaderByCode 根据设备编码获取设备
  77. func (s *uhfService) GetReaderByCode(code string) (response.UHFReaderResponse, error) {
  78. var reader dao.UHFReader
  79. result := global.GVA_DB.Where("device_code = ?", code).First(&reader)
  80. if result.RowsAffected == 0 {
  81. return response.UHFReaderResponse{}, fmt.Errorf("设备不存在")
  82. }
  83. return response.UHFReaderResponse{
  84. ID: reader.ID,
  85. DeviceCode: reader.DeviceCode,
  86. DeviceName: reader.DeviceName,
  87. ConnectType: reader.ConnectType,
  88. IPAddress: reader.IPAddress,
  89. Port: reader.Port,
  90. COMPort: reader.COMPort,
  91. BaudRate: reader.BaudRate,
  92. Status: reader.Status,
  93. IsActive: reader.IsActive,
  94. Description: reader.Description,
  95. ParkingLotID: reader.ParkingLotID,
  96. CreatedAt: reader.CreatedAt,
  97. UpdatedAt: reader.UpdatedAt,
  98. }, nil
  99. }
  100. // ListReaders 分页查询设备列表
  101. func (s *uhfService) ListReaders(req request.UHFReaderQuery) ([]response.UHFReaderResponse, int64, error) {
  102. var readers []dao.UHFReader
  103. var total int64
  104. query := global.GVA_DB.Model(&dao.UHFReader{})
  105. if req.DeviceCode != "" {
  106. query = query.Where("device_code LIKE ?", "%"+req.DeviceCode+"%")
  107. }
  108. if req.DeviceName != "" {
  109. query = query.Where("device_name LIKE ?", "%"+req.DeviceName+"%")
  110. }
  111. if req.Status != "" {
  112. query = query.Where("status = ?", req.Status)
  113. }
  114. if req.ConnectType != "" {
  115. query = query.Where("connect_type = ?", req.ConnectType)
  116. }
  117. err := query.Count(&total).Error
  118. if err != nil {
  119. return nil, 0, err
  120. }
  121. limit := req.PageSize
  122. offset := (req.Page - 1) * req.PageSize
  123. err = query.Limit(limit).Offset(offset).Order("created_at DESC").Find(&readers).Error
  124. if err != nil {
  125. return nil, 0, err
  126. }
  127. var list []response.UHFReaderResponse
  128. for _, reader := range readers {
  129. list = append(list, response.UHFReaderResponse{
  130. ID: reader.ID,
  131. DeviceCode: reader.DeviceCode,
  132. DeviceName: reader.DeviceName,
  133. ConnectType: reader.ConnectType,
  134. IPAddress: reader.IPAddress,
  135. Port: reader.Port,
  136. COMPort: reader.COMPort,
  137. BaudRate: reader.BaudRate,
  138. Status: reader.Status,
  139. IsActive: reader.IsActive,
  140. Description: reader.Description,
  141. ParkingLotID: reader.ParkingLotID,
  142. CreatedAt: reader.CreatedAt,
  143. UpdatedAt: reader.UpdatedAt,
  144. })
  145. }
  146. return list, total, nil
  147. }
  148. // DeleteReader 删除设备
  149. func (s *uhfService) DeleteReader(id uint) error {
  150. var reader dao.UHFReader
  151. result := global.GVA_DB.Where("id = ?", id).First(&reader)
  152. if result.RowsAffected == 0 {
  153. return fmt.Errorf("设备不存在")
  154. }
  155. return global.GVA_DB.Delete(&reader).Error
  156. }
  157. // ConnectReader 连接设备
  158. func (s *uhfService) ConnectReader(id uint) error {
  159. var reader dao.UHFReader
  160. result := global.GVA_DB.Where("id = ?", id).First(&reader)
  161. if result.RowsAffected == 0 {
  162. return fmt.Errorf("设备不存在")
  163. }
  164. if !reader.IsActive {
  165. return fmt.Errorf("设备未启用")
  166. }
  167. err := global.GVA_DB.Model(&reader).Update("status", "online").Error
  168. if err != nil {
  169. return err
  170. }
  171. fmt.Printf("设备[%s]连接成功\n", reader.DeviceCode)
  172. return nil
  173. }
  174. // DisconnectReader 断开设备连接
  175. func (s *uhfService) DisconnectReader(id uint) error {
  176. var reader dao.UHFReader
  177. result := global.GVA_DB.Where("id = ?", id).First(&reader)
  178. if result.RowsAffected == 0 {
  179. return fmt.Errorf("设备不存在")
  180. }
  181. err := global.GVA_DB.Model(&reader).Update("status", "offline").Error
  182. if err != nil {
  183. return err
  184. }
  185. fmt.Printf("设备[%s]断开连接\n", reader.DeviceCode)
  186. return nil
  187. }
  188. // ReportTag 客户端上报标签数据
  189. func (s *uhfService) ReportTag(deviceCode string, tag string) error {
  190. var reader dao.UHFReader
  191. result := global.GVA_DB.Where("device_code = ?", deviceCode).First(&reader)
  192. if result.RowsAffected == 0 {
  193. return fmt.Errorf("设备不存在")
  194. }
  195. fmt.Printf("📶 收到设备 %s 上报的标签: %s\n", deviceCode, tag)
  196. return nil
  197. }
  198. // SetReaderPower 设置功率(模拟实现)
  199. func (s *uhfService) SetReaderPower(id uint, power int) error {
  200. var reader dao.UHFReader
  201. result := global.GVA_DB.Where("id = ?", id).First(&reader)
  202. if result.RowsAffected == 0 {
  203. return fmt.Errorf("设备不存在")
  204. }
  205. if reader.Status != "online" {
  206. return fmt.Errorf("设备未连接")
  207. }
  208. fmt.Printf("设备[%s]功率设置为: %ddBm\n", reader.DeviceCode, power)
  209. return nil
  210. }
  211. // StartInventory 启动读卡(模拟实现)
  212. func (s *uhfService) StartInventory(id uint) error {
  213. var reader dao.UHFReader
  214. result := global.GVA_DB.Where("id = ?", id).First(&reader)
  215. if result.RowsAffected == 0 {
  216. return fmt.Errorf("设备不存在")
  217. }
  218. if reader.Status != "online" {
  219. return fmt.Errorf("设备未连接")
  220. }
  221. fmt.Printf("设备[%s]已启动读卡模式\n", reader.DeviceCode)
  222. return nil
  223. }
  224. // StopInventory 停止读卡(模拟实现)
  225. func (s *uhfService) StopInventory(id uint) error {
  226. var reader dao.UHFReader
  227. result := global.GVA_DB.Where("id = ?", id).First(&reader)
  228. if result.RowsAffected == 0 {
  229. return fmt.Errorf("设备不存在")
  230. }
  231. fmt.Printf("设备[%s]已停止读卡\n", reader.DeviceCode)
  232. return nil
  233. }
  234. // ReadTag 读取标签(模拟实现)
  235. func (s *uhfService) ReadTag(id uint) (string, error) {
  236. var reader dao.UHFReader
  237. result := global.GVA_DB.Where("id = ?", id).First(&reader)
  238. if result.RowsAffected == 0 {
  239. return "", fmt.Errorf("设备不存在")
  240. }
  241. if reader.Status != "online" {
  242. return "", fmt.Errorf("设备未连接")
  243. }
  244. return "", nil
  245. }