395 lines
16 KiB
C#
395 lines
16 KiB
C#
using DocumentFormat.OpenXml.Math;
|
||
using DocumentFormat.OpenXml.Wordprocessing;
|
||
using Infrastructure;
|
||
using OpenAuth.App.BaseApp.Base;
|
||
using OpenAuth.App.Interface;
|
||
using OpenAuth.App.ServiceApp.Request;
|
||
using OpenAuth.App.ServiceApp.Response;
|
||
using OpenAuth.Repository;
|
||
using OpenAuth.Repository.Domain;
|
||
using OpenAuth.WebApi.CloudSdk;
|
||
using SqlSugar;
|
||
|
||
namespace OpenAuth.App.ServiceApp
|
||
{
|
||
public class ManageApp : SqlSugarBaseApp<LasaDronePort, SugarDbContext>
|
||
{
|
||
public ManageApp(ISugarUnitOfWork<SugarDbContext> unitWork, ISimpleClient<LasaDronePort> repository, IAuth auth) : base(unitWork, repository, auth)
|
||
{
|
||
}
|
||
|
||
/// <summary>
|
||
/// 分页获取所有数据
|
||
/// </summary>
|
||
/// <param name="pageIndex"></param>
|
||
/// <param name="pageSize"></param>
|
||
/// <param name="key"></param>
|
||
/// <returns></returns>
|
||
public async Task<Response<PageInfo<List<LasaDronePort>>>> GetPageList(int page, int limit, string key)
|
||
{
|
||
|
||
RefAsync<int> totalCount = 0;
|
||
using (var db = UnitWork.CreateContext())
|
||
{
|
||
var list = await db.LasaDronePort.AsQueryable().Includes(a => a.UavList)
|
||
.WhereIF(!string.IsNullOrEmpty(key), a => a.Name.Contains(key))
|
||
.ToPageListAsync(page, limit, totalCount);
|
||
return new Response<PageInfo<List<LasaDronePort>>>
|
||
{
|
||
Result = new PageInfo<List<LasaDronePort>> { Items = list, Total = totalCount }
|
||
};
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 获取无人机列表
|
||
/// </summary>
|
||
/// <param name="page"></param>
|
||
/// <param name="limit"></param>
|
||
/// <param name="key"></param>
|
||
/// <returns></returns>
|
||
public async Task<Response<PageInfo<List<LasaUav>>>> GetUavPageList(int page, int limit, string key)
|
||
{
|
||
RefAsync<int> totalCount = 0;
|
||
using (var db = UnitWork.CreateContext())
|
||
{
|
||
var list = await db.LasaUav.AsQueryable()
|
||
.WhereIF(!string.IsNullOrEmpty(key), a => a.Name.Contains(key))
|
||
.ToPageListAsync(page, limit, totalCount);
|
||
return new Response<PageInfo<List<LasaUav>>>
|
||
{
|
||
Result = new PageInfo<List<LasaUav>> { Items = list, Total = totalCount }
|
||
};
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取任务列表
|
||
/// </summary>
|
||
/// <param name="page"></param>
|
||
/// <param name="limit"></param>
|
||
/// <param name="key"></param>
|
||
/// <returns></returns>
|
||
public async Task<Response<PageInfo<List<LasaTask>>>> GetTaskPageList(int page, int limit, string key)
|
||
{
|
||
RefAsync<int> totalCount = 0;
|
||
using (var db = UnitWork.CreateContext())
|
||
{
|
||
var list = await db.LasaTask.AsQueryable()
|
||
.WhereIF(!string.IsNullOrEmpty(key), a => a.TaskName.Contains(key))
|
||
.ToPageListAsync(page, limit, totalCount);
|
||
return new Response<PageInfo<List<LasaTask>>>
|
||
{
|
||
Result = new PageInfo<List<LasaTask>> { Items = list, Total = totalCount }
|
||
};
|
||
}
|
||
}
|
||
//添加任务
|
||
public async Task<Response<bool>> AddTask(LasaTask task)
|
||
{
|
||
using (var db = UnitWork.CreateContext())
|
||
{
|
||
task.Id = Guid.NewGuid().ToString();
|
||
task.CreateId = _auth.GetCurrentUser().User.Id;
|
||
task.CreateTime = DateTime.Now;
|
||
var flag = await db.LasaTask.InsertAsync(task);
|
||
if(db.Commit())
|
||
return new Response<bool> { Result = true, Message = "添加成功" };
|
||
else
|
||
return new Response<bool> { Result = false, Message = "添加失败" };
|
||
}
|
||
}
|
||
//编辑任务
|
||
public async Task<Response<bool>> EditTask(LasaTask task)
|
||
{
|
||
using (var db = UnitWork.CreateContext())
|
||
{
|
||
var flag = await db.LasaTask.UpdateAsync(task);
|
||
if (db.Commit())
|
||
return new Response<bool> { Result = true, Message = "编辑成功" };
|
||
else
|
||
return new Response<bool> { Result = false, Message = "编辑失败" };
|
||
}
|
||
}
|
||
//删除任务
|
||
public async Task<Response<bool>> DeleteTask(string id)
|
||
{
|
||
using (var db = UnitWork.CreateContext())
|
||
{
|
||
var flag = await db.LasaTask.DeleteAsync(it => it.Id == id);
|
||
if (db.Commit())
|
||
return new Response<bool> { Result = true, Message = "删除成功" };
|
||
else
|
||
return new Response<bool> { Result = false, Message = "删除失败" };
|
||
}
|
||
}
|
||
#region 航线管理
|
||
/// <summary>
|
||
/// 获取航线列表
|
||
/// </summary>
|
||
/// <param name="page"></param>
|
||
/// <param name="limit"></param>
|
||
/// <param name="key"></param>
|
||
/// <returns></returns>
|
||
public async Task<Response<PageInfo<List<LasaAirLine>>>> GetAirLinePageList(int page, int limit, string key)
|
||
{
|
||
RefAsync<int> totalCount = 0;
|
||
using (var db = UnitWork.CreateContext())
|
||
{
|
||
var list = await db.LasaAirLine.AsQueryable()
|
||
.WhereIF(!string.IsNullOrEmpty(key), a => a.AirLineName.Contains(key))
|
||
.ToPageListAsync(page, limit, totalCount);
|
||
return new Response<PageInfo<List<LasaAirLine>>>
|
||
{
|
||
Result = new PageInfo<List<LasaAirLine>> { Items = list, Total = totalCount }
|
||
};
|
||
}
|
||
}
|
||
//添加航线
|
||
public async Task<Response<bool>> AddAirLine(LasaAirLine lasaAirLine)
|
||
{
|
||
using (var db = UnitWork.CreateContext())
|
||
{
|
||
lasaAirLine.Id = Guid.NewGuid().ToString();
|
||
lasaAirLine.CreateId = _auth.GetCurrentUser().User.Id;
|
||
lasaAirLine.CreateTime = DateTime.Now;
|
||
var flag = await db.LasaAirLine.InsertAsync(lasaAirLine);
|
||
if (db.Commit())
|
||
return new Response<bool> { Result = true, Message = "添加成功" };
|
||
else
|
||
return new Response<bool> { Result = false, Message = "添加失败" };
|
||
}
|
||
}
|
||
//编辑航线
|
||
public async Task<Response<bool>> EditAirLine(LasaAirLine lasaAirLine)
|
||
{
|
||
using (var db = UnitWork.CreateContext())
|
||
{
|
||
var flag = await db.LasaAirLine.UpdateAsync(lasaAirLine);
|
||
if (db.Commit())
|
||
return new Response<bool> { Result = true, Message = "编辑成功" };
|
||
else
|
||
return new Response<bool> { Result = false, Message = "编辑失败" };
|
||
}
|
||
}
|
||
//删除航线
|
||
public async Task<Response<bool>> DeleteAirLine(string id)
|
||
{
|
||
using (var db = UnitWork.CreateContext())
|
||
{
|
||
var flag = await db.LasaAirLine.DeleteAsync(it => it.Id == id);
|
||
if (db.Commit())
|
||
return new Response<bool> { Result = true, Message = "删除成功" };
|
||
else
|
||
return new Response<bool> { Result = false, Message = "删除失败" };
|
||
}
|
||
}
|
||
//生成航线文件
|
||
|
||
#endregion
|
||
#region 项目管理
|
||
/// <summary>
|
||
/// 获取项目列表
|
||
/// </summary>
|
||
/// <param name="key"></param>
|
||
/// <returns></returns>
|
||
public async Task<Response<List<dynamic>>> GetWorkspaceList(string key)
|
||
{
|
||
RefAsync<int> totalCount = 0;
|
||
using (var db = UnitWork.CreateContext())
|
||
{
|
||
var list = await db.LasaWorkspace.AsQueryable()
|
||
.WhereIF(!string.IsNullOrEmpty(key), a => a.WorkspaceName.Contains(key))
|
||
.LeftJoin<SysUser>((a,u)=>a.CreateId==u.Id)
|
||
.Select<dynamic>((a, u) => new
|
||
{
|
||
a.Id,
|
||
a.WorkspaceName,
|
||
a.WorkspaceDesc,
|
||
a.Sate,
|
||
a.CreateTime,
|
||
a.CreateId,
|
||
u.Account,
|
||
u.Name
|
||
})
|
||
.ToListAsync();
|
||
return new Response<List<dynamic>>
|
||
{
|
||
Result = list
|
||
};
|
||
}
|
||
}
|
||
//添加项目
|
||
public async Task<Response<bool>> AddWorkspace(WorkSpace info)
|
||
{
|
||
using (var db = UnitWork.CreateContext())
|
||
{
|
||
LasaWorkspace lasaWorkspace= info.LasaWorkspace;
|
||
lasaWorkspace.Id = Guid.NewGuid().ToString();
|
||
lasaWorkspace.CreateId = _auth.GetCurrentUser().User.Id;
|
||
lasaWorkspace.CreateTime = DateTime.Now;
|
||
|
||
List<LasaSpaceDevice> devices= new List<LasaSpaceDevice>();
|
||
foreach(var item in info.DeviceIds)
|
||
{
|
||
LasaSpaceDevice sd = new LasaSpaceDevice();
|
||
sd.WorkSpaceId=lasaWorkspace.Id;
|
||
sd.DeviceId = item;
|
||
devices.Add(sd);
|
||
}
|
||
|
||
List<LasaSpaceUser> users = new List<LasaSpaceUser>();
|
||
foreach (var item in info.UserIds)
|
||
{
|
||
LasaSpaceUser sd = new LasaSpaceUser();
|
||
sd.WorkSpaceId = lasaWorkspace.Id;
|
||
sd.UserId = item;
|
||
users.Add(sd);
|
||
}
|
||
|
||
foreach (var item in info.Lockfly)
|
||
{
|
||
item.Id = Guid.NewGuid().ToString();
|
||
item.WorkSpaceId= lasaWorkspace.Id;
|
||
await db.LasaSpaceLockFly.InsertAsync(item);
|
||
}
|
||
await db.LasaWorkspace.InsertAsync(lasaWorkspace);
|
||
await db.LasaSpaceDevice.InsertRangeAsync(devices);
|
||
await db.LasaSpaceUser.InsertRangeAsync(users);
|
||
if (db.Commit())
|
||
return new Response<bool> { Result = true, Message = "添加成功" };
|
||
else
|
||
return new Response<bool> { Result = false, Message = "添加失败" };
|
||
}
|
||
}
|
||
//编辑项目
|
||
public async Task<Response<bool>> EditWorkspace(WorkSpace info)
|
||
{
|
||
using (var db = UnitWork.CreateContext())
|
||
{
|
||
LasaWorkspace lasaWorkspace = info.LasaWorkspace;
|
||
var flag = await db.LasaWorkspace.UpdateAsync(lasaWorkspace);
|
||
List<LasaSpaceDevice> devices = new List<LasaSpaceDevice>();
|
||
foreach (var item in info.DeviceIds)
|
||
{
|
||
LasaSpaceDevice sd = new LasaSpaceDevice();
|
||
sd.WorkSpaceId = lasaWorkspace.Id;
|
||
sd.DeviceId = item;
|
||
devices.Add(sd);
|
||
}
|
||
|
||
List<LasaSpaceUser> users = new List<LasaSpaceUser>();
|
||
foreach (var item in info.UserIds)
|
||
{
|
||
LasaSpaceUser sd = new LasaSpaceUser();
|
||
sd.WorkSpaceId = lasaWorkspace.Id;
|
||
sd.UserId = item;
|
||
users.Add(sd);
|
||
}
|
||
foreach (var item in info.Lockfly)
|
||
{
|
||
if (!string.IsNullOrEmpty(item.Id))
|
||
{
|
||
await db.LasaSpaceLockFly.UpdateAsync(item);
|
||
}
|
||
else
|
||
{
|
||
item.Id = Guid.NewGuid().ToString();
|
||
item.WorkSpaceId = lasaWorkspace.Id;
|
||
await db.LasaSpaceLockFly.InsertAsync(item);
|
||
}
|
||
}
|
||
|
||
await db.LasaSpaceDevice.DeleteAsync(r=>r.WorkSpaceId == lasaWorkspace.Id);
|
||
await db.LasaSpaceDevice.InsertRangeAsync(devices);
|
||
await db.LasaSpaceUser.DeleteAsync(r=>r.WorkSpaceId==lasaWorkspace.Id);
|
||
await db.LasaSpaceUser.InsertRangeAsync(users);
|
||
if (db.Commit())
|
||
return new Response<bool> { Result = true, Message = "编辑成功" };
|
||
else
|
||
return new Response<bool> { Result = false, Message = "编辑失败" };
|
||
}
|
||
}
|
||
//获取无人机信息
|
||
public async Task<Response<List<LasaDronePort>>> GetUavList()
|
||
{
|
||
|
||
using (var db = UnitWork.CreateContext())
|
||
{
|
||
var list=db.LasaSpaceDevice.AsQueryable()?.Select(r=>r.DeviceId).ToList();
|
||
|
||
var uavlist = await db.LasaDronePort.AsQueryable()
|
||
.Where(r=>!list.Contains(r.Id))
|
||
.ToListAsync();
|
||
return new Response<List<LasaDronePort>>
|
||
{
|
||
Result=uavlist
|
||
};
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据项目id获取项目信息
|
||
/// </summary>
|
||
/// <param name="id"></param>
|
||
/// <returns></returns>
|
||
public async Task<Response<WorkSpaceRes>> GetWorkSpaceById(string id)
|
||
{
|
||
using (var db = UnitWork.CreateContext())
|
||
{
|
||
WorkSpaceRes res=new WorkSpaceRes();
|
||
var workspace= await db.LasaWorkspace.AsQueryable().Where(r=>r.Id==id).FirstAsync();
|
||
var sysuser = db.User.AsQueryable()
|
||
.LeftJoin<LasaSpaceUser>((r, a) => r.Id == a.UserId)
|
||
.Where((r, a) => a.WorkSpaceId == id)
|
||
.Select((r, a) => r).ToList();
|
||
var uav=db.LasaDronePort.AsQueryable()
|
||
.LeftJoin<LasaSpaceDevice>((r,a)=>r.Id==a.DeviceId)
|
||
.Where((r,a)=>a.WorkSpaceId==id)
|
||
.Select((r,a)=>r).ToList();
|
||
var lockfly=db.LasaSpaceLockFly.AsQueryable().Where(r=>r.WorkSpaceId==id).ToList();
|
||
res.users = sysuser;
|
||
res.LasaDronePort = uav;
|
||
res.lasaSpaceLockFlies = lockfly;
|
||
res.workspace = workspace;
|
||
|
||
return new Response<WorkSpaceRes>
|
||
{
|
||
Result = res
|
||
};
|
||
}
|
||
}
|
||
|
||
//删除项目
|
||
public async Task<Response<bool>> DeleteWorkspace(string id)
|
||
{
|
||
using (var db = UnitWork.CreateContext())
|
||
{
|
||
await db.LasaWorkspace.UpdateAsync(u => new LasaWorkspace
|
||
{
|
||
IsDelete = true
|
||
}, u => u.Id == id);
|
||
if (db.Commit())
|
||
return new Response<bool> { Result = true, Message = "删除成功" };
|
||
else
|
||
return new Response<bool> { Result = false, Message = "删除失败" };
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
public async Task ExecuteFlyTask(string taskId)
|
||
{
|
||
var airLine = await Repository.ChangeRepository<SugarRepositiry<LasaAirLine>>().GetByIdAsync(taskId);
|
||
var wpml = airLine.WPML;
|
||
// todo 查询sn
|
||
var device = await Repository.ChangeRepository<SugarRepositiry<LasaUav>>().GetByIdAsync(airLine.UavId);
|
||
var topic = string.Format(GatewayManager.FlightTaskPrepare, airLine.UavId) ;
|
||
|
||
|
||
// todo 1. 下发任务,2. 执行任务 3. 改变任务库任务状态
|
||
// todo 创建飞行任务
|
||
// todo 改变任务状态
|
||
// todo
|
||
}
|
||
}
|
||
}
|