using DocumentFormat.OpenXml.EMMA; using DocumentFormat.OpenXml.Office2010.Excel; using DocumentFormat.OpenXml.Spreadsheet; using DocumentFormat.OpenXml.Wordprocessing; using Infrastructure; using NetTaste; using OpenAuth.App.BaseApp.Base; using OpenAuth.App.Config; using OpenAuth.App.Interface; using OpenAuth.App.Response; using OpenAuth.App.ServiceApp.FireManagement.Response; using OpenAuth.Repository; using OpenAuth.Repository.Domain.FireManagement; using SqlSugar; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OpenAuth.App.ServiceApp.FireManagement { public class FirePatrolApp : SqlSugarBaseApp { public FirePatrolApp(ISugarUnitOfWork unitWork, ISimpleClient repository, IAuth auth) : base(unitWork, repository, auth) { _auth = auth; } /// /// 巡查轨迹 /// /// /// /// /// public async Task>> GetPatrolInfoByUserId(long id, DateTime beginTime, DateTime endTime) { using (SugarDbContext db = base.UnitWork.CreateContext()) { var usertime = await db.FmUserTimeSlot.AsQueryable().Where(a => a.CreateId == id).ToListAsync(); var user = await db.User.GetFirstAsync(r => r.Id == id); if (user != null) { TimeSpan timeSpan = endTime.AddDays(1).Subtract(beginTime); int days = (int)timeSpan.TotalDays; List upinfo = new List(); var userpoint = await db.FmUserPointHistory.AsQueryable().Where(a => a.CreateTime >= beginTime && a.CreateTime <= endTime && a.CreateId == id) .SplitTable(beginTime, endTime).ToListAsync(); var list = db.SysFrontendSettingConfig.AsQueryable().Where(r => r.Code == "TimeSlot").ToList(); for (int i = 0; i < days; i++) { if (usertime.Count > 0) { foreach (var item in usertime) { var begslot = item.TimeSlot.Split('-'); UserPatrolInfoResp resin = new UserPatrolInfoResp { CreateId = id, Name = user.Name, StartTime = beginTime.ToString("yyyy-MM-dd ") + begslot[0], EndTime = beginTime.ToString("yyyy-MM-dd ") + begslot[1], }; if (userpoint.Where(a => a.CreateTime >= DateTime.Parse(resin.StartTime) && a.CreateTime <= DateTime.Parse(resin.EndTime)).Count() > 0) { upinfo.Add(resin); } } beginTime = beginTime.AddDays(1); } else { foreach (var item in list) { var begslot = item.CodeValue.Split('-'); UserPatrolInfoResp resin = new UserPatrolInfoResp { CreateId = id, Name = user.Name, StartTime = beginTime.ToString("yyyy-MM-dd ") + begslot[0], EndTime = beginTime.ToString("yyyy-MM-dd ") + begslot[1], }; if (userpoint.Where(a => a.CreateTime >= DateTime.Parse(resin.StartTime) && a.CreateTime <= DateTime.Parse(resin.EndTime)).Count() > 0) { upinfo.Add(resin); } } beginTime = beginTime.AddDays(1); } } upinfo = upinfo.OrderByDescending(r => r.StartTime).ToList(); return new Response> { Result = upinfo, Message = "操作成功" }; } else { throw new Exception("用户不存在"); } } } /// /// 巡查坐标 /// /// /// /// /// public async Task>> LoadPatrolPointByTime(long userId, DateTime beginTime, DateTime endTime) { using (SugarDbContext db = base.UnitWork.CreateContext()) { var userpoint = await db.FmUserPointHistory.AsQueryable().Where(a => a.CreateTime >= beginTime && a.CreateTime <= endTime && a.CreateId == userId) .SplitTable(beginTime, endTime).ToListAsync(); return new Response> { Result = userpoint, Message = "操作成功" }; } } /// /// 获取护林员巡查范围 /// /// /// public async Task> GetUserRange(string phone) { using (SugarDbContext db = base.UnitWork.CreateContext()) { string sql = "select \"Id\",\"Hulinyuan\",\"Lianxifang\",st_astext(ST_Boundary(geom)) as geom FROM fm_hulinyuanguanhufanwei WHERE \"Lianxifang\" like '%" + phone + "%'"; var dt = await db.Db.Ado.GetDataTableAsync(sql); var user = await db.User.GetFirstAsync(r => r.Account == phone); var query = await db.FmCheckInPoint.AsQueryable() .LeftJoin((a, b) => a.Id == b.PointId) .Where((a, b) => b.UserId == user.Id) .Select((a, b) => new { a.Id, a.Lng, a.Lat, a.PointName, }).ToListAsync(); var obj = new { UserRange = dt, CheckPoint = query }; if (dt.Rows.Count > 0) return new Response { Result = obj, Message = "操作成功" }; else return new Response { Result = null, Message = "暂无数据" }; } } //查询单条巡检记录 public async Task>> LoadPatrolPointByTimeSubsection(long id, DateTime beginTime, DateTime endTime) { using (SugarDbContext db = base.UnitWork.CreateContext()) { var check = await db.FmUserPointHistory.AsQueryable() .Where(a => a.CreateTime >= beginTime && a.CreateTime <= endTime && a.CreateId == id) .SplitTable(beginTime, endTime).Take(10000) .OrderBy(a => a.CreateTime, OrderByType.Asc).ToListAsync(); return new Response> { Result = check, Message = "操作成功" }; } } public async Task>> LoadPatrolInfoByUserIdNew(long userId, DateTime beginTime, DateTime endTime) { using (SugarDbContext db = base.UnitWork.CreateContext()) { var usertime = db.FmUserTimeSlot.AsQueryable().Where(r => r.CreateId == userId).ToList(); var userinfo = db.User.AsQueryable().First(r => r.Id == userId); TimeSpan timeSpan = endTime.AddDays(1).Subtract(beginTime); int days = (int)timeSpan.TotalDays; List reslist = new List(); var info = await db.FmUserPointHistory.AsQueryable() .Where(a => a.CreateTime >= beginTime && a.CreateTime <= endTime && a.CreateId == userId) .SplitTable(beginTime, endTime).ToListAsync(); for (int i = 0; i < days; i++) { if (usertime.Count > 0) { foreach (var item in usertime) { var begslot = item.TimeSlot.Split('-'); PatrolinfoResp resin = new PatrolinfoResp(); resin.CreateId = userId; resin.Name = userinfo.Name; resin.StartTime = beginTime.ToString("yyyy-MM-dd ") + begslot[0]; resin.EndTime = beginTime.ToString("yyyy-MM-dd ") + begslot[1]; if (info.Where(a => a.CreateTime >= DateTime.Parse(resin.StartTime) && a.CreateTime <= DateTime.Parse(resin.EndTime)).Count() > 0) { reslist.Add(resin); } } beginTime = beginTime.AddDays(1); } else { var list = db.SysFrontendSettingConfig.AsQueryable().Where(r => r.Code == "TimeSlot").ToList(); foreach (var item in list) { var begslot = item.CodeValue.Split('-'); PatrolinfoResp resin = new PatrolinfoResp(); resin.CreateId = userId; resin.Name = userinfo.Name; resin.StartTime = beginTime.ToString("yyyy-MM-dd ") + begslot[0]; resin.EndTime = beginTime.ToString("yyyy-MM-dd ") + begslot[1]; if (info.Where(a => a.CreateTime >= DateTime.Parse(resin.StartTime) && a.CreateTime <= DateTime.Parse(resin.EndTime)).Count() > 0) { reslist.Add(resin); } } beginTime = beginTime.AddDays(1); } } return new Response> { Result = reslist, Message = "操作成功" }; } } } }