package gateway import ( errors "confrontation-training/err" "confrontation-training/global" deviceModel "confrontation-training/models/gateway" "confrontation-training/response" deviceService "confrontation-training/service/device" "fmt" "github.com/gin-gonic/gin" "reflect" "strings" ) type DeviceService struct { deviceService.DeviceService } func GetDeviceService() *DeviceService { return &DeviceService{} } // DeviceAdd // PingExample confrontation-training // @Summary 新增设备 // @Schemes // @Description 新增设备 // @Tags 设备管理 // @Param device body string true "type:类型 0脑电1心电;mac:设备MAC地址" // @Accept json // @Produce json // @Success 200 {string} string "ok" // @Router /v1/device/add [post] func (d *DeviceService) DeviceAdd(c *gin.Context) { var param deviceModel.DeviceAddParam err := c.ShouldBindJSON(¶m) if err != nil { fmt.Printf("参数格式化异常:%s", err.Error()) global.Log4J.Info("参数格式化异常:" + err.Error()) response.Failed(errors.ParamInvalid, c) return } if _, count := d.FindDeviceByMac(param.Mac); count > 0 { response.Failed(errors.DeviceAddFailed, c) return } if result := d.CreateDevice(param); result.Error == nil { deviceInfo := deviceModel.DeviceInfo{ Type: param.Type, Mac: param.Mac, } if param.Type == "0" { deviceInfo.Name = "MIND" + strings.ReplaceAll(param.Mac[len(param.Mac)-5:], ":", "") } else { deviceInfo.Name = "BW-ECG-01" } global.DeviceMap[param.Mac] = deviceInfo response.Success(errors.DeviceAddSuccess, result.RowsAffected, c) return } else { response.Failed(errors.UserRegisterFailed+"数据库错:"+result.Error.Error(), c) return } } // DeviceRemove // PingExample confrontation-training // @Summary 移除设备 // @Schemes // @Description 移除设备 // @Tags 设备管理 // @Accept json // @Produce json // @Success 200 {string} string "ok" // @Router /v1/device/:mac/remove [delete] func (d *DeviceService) DeviceRemove(c *gin.Context) { mac := c.Param("mac") count := d.RemoveDevice(mac) if count == 0 { response.Failed(errors.DeviceRemoveFailed, c) } else { response.Success(errors.DeviceRemoveSuccess, count, c) } delete(global.DeviceMap, mac) return } // DeviceList // PingExample confrontation-training // @Summary 设备列表 // @Schemes // @Description 设备列表 // @Tags 设备管理 // @Accept json // @Produce json // @Success 200 {string} string "ok" // @Router /v1/device/list/:type [get] func (d *DeviceService) DeviceList(c *gin.Context) { deviceInfos, _ := d.FindDeviceByType(c.Query("type")) response.Success(errors.FindSuccess, deviceInfos, c) } // DeviceConnected 连接列表 // PingExample confrontation-training // @Summary 连接列表 // @Schemes // @Description 连接列表 // @Tags 设备管理 // @Accept json // @Produce json // @Success 200 {string} string "ok" // @Router /v1/device/connected [get] func (d *DeviceService) DeviceConnected(c *gin.Context) { url := global.Config.Gateway.BaseUrl + global.Config.Gateway.ConnectedUrl listResult, err := d.DeviceConnectedList(url) if err != nil { response.Failed("查询失败", c) return } a := make(map[string]interface{}) a = listResult b := a["nodes"] var list []map[string]interface{} var connectedList []deviceModel.ConnectedDevice if reflect.ValueOf(b).Kind() == reflect.Slice { s := reflect.ValueOf(b) for i := 0; i < s.Len(); i++ { ele := s.Index(i) list = append(list, ele.Interface().(map[string]interface{})) } for _, m := range list { mm := make(map[string]interface{}) mm = m mac := mm["id"] if device, count := d.FindDeviceByMac(mac.(string)); count > 0 { var connDevice = deviceModel.ConnectedDevice{ MAC: mac.(string), DeviceType: device.Type, Name: device.Name, } if connDevice.Name == "" { if device.Type == "1" { connDevice.Name = "BW-EGC-01" } else if device.Type == "0" { connDevice.Name = "MIND" + strings.ReplaceAll(connDevice.MAC[len(connDevice.MAC)-6:], ":", "") } } connectedList = append(connectedList, connDevice) } } } response.Success(errors.FindSuccess, connectedList, c) return } // Disconnect // PingExample confrontation-training // @Summary 断开连接 // @Schemes // @Description 断开连接 // @Tags 设备管理 // @Accept json // @Produce json // @Success 200 {string} string "ok" // @Router /v1/device/:mac/disconnect [get] func (d *DeviceService) Disconnect(c *gin.Context) { mac := c.Param("mac") disconnectUrl := global.Config.Gateway.BaseUrl + global.Config.Gateway.DisconnectUrl disconnectUrl = strings.Replace(disconnectUrl, "MAC", mac, -1) resp := d.DisconnectDevice(disconnectUrl) if resp.StatusCode != 200 { fmt.Println("断开连接失败") global.Log4J.Info("断开连接失败") response.Failed("断开连接失败", c) } else { response.Success("断开连接", mac, c) } return }