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
|
|||
|
|
|||
|
}
|