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 }