From bb455678cc1dff643a9761730aa2eb83f0f5e0db Mon Sep 17 00:00:00 2001 From: yanghongwei Date: Sat, 27 Jul 2024 20:53:33 +0800 Subject: [PATCH] =?UTF-8?q?gps=20=E6=95=B0=E6=8D=AE=E6=8E=A5=E6=94=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- langguanApi.xml | 461 +++++++++++++++++++++- langguanApi/Service/Gps808SocketServer.cs | 145 +++++++ langguanApi/Service/HJ212SocketServer.cs | 4 +- langguanApi/langguanApi.csproj | 1 + 4 files changed, 609 insertions(+), 2 deletions(-) create mode 100644 langguanApi/Service/Gps808SocketServer.cs diff --git a/langguanApi.xml b/langguanApi.xml index 4431f0c..79d9892 100644 --- a/langguanApi.xml +++ b/langguanApi.xml @@ -432,11 +432,46 @@ - 新增清洁运输 + 新增门禁 + + + 推送洗车机列表(洗车机列表和洗车机记录组合在一起) + + + + + + + 获取洗车机列表 + + + + + + + 获取洗车机历史记录(起始时间和结束时间非空,根据起始时间和结束时间筛选数据,如果为空,默认获取30条数据) + + + + + + + 推送地磅列表 + + + + + + + 获取清洁运输(门禁和地磅组合,地磅获取总重量,后期会用地磅重量-车辆车辆) + + + + 登陆 @@ -641,6 +676,36 @@ basemodel + + + 清洁运输展示信息 + + + + + 车牌号 + + + + + 车牌颜色 + + + + + 运输量 + + + + + 通过时间 + + + + + 车牌类型 + + @@ -1902,6 +1967,11 @@ 有效期限 + + + 出入场时间 + + 车牌号 @@ -1967,6 +2037,306 @@ 有效期限 + + + 地磅 + + + + + 重量 + + + + + 货物类型 + + + + + 车牌 + + + + + 时间 + + + + + 重量 + + + + + 货物类型 + + + + + 车牌 + + + + + 时间 + + + + + 洗车机名称(Name) + + + + + 设备状态(EquipmentStatus,0表示异常,1表示正常) + + + + + 运行状态(RunStatus,0表示异常,1表示正常) + + + + + 水压报警(WPAlarm 0表示异常,1表示正常) + + + + + 相序报警(PSAlarm0表示异常,1表示正常) + + + + + 故障报警(FaultAlarm 0表示异常,1表示正常) + + + + + 冲洗压力 + + + + + 冲洗电流 + + + + + 冲洗电压(RinseVoltage 单位V) + + + + + 水流量(Discharge 单位T) + + + + + 电量(Electricity KW/H) + + + + + 电流(Current A) + + + + + 水压(WaterPressure MPa) + + + + + 运行时间(RunTime) + + + + + 清洗记录时间(RecodeTime) + + + + + 洗车机编码 + + + + + 洗车机名称(Name) + + + + + 设备状态(EquipmentStatus,0表示异常,1表示正常) + + + + + 运行状态(RunStatus,0表示异常,1表示正常) + + + + + 水压报警(WPAlarm 0表示异常,1表示正常) + + + + + 相序报警(PSAlarm0表示异常,1表示正常) + + + + + 故障报警(FaultAlarm 0表示异常,1表示正常) + + + + + 冲洗压力 + + + + + 冲洗电流 + + + + + 冲洗电压(RinseVoltage 单位V) + + + + + 水流量(Discharge 单位T) + + + + + 电量(Electricity KW/H) + + + + + 电流(Current A) + + + + + 水压(WaterPressure MPa) + + + + + 运行时间(RunTime) + + + + + 清洗记录时间(RecodeTime) + + + + + 洗车机编码 + + + + + 添加洗车机 + + + + + 洗车机名称(Name) + + + + + 设备状态(EquipmentStatus,0表示异常,1表示正常) + + + + + 运行状态(RunStatus,0表示异常,1表示正常) + + + + + 水压报警(WPAlarm 0表示异常,1表示正常) + + + + + 相序报警(PSAlarm0表示异常,1表示正常) + + + + + 故障报警(FaultAlarm 0表示异常,1表示正常) + + + + + 冲洗压力 + + + + + 冲洗电流 + + + + + 冲洗电压(RinseVoltage 单位V) + + + + + 水流量(Discharge 单位T) + + + + + 电量(Electricity KW/H) + + + + + 电流(Current A) + + + + + 水压(WaterPressure MPa) + + + + + 洗车机编码 + + + + + 添加洗车机历史 + + + + + 洗车机编码 + + + + + 运行时间(RunTime) + + + + + 清洗记录时间(RecodeTime) + + 新加 @@ -2258,6 +2628,47 @@ + + + 缓冲器 + + + + + 最大连接数 + + + + + 服务IP地址 + + + + + 服务端口号 + + + + + 客户端列表 + + + + + IP终端 + + + + + 服务端Socket + + + + + 启动服务 + + + 首页数据 @@ -2680,6 +3091,34 @@ + + + 获取清洁运输列表(门禁和地磅组合) + + + + + + + 获取车辆颜色 + + + + + + + 新加 + + + + + + + 获取地磅集合 + + + + 登录 @@ -2740,6 +3179,26 @@ + + + 新增洗车机 + + + + + + + 获取洗车机列表 + + + + + + 获取洗车机历史记录 + + + + 爬气象局的天气数据% diff --git a/langguanApi/Service/Gps808SocketServer.cs b/langguanApi/Service/Gps808SocketServer.cs new file mode 100644 index 0000000..265d9ca --- /dev/null +++ b/langguanApi/Service/Gps808SocketServer.cs @@ -0,0 +1,145 @@ +using IceCoffee.FastSocket.Tcp; +using langguanApi.Model.Dto; +using langguanApi.Model; +using langguanApi.Service.HJ212; +using System.Net.Sockets; +using System.Net; +using System.Text; +using JT808.Protocol; +using Org.BouncyCastle.Utilities; +using LogicExtensions; +using JT808.Protocol.Enums; +using JT808.Protocol.MessageBody; + +namespace langguanApi.Service +{ + public class Gps808SocketServer + { + /// + /// 缓冲器 + /// + private byte[] result = new byte[1024]; + /// + /// 最大连接数 + /// + private int maxClientCount; + /// + /// 服务IP地址 + /// + private string ip; + /// + /// 服务端口号 + /// + private int port => 5002; + // 编码 + // private string code; + /// + /// 客户端列表 + /// + private List ClientSockets; + /// + /// IP终端 + /// + private IPEndPoint ipEndPoint; + /// + /// 服务端Socket + /// + private Socket ServerSocket; + private static NetServer server; + private static IceCoffee.FastSocket.Tcp.TcpClient client; + /// + /// 启动服务 + /// + /// + public async Task Start() + { + ip = IPAddress.Any.ToString(); + server = new NetServer(ip, port); + server.Started += OnNetServer_Started; + server.ExceptionCaught += OnNetServer_ExceptionCaught; + server.SessionStarted += OnNetServer_SessionStarted; + server.SessionClosed += OnNetServer_SessionClosed; + server.ReceivedData += OnNetServer_ReceivedData; + server.SendData += OnNetServer_SendData; + server.Start(); + } + + + private void OnNetServer_Started() + { + Console.WriteLine($"开始监听gps: {ip}:{port}"); + } + + private void OnNetServer_SendData(NetSession session, NetPackage netPackage, string rawText) + { + Console.WriteLine($"发送给gps: {session.RemoteIPEndPoint}: {rawText}"); + } + + private void OnNetServer_SessionClosed(TcpSession session) + { + Console.WriteLine("会话关闭gps: " + session.RemoteIPEndPoint + ", 当前会话总数: " + server.SessionCount); + } + + private static void OnNetServer_SessionStarted(TcpSession session) + { + Console.WriteLine("会话开始gps: " + session.RemoteIPEndPoint + ", 当前会话总数: " + server.SessionCount); + } + + private async void OnNetServer_ReceivedData(TcpSession session, NetPackage netPackage, string rawText) + { + Console.WriteLine("收到自gps: " + session.RemoteIPEndPoint + ": " + rawText); + byte[] bytes = rawText.ToBytes(); + //2.将数组反序列化 + // var jT808Package =new JT808Serializer.Deserialize(bytes.AsSpan()); + //3.解析数据 + var jT808Package = new JT808Serializer().Deserialize(bytes); + //4.数据包体 + JT808_0x0200 jT808_0x0200 = (JT808_0x0200)jT808Package.Bodies; + var lon = jT808_0x0200.Lat; + var lat= jT808_0x0200.Lng; + Console.WriteLine("经度:" + lon + " 纬度:" + lat); + //4.处理数据 + //5.返回数据 + //6.发送数据 + // st 27 =voc,st=31 cems, st=32,tsp, st=22 微站 + + } + + private void OnNetServer_ExceptionCaught(Exception ex) + { + Console.WriteLine("Error in NetServer gps" + ex); + } + byte[] CallCRC(byte[] data) + { + string ccc = Convert.ToString(getCrc(data), 16).PadLeft(4, '0'); + return Encoding.ASCII.GetBytes(ccc.ToUpper()); + } + private int getCrc(byte[] data) + { + int high; + int flag; + + // 16位寄存器,所有数位均为1 + int wcrc = 0xffff; + for (int i = 0; i < data.Length; i++) + { + // 16 位寄存器的高位字节 + high = wcrc >> 8; + // 取被校验串的一个字节与 16 位寄存器的高位字节进行“异或”运算 + wcrc = high ^ data[i]; + + for (int j = 0; j < 8; j++) + { + flag = wcrc & 0x0001; + // 把这个 16 寄存器向右移一位 + wcrc = wcrc >> 1; + // 若向右(标记位)移出的数位是 1,则生成多项式 1010 0000 0000 0001 和这个寄存器进行“异或”运算 + if (flag == 1) + wcrc ^= 0xa001; + } + } + + return wcrc; + } + } +} diff --git a/langguanApi/Service/HJ212SocketServer.cs b/langguanApi/Service/HJ212SocketServer.cs index 44760b8..2110bd5 100644 --- a/langguanApi/Service/HJ212SocketServer.cs +++ b/langguanApi/Service/HJ212SocketServer.cs @@ -68,6 +68,8 @@ namespace langguanApi.Service server.SendData += OnNetServer_SendData; server.Start(); } + + private void OnNetServer_Started() { Console.WriteLine($"开始监听: {ip}:{port}"); @@ -128,7 +130,7 @@ namespace langguanApi.Service case "27": return 1; case "31": return 2; case "22": return 3; - // case "33": return 4; + // case "33": return 4; } return 0; } diff --git a/langguanApi/langguanApi.csproj b/langguanApi/langguanApi.csproj index f11c458..c705e9f 100644 --- a/langguanApi/langguanApi.csproj +++ b/langguanApi/langguanApi.csproj @@ -16,6 +16,7 @@ +