增加A7 GB2312的A8

uuid@datetime@垃圾类型@子类@重量@单价@金额@操作员@物品编码@垃圾桶@毛重@皮重@净重@ID1@ID2@ID3@ID4@ID5@ID6@ID7@ID8
This commit is contained in:
李鹏鹏 2024-12-20 16:40:21 +08:00
parent d9d6149ed0
commit 10ca96e5c1
5 changed files with 178 additions and 45 deletions

View File

@ -144,7 +144,7 @@ namespace Waste.Application
return dbClient.Queryable<W_MeasureResult>().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;

View File

@ -1877,6 +1877,31 @@
操作员
</summary>
</member>
<member name="P:Waste.Application.A8Package.DeviceFacEcode">
<summary>
设备出厂序列号/设备出厂编号
</summary>
</member>
<member name="P:Waste.Application.A8Package.Registration">
<summary>
车牌号/物品编码/垃圾桶编号
</summary>
</member>
<member name="P:Waste.Application.A8Package.GrossWeight">
<summary>
毛重,KG
</summary>
</member>
<member name="P:Waste.Application.A8Package.Tare">
<summary>
皮重,KG
</summary>
</member>
<member name="P:Waste.Application.A8Package.NetWeight">
<summary>
净重,KG
</summary>
</member>
<member name="T:Waste.Application.A8MyPackage">
<summary>
A8协议模块上传的数据包体

View File

@ -77,29 +77,16 @@ namespace Waste.SocketService
/// </summary>
/// <param name="bt"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 字节数组转字符串
/// </summary>
/// <param name="bt"></param>
/// <returns></returns>
public static string BytesToStringBUtf8(this byte[] bytes)
{
string returnStr = "";
if (bytes != null)
{
returnStr = Encoding.UTF8.GetString(bytes);
returnStr = enocde.GetString(bytes);
}
return returnStr;
}
/// <summary>
/// 字节数据转中文
/// </summary>
@ -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,16 +445,121 @@ namespace Waste.SocketService
}
#endregion
}
return package;
}
}
catch (Exception ex)
{
Console.WriteLine($"数据处理发生异常:{ex.Message}");
return new MyPackage();
}
}
void Read(MyPackage package, string[] measurearr)
private static MyPackage ReadA7(SequenceReader<byte> 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++)
{
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];
@ -468,4 +572,3 @@ namespace Waste.SocketService
}
}
}
}

View File

@ -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<ILogger>();
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}");
}
});
})

View File

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk.Worker">
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
@ -17,6 +17,7 @@
<PackageReference Include="Furion.Extras.Logging.Serilog" Version="2.20.6" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="5.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="5.0.1" />
<PackageReference Include="Serilog.Enrichers.Process" Version="2.0.2" />
<PackageReference Include="Serilog.Sinks.Seq" Version="5.1.0" />
<PackageReference Include="SuperSocket" Version="2.0.0-beta.10" />
</ItemGroup>