update
parent
1090ed797a
commit
54791e3c2c
@ -0,0 +1,115 @@
|
||||
package device
|
||||
|
||||
import (
|
||||
"goqs/controllers"
|
||||
"goqs/dbsql"
|
||||
"goqs/models"
|
||||
"net/http"
|
||||
"os/exec"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
log "github.com/sirupsen/logrus"
|
||||
"github.com/spf13/cast"
|
||||
)
|
||||
|
||||
// @Tags 设备相关 /api/device/v1/
|
||||
// @Summary 安装应用
|
||||
// @Description 传入安装包链接并指定设备安装
|
||||
// @accept x-www-form-urlencoded
|
||||
// @Param udid formData string true "设备udid"
|
||||
// @Param pf formData string true "安装平台"
|
||||
// @Param pkg_url formData string true "安装包下载链接"
|
||||
// @Success 200 {object} models.Response "返回结果"
|
||||
// @Router /api/device/v1/opt/install [post]
|
||||
func InstallApp(c *gin.Context) {
|
||||
rsp := controllers.NewResponse()
|
||||
|
||||
udid := c.PostForm("udid") // 获取 udid 参数
|
||||
pf := c.PostForm("pf") // 获取 pf 参数
|
||||
pkg_url := c.PostForm("pkg_url") // 获取 pkg_url 参数
|
||||
|
||||
if udid == "" {
|
||||
rsp.Error("参数udid错误:" + udid)
|
||||
c.JSON(http.StatusOK, rsp)
|
||||
return
|
||||
}
|
||||
if pf == "" {
|
||||
rsp.Error("参数pf错误:" + pf)
|
||||
c.JSON(http.StatusOK, rsp)
|
||||
return
|
||||
}
|
||||
if pkg_url == "" {
|
||||
rsp.Error("参数pkgUrl错误:" + pkg_url)
|
||||
c.JSON(http.StatusOK, rsp)
|
||||
return
|
||||
}
|
||||
|
||||
db, err := dbsql.GetConn(dbsql.DSN)
|
||||
if err != nil {
|
||||
rsp.Error(err.Error())
|
||||
c.JSON(http.StatusOK, rsp)
|
||||
}
|
||||
defer dbsql.Close(db)
|
||||
|
||||
var device models.Device
|
||||
db.Model(models.Device{}).Where("udid = ?", udid).Find(&device)
|
||||
if device.ID < 1 {
|
||||
rsp.Error("找不到该设备:" + udid)
|
||||
c.JSON(http.StatusOK, rsp)
|
||||
return
|
||||
}
|
||||
if device.Status == "offline" {
|
||||
rsp.Error("设备不在线:" + udid)
|
||||
c.JSON(http.StatusOK, rsp)
|
||||
return
|
||||
}
|
||||
if device.Status == "busy" {
|
||||
rsp.Error("设备正在被占用,无法执行安装操作")
|
||||
c.JSON(http.StatusOK, rsp)
|
||||
return
|
||||
}
|
||||
|
||||
if pf == "adr" {
|
||||
// 下载app到服务器
|
||||
go DownloadAndInstallApp(udid, pkg_url)
|
||||
|
||||
} else {
|
||||
rsp.Error("未支持的平台:" + pf)
|
||||
c.JSON(http.StatusOK, rsp)
|
||||
return
|
||||
}
|
||||
|
||||
rsp.Success()
|
||||
rsp.Data = "已执行"
|
||||
c.JSON(http.StatusOK, rsp)
|
||||
}
|
||||
|
||||
func DownloadAndInstallApp(udid, pkg_url string) error {
|
||||
pkg_path := "/home/tmp/pkg/" + cast.ToString(time.Now().Unix()) + ".apk"
|
||||
log.Debug("正在下载:", pkg_url)
|
||||
err := exec.Command("wget", pkg_url, "-O", pkg_path).Run()
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
log.Debug("下载完毕,路径:", pkg_path)
|
||||
err = AdbInstall(udid, pkg_path)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func AdbInstall(udid, filepath string) error {
|
||||
// 通过 adb 安装 APK
|
||||
cmd := exec.Command("adb", "-s", udid, "install", "-r", filepath)
|
||||
output, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
log.Error("安装失败:", err)
|
||||
return err
|
||||
}
|
||||
log.Debug("安装成功:", string(output))
|
||||
return nil
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
package models
|
||||
|
||||
type Notify struct {
|
||||
ID int `json:"id" gorm:"primaryKey;column:id;type:int unsigned;not null"`
|
||||
Name string `json:"name" gorm:"column:name;type:varchar(255);not null"`
|
||||
Section string `json:"section" gorm:"column:section;type:varchar(255);not null"`
|
||||
Type string `json:"type" gorm:"column:type;type:varchar(255);not null"`
|
||||
Token string `json:"token" gorm:"column:token;type:varchar(255);not null"`
|
||||
Secret string `json:"secret" gorm:"column:secret;type:varchar(255);"`
|
||||
IsDel int `json:"is_del" gorm:"column:is_del;type:int;not null"`
|
||||
}
|
||||
|
||||
func (Notify) TableName() string {
|
||||
return "notify"
|
||||
}
|
||||
Loading…
Reference in New Issue