diff --git a/OpenAuth.App/ServiceApp/FireManagement/FireGridApp.cs b/OpenAuth.App/ServiceApp/FireManagement/FireGridApp.cs index 469c1e4..1daadf1 100644 --- a/OpenAuth.App/ServiceApp/FireManagement/FireGridApp.cs +++ b/OpenAuth.App/ServiceApp/FireManagement/FireGridApp.cs @@ -1,16 +1,23 @@ -using DocumentFormat.OpenXml.Office2010.Excel; +using DocumentFormat.OpenXml.Drawing; +using DocumentFormat.OpenXml.Office2010.Excel; +using DocumentFormat.OpenXml.Spreadsheet; +using DocumentFormat.OpenXml.Wordprocessing; using Infrastructure; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; +using Newtonsoft.Json.Linq; using OpenAuth.App.BaseApp.Base; using OpenAuth.App.Const; using OpenAuth.App.Interface; +using OpenAuth.App.Response; using OpenAuth.App.ServiceApp.FireManagement.Request; +using OpenAuth.App.ServiceApp.FireManagement.Response; using OpenAuth.Repository; using OpenAuth.Repository.Domain; using OpenAuth.Repository.Domain.FireManagement; using SqlSugar; using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; @@ -124,7 +131,7 @@ namespace OpenAuth.App.ServiceApp.FireManagement //{ // throw new Exception("请在护林员巡查范围内设置打卡点"); //} - await db.FmCheckInPoint.UpdateAsync(r => new FmCheckInPoint + await db.FmCheckInPoint.UpdateAsync(r => new FmCheckInPoint { PointName = info.PointName, Lat = info.Lat, @@ -174,7 +181,69 @@ namespace OpenAuth.App.ServiceApp.FireManagement }; } } - + /// + /// 获取打卡记录 + /// + /// + /// + /// + /// + public async Task>>> GetCheckPointById(long id, int pageIndex = 1, int pageSize = 10) + { + using (SugarDbContext db = base.UnitWork.CreateContext()) + { + RefAsync totalNumber = 0; + var query = await db.FmCheckClockOn.AsQueryable() + .LeftJoin((a, b) => a.PointId == b.Id) + .LeftJoin((a, b, c) => a.UserId == c.Id) + .WhereIF(id != 0, (a, b, c) => a.PointId == id) + .Select((a, b, c) => new + { + a.Id, + a.Lng, + a.Lat, + b.PointName, + c.Name, + UserId = SqlFunc.Subqueryable().Where(a => a.PointId == id).ToList(a => a.UserId), + AreaId = SqlFunc.Subqueryable().Where(a => a.PointId == id).ToList(a => a.AreaId), + }).ToPageListAsync(pageIndex, pageSize, totalNumber); + return new Response>> + { + Result = new PageInfo> { Items = query, Total = totalNumber } + }; + } + } + /// + /// 获取打卡记录 + /// + /// + /// + /// + /// + public async Task>>> GetCheckInfoByUserId(long id, int pageIndex = 1, int pageSize = 10) + { + using (SugarDbContext db = base.UnitWork.CreateContext()) + { + RefAsync totalNumber = 0; + var query = await db.FmCheckClockOn.AsQueryable() + .LeftJoin((a, b) => a.PointId == b.Id) + .LeftJoin((a, b, c) => a.UserId == c.Id) + .WhereIF(id != 0, (a, b, c) => a.UserId == id) + .Select((a, b, c) => new + { + a.Id, + a.Lng, + a.Lat, + b.PointName, + c.Name, + a.ClockonTime + }).ToPageListAsync(pageIndex, pageSize, totalNumber); + return new Response>> + { + Result = new PageInfo> { Items = query, Total = totalNumber } + }; + } + } /// /// 查询打卡记录 /// @@ -210,6 +279,138 @@ namespace OpenAuth.App.ServiceApp.FireManagement } } + public async Task> GetStatisticsCount(long areaid, DateTime begintime, DateTime endtime) + { + using (SugarDbContext db = base.UnitWork.CreateContext()) + { + var orginfo = await db.SysOrg.AsQueryable().Where(r => r.Id == areaid).FirstAsync(); + var chileorg = (await db.SysOrg.AsQueryable().ToChildListAsync(it => it.ParentId, areaid)).Select(it => it.Id).ToList(); + JObject obj = new JObject(); + //护林员人数 + var hu = await db.User.AsQueryable().LeftJoin((a, b) => a.Id == b.UserId) + .LeftJoin((a, b, c) => a.Id == c.UserId) + .Where((a, b, c) => chileorg.Contains(c.OrgId)) + .Where((a, b, c) => b.RoleId == 555252989157446).ToListAsync(); + var userId = hu.Select(it => it.Id).Distinct().ToList(); + //巡查距离 + var xunchazongshu = await db.FmUserPointHistory.AsQueryable().Where(a => a.CreateTime >= begintime && a.CreateTime <= endtime && userId.Contains(a.CreateId)) + .SplitTable(begintime, endtime).SumAsync(a => a.Distance); + //打卡点 + var dakadian = await db.FmCheckInPoint.AsQueryable() + .LeftJoin((a, b) => a.Id == b.PointId) + .Where((a, b) => a.IsDelete == false && chileorg.Contains(b.AreaId)).CountAsync(); + //打卡次数 + var dakacishu = await db.FmCheckClockOn.AsQueryable() + .Where(a => userId.Contains(a.UserId)) + .Where(a => a.ClockonTime >= begintime && a.ClockonTime <= endtime).CountAsync(); + obj.Add("hulinyuan", userId.Count); + obj.Add("xunchazongshu", xunchazongshu); + obj.Add("dakadian", dakadian); + obj.Add("dakacishu", dakacishu); + return new Response + { + Result = obj + }; + } + } + public async Task> GetstatisticsOld(long areaid, DateTime begintime, DateTime endtime, int pageSize, int pageIndex) + { + using (SugarDbContext db = base.UnitWork.CreateContext()) + { + var orginfo = await db.SysOrg.AsQueryable().Where(r => r.Id == areaid).FirstAsync(); + var chileorg = (await db.SysOrg.AsQueryable().ToChildListAsync(it => it.ParentId, areaid)).Select(it => it.Id).ToList(); + var userlist = db.User.AsQueryable().LeftJoin((a, b) => a.Id == b.UserId) + .LeftJoin((a, b, c) => a.Id == c.UserId) + .LeftJoin((a, b, c, d) => c.OrgId == d.Id) + .Where((a, b, c, d) => chileorg.Contains(c.OrgId)) + .Where((a, b, c, d) => b.RoleId == 555252989157446) + .Select((a, b, c, d) => new PointstatisticsResp + { + Id = a.Id, + Name = a.Name, + Account = a.Account, + AreaName = d.Name, + dakacishu = SqlFunc.Subqueryable().Where(r => r.UserId == a.Id).Where(r => r.ClockonTime >= begintime && r.ClockonTime <= endtime).Count(), + dakadian = SqlFunc.Subqueryable().Where(p => p.UserId == a.Id).Count(), + lengths = SqlFunc.Subqueryable().Where(r => r.CreateId == a.Id).Where(r => r.CreateTime >= begintime && r.CreateTime <= endtime).Sum(r => r.Distance), + + }).ToList(); + return new Response + { + Result = new JObject() + }; + } + } + public async Task>>> Getstatistics(long areaid, DateTime begintime, DateTime endtime, int pageIndex, int pageSize) + { + using (SugarDbContext db = base.UnitWork.CreateContext()) + { + RefAsync totalPage = 0; + var orginfo = await db.SysOrg.AsQueryable().Where(r => r.Id == areaid).FirstAsync(); + var chileorg = (await db.SysOrg.AsQueryable().ToChildListAsync(it => it.ParentId, areaid)).Select(it => it.Id).ToList(); + var userlist = await db.User.AsQueryable().LeftJoin((a, b) => a.Id == b.UserId) + .LeftJoin((a, b, c) => a.Id == c.UserId) + .LeftJoin((a, b, c, d) => c.OrgId == d.Id) + .Where((a, b, c, d) => chileorg.Contains(c.OrgId)) + .Where((a, b, c, d) => b.RoleId == 555252989157446) + .Select((a, b, c, d) => new PointstatisticsResp + { + Id = a.Id, + Name = a.Name, + Account = a.Account, + AreaName = d.Name, + }) + .ToPageListAsync(pageIndex, pageSize, totalPage); + foreach (var item in userlist) + { + item.dakacishu = await db.FmCheckClockOn.AsQueryable() + .Where(r => r.UserId == item.Id) + .Where(r => r.ClockonTime >= begintime && r.ClockonTime <= endtime).CountAsync(); + item.dakadian = await db.FmCheckPointUser.AsQueryable() + .Where(r => r.UserId == item.Id).CountAsync(); + var lengths = await db.FmUserPointHistory.AsQueryable() + .Where(r => r.CreateId == item.Id && r.Intype == 1) + .Where(r => r.CreateTime >= begintime && r.CreateTime <= endtime).SplitTable(begintime, endtime).SumAsync(r => r.Distance); + + item.xunjian = lengths > 0 ? 1 : 0; + } + return new Response>> + { + Result = new PageInfo> { Items = userlist, Total = totalPage } + }; + } + } + + //导出统计 + //public MemoryStream ExportStatisticsNew(long areaid, DateTime begintime, DateTime endtime) + //{ + // using (SugarDbContext db = base.UnitWork.CreateContext()) + // { + // var user = _auth.GetCurrentUser().User; + // //该用户下包含所有部门 + // List deplist = new List(); + // long level = 0; + // if (user != null && user.Id != -1) + // { + // var departs = db.SysUserOrg.AsQueryable().Where(r => r.UserId == user.Id).ToList(); + // foreach (var item in departs) + // { + // var list = db.SysOrg.AsQueryable().ToChildList(it => it.ParentId, item.OrgId) + // ?.Select(it => it.Id.ToString()).ToList(); + // deplist = deplist.Union(list).ToList(); + // } + // //获取用户分配部门的最高级别 + // var uorg = departs.OrderBy(r => r.Level).FirstOrDefault(); + // if (uorg != null) + // { + // level = uorg.Level; + // } + // } + + // } + + //} + //上传坐标 //public async Task> UploadLocation(FmUserPoint info) //{ diff --git a/OpenAuth.App/ServiceApp/FireManagement/FireManagementApp.cs b/OpenAuth.App/ServiceApp/FireManagement/FireManagementApp.cs index 71d8590..dc1d965 100644 --- a/OpenAuth.App/ServiceApp/FireManagement/FireManagementApp.cs +++ b/OpenAuth.App/ServiceApp/FireManagement/FireManagementApp.cs @@ -17,6 +17,9 @@ using DocumentFormat.OpenXml.Spreadsheet; using OpenAuth.Repository.Domain; using OpenAuth.App.ServiceApp.FireManagement.Response; using DocumentFormat.OpenXml.EMMA; +using OpenAuth.App.Response; +using NPOI.SS.Formula.PTG; +using Infrastructure.Extensions; namespace OpenAuth.App.ServiceApp.FireManagement { @@ -369,5 +372,75 @@ namespace OpenAuth.App.ServiceApp.FireManagement } } #endregion + /// + /// 在线情况 + /// + /// + /// + public async Task>> GetPointUserOnLine(UserOnLineReq pageReq) + { + using (var db = base.UnitWork.CreateContext()) + { + RefAsync totalNumber = 0; + var user = _auth.GetCurrentUser().User; + //该用户下包含所有部门 + var orgid = _auth.GetCurrentUser().Orgs; + var chileorglist = new List(); + foreach (var item in orgid) + { + var chileorg = (await db.SysOrg.AsQueryable().ToChildListAsync(it => it.ParentId, item)).Select(it => it.Id).ToList(); + chileorglist.AddRange(chileorg); + } + var userInfoQuery = db.User.AsQueryable() + .LeftJoin((a, b) => a.Id == b.CreateId) + .LeftJoin((a, b, c) => a.Id == c.UserId) + .Where((a, b, c) => a.Status == 0 && chileorglist.Contains(c.UserId)); + var userinfo = await userInfoQuery + .Select((a, b, c) => new UserOnLineResp + { + CreateId = a.Id, + Name = a.Name, + Lat = b.Lat, + Lng = b.Lng, + CreateTime = b.CreateTime, + Phone = a.Account, + State = b.CreateTime.AddMinutes(2) > DateTime.Now ? "在线" : "离线", + IsIn = b.Intype, + OnLineTime = SqlFunc.DateDiff(DateType.Minute, b.CreateTime, DateTime.Now), + TownName = SqlFunc.Subqueryable() + .Where(sf => sf.UserId == a.Id) + .LeftJoin((sf, gs) => sf.OrgId == gs.Id) + .SelectStringJoin((sf, gs) => gs.Name, ",") + }) + .MergeTable() + .Distinct() + .WhereIF(!string.IsNullOrEmpty(pageReq.townname), it => it.TownName.Contains(pageReq.townname)) + .WhereIF(pageReq.isonline != "全部", it => it.State == pageReq.isonline) + .OrderByDescending(it => it.CreateTime) + .ToPageListAsync(pageReq.page, pageReq.limit, totalNumber); + + var onlineCount = await userInfoQuery + .Where((a, b, c) => a.CreateTime.AddMinutes(2) > DateTime.Now) + .Select(a => a.Id) + .Distinct() + .CountAsync(); + + // 离线人数 + var offlineCount = totalNumber - onlineCount; + + var enddata = new + { + userinfo, + online = onlineCount, + offline = offlineCount, + }; + + + return new Response> + { + Result = new PageInfo { Items = enddata, Total = totalNumber } + }; + } + } } } diff --git a/OpenAuth.App/ServiceApp/FireManagement/FirePatrolApp.cs b/OpenAuth.App/ServiceApp/FireManagement/FirePatrolApp.cs index b5cd5bf..49b5068 100644 --- a/OpenAuth.App/ServiceApp/FireManagement/FirePatrolApp.cs +++ b/OpenAuth.App/ServiceApp/FireManagement/FirePatrolApp.cs @@ -9,6 +9,11 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Infrastructure; +using OpenAuth.App.ServiceApp.FireManagement.Response; +using DocumentFormat.OpenXml.Spreadsheet; +using DocumentFormat.OpenXml.EMMA; +using OpenAuth.App.Config; +using System.Data; namespace OpenAuth.App.ServiceApp.FireManagement { @@ -19,7 +24,14 @@ namespace OpenAuth.App.ServiceApp.FireManagement { _auth = auth; } - public async Task> GetPatrolInfoByUserId(long id, DateTime beginTime, DateTime endTime) + /// + /// 巡查轨迹 + /// + /// + /// + /// + /// + public async Task>> GetPatrolInfoByUserId(long id, DateTime beginTime, DateTime endTime) { using (SugarDbContext db = base.UnitWork.CreateContext()) { @@ -27,11 +39,101 @@ namespace OpenAuth.App.ServiceApp.FireManagement var user = await db.User.GetFirstAsync(r => r.Id == id); 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], + }; - - return new Response { Result = false, Message = "操作失败" }; + 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 = "操作成功" }; } } + /// + /// 巡查坐标 + /// + /// + /// + /// + /// + 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); + if (dt.Rows.Count > 0) + return new Response { Result = dt, 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 = "操作成功" }; + } + } } } diff --git a/OpenAuth.App/ServiceApp/FireManagement/Request/UserOnLineReq.cs b/OpenAuth.App/ServiceApp/FireManagement/Request/UserOnLineReq.cs new file mode 100644 index 0000000..ef8a6ef --- /dev/null +++ b/OpenAuth.App/ServiceApp/FireManagement/Request/UserOnLineReq.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OpenAuth.App.ServiceApp.FireManagement.Request +{ + public class UserOnLineReq + { + public int page { get; set; } + public int limit { get; set; } + public string townname { get; set; } + public string isonline { get; set; } + public UserOnLineReq() + { + page = 1; + limit = 10; + } + } +} diff --git a/OpenAuth.App/ServiceApp/FireManagement/Response/PointstatisticsResp.cs b/OpenAuth.App/ServiceApp/FireManagement/Response/PointstatisticsResp.cs new file mode 100644 index 0000000..b21e06f --- /dev/null +++ b/OpenAuth.App/ServiceApp/FireManagement/Response/PointstatisticsResp.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OpenAuth.App.ServiceApp.FireManagement.Response +{ + public class PointstatisticsResp + { + public string Name { get; set; } + public string Account { get; set; } + public long Id { get; set; } + public string TownName { get; set; } + public string AreaName { get; set; } + public DateTime? BeginTime { get; set; } + public DateTime? EndTime { get; set; } + public int dakacishu { get; set; } + public int xunjian { get; set; } + public int dakadian { get; set; } + public double lengths { get; set; } + public int duration { get; set; } + public double effectiverate { get; set; } + } +} diff --git a/OpenAuth.App/ServiceApp/FireManagement/Response/UserOnLineResp.cs b/OpenAuth.App/ServiceApp/FireManagement/Response/UserOnLineResp.cs new file mode 100644 index 0000000..d26ba03 --- /dev/null +++ b/OpenAuth.App/ServiceApp/FireManagement/Response/UserOnLineResp.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OpenAuth.App.ServiceApp.FireManagement.Response +{ + public class UserOnLineResp + { + public long CreateId { get; set; } + public string Name { get; set; } + public DateTime CreateTime { get; set; } + public string Lng { get; set; } + public string Lat { get; set; } + public string Type { get; set; } + public int Identity { get; set; } + public string Phone { get; set; } + public string State { get; set; }//在线状态 + public double OnLineTime { get; set; } + public int IsIn { get; set; } + public string TownName { get; set; } + } +} diff --git a/OpenAuth.App/ServiceApp/FireManagement/Response/UserPatrolInfoResp.cs b/OpenAuth.App/ServiceApp/FireManagement/Response/UserPatrolInfoResp.cs new file mode 100644 index 0000000..e38a2b2 --- /dev/null +++ b/OpenAuth.App/ServiceApp/FireManagement/Response/UserPatrolInfoResp.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OpenAuth.App.ServiceApp.FireManagement.Response +{ + public class UserPatrolInfoResp + { + public long CreateId { get; set; } + public string Name { get; set; } + public string StartTime { get; set; } + public string EndTime { get; set; } + } +} diff --git a/OpenAuth.Repository/Domain/FireManagement/FmUserPoint.cs b/OpenAuth.Repository/Domain/FireManagement/FmUserPoint.cs index 84ff18f..80e9e3c 100644 --- a/OpenAuth.Repository/Domain/FireManagement/FmUserPoint.cs +++ b/OpenAuth.Repository/Domain/FireManagement/FmUserPoint.cs @@ -37,7 +37,7 @@ namespace OpenAuth.Repository.Domain.FireManagement /// /// CreateId /// - public string CreateId { get; set; } + public long CreateId { get; set; } /// /// 是否置顶 /// diff --git a/OpenAuth.Repository/Domain/FireManagement/FmUserPointHistory.cs b/OpenAuth.Repository/Domain/FireManagement/FmUserPointHistory.cs index a29986b..23a75cd 100644 --- a/OpenAuth.Repository/Domain/FireManagement/FmUserPointHistory.cs +++ b/OpenAuth.Repository/Domain/FireManagement/FmUserPointHistory.cs @@ -36,7 +36,7 @@ namespace OpenAuth.Repository.Domain.FireManagement /// /// CreateId /// - public string CreateId { get; set; } + public long CreateId { get; set; } /// /// 是否在巡查范围之内0-不是 1-是 /// diff --git a/OpenAuth.Repository/Domain/SysFrontendSettingConfig.cs b/OpenAuth.Repository/Domain/SysFrontendSettingConfig.cs new file mode 100644 index 0000000..39516dc --- /dev/null +++ b/OpenAuth.Repository/Domain/SysFrontendSettingConfig.cs @@ -0,0 +1,23 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OpenAuth.Repository.Domain +{ + [SugarTable("sys_frontendsettingconfig")] + public class SysFrontendSettingConfig + { + /// + /// 主键 + /// + [SugarColumn(IsPrimaryKey = true)] + public string Code { get; set; } + /// + /// 值 + /// + public string CodeValue { get; set; } + } +} diff --git a/OpenAuth.Repository/SugarDbContext.cs b/OpenAuth.Repository/SugarDbContext.cs index e122c71..274cbe1 100644 --- a/OpenAuth.Repository/SugarDbContext.cs +++ b/OpenAuth.Repository/SugarDbContext.cs @@ -46,6 +46,7 @@ namespace OpenAuth.Repository public SugarRepositiry SysModuleForm { get; set; } public SugarRepositiry FormModuleEntity { get; set; } public SugarRepositiry SysDatabaseLink { get; set; } + public SugarRepositiry SysFrontendSettingConfig { get; set; } public SugarRepositiry WFScheme { get; set; } @@ -76,6 +77,8 @@ namespace OpenAuth.Repository public SugarRepositiry FmCheckArea { get; set; } public SugarRepositiry FmCheckClockOn { get; set; } public SugarRepositiry FmUserTimeSlot { get; set; } + public SugarRepositiry FmUserPoint { get; set; } + public SugarRepositiry FmUserPointHistory { get; set; } #endregion public SugarRepositiry DmModule { get; set; } diff --git a/OpenAuth.WebApi/Controllers/ServiceControllers/FireManagement/FireGridController.cs b/OpenAuth.WebApi/Controllers/ServiceControllers/FireManagement/FireGridController.cs index 8450ded..761da5d 100644 --- a/OpenAuth.WebApi/Controllers/ServiceControllers/FireManagement/FireGridController.cs +++ b/OpenAuth.WebApi/Controllers/ServiceControllers/FireManagement/FireGridController.cs @@ -1,8 +1,10 @@ using Infrastructure; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json.Linq; using OpenAuth.App.ServiceApp.FireManagement; using OpenAuth.App.ServiceApp.FireManagement.Request; +using OpenAuth.App.ServiceApp.FireManagement.Response; using OpenAuth.Repository.Domain.FireManagement; namespace OpenAuth.WebApi.Controllers.ServiceControllers.FireManagement @@ -128,6 +130,52 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers.FireManagement return response; } /// + /// 获取打卡记录 + /// + /// + /// + /// + /// + [HttpGet] + [AllowAnonymous] + public async Task>>> GetCheckPointById(long id, int pageIndex = 1, int pageSize = 10) + { + Response>> response = new Response>>(); + try + { + return await _app.GetCheckPointById(id, pageIndex, pageSize); + } + catch (Exception ex) + { + response.Code = 500; + response.Message = ex.InnerException?.Message ?? ex.Message; + } + return response; + } + /// + /// 打卡信息 + /// + /// + /// + /// + /// + [HttpGet] + [AllowAnonymous] + public async Task>>> GetCheckInfoByUserId(long id, int pageIndex = 1, int pageSize = 10) + { + Response>> response = new Response>>(); + try + { + return await _app.GetCheckInfoByUserId(id, pageIndex, pageSize); + } + catch (Exception ex) + { + response.Code = 500; + response.Message = ex.InnerException?.Message ?? ex.Message; + } + return response; + } + /// /// 获取打卡记录列表 /// /// 人员ID @@ -152,5 +200,53 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers.FireManagement } return response; } + /// + /// 数据总览 + /// + /// + /// + /// + /// + [HttpGet] + [AllowAnonymous] + public async Task> GetStatisticsCount(long areaid, DateTime begintime, DateTime endtime) + { + Response response = new Response(); + try + { + return await _app.GetStatisticsCount(areaid, begintime, endtime); + } + catch (Exception ex) + { + response.Code = 500; + response.Message = ex.InnerException?.Message ?? ex.Message; + } + return response; + } + /// + /// 数据列表 + /// + /// + /// + /// + /// + /// + /// + [HttpGet] + [AllowAnonymous] + public async Task>>> Getstatistics(long areaid, DateTime begintime, DateTime endtime, int pageIndex, int pageSize) + { + Response>> response = new Response>>(); + try + { + return await _app.Getstatistics(areaid, begintime, endtime, pageIndex, pageSize); + } + catch (Exception ex) + { + response.Code = 500; + response.Message = ex.InnerException?.Message ?? ex.Message; + } + return response; + } } } diff --git a/OpenAuth.WebApi/Controllers/ServiceControllers/FireManagement/FireManagementController.cs b/OpenAuth.WebApi/Controllers/ServiceControllers/FireManagement/FireManagementController.cs index e567b79..5f65357 100644 --- a/OpenAuth.WebApi/Controllers/ServiceControllers/FireManagement/FireManagementController.cs +++ b/OpenAuth.WebApi/Controllers/ServiceControllers/FireManagement/FireManagementController.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using OpenAuth.App.ServiceApp.FireManagement; +using OpenAuth.App.ServiceApp.FireManagement.Request; using OpenAuth.App.ServiceApp.FireManagement.Response; using OpenAuth.Repository.Domain; using OpenAuth.Repository.Domain.FireManagement; @@ -306,6 +307,24 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers.FireManagement return response; } #endregion - + /// + /// 在线情况 + /// + /// + /// + public async Task>> GetPointUserOnLine(UserOnLineReq pageReq) + { + Response> response = new Response>(); + try + { + return await _app.GetPointUserOnLine(pageReq); + } + catch (Exception ex) + { + response.Code = 500; + response.Message = ex.InnerException?.Message ?? ex.Message; + } + return response; + } } } diff --git a/OpenAuth.WebApi/Controllers/ServiceControllers/FireManagement/FirePatrolController.cs b/OpenAuth.WebApi/Controllers/ServiceControllers/FireManagement/FirePatrolController.cs index ee8a192..2924134 100644 --- a/OpenAuth.WebApi/Controllers/ServiceControllers/FireManagement/FirePatrolController.cs +++ b/OpenAuth.WebApi/Controllers/ServiceControllers/FireManagement/FirePatrolController.cs @@ -1,4 +1,11 @@ -using Microsoft.AspNetCore.Mvc; +using Infrastructure; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using OpenAuth.App.ServiceApp.FireManagement; +using OpenAuth.App.ServiceApp.FireManagement.Request; +using OpenAuth.App.ServiceApp.FireManagement.Response; +using OpenAuth.Repository.Domain.FireManagement; +using System.Data; namespace OpenAuth.WebApi.Controllers.ServiceControllers.FireManagement { @@ -6,6 +13,101 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers.FireManagement [ApiController] public class FirePatrolController : ControllerBase { - + private readonly FirePatrolApp _app; + + public FirePatrolController(FirePatrolApp app) + { + _app = app; + } + /// + /// 获取人员巡查轨迹 + /// + /// + /// + /// + /// + [HttpGet] + [AllowAnonymous] + public async Task>> GetPatrolInfoByUserId(long id, DateTime beginTime, DateTime endTime) + { + Response> response = new Response>(); + try + { + return await _app.GetPatrolInfoByUserId(id, beginTime, endTime); + } + catch (Exception ex) + { + response.Code = 500; + response.Message = ex.InnerException?.Message ?? ex.Message; + } + return response; + } + /// + /// 巡查坐标 + /// + /// + /// + /// + /// + [HttpGet] + [AllowAnonymous] + public async Task>> LoadPatrolPointByTime(long id, DateTime beginTime, DateTime endTime) + { + Response> response = new Response>(); + try + { + return await _app.LoadPatrolPointByTime(id, beginTime, endTime); + } + catch (Exception ex) + { + response.Code = 500; + response.Message = ex.InnerException?.Message ?? ex.Message; + } + return response; + } + /// + /// 获取人员范围 + /// + /// + /// + [HttpGet] + [AllowAnonymous] + public async Task> GetUserRange(string phone) + { + Response response = new Response(); + try + { + return await _app.GetUserRange(phone); + } + catch (Exception ex) + { + response.Code = 500; + response.Message = ex.InnerException?.Message ?? ex.Message; + } + return response; + } + /// + /// 巡查信息 + /// + /// + /// + /// + /// + [HttpGet] + [AllowAnonymous] + public async Task>> LoadPatrolPointByTimeSubsection(long id, DateTime beginTime, DateTime endTime) + { + Response> response = new Response>(); + try + { + return await _app.LoadPatrolPointByTimeSubsection(id, beginTime, endTime); + } + catch (Exception ex) + { + response.Code = 500; + response.Message = ex.InnerException?.Message ?? ex.Message; + } + return response; + } } } diff --git a/OpenAuth.WebApi/temp-keys/key-06f500b0-2e7d-469b-a1f5-0568e64f467d.xml b/OpenAuth.WebApi/temp-keys/key-06f500b0-2e7d-469b-a1f5-0568e64f467d.xml new file mode 100644 index 0000000..5bfbbbf --- /dev/null +++ b/OpenAuth.WebApi/temp-keys/key-06f500b0-2e7d-469b-a1f5-0568e64f467d.xml @@ -0,0 +1,16 @@ + + + 2025-03-28T06:31:03.5905194Z + 2025-03-28T08:22:54.9645899Z + 2025-06-26T06:31:03.5578076Z + + + + + + + HrD/F7qFsCdmhLtgfYiM6gKWddCWz4Yby0ke5V+qT7ekcaUdtPKG1/kUFAH2E1fv50qV2vvzLzqhPftVkXH6uw== + + + + \ No newline at end of file