reader_init.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package initialize
  2. import (
  3. "log"
  4. "server/dao"
  5. "server/global"
  6. "server/service/uhf"
  7. )
  8. // InitUHFReaders 批量初始化所有UHF设备(多设备)
  9. func InitUHFReaders() {
  10. log.Println("开始批量初始化UHF设备连接...")
  11. // 1. 查询所有启用的设备
  12. var devices []dao.UHFReader
  13. if err := global.GVA_DB.Where("is_active = ?", true).Find(&devices).Error; err != nil {
  14. log.Printf("查询UHF设备失败:%v", err)
  15. return
  16. }
  17. if len(devices) == 0 {
  18. log.Println("无启用的UHF设备,跳过初始化")
  19. return
  20. }
  21. // 2. 转换为指针切片(适配批量连接)
  22. devicePtrs := make([]*dao.UHFReader, 0, len(devices))
  23. for i := range devices {
  24. devicePtrs = append(devicePtrs, &devices[i])
  25. }
  26. // 3. 批量连接
  27. errMap := uhf.BatchConnect(devicePtrs)
  28. // 4. 处理连接结果
  29. successCount := 0
  30. for deviceCode, err := range errMap {
  31. if err != nil {
  32. log.Printf("设备[%s]批量连接失败:%v", deviceCode, err)
  33. // 更新离线状态
  34. global.GVA_DB.Model(&dao.UHFReader{}).Where("device_code = ?", deviceCode).Update("status", "offline")
  35. } else {
  36. successCount++
  37. global.GVA_DB.Model(&dao.UHFReader{}).Where("device_code = ?", deviceCode).Update("status", "online")
  38. }
  39. }
  40. log.Printf("UHF设备批量初始化完成:成功[%d],失败[%d],总计[%d]",
  41. successCount, len(errMap)-successCount, len(devices))
  42. // 5. 设置全局消息回调(处理所有设备的接收数据)
  43. uhf.ConnManager.SetRecvCallback(func(deviceCode string, data []byte) {
  44. // 这里写你的业务逻辑:比如解析UHF标签数据、入库、推送等
  45. log.Printf("业务层处理设备[%s]数据:%s", deviceCode, string(data))
  46. // 示例:保存到数据库/推送到消息队列/调用其他服务
  47. })
  48. }