56 lines
2.0 KiB
C#
56 lines
2.0 KiB
C#
using langguanApi.Common.Redis;
|
||
using langguanApi.Common.WebSocket;
|
||
using langguanApi.Extensions.AutoDI;
|
||
using langguanApi.Model.Entity;
|
||
using Mapster;
|
||
using StackExchange.Redis;
|
||
|
||
namespace langguanApi.Service
|
||
{
|
||
[ServiceInjection(InjectionType.Transient)]
|
||
public class GpsHistoryService : BaseService<GpsHistory>
|
||
{
|
||
private readonly PushService _pushService;
|
||
private IDatabase _redis;
|
||
private IConfiguration _config;
|
||
public GpsHistoryService(IConfiguration config, PushService pushService,
|
||
RedisHelper redisHelper) : base(config, nameof(Model.Entity.GpsHistory))
|
||
{
|
||
_pushService = pushService;
|
||
_redis = redisHelper._database;
|
||
_config = config;
|
||
}
|
||
/// <summary>
|
||
/// 新加gps历史记录
|
||
/// </summary>
|
||
/// <param name="input"></param>
|
||
/// <returns></returns>
|
||
public async Task AddGpsHistory(GpsHistoryDTO input)
|
||
{
|
||
var entity = input.Adapt<GpsHistory>();
|
||
var redisKey = RedisKeylist.GetBatchid(entity.DeviceId);
|
||
///如果redis中不存在该设备的批次号,则生成一个批次号
|
||
if (!await _redis.KeyExistsAsync(redisKey))
|
||
{
|
||
int time = _config.GetValue<int>("BatchId");
|
||
long utc = DateTime.UtcNow.Ticks;
|
||
await _redis.StringSetAsync(redisKey, utc, TimeSpan.FromMinutes(time));
|
||
}
|
||
else
|
||
{
|
||
//如果存在了,就把批次号延期30分钟
|
||
await _redis.KeyExpireAsync(redisKey, TimeSpan.FromMinutes(30));
|
||
}
|
||
entity.BatchId = (long)await _redis.StringGetAsync(redisKey);
|
||
await base.CreateAsync(entity);
|
||
await _pushService.SendMessageToAll(new
|
||
{
|
||
entity.Lat,
|
||
entity.DeviceId,
|
||
entity.Lon,
|
||
entity.BatchId
|
||
});
|
||
}
|
||
}
|
||
}
|