zhangbin 2 months ago
commit 8255857ec1

@ -72,7 +72,7 @@ namespace OpenAuth.App
_logger.LogInformation("所有状态为正在运行的任务已启动");
}
public void Add(AddOrUpdateOpenJobReq req)
public string Add(AddOrUpdateOpenJobReq req)
{
var obj = req.MapTo<SysOpenJob>();
obj.Id = Guid.NewGuid().ToString();
@ -81,6 +81,7 @@ namespace OpenAuth.App
obj.CreateUserId = user.Id.ToString();
obj.CreateUserName = user.Name;
Repository.Insert(obj);
return obj.Id;
}
public void AddStart(AddOrUpdateOpenJobReq req)
@ -131,6 +132,16 @@ namespace OpenAuth.App
return types.Select(u => u.FullName).ToList();
}
public void StartJob(string jobId)
{
var job = Repository.GetFirst(u => u.Id == jobId);
if (job == null)
{
throw new Exception("任务不存在");
}
job.Start(_scheduler);
}
public void ChangeJobStatus(ChangeJobStatusReq req)
{
var job = Repository.GetFirst(u => u.Id == req.Id);

@ -18,11 +18,16 @@ public class FlyTaskJob : IJob
public Task Execute(IJobExecutionContext context)
{
var jobId = context.MergedJobDataMap.GetString(Define.JOBMAPKEY);
if (string.IsNullOrEmpty(jobId))
{
return Task.CompletedTask;
}
var job = _openJobApp.Get(jobId);
if (job == null) return Task.CompletedTask;
var param = JsonConvert.DeserializeObject<dynamic>(job.JobCallParams);
var taskId = param.taskId;
_manageApp.ExecuteFlyTask(taskId);
var taskId = (string)param.taskId;
_ = _manageApp.ExecuteFlyTask(taskId);
_openJobApp.Delete(jobId.Select(c => c.ToString()).ToArray());
return Task.CompletedTask;
}
}

@ -5,6 +5,7 @@ using Infrastructure;
using Infrastructure.CloudSdk.minio;
using Infrastructure.CloudSdk.wayline;
using Microsoft.AspNetCore.Http;
using Microsoft.IdentityModel.Tokens;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using OpenAuth.App.BaseApp.Base;
@ -238,7 +239,7 @@ namespace OpenAuth.App.ServiceApp
}
}
/// <summary>
/// 获取机场sn获取无人机列表
/// </summary>
@ -389,6 +390,9 @@ namespace OpenAuth.App.ServiceApp
//添加任务
public async Task<Response<bool>> AddTask(LasaTask task)
{
var airLine = await Repository
.ChangeRepository<SugarRepositiry<LasaAirLine>>()
.GetByIdAsync(task.AirLineId);
using (var db = UnitWork.CreateContext())
{
var user = _auth.GetCurrentUser().User;
@ -397,29 +401,40 @@ namespace OpenAuth.App.ServiceApp
task.CreateUserName = user.Name;
task.CreateTime = DateTime.Now;
//task.FlightId = Guid.NewGuid().ToString();
// todo 根据
// 如:执行时长,单次定时的时间
// 0-飞行计划 1-指点飞行
task.FlightTaskType = 0; //
task.PlanExecuteDuration = airLine.ScheduleTime;
task.ExpectedFileCount = airLine.PictureTotal;
var flag = await db.LasaTask.InsertAsync(task);
// //{"0":"立即任务","1":"定时任务",
var type = task.TaskType;
if (type.Equals(1)) // 定时任务
{
// 0 0 10 23 7 ? 2025
// 计算执行时间
//task.ScheduledStartTime = DateTime.Now;
//task.ScheduledEndTime = DateTime.Now.AddHours(1);
AddOrUpdateOpenJobReq record = new AddOrUpdateOpenJobReq()
{
JobName = $"{task.Id}",
JobType = 0, // 本地任务
JobCall = "OpenAuth.App.BaseApp.Jobs.TaskJob",
JobCall = "OpenAuth.App.ServiceApp.FlyTaskJob",
JobCallParams = "{\"taskId\":\"" + task.Id + "\"}",
Cron = task.PeriodicFormula,
Status = 1, // 开启运行 todo 关于修改后关闭问题
Remark = "定时任务",
};
_openJobApp.Add(record);
var jobId = _openJobApp.Add(record);
_openJobApp.StartJob(jobId);
}
else if (type.Equals(0))
{
var x = DateTime.Now;
// 计算执行时间
task.ExecuteTime = x;
task.ScheduledStartTime = x;
task.ScheduledEndTime = x.AddMilliseconds(task.PlanExecuteDuration);
// 调用飞行任务
await ExecuteFlyTask(task.Id);
}
@ -840,12 +855,28 @@ namespace OpenAuth.App.ServiceApp
#endregion
// todo 保存任务时,执行任务
public async Task ExecuteFlyTask(string taskId)
{
// 任务信息
var task = await Repository.ChangeRepository<SugarRepositiry<LasaTask>>().GetByIdAsync(taskId);
// 如果任务被挂起,则直接失败
if (task.Status == 3)
{
var taskUpdate = new LasaTask
{
Id = taskId,
//任务因挂起失败
Status = 2,
Reason = "任务因挂起执行失败"
};
await Repository
.ChangeRepository<SugarRepositiry<LasaTask>>()
.AsUpdateable(taskUpdate)
.IgnoreNullColumns()
.ExecuteCommandAsync();
return;
}
// 航线文件信息
var airLine = await Repository.ChangeRepository<SugarRepositiry<LasaAirLine>>()
.GetByIdAsync(task.AirLineId);

@ -34,5 +34,27 @@ namespace OpenAuth.Repository.Domain
public float? TaskOffLat { get; set; }
public string Folder { get; set; }
/// <summary>
/// 起飞点高度
/// </summary>
public int? TakeOffHeight { get; set; }
/// <summary>
/// 无人机类型
/// </summary>
public string UavType { get; set; }
/// <summary>
/// // 无人机型号
/// </summary>
public string UavModel { get; set; }
public string LineData { get; set; }
public string Area { get; set; }
public string LineLength { get; set; }
public long ScheduleTime { get; set; }
public int? PictureTotal { get; set; }
}
}
Loading…
Cancel
Save