You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

298 lines
8.0 KiB
Go

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 == "" {
rsp.Error("udid error")
c.JSON(http.StatusOK, rsp)
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 {
rsp.Error("没有找到该设备udid-" + udid)
c.JSON(http.StatusOK, rsp)
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 {
rsp.Error(err.Error())
c.JSON(http.StatusOK, rsp)
}
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 {
rsp.Error("添加失败,该设备已存在")
c.JSON(http.StatusOK, rsp)
return
}
db.Model(models.Device{}).Create(&obj)
if db.Error != nil {
rsp.Error(db.Error.Error())
c.JSON(http.StatusOK, rsp)
}
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 {
rsp.Error("device.id error - " + c.PostForm("id"))
c.JSON(http.StatusOK, rsp)
}
db, err := dbsql.GetConn(dbsql.DSN)
if err != nil {
rsp.Error(err.Error())
c.JSON(http.StatusOK, rsp)
}
defer dbsql.Close(db)
var obj models.Device
db.Model(models.Device{}).Where("id = ?", obj.ID).Find(&obj)
if obj.ID < 1 {
rsp.Error("修改失败,该设备不存在")
c.JSON(http.StatusOK, rsp)
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 {
rsp.Error(db.Error.Error())
c.JSON(http.StatusOK, rsp)
}
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"))
rsp.Success()
rsp.Data = c.PostForm("udid")
c.JSON(http.StatusOK, rsp)
}