196 lines
6.5 KiB
Go
196 lines
6.5 KiB
Go
// ==========================================================================
|
||
// GFast自动生成controller操作代码。
|
||
// 生成日期:2023-12-12 15:21:22
|
||
// 生成路径: internal/app/system/controller/manage_task.go
|
||
// 生成人:gfast
|
||
// desc:航线任务下发
|
||
// company:云南奇讯科技有限公司
|
||
// ==========================================================================
|
||
|
||
package controller
|
||
|
||
import (
|
||
"context"
|
||
"errors"
|
||
"github.com/gogf/gf/v2/database/gdb"
|
||
"github.com/gogf/gf/v2/frame/g"
|
||
uuid "github.com/satori/go.uuid"
|
||
"github.com/tiger1103/gfast/v3/api/v1/common/coryCommon"
|
||
"github.com/tiger1103/gfast/v3/api/v1/system"
|
||
"github.com/tiger1103/gfast/v3/internal/app/system/dao"
|
||
ct "github.com/tiger1103/gfast/v3/internal/app/system/logic/context"
|
||
logic "github.com/tiger1103/gfast/v3/internal/app/system/logic/manageTaskRecord"
|
||
"github.com/tiger1103/gfast/v3/internal/app/system/model"
|
||
"github.com/tiger1103/gfast/v3/internal/app/system/service"
|
||
"github.com/tiger1103/gfast/v3/library/liberr"
|
||
"github.com/tiger1103/gfast/v3/third/plane/dj"
|
||
"github.com/tiger1103/gfast/v3/third/plane/mqtt"
|
||
tool "github.com/tiger1103/gfast/v3/utility/coryUtils"
|
||
"strconv"
|
||
"strings"
|
||
"time"
|
||
)
|
||
|
||
type manageTaskController struct {
|
||
BaseController
|
||
}
|
||
|
||
var ManageTask = new(manageTaskController)
|
||
|
||
// List 列表
|
||
func (c *manageTaskController) List(ctx context.Context, req *system.ManageTaskSearchReq) (res *system.ManageTaskSearchRes, err error) {
|
||
res, err = service.ManageTask().List(ctx, req)
|
||
return
|
||
}
|
||
|
||
// Get 获取航线任务下发
|
||
func (c *manageTaskController) Get(ctx context.Context, req *system.ManageTaskGetReq) (res *system.ManageTaskGetRes, err error) {
|
||
res = new(system.ManageTaskGetRes)
|
||
res.ManageTaskInfoRes, err = service.ManageTask().GetById(ctx, req.Id)
|
||
return
|
||
}
|
||
|
||
// Add 添加航线任务下发
|
||
func (c *manageTaskController) Add(ctx context.Context, req *system.ManageTaskAddReq) (res *system.ManageTaskAddRes, err error) {
|
||
err = service.ManageTask().Add(ctx, req)
|
||
return
|
||
}
|
||
|
||
// Edit 修改航线任务下发
|
||
func (c *manageTaskController) Edit(ctx context.Context, req *system.ManageTaskEditReq) (res *system.ManageTaskEditRes, err error) {
|
||
err = service.ManageTask().Edit(ctx, req)
|
||
return
|
||
}
|
||
|
||
// Delete 删除航线任务下发
|
||
func (c *manageTaskController) Delete(ctx context.Context, req *system.ManageTaskDeleteReq) (res *system.ManageTaskDeleteRes, err error) {
|
||
err = service.ManageTask().Delete(ctx, req.Ids)
|
||
return
|
||
}
|
||
|
||
// FlighttaskPrepare <MQTT>航线任务下发
|
||
func (c *manageTaskController) FlighttaskPrepare(ctx context.Context, req *system.FlighttaskPrepareReq) (res *system.FlighttaskPrepareRes, err error) {
|
||
_, err = FlighttaskPrepareFunc(ctx, req)
|
||
return
|
||
}
|
||
|
||
// FlighttaskPrepareFunc 下发任务 or 断点续飞
|
||
func FlighttaskPrepareFunc(ctx context.Context, req *system.FlighttaskPrepareReq) (id int64, err error) {
|
||
get, err := g.Redis().Get(ctx, mqtt.RainfallStr+req.GatewaySn)
|
||
if err == nil && get.String() == " " {
|
||
err = errors.New("无法获取降雨量")
|
||
return
|
||
} else if get.Int() > 0 {
|
||
err = errors.New("机舱外正在下雨,无法下发任务!")
|
||
return
|
||
}
|
||
|
||
err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
|
||
err = g.Try(ctx, func(ctx context.Context) {
|
||
var mt *model.ManageTaskInfoRes
|
||
err = dao.ManageTask.Ctx(ctx).WherePri(req.Id).Scan(&mt)
|
||
if mt != nil {
|
||
all := strings.ReplaceAll(uuid.NewV4().String(), "-", "")
|
||
if req.BreakpointRenewalUUID != "" {
|
||
all = req.BreakpointRenewalUUID
|
||
}
|
||
//1、组装数据。发送mq
|
||
line := mt.AirLine
|
||
var ma *model.ManageAirlineInfoRes
|
||
err = dao.ManageAirline.Ctx(ctx).WherePri(line).Scan(&ma)
|
||
if ma == nil {
|
||
liberr.ErrIsNil(ctx, err)
|
||
return
|
||
}
|
||
prepareRes := dj.FlighttaskPrepareRes{}
|
||
prepareRes.Data.FlightId = all
|
||
atoi, _ := strconv.Atoi(req.TaskType)
|
||
prepareRes.Data.TaskType = atoi
|
||
prepareRes.Data.TaskType = atoi
|
||
prepareRes.Data.ExecuteTime = req.ExecuteTime
|
||
prepareRes.Data.WaylineType = mt.WaylineType
|
||
prepareRes.Data.File = &dj.FileEntity{Url: coryCommon.GlobalPath + "/" + ma.FilePath, Fingerprint: ma.Fingerprint}
|
||
prepareRes.Data.RthAltitude = mt.RthAltitude
|
||
prepareRes.Data.RthMode = mt.RthMode
|
||
prepareRes.Data.OutOfControlAction = mt.OutOfControlAction
|
||
prepareRes.Data.ExitWaylineWhenRcLost = mt.ExitWaylineWhenRcLost
|
||
if req.BreakPoint != nil { //断点续飞
|
||
point := dj.BreakPoint{
|
||
Index: req.BreakPoint.Index,
|
||
State: req.BreakPoint.State,
|
||
Progress: req.BreakPoint.Progress,
|
||
WaylineId: req.BreakPoint.WaylineId,
|
||
}
|
||
prepareRes.Data.BreakPoint = &point
|
||
}
|
||
_, _, err2, reply := mqtt.Flighttask_prepare(ctx, req.GatewaySn, &prepareRes)
|
||
if err2 != nil {
|
||
liberr.ErrIsNil(ctx, err2, "下发任务失败!")
|
||
return
|
||
}
|
||
if reply.Data.Result > 0 {
|
||
err = mqtt.Geterror(reply.Data.Result)
|
||
liberr.ErrIsNil(ctx, err)
|
||
return
|
||
}
|
||
var idd uint64
|
||
user := ct.New().GetLoginUser(ctx)
|
||
if user == nil {
|
||
idd = 0
|
||
} else {
|
||
idd = user.Id
|
||
}
|
||
if req.BreakPoint == nil {
|
||
// 预估回传数量
|
||
number, numberErr := logic.GetTheTaskDataBasedOnTheTaskId(ctx, mt.Id)
|
||
if numberErr != nil {
|
||
g.Log("uav").Error(ctx, "预估回传数量错误")
|
||
liberr.ErrIsNil(ctx, numberErr)
|
||
return
|
||
}
|
||
//2、新增历史记录
|
||
infoRes := model.ManageTaskRecordInfoRes{
|
||
TaskId: mt.Id,
|
||
TaskType: req.TaskType,
|
||
ExecuteTime: req.ExecuteTime,
|
||
FlightId: all,
|
||
Remark: req.Remark,
|
||
MqClientId: mt.MqClientId,
|
||
ProjectId: mt.ProjectId,
|
||
CreateBy: strconv.FormatUint(idd, 10),
|
||
TaskName: mt.TaskName,
|
||
Waypoint: number,
|
||
}
|
||
//不为空代表定时自动飞行
|
||
if req.TimedFlight != "" {
|
||
infoRes.IsVoluntarily = "0"
|
||
} else {
|
||
infoRes.IsVoluntarily = "1"
|
||
}
|
||
insertData, err := dao.ManageTaskRecord.Ctx(ctx).OmitEmpty().Insert(infoRes)
|
||
liberr.ErrIsNil(ctx, err, "任务下发失败!")
|
||
id, err = insertData.LastInsertId()
|
||
liberr.ErrIsNil(ctx, err)
|
||
} else { //断点续飞
|
||
time.Sleep(1 * time.Second)
|
||
errDd, replyDd := mqtt.Flighttask_execute(ctx, req.GatewaySn, all)
|
||
if errDd != nil {
|
||
return
|
||
}
|
||
if replyDd.Data.Result > 0 {
|
||
err = mqtt.Geterror(replyDd.Data.Result)
|
||
} else {
|
||
dao.ManageTaskRecord.Ctx(ctx).Where("flight_id", req.BreakpointRenewalUUID).Update(g.Map{"execute_the_task": tool.MillisecondTimestamp()})
|
||
}
|
||
return
|
||
}
|
||
}
|
||
liberr.ErrIsNil(ctx, err)
|
||
return
|
||
})
|
||
return err
|
||
})
|
||
return
|
||
|
||
}
|