Files
zmkgC/internal/app/system/controller/manage_task.go

196 lines
6.5 KiB
Go
Raw Normal View History

2025-07-07 20:11:59 +08:00
// ==========================================================================
// 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
}