using Infrastructure; using OpenAuth.App.Base; using OpenAuth.App.BaseApp; using OpenAuth.App.BaseApp.Base; using OpenAuth.App.Interface; using OpenAuth.App.ServiceApp.DroneCloudQueryManage.Request; using OpenAuth.App.ServiceApp.Response; using OpenAuth.Repository; using OpenAuth.Repository.Domain; using SqlSugar; namespace OpenAuth.App.ServiceApp.DroneCloudQuery { public partial class DroneCloudQueryApp : SqlSugarBaseApp { ISqlSugarClient client; private ImMsgApp _immsgApp; public DroneCloudQueryApp(ISugarUnitOfWork unitWork, ISimpleClient repository, ISqlSugarClient sqlSugarClient, IAuth auth, ImMsgApp immsgApp) : base(unitWork, repository, auth) { client = sqlSugarClient; _immsgApp = immsgApp; } //添加任务 public Response AddDroneTask(string geomid, string caseno,string countyNmae) { var user = _auth.GetCurrentUser().User; //初始化查询结果 Repository.Domain.DroneCloudQuery droneCloudQuery = new Repository.Domain.DroneCloudQuery() { Id = Guid.NewGuid().ToString(), GeomId = geomid, CreateTime = DateTime.Now, CreateUser = user?.Id.ToString() ?? "" }; DroneCloudTask droneCloudTask = new DroneCloudTask() { Id = Guid.NewGuid().ToString(), GeomId = geomid, CreateTime = DateTime.Now, CreateUser = user?.Id.ToString() ?? "", QueryId = droneCloudQuery.Id, CaseNo = caseno, CountyName = countyNmae }; //添加数据 var flag = client.Ado.UseTran(() => { client.Insertable(droneCloudQuery).ExecuteCommand(); client.Insertable(droneCloudTask).ExecuteCommand(); }); if (flag.IsSuccess) { return new Response { Result = true }; } else { return new Response { Result = false, Message = "操作失败" }; } } public async Task> LoadDroneTask() { //返回值 var data = await client.Queryable().Where(r => r.State != 2) .OrderByDescending(a => a.CreateTime).ToListAsync(); List gids = data.SelectMany(item => item.GeomId.Split(',') .Select(id => int.TryParse(id, out var gid) ? gid : (int?)null) .Where(gid => gid.HasValue) .Select(gid => gid.Value)).ToList(); var geomData = await client.SqlQueryable("SELECT gid,\"Id\",handle_status_id,handle_status_name,is_illegal,is_intact,typename,original_case_no,case_no,ST_AsText(geom) AS geom FROM view_drone_shp_data") .Where(r => gids.Contains(r.gid)) .ToListAsync(); //获取之后,需要把这些任务标记为正在查询 foreach (var item in data) { item.State = 1; } await client.Updateable(data).ExecuteCommandAsync(); return new Response { Result = new DroneCloudTaskResp { droneCloudTasks = data, droneShpDatas = geomData } }; } #region 接收查询结果 public async Task> UpdateCloudQuery(CloudQueryReq req) { using (var uow = base.UnitWork.CreateContext()) { //查询记录 var query = uow.DroneCloudQuery.AsQueryable().Where(r => r.Id == req.Id).First(); var task = client.Queryable().Where(r => r.QueryId == req.Id).First(); //更新记录 await uow.DroneCloudQuery.UpdateAsync(u => new Repository.Domain.DroneCloudQuery { ReceiveContent = req.ReceiveContent, ReceiveTime = req.ReceiveTime }, u => u.Id == req.Id); //更新任务状态 await uow.DroneCloudTask.UpdateAsync(u => new Repository.Domain.DroneCloudTask { State = 2, }, u => u.QueryId == req.Id); var flag = uow.Commit(); var content = new { queryid = req.Id, geomid = task == null ? "" : task.GeomId, caseno = task == null ? "" : task.CaseNo }; var contents = Json.ToJson(content); //添加推送数据的用户 List users = new List(); if (query != null) { users.Add(query.CreateUser); } //推送数据 if (flag == true) { try { await _immsgApp.SendMsg("CloudQuery", users, contents, "4", req.Id); } catch { return new Response { Result = flag, Message = "数据存储成功,推送失败" }; } } //返回值 return new Response { Result = flag, Message = flag == true ? "接收数据成功" : "接收数据失败" }; } } #endregion #region 查询云查询结果 /// /// 根据云查询id获取查询结果 /// /// 结果id,消息推送的msg /// public async Task> LoadCloudQueryById(string id) { //返回值 var data = await client.Queryable().Where(r => r.Id == id).FirstAsync(); return new Response { Result = data }; } #endregion /// /// 根据云查询id获取查询结果 /// /// 结果id,消息推送的msg /// public async Task> LoadCloudQueryByCaseNo(string geomId,string caseno) { //返回值 var data = await client.Queryable().Where(r =>r.GeomId== geomId && r.CaseNo==caseno).OrderByDescending(a => a.CreateTime).FirstAsync(); return new Response { Result = data }; } /// /// 根据云查询id获取查询结果 /// /// 结果id,消息推送的msg /// public async Task>>> LoadCloudQueryAll(string geomId, string caseno,int page,int limit) { RefAsync totalCount = 0; //返回值 var data = await client.Queryable().WhereIF(!string.IsNullOrEmpty(geomId),r=> r.GeomId == geomId) .WhereIF(!string.IsNullOrEmpty(caseno), r => r.CaseNo == caseno).OrderByDescending(a => a.CreateTime).ToPageListAsync(page, limit, totalCount); return new Response>> { Result = new PageInfo> { Items = data, Total = totalCount } }; } public async Task>> getLandType() { string sql = $"select id,name from drone_land_type"; //返回值 var data = await client.Ado.SqlQueryAsync(sql); return new Response> { Result = data }; } } }