package initialize import ( "log" "wails-app/internal/dao" "wails-app/internal/global" "wails-app/internal/service/uhf" ) // InitUHFReaders 批量初始化所有UHF设备(多设备) func InitUHFReaders() { log.Println("开始批量初始化UHF设备连接...") // 1. 查询所有启用的设备 var devices []dao.UHFReader if err := global.GVA_DB.Where("is_active = ?", true).Find(&devices).Error; err != nil { log.Printf("查询UHF设备失败:%v", err) return } if len(devices) == 0 { log.Println("无启用的UHF设备,跳过初始化") return } // 2. 转换为指针切片(适配批量连接) devicePtrs := make([]*dao.UHFReader, 0, len(devices)) for i := range devices { devicePtrs = append(devicePtrs, &devices[i]) } // 3. 批量连接 errMap := uhf.BatchConnect(devicePtrs) // 4. 处理连接结果 successCount := 0 for deviceCode, err := range errMap { if err != nil { log.Printf("设备[%s]批量连接失败:%v", deviceCode, err) // 更新离线状态 global.GVA_DB.Model(&dao.UHFReader{}).Where("device_code = ?", deviceCode).Update("status", "offline") } else { successCount++ global.GVA_DB.Model(&dao.UHFReader{}).Where("device_code = ?", deviceCode).Update("status", "online") } } log.Printf("UHF设备批量初始化完成:成功[%d],失败[%d],总计[%d]", successCount, len(errMap)-successCount, len(devices)) // 5. 设置全局消息回调(处理所有设备的接收数据) uhf.ConnManager.SetRecvCallback(func(deviceCode string, data []byte) { // 这里写你的业务逻辑:比如解析UHF标签数据、入库、推送等 log.Printf("业务层处理设备[%s]数据:%s", deviceCode, string(data)) // 示例:保存到数据库/推送到消息队列/调用其他服务 }) }