using LY.App.Common;
using LY.App.Common.Redis;
using LY.App.Extensions.DI;
using LY.App.Model;
using Mapster;
using Microsoft.AspNetCore.Http;
using NetTopologySuite.Geometries;
using NetTopologySuite.GeometriesGraph;
using SqlSugar;
using System.Xml.Schema;
namespace LY.App.Service
{
///
/// 阵地服务
///
[ServiceInjection(InjectionType.Transient)]
public class PositionService
{
private readonly SqlSugarClient _db;
private readonly RedisService _redisService;
public PositionService(SqlSugarClient db, RedisService redisService)
{
_db = db;
_redisService = redisService;
}
///
/// 添加
///
///
///
public async Task MainAdd(AddPosition input)
{
var entity = input.Adapt();
entity.CreateTime = DateTime.Now;
//名称重复判断
var isNameExist = await _db.Queryable().CountAsync(a => a.Name == input.Name && a.IsDeleted != true);
if (isNameExist > 0)
{
return new ApiResult(false, "名称已存在");
}
if (!string.IsNullOrWhiteSpace(entity.RegionJson))
{
if (GeoJsonHelper.TryGetGeomWKTFromGeoJson(entity.RegionJson, out MultiPolygon geo))
{
entity.SetRegion(geo);
}
else
{
return new ApiResult(false, "空间数据无效");
}
}
// 位置
await _db.Insertable(entity).ExecuteReturnSnowflakeIdAsync();
return new ApiResult(true, "添加成功");
}
public async Task Update(UpdatePosition input)
{
var entity = input.Adapt();
await _db.Queryable().FirstAsync(a => a.Id == input.Id && a.IsDeleted != true);
if (entity != null)
{
if (!string.IsNullOrWhiteSpace(entity.RegionJson))
{
if (GeoJsonHelper.TryGetGeomWKTFromGeoJson(entity.RegionJson, out MultiPolygon geo))
{
entity.SetRegion(geo);
}
else
{
return new ApiResult(false, "空间数据无效");
}
}
await _db.Updateable(entity).ExecuteCommandAsync();
return new ApiResult(true, "添加成功");
}
return new ApiResult(false, "未找到要更新的对象");
}
///
///
///
///
///
public async Task Delete(long id)
{
var entity = await _db.Queryable().FirstAsync(a => a.Id == id && a.IsDeleted != true);
if (entity != null)
{
entity.IsDeleted = true;
await _db.Updateable(entity).ExecuteCommandAsync();
return new ApiResult(true, "删除成功");
}
return new ApiResult(false, "未找到要删除的对象");
}
///
/// 获取
///
///
///
public async Task Get(int id)
{
var entity = await _db.Queryable().FirstAsync(a => a.Id == id && a.IsDeleted != true);
if (entity != null)
{
return new ApiResult() { data = entity };
}
return new ApiResult(false, "未找到要获取的对象");
}
///
/// 获取列表
///
///
///
public async Task GetList(PositionQueryInput input)
{
var query = _db.Queryable()
.Where(a => a.IsDeleted != true)
.WhereIF(!string.IsNullOrWhiteSpace(input.Name), a => a.Name.Contains(input.Name))
.OrderBy(a => a.Id, OrderByType.Desc);
var result = await query.ToPageListAsync(input.pageNum, input.pageSize);
result.ForEach(a =>
{
a.SetRegionJson();
});
return new ApiResult()
{
data = new
{
items = result,
totalCount = query.Count()
}
};
}
///
/// 首页数据
///
///
public async Task> Index()
{
var query = await _db.Queryable()
.Where(a => a.IsDeleted != true).ToListAsync();
var positionIds = query.Select(s => s.Id).ToList();
var deviceList = await _db.Queryable()
.Where(s => positionIds.Contains(s.PositionId))
.Where(s => s.IsDeleted == false)
.ToListAsync();
List result = query.Adapt>();
foreach (var item in result)
{
item.SetRegionJson();
item.Devices = deviceList.Where(s => s.PositionId == item.Id).ToList()?.Adapt>() ?? new List();
item.Devices.ForEach(async s =>
{
s.IsOnline = await _redisService.ExistsAsync(RedisKeyList.DeviceStatus(s.DeviceSN));
});
}
return result;
}
}
}