初始
This commit is contained in:
195
internal/app/system/controller/manage_task.go
Normal file
195
internal/app/system/controller/manage_task.go
Normal file
@ -0,0 +1,195 @@
|
||||
// ==========================================================================
|
||||
// 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
|
||||
|
||||
}
|
Reference in New Issue
Block a user