Infrastructure/OpenAuth.App/ServiceApp/FireManagement/FirePatrolApp.cs

229 lines
11 KiB
C#

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<FmUserTimeSlot, SugarDbContext>
{
public FirePatrolApp(ISugarUnitOfWork<SugarDbContext> unitWork,
ISimpleClient<FmUserTimeSlot> repository, IAuth auth) : base(unitWork, repository, auth)
{
_auth = auth;
}
/// <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())
{
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<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],
};
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 = "操作成功" };
}
else
{
throw new Exception("用户不存在");
}
}
}
/// <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<dynamic>> 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<FmCheckPointUser>((a, b) => a.Id == b.PointId)
.Where((a, b) => b.UserId == user.Id)
.Select<dynamic>((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<dynamic> { Result = obj, Message = "操作成功" };
else
return new Response<dynamic> { 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 = "操作成功" };
}
}
public async Task<Response<List<PatrolinfoResp>>> 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<PatrolinfoResp> reslist = new List<PatrolinfoResp>();
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<List<PatrolinfoResp>> { Result = reslist, Message = "操作成功" };
}
}
}
}