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 { public ManageApp(ISugarUnitOfWork unitWork, ISimpleClient repository, IAuth auth) : base(unitWork, repository, auth) { } /// /// 分页获取所有数据 /// /// /// /// /// public async Task>>> GetPageList(int pageIndex, int pageSize, string key) { int totalCount = 0; PageModel pageModel = new PageModel() { PageIndex = pageIndex, PageSize = pageSize, TotalCount = totalCount }; var list = await Repository.GetPageListAsync(it => it.Name.Contains(key), pageModel, it => it.UpdateTime, OrderByType.Desc); return new Response>> { Result = new PageInfo> { Items = list, Total = totalCount } }; } /// /// 获取无人机列表 /// /// /// /// /// public async Task>>> GetUavPageList(int page, int limit, string key) { RefAsync 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>> { Result = new PageInfo> { Items = list, Total = totalCount } }; } } /// /// 获取任务列表 /// /// /// /// /// public async Task>>> GetTaskPageList(int page, int limit, string key) { RefAsync 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>> { Result = new PageInfo> { Items = list, Total = totalCount } }; } } //添加任务 public async Task> 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 { Result = true, Message = "添加成功" }; else return new Response { Result = false, Message = "添加失败" }; } } //编辑任务 public async Task> EditTask(LasaTask task) { using (var db = UnitWork.CreateContext()) { var flag = await db.LasaTask.UpdateAsync(task); if (db.Commit()) return new Response { Result = true, Message = "编辑成功" }; else return new Response { Result = false, Message = "编辑失败" }; } } //删除任务 public async Task> DeleteTask(string id) { using (var db = UnitWork.CreateContext()) { var flag = await db.LasaTask.DeleteAsync(it => it.Id == id); if (db.Commit()) return new Response { Result = true, Message = "删除成功" }; else return new Response { Result = false, Message = "删除失败" }; } } #region 航线管理 /// /// 获取航线列表 /// /// /// /// /// public async Task>>> GetAirLinePageList(int page, int limit, string key) { RefAsync 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>> { Result = new PageInfo> { Items = list, Total = totalCount } }; } } //添加航线 public async Task> 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 { Result = true, Message = "添加成功" }; else return new Response { Result = false, Message = "添加失败" }; } } //编辑航线 public async Task> EditAirLine(LasaAirLine lasaAirLine) { using (var db = UnitWork.CreateContext()) { var flag = await db.LasaAirLine.UpdateAsync(lasaAirLine); if (db.Commit()) return new Response { Result = true, Message = "编辑成功" }; else return new Response { Result = false, Message = "编辑失败" }; } } //删除航线 public async Task> DeleteAirLine(string id) { using (var db = UnitWork.CreateContext()) { var flag = await db.LasaAirLine.DeleteAsync(it => it.Id == id); if (db.Commit()) return new Response { Result = true, Message = "删除成功" }; else return new Response { Result = false, Message = "删除失败" }; } } //生成航线文件 #endregion #region 项目管理 /// /// 获取项目列表 /// /// /// public async Task>> GetWorkspaceList(string key) { RefAsync totalCount = 0; using (var db = UnitWork.CreateContext()) { var list = await db.LasaWorkspace.AsQueryable() .WhereIF(!string.IsNullOrEmpty(key), a => a.WorkspaceName.Contains(key)) .LeftJoin((a,u)=>a.CreateId==u.Id) .Select((a, u) => new { a.Id, a.WorkspaceName, a.WorkspaceDesc, a.Sate, a.CreateTime, a.CreateId, u.Account, u.Name }) .ToListAsync(); return new Response> { Result = list }; } } //添加项目 public async Task> 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 devices= new List(); foreach(var item in info.DeviceIds) { LasaSpaceDevice sd = new LasaSpaceDevice(); sd.WorkSpaceId=lasaWorkspace.Id; sd.DeviceId = item; devices.Add(sd); } List users = new List(); 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 { Result = true, Message = "添加成功" }; else return new Response { Result = false, Message = "添加失败" }; } } //编辑项目 public async Task> EditWorkspace(WorkSpace info) { using (var db = UnitWork.CreateContext()) { LasaWorkspace lasaWorkspace = info.LasaWorkspace; var flag = await db.LasaWorkspace.UpdateAsync(lasaWorkspace); List devices = new List(); foreach (var item in info.DeviceIds) { LasaSpaceDevice sd = new LasaSpaceDevice(); sd.WorkSpaceId = lasaWorkspace.Id; sd.DeviceId = item; devices.Add(sd); } List users = new List(); 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 { Result = true, Message = "编辑成功" }; else return new Response { Result = false, Message = "编辑失败" }; } } //获取无人机信息 public async Task>> 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> { Result=uavlist }; } } /// /// 根据项目id获取项目信息 /// /// /// public async Task> 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((r, a) => r.Id == a.UserId) .Where((r, a) => a.WorkSpaceId == id) .Select((r, a) => r).ToList(); var uav=db.LasaDronePort.AsQueryable() .LeftJoin((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 { Result = res }; } } //删除项目 public async Task> 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 { Result = true, Message = "删除成功" }; else return new Response { Result = false, Message = "删除失败" }; } } #endregion public async Task ExecuteFlyTask(string taskId) { var airLine = await Repository.ChangeRepository>().GetByIdAsync(taskId); var wpml = airLine.WPML; // todo 查询sn var device = await Repository.ChangeRepository>().GetByIdAsync(airLine.UavId); var topic = string.Format(GatewayManager.FlightTaskPrepare, airLine.UavId) ; // todo 1. 下发任务,2. 执行任务 3. 改变任务库任务状态 // todo 创建飞行任务 // todo 改变任务状态 // todo } } }