gps 设备接入,socket推送前端
This commit is contained in:
		
							parent
							
								
									44471ec932
								
							
						
					
					
						commit
						e076521db8
					
				| 
						 | 
					@ -125,6 +125,13 @@
 | 
				
			||||||
            缓存清洁数据
 | 
					            缓存清洁数据
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:langguanApi.Common.Redis.RedisKeylist.GetBatchid(System.String)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            redis缓存key
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="key"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
        <member name="P:langguanApi.Common.Redis.RedisOptions.Server">
 | 
					        <member name="P:langguanApi.Common.Redis.RedisOptions.Server">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            redis 服务地址
 | 
					            redis 服务地址
 | 
				
			||||||
| 
						 | 
					@ -183,6 +190,44 @@
 | 
				
			||||||
            <param name="Source">需要解密的字符串</param>  
 | 
					            <param name="Source">需要解密的字符串</param>  
 | 
				
			||||||
            <returns>解密后的字符串</returns>  
 | 
					            <returns>解密后的字符串</returns>  
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="T:langguanApi.Common.WebSocket.PushService">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            客户端push消息
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:langguanApi.Common.WebSocket.PushService.SendMessageToAll(System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            全部消息
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="message"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="T:langguanApi.Common.WebSocket.SocketHub">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            socket
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:langguanApi.Common.WebSocket.SocketHub.OnConnectedAsync">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            // 客户端连接事件
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:langguanApi.Common.WebSocket.SocketHub.SendMessageToClient(System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            // 自定义方法,用于向客户端推送消息
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="message"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:langguanApi.Common.WebSocket.SocketHub.SendMessageToUser(System.String,System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            向指定用户发送
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="user"></param>
 | 
				
			||||||
 | 
					            <param name="message"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
        <member name="M:langguanApi.Controllers.AlertController.export(System.Nullable{System.DateTime},System.Nullable{System.DateTime})">
 | 
					        <member name="M:langguanApi.Controllers.AlertController.export(System.Nullable{System.DateTime},System.Nullable{System.DateTime})">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            export data 默认最近7天数据
 | 
					            export data 默认最近7天数据
 | 
				
			||||||
| 
						 | 
					@ -1295,6 +1340,21 @@
 | 
				
			||||||
            deviceValue
 | 
					            deviceValue
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="T:langguanApi.Model.Entity.GpsHistory">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            //GPS历史信息
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:langguanApi.Model.Entity.GpsHistory.BatchId">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            批次ID
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="T:langguanApi.Model.Entity.GpsHistoryDTO">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            GPSDTO
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
        <member name="T:langguanApi.Model.Entity.Ledger">
 | 
					        <member name="T:langguanApi.Model.Entity.Ledger">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            台账
 | 
					            台账
 | 
				
			||||||
| 
						 | 
					@ -2963,6 +3023,31 @@
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
            <returns></returns>
 | 
					            <returns></returns>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:langguanApi.Service.GpsHistoryService.AddGpsHistory(langguanApi.Model.Entity.GpsHistoryDTO)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            新加gps历史记录
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="input"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="F:langguanApi.Service.GpsService.result">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            缓冲器
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:langguanApi.Service.GpsService.Start">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            启动GPS服务
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:langguanApi.Service.GpsService.Send(System.String)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            发送GPS数据
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="message"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
        <member name="M:langguanApi.Service.Hj212Service.GetIndexData(System.Int32)">
 | 
					        <member name="M:langguanApi.Service.Hj212Service.GetIndexData(System.Int32)">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            首页数据
 | 
					            首页数据
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,5 +23,14 @@
 | 
				
			||||||
        /// 缓存清洁数据
 | 
					        /// 缓存清洁数据
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        public static string CleanData = "cleandata";
 | 
					        public static string CleanData = "cleandata";
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// redis缓存key
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="key"></param>
 | 
				
			||||||
 | 
					        /// <returns></returns>
 | 
				
			||||||
 | 
					        public static string GetBatchid(string key)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return $"batchtid_{key}";
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,31 @@
 | 
				
			||||||
 | 
					using langguanApi.Extensions.AutoDI;
 | 
				
			||||||
 | 
					using Microsoft.AspNetCore.SignalR;
 | 
				
			||||||
 | 
					using Newtonsoft.Json.Serialization;
 | 
				
			||||||
 | 
					using Newtonsoft.Json;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace langguanApi.Common.WebSocket
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// 客户端push消息
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    [ServiceInjection(InjectionType.Singleton)]
 | 
				
			||||||
 | 
					    public class PushService
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        private readonly IHubContext<SocketHub> _hubContext;
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 全部消息
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="message"></param>
 | 
				
			||||||
 | 
					        /// <returns></returns>
 | 
				
			||||||
 | 
					        public async Task SendMessageToAll(object message)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var settings = new JsonSerializerSettings
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                ContractResolver = new CamelCasePropertyNamesContractResolver()
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					            Console.WriteLine($"gps:{JsonConvert.SerializeObject(message, settings)}");
 | 
				
			||||||
 | 
					            var data = JsonConvert.SerializeObject(message, settings);
 | 
				
			||||||
 | 
					            await _hubContext.Clients.All.SendAsync("ReceiveMessage", data);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,53 @@
 | 
				
			||||||
 | 
					using Microsoft.AspNetCore.SignalR;
 | 
				
			||||||
 | 
					using Newtonsoft.Json.Serialization;
 | 
				
			||||||
 | 
					using Newtonsoft.Json;
 | 
				
			||||||
 | 
					using langguanApi.Extensions.AutoDI;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace langguanApi.Common.WebSocket
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// socket
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    [ServiceInjection(InjectionType.Singleton)]
 | 
				
			||||||
 | 
					    public class SocketHub : Hub
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// // 客户端连接事件
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <returns></returns>
 | 
				
			||||||
 | 
					        public override async Task OnConnectedAsync()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var msg = JsonConvert.SerializeObject(new { msgType = "info", data = "hello" });
 | 
				
			||||||
 | 
					            // 发送消息给连接的客户端
 | 
				
			||||||
 | 
					            await Clients.Caller.SendAsync("ReceiveMessage", msg);
 | 
				
			||||||
 | 
					            await base.OnConnectedAsync();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// // 自定义方法,用于向客户端推送消息
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="message"></param>
 | 
				
			||||||
 | 
					        /// <returns></returns>
 | 
				
			||||||
 | 
					        public async Task SendMessageToClient(object message)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            // 发送消息给所有客户端
 | 
				
			||||||
 | 
					            var connId = this.Context.ConnectionId;
 | 
				
			||||||
 | 
					            var msg = JsonConvert.SerializeObject(message);
 | 
				
			||||||
 | 
					            await this.Clients.All.SendAsync("ReceiveMessage", msg);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 向指定用户发送
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="user"></param>
 | 
				
			||||||
 | 
					        /// <param name="message"></param>
 | 
				
			||||||
 | 
					        /// <returns></returns>
 | 
				
			||||||
 | 
					        public async Task SendMessageToUser(string user, object message)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var settings = new JsonSerializerSettings
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                ContractResolver = new CamelCasePropertyNamesContractResolver()
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					            var msg = JsonConvert.SerializeObject(message, settings);
 | 
				
			||||||
 | 
					            await Clients.All.SendAsync("ReceiveMessage", user, msg);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -12,12 +12,12 @@ namespace langguanApi.Extensions
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            //  services.AddSingleton<MQTTService>();
 | 
					            //  services.AddSingleton<MQTTService>();
 | 
				
			||||||
            services.AddTransient<HJ212SocketServer>();
 | 
					            services.AddTransient<HJ212SocketServer>();
 | 
				
			||||||
            services.AddSingleton<Gps808SocketServer>(); // 808协议
 | 
					            services.AddSingleton<GpsService>(); // gps协议
 | 
				
			||||||
            services.AddTransient<PingService>();
 | 
					            services.AddTransient<PingService>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            IServiceProvider serviceProvider = services.BuildServiceProvider();
 | 
					            IServiceProvider serviceProvider = services.BuildServiceProvider();
 | 
				
			||||||
            _ = serviceProvider.GetService<HJ212SocketServer>().Start();
 | 
					            _ = serviceProvider.GetService<HJ212SocketServer>().Start();
 | 
				
			||||||
            _ = serviceProvider.GetService<Gps808SocketServer>().Start();
 | 
					            _ = serviceProvider.GetService<GpsService>().Start();
 | 
				
			||||||
            serviceProvider.GetService<PingService>().CreatTask();
 | 
					            serviceProvider.GetService<PingService>().CreatTask();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,25 @@
 | 
				
			||||||
 | 
					namespace langguanApi.Model.Entity
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// //GPS历史信息
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    public class GpsHistory : BaseModel
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public string DeviceId { get; set; }
 | 
				
			||||||
 | 
					        public string Lat { get; set; }
 | 
				
			||||||
 | 
					        public string Lon { get; set; }
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 批次ID
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public long BatchId { get; set; }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// GPSDTO
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    public class GpsHistoryDTO
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public string DeviceId { get; set; }
 | 
				
			||||||
 | 
					        public string Lat { get; set; }
 | 
				
			||||||
 | 
					        public string Lon { get; set; }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -93,17 +93,17 @@ app.UseCors("CorsPolicy");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
app.MapControllers();
 | 
					app.MapControllers();
 | 
				
			||||||
 | 
					 | 
				
			||||||
app.Run();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if (!await GetNowTimeAsync())
 | 
					if (!await GetNowTimeAsync())
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    Console.WriteLine("当前时间不在可运行时间范围内,请联系供应商。");
 | 
					    Console.WriteLine("当前时间不在可运行时间范围内,请联系供应商。");
 | 
				
			||||||
    Environment.Exit(0);
 | 
					    Environment.Exit(0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/// <summary>
 | 
					app.Run();
 | 
				
			||||||
/// 获取当前时间是否在可运行时间范围内
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//获取当前时间是否在可运行时间范围内
 | 
				
			||||||
static async Task<bool> GetNowTimeAsync()
 | 
					static async Task<bool> GetNowTimeAsync()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    try
 | 
					    try
 | 
				
			||||||
| 
						 | 
					@ -111,14 +111,11 @@ static async Task<bool> GetNowTimeAsync()
 | 
				
			||||||
        DateTime startTime = DateTime.Parse("2024-09-01");
 | 
					        DateTime startTime = DateTime.Parse("2024-09-01");
 | 
				
			||||||
        //从公网上获取当前时间
 | 
					        //从公网上获取当前时间
 | 
				
			||||||
        var url = "http://www.worldtimeapi.org/api/ip";
 | 
					        var url = "http://www.worldtimeapi.org/api/ip";
 | 
				
			||||||
        var request = WebRequest.Create(url);
 | 
					        var myClient = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true });
 | 
				
			||||||
        var response = await request.GetResponseAsync();
 | 
					        var response = await myClient.GetStringAsync(url);
 | 
				
			||||||
        var stream = response.GetResponseStream();
 | 
					        var time = JObject.Parse(response)["datetime"].ToString();
 | 
				
			||||||
        var reader = new StreamReader(stream);
 | 
					 | 
				
			||||||
        var content = reader.ReadToEnd();
 | 
					 | 
				
			||||||
        var time = JObject.Parse(content)["datetime"].ToString();
 | 
					 | 
				
			||||||
        var now = DateTime.Parse(time);
 | 
					        var now = DateTime.Parse(time);
 | 
				
			||||||
        Console.WriteLine($"当前时间:{now},过期时间:{startTime.AddDays(365)},距离过期时间还有:{(startTime.AddDays(30) - now).Days} 天");
 | 
					        Console.WriteLine($"当前时间:{now},过期时间:{startTime.AddDays(365)},距离过期时间还有:{(startTime.AddDays(365) - now).Days} 天");
 | 
				
			||||||
        return startTime.AddDays(365) > now ? true : false;
 | 
					        return startTime.AddDays(365) > now ? true : false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    catch
 | 
					    catch
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,55 @@
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,53 @@
 | 
				
			||||||
 | 
					using langguanApi.Model.Entity;
 | 
				
			||||||
 | 
					using MongoDB.Bson.IO;
 | 
				
			||||||
 | 
					using System.Net;
 | 
				
			||||||
 | 
					using System.Net.Sockets;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace langguanApi.Service
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public class GpsService
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        private GpsHistoryService _service = ServiceLocator.Instance.GetService<GpsHistoryService>();
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 缓冲器
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        private byte[] result = new byte[1024];
 | 
				
			||||||
 | 
					        private int port => 5002;
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 启动GPS服务
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <returns></returns>
 | 
				
			||||||
 | 
					        public async Task Start()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            // 创建本地IP地址和TCP端口号
 | 
				
			||||||
 | 
					            var ipEndPoint = new IPEndPoint(IPAddress.Any, port);
 | 
				
			||||||
 | 
					            TcpListener listener = new(ipEndPoint);
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                listener.Start();
 | 
				
			||||||
 | 
					                Console.WriteLine($"Waiting for gps connection... port:{port}");
 | 
				
			||||||
 | 
					                using TcpClient handler = await listener.AcceptTcpClientAsync();
 | 
				
			||||||
 | 
					                await using NetworkStream stream = handler.GetStream();
 | 
				
			||||||
 | 
					                int received = await stream.ReadAsync(result);
 | 
				
			||||||
 | 
					                var message = Encoding.UTF8.GetString(result, 0, received);
 | 
				
			||||||
 | 
					                Console.WriteLine($"GPS received: \"{message}\"");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (Exception ex)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Console.WriteLine($"GPS error:{ex.Message}");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 发送GPS数据
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="message"></param>
 | 
				
			||||||
 | 
					        /// <returns></returns>
 | 
				
			||||||
 | 
					        public async Task Send(string message)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var json = Newtonsoft.Json.JsonConvert.DeserializeObject<GpsHistoryDTO>(message);
 | 
				
			||||||
 | 
					            await _service.AddGpsHistory(json);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -30,5 +30,6 @@
 | 
				
			||||||
      "lat": 39.4716613,
 | 
					      "lat": 39.4716613,
 | 
				
			||||||
      "lon": 107.1413332
 | 
					      "lon": 107.1413332
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  },
 | 
				
			||||||
 | 
					  "BatchId": 30 //批次号间隔时间30分钟
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,7 @@
 | 
				
			||||||
    <PackageReference Include="JT808" Version="2.6.8" />
 | 
					    <PackageReference Include="JT808" Version="2.6.8" />
 | 
				
			||||||
    <PackageReference Include="Mapster" Version="7.4.0" />
 | 
					    <PackageReference Include="Mapster" Version="7.4.0" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.27" />
 | 
					    <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.27" />
 | 
				
			||||||
 | 
					    <PackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="6.0.33" />
 | 
				
			||||||
    <PackageReference Include="MongoDB.Bson" Version="2.27.0" />
 | 
					    <PackageReference Include="MongoDB.Bson" Version="2.27.0" />
 | 
				
			||||||
    <PackageReference Include="MongoDB.Driver" Version="2.27.0" />
 | 
					    <PackageReference Include="MongoDB.Driver" Version="2.27.0" />
 | 
				
			||||||
    <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
 | 
					    <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue