巡检管理

DataMaintenance
zhangbin 2025-03-28 16:41:12 +08:00
parent 030f0ff1e3
commit 16cf9ea056
15 changed files with 732 additions and 11 deletions

View File

@ -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
};
}
}
/// <summary>
/// 获取打卡记录
/// </summary>
/// <param name="id"></param>
/// <param name="pageSize"></param>
/// <param name="pageIndex"></param>
/// <returns></returns>
public async Task<Response<PageInfo<List<dynamic>>>> GetCheckPointById(long id, int pageIndex = 1, int pageSize = 10)
{
using (SugarDbContext db = base.UnitWork.CreateContext())
{
RefAsync<int> totalNumber = 0;
var query = await db.FmCheckClockOn.AsQueryable()
.LeftJoin<FmCheckInPoint>((a, b) => a.PointId == b.Id)
.LeftJoin<SysUser>((a, b, c) => a.UserId == c.Id)
.WhereIF(id != 0, (a, b, c) => a.PointId == id)
.Select<dynamic>((a, b, c) => new
{
a.Id,
a.Lng,
a.Lat,
b.PointName,
c.Name,
UserId = SqlFunc.Subqueryable<FmCheckPointUser>().Where(a => a.PointId == id).ToList(a => a.UserId),
AreaId = SqlFunc.Subqueryable<FmCheckArea>().Where(a => a.PointId == id).ToList(a => a.AreaId),
}).ToPageListAsync(pageIndex, pageSize, totalNumber);
return new Response<PageInfo<List<dynamic>>>
{
Result = new PageInfo<List<dynamic>> { Items = query, Total = totalNumber }
};
}
}
/// <summary>
/// 获取打卡记录
/// </summary>
/// <param name="id"></param>
/// <param name="pageSize"></param>
/// <param name="pageIndex"></param>
/// <returns></returns>
public async Task<Response<PageInfo<List<dynamic>>>> GetCheckInfoByUserId(long id, int pageIndex = 1, int pageSize = 10)
{
using (SugarDbContext db = base.UnitWork.CreateContext())
{
RefAsync<int> totalNumber = 0;
var query = await db.FmCheckClockOn.AsQueryable()
.LeftJoin<FmCheckInPoint>((a, b) => a.PointId == b.Id)
.LeftJoin<SysUser>((a, b, c) => a.UserId == c.Id)
.WhereIF(id != 0, (a, b, c) => a.UserId == id)
.Select<dynamic>((a, b, c) => new
{
a.Id,
a.Lng,
a.Lat,
b.PointName,
c.Name,
a.ClockonTime
}).ToPageListAsync(pageIndex, pageSize, totalNumber);
return new Response<PageInfo<List<dynamic>>>
{
Result = new PageInfo<List<dynamic>> { Items = query, Total = totalNumber }
};
}
}
/// <summary>
/// 查询打卡记录
/// </summary>
@ -210,6 +279,138 @@ namespace OpenAuth.App.ServiceApp.FireManagement
}
}
public async Task<Response<JObject>> 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<SysUserRole>((a, b) => a.Id == b.UserId)
.LeftJoin<SysUserOrg>((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<FmCheckArea>((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<JObject>
{
Result = obj
};
}
}
public async Task<Response<JObject>> 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<SysUserRole>((a, b) => a.Id == b.UserId)
.LeftJoin<SysUserOrg>((a, b, c) => a.Id == c.UserId)
.LeftJoin<SysOrg>((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<FmCheckClockOn>().Where(r => r.UserId == a.Id).Where(r => r.ClockonTime >= begintime && r.ClockonTime <= endtime).Count(),
dakadian = SqlFunc.Subqueryable<FmCheckPointUser>().Where(p => p.UserId == a.Id).Count(),
lengths = SqlFunc.Subqueryable<FmUserPointHistory>().Where(r => r.CreateId == a.Id).Where(r => r.CreateTime >= begintime && r.CreateTime <= endtime).Sum(r => r.Distance),
}).ToList();
return new Response<JObject>
{
Result = new JObject()
};
}
}
public async Task<Response<PageInfo<List<PointstatisticsResp>>>> Getstatistics(long areaid, DateTime begintime, DateTime endtime, int pageIndex, int pageSize)
{
using (SugarDbContext db = base.UnitWork.CreateContext())
{
RefAsync<int> 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<SysUserRole>((a, b) => a.Id == b.UserId)
.LeftJoin<SysUserOrg>((a, b, c) => a.Id == c.UserId)
.LeftJoin<SysOrg>((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<PageInfo<List<PointstatisticsResp>>>
{
Result = new PageInfo<List<PointstatisticsResp>> { 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<string> deplist = new List<string>();
// 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<Response<bool>> UploadLocation(FmUserPoint info)
//{

View File

@ -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
/// <summary>
/// 在线情况
/// </summary>
/// <param name="pageReq"></param>
/// <returns></returns>
public async Task<Response<PageInfo<dynamic>>> GetPointUserOnLine(UserOnLineReq pageReq)
{
using (var db = base.UnitWork.CreateContext())
{
RefAsync<int> totalNumber = 0;
var user = _auth.GetCurrentUser().User;
//该用户下包含所有部门
var orgid = _auth.GetCurrentUser().Orgs;
var chileorglist = new List<long>();
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<FmUserPoint>((a, b) => a.Id == b.CreateId)
.LeftJoin<SysUserOrg>((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<SysUserOrg>()
.Where(sf => sf.UserId == a.Id)
.LeftJoin<SysOrg>((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<PageInfo<dynamic>>
{
Result = new PageInfo<dynamic> { Items = enddata, Total = totalNumber }
};
}
}
}
}

View File

@ -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<Response<bool>> GetPatrolInfoByUserId(long id, DateTime beginTime, DateTime endTime)
/// <summary>
/// 巡查轨迹
/// </summary>
/// <param name="id"></param>
/// <param name="beginTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public async Task<Response<List<UserPatrolInfoResp>>> 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<UserPatrolInfoResp> upinfo = new List<UserPatrolInfoResp>();
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<bool> { 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<List<UserPatrolInfoResp>> { Result = upinfo, Message = "操作成功" };
}
}
/// <summary>
/// 巡查坐标
/// </summary>
/// <param name="userId"></param>
/// <param name="beginTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public async Task<Response<List<FmUserPointHistory>>> 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<List<FmUserPointHistory>> { Result = userpoint, Message = "操作成功" };
}
}
/// <summary>
/// 获取护林员巡查范围
/// </summary>
/// <param name="phone"></param>
/// <returns></returns>
public async Task<Response<DataTable>> 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<DataTable> { Result = dt, Message = "操作成功" };
else
return new Response<DataTable> { Result = null, Message = "暂无数据" };
}
}
//查询单条巡检记录
public async Task<Response<List<FmUserPointHistory>>> 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<List<FmUserPointHistory>> { Result = check, Message = "操作成功" };
}
}
}
}

View File

@ -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;
}
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -37,7 +37,7 @@ namespace OpenAuth.Repository.Domain.FireManagement
/// <summary>
/// CreateId
/// </summary>
public string CreateId { get; set; }
public long CreateId { get; set; }
/// <summary>
/// 是否置顶
/// </summary>

View File

@ -36,7 +36,7 @@ namespace OpenAuth.Repository.Domain.FireManagement
/// <summary>
/// CreateId
/// </summary>
public string CreateId { get; set; }
public long CreateId { get; set; }
/// <summary>
/// 是否在巡查范围之内0-不是 1-是
/// </summary>

View File

@ -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
{
/// <summary>
/// 主键
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public string Code { get; set; }
/// <summary>
/// 值
/// </summary>
public string CodeValue { get; set; }
}
}

View File

@ -46,6 +46,7 @@ namespace OpenAuth.Repository
public SugarRepositiry<SysModuleForm> SysModuleForm { get; set; }
public SugarRepositiry<FormModuleEntity> FormModuleEntity { get; set; }
public SugarRepositiry<SysDatabaseLink> SysDatabaseLink { get; set; }
public SugarRepositiry<SysFrontendSettingConfig> SysFrontendSettingConfig { get; set; }
public SugarRepositiry<WFScheme> WFScheme { get; set; }
@ -76,6 +77,8 @@ namespace OpenAuth.Repository
public SugarRepositiry<FmCheckArea> FmCheckArea { get; set; }
public SugarRepositiry<FmCheckClockOn> FmCheckClockOn { get; set; }
public SugarRepositiry<FmUserTimeSlot> FmUserTimeSlot { get; set; }
public SugarRepositiry<FmUserPoint> FmUserPoint { get; set; }
public SugarRepositiry<FmUserPointHistory> FmUserPointHistory { get; set; }
#endregion
public SugarRepositiry<DmModule> DmModule { get; set; }

View File

@ -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;
}
/// <summary>
/// 获取打卡记录
/// </summary>
/// <param name="id"></param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
[HttpGet]
[AllowAnonymous]
public async Task<Response<PageInfo<List<dynamic>>>> GetCheckPointById(long id, int pageIndex = 1, int pageSize = 10)
{
Response<PageInfo<List<dynamic>>> response = new Response<PageInfo<List<dynamic>>>();
try
{
return await _app.GetCheckPointById(id, pageIndex, pageSize);
}
catch (Exception ex)
{
response.Code = 500;
response.Message = ex.InnerException?.Message ?? ex.Message;
}
return response;
}
/// <summary>
/// 打卡信息
/// </summary>
/// <param name="id"></param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
[HttpGet]
[AllowAnonymous]
public async Task<Response<PageInfo<List<dynamic>>>> GetCheckInfoByUserId(long id, int pageIndex = 1, int pageSize = 10)
{
Response<PageInfo<List<dynamic>>> response = new Response<PageInfo<List<dynamic>>>();
try
{
return await _app.GetCheckInfoByUserId(id, pageIndex, pageSize);
}
catch (Exception ex)
{
response.Code = 500;
response.Message = ex.InnerException?.Message ?? ex.Message;
}
return response;
}
/// <summary>
/// 获取打卡记录列表
/// </summary>
/// <param name="userId">人员ID</param>
@ -152,5 +200,53 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers.FireManagement
}
return response;
}
/// <summary>
/// 数据总览
/// </summary>
/// <param name="areaid"></param>
/// <param name="begintime"></param>
/// <param name="endtime"></param>
/// <returns></returns>
[HttpGet]
[AllowAnonymous]
public async Task<Response<JObject>> GetStatisticsCount(long areaid, DateTime begintime, DateTime endtime)
{
Response<JObject> response = new Response<JObject>();
try
{
return await _app.GetStatisticsCount(areaid, begintime, endtime);
}
catch (Exception ex)
{
response.Code = 500;
response.Message = ex.InnerException?.Message ?? ex.Message;
}
return response;
}
/// <summary>
/// 数据列表
/// </summary>
/// <param name="areaid"></param>
/// <param name="begintime"></param>
/// <param name="endtime"></param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
[HttpGet]
[AllowAnonymous]
public async Task<Response<PageInfo<List<PointstatisticsResp>>>> Getstatistics(long areaid, DateTime begintime, DateTime endtime, int pageIndex, int pageSize)
{
Response<PageInfo<List<PointstatisticsResp>>> response = new Response<PageInfo<List<PointstatisticsResp>>>();
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;
}
}
}

View File

@ -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
/// <summary>
/// 在线情况
/// </summary>
/// <param name="pageReq"></param>
/// <returns></returns>
public async Task<Response<PageInfo<dynamic>>> GetPointUserOnLine(UserOnLineReq pageReq)
{
Response<PageInfo<dynamic>> response = new Response<PageInfo<dynamic>>();
try
{
return await _app.GetPointUserOnLine(pageReq);
}
catch (Exception ex)
{
response.Code = 500;
response.Message = ex.InnerException?.Message ?? ex.Message;
}
return response;
}
}
}

View File

@ -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;
}
/// <summary>
/// 获取人员巡查轨迹
/// </summary>
/// <param name="id"></param>
/// <param name="beginTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
[HttpGet]
[AllowAnonymous]
public async Task<Response<List<UserPatrolInfoResp>>> GetPatrolInfoByUserId(long id, DateTime beginTime, DateTime endTime)
{
Response<List<UserPatrolInfoResp>> response = new Response<List<UserPatrolInfoResp>>();
try
{
return await _app.GetPatrolInfoByUserId(id, beginTime, endTime);
}
catch (Exception ex)
{
response.Code = 500;
response.Message = ex.InnerException?.Message ?? ex.Message;
}
return response;
}
/// <summary>
/// 巡查坐标
/// </summary>
/// <param name="id"></param>
/// <param name="beginTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
[HttpGet]
[AllowAnonymous]
public async Task<Response<List<FmUserPointHistory>>> LoadPatrolPointByTime(long id, DateTime beginTime, DateTime endTime)
{
Response<List<FmUserPointHistory>> response = new Response<List<FmUserPointHistory>>();
try
{
return await _app.LoadPatrolPointByTime(id, beginTime, endTime);
}
catch (Exception ex)
{
response.Code = 500;
response.Message = ex.InnerException?.Message ?? ex.Message;
}
return response;
}
/// <summary>
/// 获取人员范围
/// </summary>
/// <param name="phone"></param>
/// <returns></returns>
[HttpGet]
[AllowAnonymous]
public async Task<Response<DataTable>> GetUserRange(string phone)
{
Response<DataTable> response = new Response<DataTable>();
try
{
return await _app.GetUserRange(phone);
}
catch (Exception ex)
{
response.Code = 500;
response.Message = ex.InnerException?.Message ?? ex.Message;
}
return response;
}
/// <summary>
/// 巡查信息
/// </summary>
/// <param name="id"></param>
/// <param name="beginTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
[HttpGet]
[AllowAnonymous]
public async Task<Response<List<FmUserPointHistory>>> LoadPatrolPointByTimeSubsection(long id, DateTime beginTime, DateTime endTime)
{
Response<List<FmUserPointHistory>> response = new Response<List<FmUserPointHistory>>();
try
{
return await _app.LoadPatrolPointByTimeSubsection(id, beginTime, endTime);
}
catch (Exception ex)
{
response.Code = 500;
response.Message = ex.InnerException?.Message ?? ex.Message;
}
return response;
}
}
}

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<key id="06f500b0-2e7d-469b-a1f5-0568e64f467d" version="1">
<creationDate>2025-03-28T06:31:03.5905194Z</creationDate>
<activationDate>2025-03-28T08:22:54.9645899Z</activationDate>
<expirationDate>2025-06-26T06:31:03.5578076Z</expirationDate>
<descriptor deserializerType="Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.AuthenticatedEncryptorDescriptorDeserializer, Microsoft.AspNetCore.DataProtection, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60">
<descriptor>
<encryption algorithm="AES_256_CBC" />
<validation algorithm="HMACSHA256" />
<masterKey p4:requiresEncryption="true" xmlns:p4="http://schemas.asp.net/2015/03/dataProtection">
<!-- Warning: the key below is in an unencrypted form. -->
<value>HrD/F7qFsCdmhLtgfYiM6gKWddCWz4Yby0ke5V+qT7ekcaUdtPKG1/kUFAH2E1fv50qV2vvzLzqhPftVkXH6uw==</value>
</masterKey>
</descriptor>
</descriptor>
</key>