LASAPlatform/OpenAuth.App/ServiceApp/ManageApp.cs

395 lines
16 KiB
C#
Raw Normal View History

2025-06-12 15:09:40 +08:00
using DocumentFormat.OpenXml.Math;
using DocumentFormat.OpenXml.Wordprocessing;
2025-06-12 11:26:59 +08:00
using Infrastructure;
2025-05-12 16:53:24 +08:00
using OpenAuth.App.BaseApp.Base;
using OpenAuth.App.Interface;
2025-06-11 14:42:36 +08:00
using OpenAuth.App.ServiceApp.Request;
2025-06-12 11:26:59 +08:00
using OpenAuth.App.ServiceApp.Response;
2025-05-12 16:53:24 +08:00
using OpenAuth.Repository;
using OpenAuth.Repository.Domain;
2025-06-12 13:54:54 +08:00
using OpenAuth.WebApi.CloudSdk;
2025-05-12 16:53:24 +08:00
using SqlSugar;
namespace OpenAuth.App.ServiceApp
{
2025-05-20 15:47:41 +08:00
public class ManageApp : SqlSugarBaseApp<LasaDronePort, SugarDbContext>
2025-05-12 16:53:24 +08:00
{
2025-05-20 15:47:41 +08:00
public ManageApp(ISugarUnitOfWork<SugarDbContext> unitWork, ISimpleClient<LasaDronePort> repository, IAuth auth) : base(unitWork, repository, auth)
2025-05-12 16:53:24 +08:00
{
}
/// <summary>
/// 分页获取所有数据
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="key"></param>
/// <returns></returns>
2025-06-12 15:09:40 +08:00
public async Task<Response<PageInfo<List<LasaDronePort>>>> GetPageList(int page, int limit, string key)
2025-05-12 16:53:24 +08:00
{
2025-06-12 15:09:40 +08:00
RefAsync<int> totalCount = 0;
using (var db = UnitWork.CreateContext())
2025-05-12 16:53:24 +08:00
{
2025-06-12 15:09:40 +08:00
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 }
};
}
2025-05-12 16:53:24 +08:00
}
/// <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 }
};
}
}
2025-06-12 13:54:54 +08:00
2025-05-12 16:53:24 +08:00
/// <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 = "删除失败" };
}
}
2025-05-16 15:14:08 +08:00
//生成航线文件
2025-05-12 16:53:24 +08:00
2025-05-16 15:14:08 +08:00
#endregion
#region 项目管理
/// <summary>
/// 获取项目列表
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
2025-06-12 11:26:59 +08:00
public async Task<Response<List<dynamic>>> GetWorkspaceList(string key)
2025-05-16 15:14:08 +08:00
{
RefAsync<int> totalCount = 0;
using (var db = UnitWork.CreateContext())
{
var list = await db.LasaWorkspace.AsQueryable()
.WhereIF(!string.IsNullOrEmpty(key), a => a.WorkspaceName.Contains(key))
2025-06-12 11:26:59 +08:00
.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
})
2025-05-16 15:14:08 +08:00
.ToListAsync();
2025-06-12 11:26:59 +08:00
return new Response<List<dynamic>>
2025-05-16 15:14:08 +08:00
{
Result = list
};
}
}
//添加项目
2025-06-11 14:42:36 +08:00
public async Task<Response<bool>> AddWorkspace(WorkSpace info)
2025-05-16 15:14:08 +08:00
{
using (var db = UnitWork.CreateContext())
{
2025-06-11 14:42:36 +08:00
LasaWorkspace lasaWorkspace= info.LasaWorkspace;
2025-05-16 15:14:08 +08:00
lasaWorkspace.Id = Guid.NewGuid().ToString();
lasaWorkspace.CreateId = _auth.GetCurrentUser().User.Id;
lasaWorkspace.CreateTime = DateTime.Now;
2025-06-11 14:42:36 +08:00
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);
}
2025-06-12 11:26:59 +08:00
foreach (var item in info.Lockfly)
{
item.Id = Guid.NewGuid().ToString();
item.WorkSpaceId= lasaWorkspace.Id;
await db.LasaSpaceLockFly.InsertAsync(item);
}
2025-06-11 14:42:36 +08:00
await db.LasaWorkspace.InsertAsync(lasaWorkspace);
await db.LasaSpaceDevice.InsertRangeAsync(devices);
await db.LasaSpaceUser.InsertRangeAsync(users);
2025-05-16 15:14:08 +08:00
if (db.Commit())
return new Response<bool> { Result = true, Message = "添加成功" };
else
return new Response<bool> { Result = false, Message = "添加失败" };
}
}
//编辑项目
2025-06-11 14:42:36 +08:00
public async Task<Response<bool>> EditWorkspace(WorkSpace info)
2025-05-16 15:14:08 +08:00
{
using (var db = UnitWork.CreateContext())
{
2025-06-11 14:42:36 +08:00
LasaWorkspace lasaWorkspace = info.LasaWorkspace;
2025-05-16 15:14:08 +08:00
var flag = await db.LasaWorkspace.UpdateAsync(lasaWorkspace);
2025-06-11 14:42:36 +08:00
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);
}
2025-06-12 11:26:59 +08:00
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);
}
}
2025-06-11 14:42:36 +08:00
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);
2025-05-16 15:14:08 +08:00
if (db.Commit())
return new Response<bool> { Result = true, Message = "编辑成功" };
else
return new Response<bool> { Result = false, Message = "编辑失败" };
}
}
2025-06-12 11:26:59 +08:00
//获取无人机信息
2025-06-12 14:06:42 +08:00
public async Task<Response<List<LasaDronePort>>> GetUavList()
2025-06-12 11:26:59 +08:00
{
using (var db = UnitWork.CreateContext())
{
var list=db.LasaSpaceDevice.AsQueryable()?.Select(r=>r.DeviceId).ToList();
2025-06-12 14:06:42 +08:00
var uavlist = await db.LasaDronePort.AsQueryable()
2025-06-12 11:26:59 +08:00
.Where(r=>!list.Contains(r.Id))
.ToListAsync();
2025-06-12 14:06:42 +08:00
return new Response<List<LasaDronePort>>
2025-06-12 11:26:59 +08:00
{
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();
2025-06-12 14:06:42 +08:00
var uav=db.LasaDronePort.AsQueryable()
2025-06-12 11:26:59 +08:00
.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;
2025-06-12 14:06:42 +08:00
res.LasaDronePort = uav;
2025-06-12 11:26:59 +08:00
res.lasaSpaceLockFlies = lockfly;
res.workspace = workspace;
return new Response<WorkSpaceRes>
{
Result = res
};
}
}
2025-05-16 15:14:08 +08:00
//删除项目
public async Task<Response<bool>> DeleteWorkspace(string id)
{
using (var db = UnitWork.CreateContext())
{
2025-06-11 14:42:36 +08:00
await db.LasaWorkspace.UpdateAsync(u => new LasaWorkspace
{
IsDelete = true
}, u => u.Id == id);
2025-05-16 15:14:08 +08:00
if (db.Commit())
return new Response<bool> { Result = true, Message = "删除成功" };
else
return new Response<bool> { Result = false, Message = "删除失败" };
}
}
#endregion
2025-06-12 13:54:54 +08:00
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
}
2025-05-12 16:53:24 +08:00
}
}