package device import ( "autogo/controllers" "autogo/dbsql" "autogo/models" "net/http" "strconv" "github.com/gin-gonic/gin" "github.com/spf13/cast" ) // @Tags 设备相关 /api/device/v1/ // @Summary 查询设备 // @Description 根据udid查询设备 // @accept x-www-form-urlencoded // @Param udid query string true "设备udid" // @Success 200 {object} models.Response "返回设备信息" // @Router /api/device/v1/get_device [get] func GetDeviceByUdid(c *gin.Context) { rsp := controllers.NewResponse() udid := c.DefaultQuery("udid", "") if udid == "" { c.JSON(http.StatusOK, rsp.Error("udid error")) return } db, err := dbsql.GetConn(dbsql.DSN) if err != nil { c.JSON(http.StatusOK, rsp.Error(err.Error())) return } defer dbsql.Close(db) var device models.Device db.Model(&models.Device{}).Where("udid = ?", udid).Last(&device) if device.ID < 1 { c.JSON(http.StatusOK, rsp.Error("没有找到该设备,udid-"+udid)) return } rsp.Success() rsp.Data = device c.JSON(http.StatusOK, rsp) } // @Tags 设备相关 /api/device/v1/ // @Summary 获取设备列表 // @Description 获取设备列表 // @accept x-www-form-urlencoded // @Param page_size query int false "每页大小,默认为10" // @Param page_index query int false "第几页,默认为第一页" // @Success 200 {object} models.Response "返回设备列表信息" // @Router /api/device/v1/list [get] func GetDevices(c *gin.Context) { rsp := controllers.NewResponse() var p models.Page pageIndex, err := strconv.Atoi(c.DefaultQuery("page_index", "1")) if err != nil { c.JSON(http.StatusOK, rsp.Error(err.Error())) return } p.Index = pageIndex pageSize, err := strconv.Atoi(c.DefaultQuery("page_size", "10")) if err != nil { c.JSON(http.StatusOK, rsp.Error(err.Error())) return } p.Size = pageSize db, err := dbsql.GetConn(dbsql.DSN) if err != nil { c.JSON(http.StatusOK, rsp.Error(err.Error())) return } defer dbsql.Close(db) var list []models.Device db = db.Model(&models.Device{}) var count int64 db = db.Count(&count) db = dbsql.SetPageQuery(db, pageIndex, pageSize) db.Where("is_del = 0").Order("id desc").Find(&list) dbsql.Close(db) db, _ = dbsql.GetConn(dbsql.DSN) dbsql.Close(db) p.MaxPage = count/(int64(p.Size)+1) + 1 p.List = list p.Total = int(count) rsp.Success() rsp.Data = p c.JSON(http.StatusOK, rsp) } // @Tags 设备相关 /api/device/v1/ // @Summary 新建设备 // @Description 新建设备,UDID唯一 // @accept x-www-form-urlencoded // @Param project formData string true "项目" // @Param product_name formData string true "产品" // @Param device_name formData string true "存放设备名字型号" // @Param os formData string false "操作系统的版本" // @Param udid formData string true "设备唯一udid" // @Param platform formData string true "操作系统平台adr/ios" // @Success 200 {object} models.Response "返回创建后的设备信息" // @Router /api/device/v1/create [post] func CreateDevice(c *gin.Context) { rsp := controllers.NewResponse() db, err := dbsql.GetConn(dbsql.DSN) if err != nil { c.JSON(http.StatusOK, rsp.Error(err.Error())) return } defer dbsql.Close(db) var obj models.Device obj.Project = c.PostForm("project") obj.ProductName = c.PostForm("product_name") obj.DeviceName = c.PostForm("device_name") obj.OS = c.PostForm("os") obj.Udid = c.PostForm("udid") obj.Platform = c.PostForm("platform") // || obj.Creator == "" if obj.Project == "" || obj.ProductName == "" || obj.DeviceName == "" || obj.Platform == "" || obj.Udid == "" { rsp.Error("get formdata error") rsp.Data = obj c.JSON(http.StatusOK, rsp) return } var _device models.Device db.Model(models.Device{}).Where("udid = ?", obj.Udid).Find(&_device) if _device.ID > 0 { c.JSON(http.StatusOK, rsp.Error("添加失败,该设备已存在")) return } db.Model(models.Device{}).Create(&obj) if db.Error != nil { c.JSON(http.StatusOK, rsp.Error(db.Error.Error())) return } rsp.Success() rsp.Data = obj c.JSON(http.StatusOK, rsp) } // @Tags 设备相关 /api/device/v1/ // @Summary 更新设备 // @Description 根据主键更新设备 // @accept x-www-form-urlencoded // @Param id formData string true "设备id,必传" // @Param project formData string false "项目" // @Param product_name formData string false "产品" // @Param device_name formData string false "存放设备名字型号" // @Param os formData string false "操作系统的版本" // @Param udid formData string false "设备唯一udid" // @Param platform formData string false "操作系统平台adr/ios" // @Success 200 {object} models.Response "返回创建后的设备信息" // @Router /api/device/v1/update [post] func UpdateDevice(c *gin.Context) { rsp := controllers.NewResponse() id := cast.ToInt(c.PostForm("id")) if id == 0 { c.JSON(http.StatusOK, rsp.Error("device.id error - "+c.PostForm("id"))) return } db, err := dbsql.GetConn(dbsql.DSN) if err != nil { c.JSON(http.StatusOK, rsp.Error(err.Error())) return } defer dbsql.Close(db) var obj models.Device db.Model(models.Device{}).Where("id = ?", obj.ID).Find(&obj) if obj.ID < 1 { c.JSON(http.StatusOK, rsp.Error("修改失败,该设备不存在")) return } if c.PostForm("project") != "" { obj.Project = c.PostForm("project") } if c.PostForm("product_name") != "" { obj.ProductName = c.PostForm("product_name") } if c.PostForm("device_name") != "" { obj.DeviceName = c.PostForm("device_name") } if c.PostForm("os") != "" { obj.OS = c.PostForm("os") } if c.PostForm("udid") != "" { obj.Udid = c.PostForm("udid") } if c.PostForm("platform") != "" { obj.Platform = c.PostForm("platform") } db.Model(models.Device{}).Where("id = ?", obj.ID).Updates(&obj) if db.Error != nil { c.JSON(http.StatusOK, rsp.Error(db.Error.Error())) return } rsp.Success() rsp.Data = obj c.JSON(http.StatusOK, rsp) } // @Tags 设备相关 /api/device/v1/ // @Summary 删除设备 // @Description 根据主键软删除设备,is_del设为1 // @accept x-www-form-urlencoded // @Param id path string true "设备id,必传" // @Success 200 {object} models.Response "返回创建后的设备信息" // @Router /api/device/v1/delete/{id} [delete] func DeleteDevice(c *gin.Context) { rsp := controllers.NewResponse() id := cast.ToInt(c.Param("id")) if id == 0 { rsp.Error("device.id error - " + c.Param("id")) c.JSON(http.StatusOK, rsp) return } db, err := dbsql.GetConn(dbsql.DSN) if err != nil { rsp.Error(err.Error()) c.JSON(http.StatusOK, rsp) return } defer dbsql.Close(db) db.Model(models.Device{}).Where("id = ?", id).Update("is_del", 1) rsp.Success() c.JSON(http.StatusOK, rsp) } // @Tags 设备相关 /api/device/v1/ // @Summary 更新设备状态 // @Description 更新设备状态,错误的状态会被拒绝 // @accept x-www-form-urlencoded // @Param udid formData string true "设备udid" // @Param status formData string true "要更新的设备状态,online-在线空闲,busy-占用中,offline-离线" // @Success 200 {object} models.Response "返回更新的状态" // @Router /api/device/v1/update_status [post] func UpdateDeviceStatus(c *gin.Context) { rsp := controllers.NewResponse() if c.PostForm("udid") == "" { rsp.Error("参数udid错误:" + c.PostForm("udid")) c.JSON(http.StatusOK, rsp) return } if c.PostForm("status") != "offline" && c.PostForm("status") != "online" && c.PostForm("status") != "busy" { rsp.Error("参数status错误:" + c.PostForm("status")) c.JSON(http.StatusOK, rsp) return } db, err := dbsql.GetConn(dbsql.DSN) if err != nil { rsp.Error(err.Error()) c.JSON(http.StatusOK, rsp) return } defer dbsql.Close(db) db.Model(models.Device{}).Where("udid = ?", c.PostForm("udid")).Update("status", c.PostForm("status")) db_oms, err := dbsql.GetConn(dbsql.DSN_qaoms()) if err != nil { rsp.Error(err.Error()) c.JSON(http.StatusOK, rsp) return } defer dbsql.Close(db_oms) db_oms.Table("qa_devices").Model(models.DeviceV2{}).Where("udid = ?", c.PostForm("udid")).Update("status", c.PostForm("status")) rsp.Success() rsp.Data = c.PostForm("udid") c.JSON(http.StatusOK, rsp) }