LASAPlatform/OpenAuth.App/ServiceApp/ManageApp.cs

467 lines
18 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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)
{
}
#region 机场管理
/// <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)
.Where(a => a.IsDelete == false)
.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="task"></param>
/// <returns></returns>
public async Task<Response<bool>> EditDronePort(LasaDronePort info)
{
using (var db = UnitWork.CreateContext())
{
var flag = await db.LasaDronePort.UpdateAsync(it => new LasaDronePort()
{
Name = info.Name,
WorkSpaceId = info.WorkSpaceId,
}, it => it.Id == info.Id);
if (db.Commit())
return new Response<bool> { Result = true, Message = "编辑成功" };
else
return new Response<bool> { Result = false, Message = "编辑失败" };
}
}
//删除机场信息
public async Task<Response<bool>> DeleteDronePort(string id)
{
using (var db = UnitWork.CreateContext())
{
await db.LasaDronePort.UpdateAsync(u => new LasaDronePort
{
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
/// <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="task"></param>
/// <returns></returns>
public async Task<Response<bool>> EditUav(LasaUav info)
{
using (var db = UnitWork.CreateContext())
{
var flag = await db.LasaUav.UpdateAsync(it => new LasaUav()
{
Name = info.Name,
}, it => it.Id == info.Id);
if (db.Commit())
return new Response<bool> { Result = true, Message = "编辑成功" };
else
return new Response<bool> { Result = false, Message = "编辑失败" };
}
}
//删除无人机
public async Task<Response<bool>> DeleteUav(string id)
{
using (var db = UnitWork.CreateContext())
{
await db.LasaUav.UpdateAsync(u => new LasaUav
{
IsDelete = true
}, u => u.Id == id);
if (db.Commit())
return new Response<bool> { Result = true, Message = "删除成功" };
else
return new Response<bool> { Result = false, Message = "删除失败" };
}
}
/// <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
}
}
}