Files
zmkgC/internal/app/system/controller/manage_task.go
2025-07-07 20:11:59 +08:00

196 lines
6.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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