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