From 10ca96e5c1246a65b391ad50a6b8ed4530538300 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E9=B9=8F?= <304594656@qq.com> Date: Fri, 20 Dec 2024 16:40:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0A7=20GB2312=E7=9A=84A8=20uuid?= =?UTF-8?q?@datetime@=E5=9E=83=E5=9C=BE=E7=B1=BB=E5=9E=8B@=E5=AD=90?= =?UTF-8?q?=E7=B1=BB@=E9=87=8D=E9=87=8F@=E5=8D=95=E4=BB=B7@=E9=87=91?= =?UTF-8?q?=E9=A2=9D@=E6=93=8D=E4=BD=9C=E5=91=98@=E7=89=A9=E5=93=81?= =?UTF-8?q?=E7=BC=96=E7=A0=81@=E5=9E=83=E5=9C=BE=E6=A1=B6@=E6=AF=9B?= =?UTF-8?q?=E9=87=8D@=E7=9A=AE=E9=87=8D@=E5=87=80=E9=87=8D@ID1@ID2@ID3@ID4?= =?UTF-8?q?@ID5@ID6@ID7@ID8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ResultInfos/ResultService.cs | 2 +- Waste.Application/Waste.Application.xml | 25 +++ Waste.SocketService.cs/MyPackageFilter.cs | 185 ++++++++++++++---- Waste.SocketService.cs/Program.cs | 8 +- .../Waste.SocketService.csproj | 3 +- 5 files changed, 178 insertions(+), 45 deletions(-) diff --git a/Waste.Application/ResultInfos/ResultService.cs b/Waste.Application/ResultInfos/ResultService.cs index 4817801..6a81cec 100644 --- a/Waste.Application/ResultInfos/ResultService.cs +++ b/Waste.Application/ResultInfos/ResultService.cs @@ -144,7 +144,7 @@ namespace Waste.Application return dbClient.Queryable().Where(e => ids.Contains(e.ResultId)).ToList(); }); var ext = allext.FirstOrDefault(e => e.ResultId == it.Id); - it.WasteType = ext != null && !ext.WasteSType.IsEmpty() ? $"{ext.WasteSType}【{it.WasteType}】" : it.WasteType; + it.WasteType = /*ext != null && !ext.WasteSType.IsEmpty() ? $"{ext.WasteSType}【{it.WasteType}】" :*/ it.WasteType; it.Measure_WasteSType = ext?.WasteSType; it.Measure_Price = ext?.Price; it.Measure_Amount = ext?.Amount; diff --git a/Waste.Application/Waste.Application.xml b/Waste.Application/Waste.Application.xml index a7fcc08..bb7ac0f 100644 --- a/Waste.Application/Waste.Application.xml +++ b/Waste.Application/Waste.Application.xml @@ -1877,6 +1877,31 @@ 操作员 + + + 设备出厂序列号/设备出厂编号 + + + + + 车牌号/物品编码/垃圾桶编号 + + + + + 毛重,KG + + + + + 皮重,KG + + + + + 净重,KG + + A8协议模块上传的数据包体 diff --git a/Waste.SocketService.cs/MyPackageFilter.cs b/Waste.SocketService.cs/MyPackageFilter.cs index dc7c4f5..fffd2fa 100644 --- a/Waste.SocketService.cs/MyPackageFilter.cs +++ b/Waste.SocketService.cs/MyPackageFilter.cs @@ -77,29 +77,16 @@ namespace Waste.SocketService /// /// /// - public static string BytesToString(this byte[] bytes) + public static string BytesToString(this byte[] bytes, Encoding enocde) { string returnStr = ""; if (bytes != null) { - returnStr = Encoding.GetEncoding("GB2312").GetString(bytes); - } - return returnStr; - } - /// - /// 字节数组转字符串 - /// - /// - /// - public static string BytesToStringBUtf8(this byte[] bytes) - { - string returnStr = ""; - if (bytes != null) - { - returnStr = Encoding.UTF8.GetString(bytes); + returnStr = enocde.GetString(bytes); } return returnStr; } + /// /// 字节数据转中文 /// @@ -200,8 +187,13 @@ namespace Waste.SocketService var package = new MyPackage(); var _reader = reader; Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); + var GB2312 = Encoding.GetEncoding("GB2312"); + var UTF8 = Encoding.UTF8; string key = ""; int keylen = 1; + + package.Str = _reader.ReadString(GB2312); + #region 解析头部,头部固定为A9 if (reader.Length >= 2) { @@ -211,19 +203,18 @@ namespace Waste.SocketService keys[0] = key1Byte; reader.TryRead(out byte key2Byte); keys[1] = key2Byte; - key = keys.BytesToString(); + key = keys.BytesToString(GB2312); } else { byte[] keys = new byte[1]; reader.TryRead(out byte key1Byte); keys[0] = key1Byte; - key = keys.BytesToString(); + key = keys.BytesToString(GB2312); } #endregion - if (key != "A9" && key !="A8") + if (key != "A9" && key != "A8" && key != "A7") { - package.Str = _reader.ReadString(Encoding.GetEncoding("GB2312")); var len = reader.Length; string msg = ""; reader.Rewind(keylen); @@ -234,6 +225,13 @@ namespace Waste.SocketService } package.IsChecked = false; package.Body = msg; + return package; + + } + else if (key == "A7") + { + key = "A8";//全部GB2312的A8 + return ReadA7(reader, package, key, GB2312); } else if (key == "A8") { @@ -250,7 +248,7 @@ namespace Waste.SocketService { return null; } - body = bytes.BytesToStringBUtf8().Replace("\r", "").Replace("\n", ""); + body = bytes.BytesToString(UTF8).Replace("\r", "").Replace("\n", ""); package.Body = bytes.BytesToHexStr(); var arr = body.Split('|'); #region 心跳包的处理,IMEI|GPS @@ -271,7 +269,7 @@ namespace Waste.SocketService package.ICCID = arr[0]; package.IMEI = arr[1]; package.IMSI = arr[2]; - var gslq = Encoding.GetEncoding("GB2312").GetBytes(arr[3]); + var gslq = GB2312.GetBytes(arr[3]); if (gslq.Length == 2) { package.GSLQ = Convert.ToInt32(gslq[1]).ToString(); @@ -287,7 +285,7 @@ namespace Waste.SocketService package.ICCID = arr[0]; package.IMEI = arr[1]; package.IMSI = arr[2]; - var gslq = Encoding.GetEncoding("GB2312").GetBytes(arr[3]); + var gslq = GB2312.GetBytes(arr[3]); if (gslq.Length == 2) { package.GSLQ = Convert.ToInt32(gslq[1]).ToString(); @@ -298,7 +296,7 @@ namespace Waste.SocketService } package.Time = $"{arr[4]}{arr[5]}".Replace("-", "").Replace(":", ""); //uuid@datetime@垃圾类型@子类@重量@价格@金额@操作员 - package.Str = _reader.ReadString(Encoding.UTF8); + //package.Str = _reader.ReadString(Encoding.UTF8); var measurearr = arr[6].Split('@'); if (measurearr.Length == 8) { @@ -335,10 +333,11 @@ namespace Waste.SocketService } #endregion + return package; } else { - package.Str = _reader.ReadString(Encoding.GetEncoding("GB2312")); + //package.Str = _reader.ReadString(GB2312); package.Key = key; package.Len = (int)reader.Length - 2; string body = ""; @@ -352,7 +351,7 @@ namespace Waste.SocketService { return null; } - body = bytes.BytesToString().Replace("\r", "").Replace("\n", ""); + body = bytes.BytesToString(GB2312).Replace("\r", "").Replace("\n", ""); package.Body = bytes.BytesToHexStr(); var arr = body.Split('|'); #region 心跳包的处理,IMEI|GPS @@ -373,7 +372,7 @@ namespace Waste.SocketService package.ICCID = arr[0]; package.IMEI = arr[1]; package.IMSI = arr[2]; - var gslq = Encoding.GetEncoding("GB2312").GetBytes(arr[3]); + var gslq = GB2312.GetBytes(arr[3]); if (gslq.Length == 2) { package.GSLQ = Convert.ToInt32(gslq[1]).ToString(); @@ -389,7 +388,7 @@ namespace Waste.SocketService package.ICCID = arr[0]; package.IMEI = arr[1]; package.IMSI = arr[2]; - var gslq = Encoding.GetEncoding("GB2312").GetBytes(arr[3]); + var gslq = GB2312.GetBytes(arr[3]); if (gslq.Length == 2) { package.GSLQ = Convert.ToInt32(gslq[1]).ToString(); @@ -400,7 +399,7 @@ namespace Waste.SocketService } package.Time = $"{arr[4]}{arr[5]}".Replace("-", "").Replace(":", ""); //厨余垃圾/大桶@垃圾桶编号@厨余垃圾@7.91 - var b = Encoding.GetEncoding("GB2312").GetBytes(arr[6]); + var b = GB2312.GetBytes(arr[6]); if (b.Length > 23) { byte[] tbyte = new byte[1]; //桶类型 @@ -430,9 +429,9 @@ namespace Waste.SocketService var thex = tbyte.BytesToHexStr(); var codehex = codebyte.BytesToHexStr(); var typehex = typebyte.BytesToHexStr(); - var typestr = typebyte.BytesToString(); + var typestr = typebyte.BytesToString(GB2312); var whex = wbyte.BytesToHexStr(); - var wstr = wbyte.BytesToString(); + var wstr = wbyte.BytesToString(GB2312); package.size = thex.Replace(" ", ""); package.trashcode = codehex.Replace(" ", "").HextToDec().ToString(); package.WasteType = typestr; @@ -446,26 +445,130 @@ namespace Waste.SocketService } #endregion + return package; } - return package; } catch (Exception ex) { Console.WriteLine($"数据处理发生异常:{ex.Message}"); return new MyPackage(); } + } - void Read(MyPackage package, string[] measurearr) + private static MyPackage ReadA7(SequenceReader reader, MyPackage package, string key, Encoding encoding) + { + //package.Str = reader.ReadString(encoding); + + package.Key = key; + package.Len = (int)reader.Length - 2; + string body = ""; + byte[] bytes = new byte[package.Len]; + for (var i = 0; i < package.Len; i++) { - package.UUID = measurearr[0]; - package.UploadTime = measurearr[1]; - package.WasteType = measurearr[2]; - package.WasteSType = measurearr[3]; - package.Weight = measurearr[4]; - package.Price = measurearr[5]; - package.Amount = measurearr[6]; - package.OpUser = measurearr[7]; + reader.TryRead(out byte val); + bytes[i] = val; } + if (bytes.Length == 1 && bytes[0] == 0) + { + return null; + } + body = bytes.BytesToString(encoding).Replace("\r", "").Replace("\n", ""); + package.Body = bytes.BytesToHexStr(); + var arr = body.Split('|'); + #region 心跳包的处理,IMEI|GPS + if (arr.Length == 2) + { + package.IsHeart = true; + package.IMEI = arr[0]; + var gpsarr = arr[1].Split(','); + if (gpsarr.Length == 2) + { + package.Longitude = gpsarr[0]; + package.Latitude = gpsarr[1]; + } + } + else if (arr.Length == 7 && string.IsNullOrEmpty(arr[6])) + { + package.IsHeart = true; + package.ICCID = arr[0]; + package.IMEI = arr[1]; + package.IMSI = arr[2]; + var gslq = encoding.GetBytes(arr[3]); + if (gslq.Length == 2) + { + package.GSLQ = Convert.ToInt32(gslq[1]).ToString(); + } + else + { + package.GSLQ = gslq.BytesToHexStr(); + } + package.Time = $"{arr[4]}{arr[5]}".Replace("-", "").Replace(":", ""); + } + else if (arr.Length == 7) + { + package.ICCID = arr[0]; + package.IMEI = arr[1]; + package.IMSI = arr[2]; + var gslq = encoding.GetBytes(arr[3]); + if (gslq.Length == 2) + { + package.GSLQ = Convert.ToInt32(gslq[1]).ToString(); + } + else + { + package.GSLQ = gslq.BytesToHexStr(); + } + package.Time = $"{arr[4]}{arr[5]}".Replace("-", "").Replace(":", ""); + //uuid@datetime@垃圾类型@子类@重量@价格@金额@操作员 + var measurearr = arr[6].Split('@'); + if (measurearr.Length == 8) + { + Read(package, measurearr); + package.IsWeight = true; + } + //uuid@datetime@垃圾类型@子类@重量@单价@金额@操作员@物品编码@垃圾桶@毛重@皮重@净重@ID1@ID2@ID3@ID4@ID5@ID6@ID7@ID8\r\n + else if (measurearr.Length == 21) + { + + Read(package, measurearr); + + package.DeviceFacEcode = measurearr[8]; + package.Registration = measurearr[9]; + package.GrossWeight = measurearr[10]; + package.Tare = measurearr[11]; + package.NetWeight = measurearr[12]; + + package.ID1 = measurearr[13]; + package.ID2 = measurearr[14]; + package.ID3 = measurearr[15]; + package.ID4 = measurearr[16]; + package.ID5 = measurearr[17]; + package.ID6 = measurearr[18]; + package.ID7 = measurearr[19]; + package.ID8 = measurearr[20]; + + package.IsWeight = true; + } + else + { + package.size = arr[6]; + } + + } + #endregion + return package; + } + + private static void Read(MyPackage package, string[] measurearr) + { + package.UUID = measurearr[0]; + package.UploadTime = measurearr[1]; + package.WasteType = measurearr[2]; + package.WasteSType = measurearr[3]; + package.Weight = measurearr[4]; + package.Price = measurearr[5]; + package.Amount = measurearr[6]; + package.OpUser = measurearr[7]; } } } diff --git a/Waste.SocketService.cs/Program.cs b/Waste.SocketService.cs/Program.cs index 2c66695..8508d01 100644 --- a/Waste.SocketService.cs/Program.cs +++ b/Waste.SocketService.cs/Program.cs @@ -38,6 +38,10 @@ namespace Waste.SocketService new string('-', 50);//ģ //1.restrictedToMinimumLevelLogEventLevel config + .Enrich.WithProperty("Application", typeof(Program).Assembly.GetName().Name) + .Enrich.WithProcessId() + .Enrich.WithProcessName() + .WriteTo.Console() .WriteTo.Seq("http://localhost:5341/") //2.1 LogEventLevel.Debug @@ -113,7 +117,7 @@ namespace Waste.SocketService var _logger = services.GetService(); if (package.IsChecked) { - string msg = $"ͨУ,ʮ:{package.Body},ַ:{package.Str}"; + string msg = $"ͨУ,Key:{package.Key}ʮ:{package.Body},ַ:{package.Str}"; if (package.IsHeart) { msg = $"{msg},,{(package == null ? "" : JsonConvert.SerializeObject(package))}"; @@ -162,7 +166,7 @@ namespace Waste.SocketService } else { - _logger.Information($"δͨУ,ʮ:{package.Body},ַ:{package.Str}"); + _logger.Information($"δͨУ,Key:{package.Key},ʮ:{package.Body},ַ:{package.Str}"); } }); }) diff --git a/Waste.SocketService.cs/Waste.SocketService.csproj b/Waste.SocketService.cs/Waste.SocketService.csproj index 592a941..8a154e3 100644 --- a/Waste.SocketService.cs/Waste.SocketService.csproj +++ b/Waste.SocketService.cs/Waste.SocketService.csproj @@ -1,4 +1,4 @@ - + net5.0 @@ -17,6 +17,7 @@ +