335 lines
9.4 KiB
Go
335 lines
9.4 KiB
Go
|
package plane
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"github.com/gogf/gf/v2/frame/g"
|
||
|
"github.com/gogf/gf/v2/net/ghttp"
|
||
|
"github.com/tiger1103/gfast/v3/internal/app/system/service"
|
||
|
"github.com/tiger1103/gfast/v3/third/plane/dj"
|
||
|
"github.com/tiger1103/gfast/v3/third/plane/globe"
|
||
|
"github.com/tiger1103/gfast/v3/third/plane/mqtt"
|
||
|
|
||
|
"strconv"
|
||
|
)
|
||
|
|
||
|
type PLANE struct {
|
||
|
}
|
||
|
|
||
|
func InitPlaneApi(group *ghttp.RouterGroup) {
|
||
|
init_map()
|
||
|
group.Group("/plane", func(group *ghttp.RouterGroup) {
|
||
|
group.Bind(new(PLANE))
|
||
|
group.Middleware(service.Middleware().Ctx, service.Middleware().Auth)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func init_map() {
|
||
|
globe.WS_Status_map = make(globe.WS_MAP)
|
||
|
globe.WS_Progress_drone_open_map = make(globe.WS_MAP)
|
||
|
globe.WS_Progress_drone_close_map = make(globe.WS_MAP)
|
||
|
globe.WS_Progress_cover_open_map = make(globe.WS_MAP)
|
||
|
globe.WS_Progress_cover_close_map = make(globe.WS_MAP)
|
||
|
globe.WS_Progress_device_reboot_map = make(globe.WS_MAP)
|
||
|
globe.WS_Progress_putter_close_map = make(globe.WS_MAP)
|
||
|
globe.WS_Progress_putter_open_map = make(globe.WS_MAP)
|
||
|
globe.WS_Reply = make(globe.WS_MAP)
|
||
|
}
|
||
|
|
||
|
type UsualRes struct {
|
||
|
}
|
||
|
|
||
|
type DeviceGoHomeReq struct {
|
||
|
g.Meta `path:"gohome" summary:"一键返航" method:"post" tags:"无人机相关"`
|
||
|
GatewaySn string `json:"gateway_sn" v:"required" dc:"机库sn"`
|
||
|
}
|
||
|
|
||
|
func (receiver PLANE) DeviceGoHome(ctx context.Context, req *DeviceGoHomeReq) (res *UsualRes, err error) {
|
||
|
err, d := mqtt.Return_home(ctx, req.GatewaySn)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
if d.Data.Result > 0 {
|
||
|
err = geterror(d.Data.Result)
|
||
|
return
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
type DeviceListReq struct {
|
||
|
g.Meta `path:"list" summary:"获取飞机列表" method:"get" tags:"无人机相关"`
|
||
|
}
|
||
|
type DeviceListRes struct {
|
||
|
}
|
||
|
|
||
|
func (receiver PLANE) DeviceList(ctx context.Context, req *DeviceListReq) (res *DeviceListRes, err error) {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
type DeviceRebootReq struct {
|
||
|
g.Meta `path:"device_reboot" summary:"机库重启" method:"post" tags:"无人机相关"`
|
||
|
GatewaySn string `json:"gateway_sn" v:"required" dc:"机库sn"`
|
||
|
}
|
||
|
|
||
|
func (receiver PLANE) DeviceReboot(ctx context.Context, req *DeviceRebootReq) (res *UsualRes, err error) {
|
||
|
err, d := mqtt.Device_reboot(req.GatewaySn)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
if d.Data.Result > 0 {
|
||
|
err = geterror(d.Data.Result)
|
||
|
return
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
type ClosePutterReq struct {
|
||
|
g.Meta `path:"close_putter" summary:"关闭推杆" method:"post" tags:"无人机相关"`
|
||
|
GatewaySn string `json:"gateway_sn" v:"required" dc:"机库sn"`
|
||
|
}
|
||
|
|
||
|
func (receiver PLANE) ClosePutterReq(ctx context.Context, req *ClosePutterReq) (res *UsualRes, err error) {
|
||
|
err, d := mqtt.Putter_close(ctx, req.GatewaySn)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
if d.Data.Result > 0 {
|
||
|
err = geterror(d.Data.Result)
|
||
|
return
|
||
|
}
|
||
|
g.DB().Model("manage_button_state").
|
||
|
Where("mq_client_id", req.GatewaySn).
|
||
|
Update(g.Map{"push_rod": 2})
|
||
|
return
|
||
|
}
|
||
|
|
||
|
type OpenPutterReq struct {
|
||
|
g.Meta `path:"open_putter" summary:"打开推杆" method:"post" tags:"无人机相关"`
|
||
|
GatewaySn string `json:"gateway_sn" v:"required" dc:"机库sn"`
|
||
|
}
|
||
|
|
||
|
func (receiver PLANE) OpenPutterReq(ctx context.Context, req *OpenPutterReq) (res *UsualRes, err error) {
|
||
|
err, d := mqtt.Putter_open(ctx, req.GatewaySn)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
if d.Data.Result > 0 {
|
||
|
err = geterror(d.Data.Result)
|
||
|
return
|
||
|
}
|
||
|
g.DB().Model("manage_button_state").
|
||
|
Where("mq_client_id", req.GatewaySn).
|
||
|
Update(g.Map{"push_rod": 1})
|
||
|
return
|
||
|
}
|
||
|
|
||
|
type OpenChargeReq struct {
|
||
|
g.Meta `path:"open_charge" summary:"打开充电" method:"post" tags:"无人机相关"`
|
||
|
GatewaySn string `json:"gateway_sn" v:"required" dc:"机库sn"`
|
||
|
}
|
||
|
|
||
|
func (receiver PLANE) OpenChargeReq(ctx context.Context, req *OpenChargeReq) (res *UsualRes, err error) {
|
||
|
err, d := mqtt.Charge_open(ctx, req.GatewaySn)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
if d.Data.Result > 0 {
|
||
|
err = geterror(d.Data.Result)
|
||
|
return
|
||
|
}
|
||
|
g.DB().Model("manage_button_state").
|
||
|
Where("mq_client_id", req.GatewaySn).
|
||
|
Update(g.Map{"recharge": 1})
|
||
|
return
|
||
|
}
|
||
|
|
||
|
type CloseChargeReq struct {
|
||
|
g.Meta `path:"close_charge" summary:"关闭充电" method:"post" tags:"无人机相关"`
|
||
|
GatewaySn string `json:"gateway_sn" v:"required" dc:"机库sn"`
|
||
|
}
|
||
|
|
||
|
func (receiver PLANE) CloseCharge(ctx context.Context, req *CloseChargeReq) (res *UsualRes, err error) {
|
||
|
err, d := mqtt.Charge_close(ctx, req.GatewaySn)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
if d.Data.Result > 0 {
|
||
|
err = geterror(d.Data.Result)
|
||
|
return
|
||
|
}
|
||
|
g.DB().Model("manage_button_state").
|
||
|
Where("mq_client_id", req.GatewaySn).
|
||
|
Update(g.Map{"recharge": 2})
|
||
|
return
|
||
|
}
|
||
|
|
||
|
type CloseDroneReq struct {
|
||
|
g.Meta `path:"close_drone" summary:"飞行器关机(调试模式下)" method:"post" tags:"无人机相关"`
|
||
|
GatewaySn string `json:"gateway_sn" v:"required" dc:"机库sn"`
|
||
|
}
|
||
|
|
||
|
func (receiver PLANE) CloseDrone(ctx context.Context, req *CloseDroneReq) (res *UsualRes, err error) {
|
||
|
err, d := mqtt.Drone_close(ctx, req.GatewaySn)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
if d.Data.Result > 0 {
|
||
|
err = geterror(d.Data.Result)
|
||
|
return
|
||
|
}
|
||
|
g.DB().Model("manage_button_state").
|
||
|
Where("mq_client_id", req.GatewaySn).
|
||
|
Update(g.Map{"power": 2})
|
||
|
return
|
||
|
}
|
||
|
|
||
|
type OpenDroneReq struct {
|
||
|
g.Meta `path:"open_drone" summary:"飞行器开机(调试模式下)" method:"post" tags:"无人机相关"`
|
||
|
GatewaySn string `json:"gateway_sn" v:"required" dc:"机库sn"`
|
||
|
}
|
||
|
|
||
|
func (receiver PLANE) OpenDrone(ctx context.Context, req *OpenDroneReq) (res *UsualRes, err error) {
|
||
|
err, d := mqtt.Drone_open(ctx, req.GatewaySn)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
if d.Data.Result > 0 {
|
||
|
err = geterror(d.Data.Result)
|
||
|
return
|
||
|
}
|
||
|
g.DB().Model("manage_button_state").
|
||
|
Where("mq_client_id", req.GatewaySn).
|
||
|
Update(g.Map{"power": 1})
|
||
|
return
|
||
|
}
|
||
|
|
||
|
type CloseCoverReq struct {
|
||
|
g.Meta `path:"close_cover" summary:"关闭舱盖(调试模式下)" method:"post" tags:"无人机相关"`
|
||
|
GatewaySn string `json:"gateway_sn" v:"required" dc:"机库sn"`
|
||
|
}
|
||
|
|
||
|
func (receiver PLANE) CloseCover(ctx context.Context, req *CloseCoverReq) (res *UsualRes, err error) {
|
||
|
err, d := mqtt.Cover_close(ctx, req.GatewaySn)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
if d.Data.Result > 0 {
|
||
|
err = geterror(d.Data.Result)
|
||
|
return
|
||
|
}
|
||
|
g.DB().Model("manage_button_state").
|
||
|
Where("mq_client_id", req.GatewaySn).
|
||
|
Update(g.Map{"hatch_cover": 2})
|
||
|
return
|
||
|
}
|
||
|
|
||
|
type OpenCoverReq struct {
|
||
|
g.Meta `path:"open_cover" summary:"打开舱盖(调试模式下)" method:"post" tags:"无人机相关"`
|
||
|
GatewaySn string `json:"gateway_sn" v:"required" dc:"机库sn"`
|
||
|
}
|
||
|
|
||
|
func (receiver PLANE) OpenCover(ctx context.Context, req *OpenCoverReq) (res *UsualRes, err error) {
|
||
|
err, d := mqtt.Cover_open(ctx, req.GatewaySn)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
if d.Data.Result > 0 {
|
||
|
err = geterror(d.Data.Result)
|
||
|
return
|
||
|
}
|
||
|
g.DB().Model("manage_button_state").
|
||
|
Where("mq_client_id", req.GatewaySn).
|
||
|
Update(g.Map{"hatch_cover": 1})
|
||
|
return
|
||
|
}
|
||
|
|
||
|
type CloseDebugReq struct {
|
||
|
g.Meta `path:"close_debug" summary:"关闭调试模式" method:"post" tags:"无人机相关"`
|
||
|
GatewaySn string `json:"gateway_sn" v:"required" dc:"机库sn"`
|
||
|
}
|
||
|
|
||
|
func (receiver PLANE) CloseDebug(ctx context.Context, req *CloseDebugReq) (res *UsualRes, err error) {
|
||
|
err, d := mqtt.Debug_mode_close(ctx, req.GatewaySn)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
if d.Data.Result > 0 {
|
||
|
err = geterror(d.Data.Result)
|
||
|
return
|
||
|
}
|
||
|
g.DB().Model("manage_button_state").
|
||
|
Where("mq_client_id", req.GatewaySn).
|
||
|
Update(g.Map{"debug": 2})
|
||
|
return
|
||
|
}
|
||
|
|
||
|
type OpenDebugReq struct {
|
||
|
g.Meta `path:"open_debug" summary:"打开调试模式" method:"post" tags:"无人机相关"`
|
||
|
GatewaySn string `json:"gateway_sn" v:"required" dc:"机库sn"`
|
||
|
}
|
||
|
|
||
|
func (receiver PLANE) OpenDebug(ctx context.Context, req *OpenDebugReq) (res *UsualRes, err error) {
|
||
|
err, d := mqtt.Debug_mode_open(ctx, req.GatewaySn)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
if d.Data.Result > 0 {
|
||
|
err = geterror(d.Data.Result)
|
||
|
return
|
||
|
}
|
||
|
g.DB().Model("manage_button_state").
|
||
|
Where("mq_client_id", req.GatewaySn).
|
||
|
Update(g.Map{"debug": 1})
|
||
|
return
|
||
|
}
|
||
|
|
||
|
type StopLiveReq struct {
|
||
|
g.Meta `path:"stop_live" summary:"停止直播" method:"post" tags:"无人机相关"`
|
||
|
GatewaySn string `json:"gateway_sn" v:"required" dc:"机库sn"`
|
||
|
Devsn string `json:"devsn" v:"required" dc:"设备sn"`
|
||
|
Camera_index string `json:"camera_index" v:"required" dc:"摄像头"`
|
||
|
}
|
||
|
|
||
|
func (receiver PLANE) StopLive(ctx context.Context, req *StopLiveReq) (res *UsualRes, err error) {
|
||
|
err, d := mqtt.Live_stop_push(req.GatewaySn, req.Devsn, req.Camera_index)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
if d.Data.Result > 0 {
|
||
|
err = geterror(d.Data.Result)
|
||
|
return
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
type StartLiveReq struct {
|
||
|
g.Meta `path:"start_live" summary:"开始直播" method:"post" tags:"无人机相关"`
|
||
|
GatewaySn string `json:"gateway_sn" v:"required" dc:"机库sn"`
|
||
|
Devsn string `json:"devsn" v:"required" dc:"设备sn"`
|
||
|
Camera_index string `json:"camera_index" v:"required" dc:"摄像头"`
|
||
|
}
|
||
|
type StartLiveRes struct {
|
||
|
Url string `json:"url"`
|
||
|
}
|
||
|
|
||
|
func geterror(code int) error {
|
||
|
if v, ok := dj.GetErrorMap()[code]; ok {
|
||
|
return globe.GetErrors(v.Msg)
|
||
|
} else {
|
||
|
return globe.GetErrors("未知错误:" + strconv.Itoa(code))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (receiver PLANE) StartLive(ctx context.Context, req *StartLiveReq) (res *StartLiveRes, err error) {
|
||
|
err, d := mqtt.Live_start_push(req.GatewaySn, req.Devsn, req.Camera_index)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
if d.Data.Result > 0 && d.Data.Result != 513003 /*正在直播中 ,可直接返回地址*/ {
|
||
|
err = geterror(d.Data.Result)
|
||
|
return
|
||
|
}
|
||
|
res = &StartLiveRes{}
|
||
|
res.Url = d.Data.Url
|
||
|
return
|
||
|
}
|