增加A7 GB2312的A8
uuid@datetime@垃圾类型@子类@重量@单价@金额@操作员@物品编码@垃圾桶@毛重@皮重@净重@ID1@ID2@ID3@ID4@ID5@ID6@ID7@ID8
This commit is contained in:
parent
d9d6149ed0
commit
10ca96e5c1
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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协议模块上传的数据包体
|
||||
|
|
|
|||
|
|
@ -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,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<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++)
|
||||
{
|
||||
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];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,10 @@ namespace Waste.SocketService
|
|||
new string('-', 50);//输出模板
|
||||
//1.输出所有restrictedToMinimumLevel:LogEventLevel类型
|
||||
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}");
|
||||
}
|
||||
});
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Reference in New Issue