2025-03-27 14:19:20 +08:00
using OpenAuth.App.BaseApp.Base ;
using OpenAuth.App.Interface ;
using OpenAuth.Repository.Domain.FireManagement ;
using OpenAuth.Repository ;
using SqlSugar ;
using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Text ;
using System.Threading.Tasks ;
using Infrastructure ;
2025-03-28 16:41:12 +08:00
using OpenAuth.App.ServiceApp.FireManagement.Response ;
using DocumentFormat.OpenXml.Spreadsheet ;
using DocumentFormat.OpenXml.EMMA ;
using OpenAuth.App.Config ;
using System.Data ;
2025-03-27 14:19:20 +08:00
namespace OpenAuth.App.ServiceApp.FireManagement
{
public class FirePatrolApp : SqlSugarBaseApp < FmUserTimeSlot , SugarDbContext >
{
public FirePatrolApp ( ISugarUnitOfWork < SugarDbContext > unitWork ,
ISimpleClient < FmUserTimeSlot > repository , IAuth auth ) : base ( unitWork , repository , auth )
{
_auth = auth ;
}
2025-03-28 16:41:12 +08:00
/// <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 )
2025-03-27 14:19:20 +08:00
{
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 ) ;
2025-03-27 16:09:55 +08:00
TimeSpan timeSpan = endTime . AddDays ( 1 ) . Subtract ( beginTime ) ;
int days = ( int ) timeSpan . TotalDays ;
2025-03-28 16:41:12 +08:00
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 ] ,
} ;
2025-03-27 14:19:20 +08:00
2025-03-28 16:41:12 +08:00
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 = "操作成功" } ;
2025-03-27 14:19:20 +08:00
}
}
2025-03-28 16:41:12 +08:00
/// <summary>
2025-03-29 09:25:52 +08:00
/// 巡查坐标
2025-03-28 16:41:12 +08:00
/// </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 ( ) )
{
2025-03-29 09:25:52 +08:00
string sql = "select \"Id\",\"Hulinyuan\",\"Lianxifang\",st_astext(ST_Boundary(geom)) as geom FROM fm_hulinyuanguanhufanwei WHERE \"Lianxifang\" like '%" + phone + "%'" ;
2025-03-28 16:41:12 +08:00
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 = "操作成功" } ;
}
}
2025-03-27 14:19:20 +08:00
}
}