数据整理
This commit is contained in:
parent
772514da44
commit
ceea3b2291
106
langguanApi.xml
106
langguanApi.xml
|
|
@ -472,7 +472,7 @@
|
|||
</member>
|
||||
<member name="M:langguanApi.Controllers.TransportController.list(langguanApi.Model.reqpage)">
|
||||
<summary>
|
||||
获取清洁运输列表
|
||||
清洁运输:获取门禁数据和详情
|
||||
</summary>
|
||||
<param name="input"></param>
|
||||
<returns></returns>
|
||||
|
|
@ -499,14 +499,14 @@
|
|||
</member>
|
||||
<member name="M:langguanApi.Controllers.TransportController.WasherList">
|
||||
<summary>
|
||||
获取洗车机列表
|
||||
洗车机:获取洗车机列表和右侧洗车状态等数据,默认右侧显示第一条的记录
|
||||
</summary>
|
||||
<param name="input"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:langguanApi.Controllers.TransportController.WasherHistoryList(langguanApi.Model.transportReqPage)">
|
||||
<summary>
|
||||
获取洗车机历史记录(起始时间和结束时间非空,根据起始时间和结束时间筛选数据,如果为空,默认获取30条数据)
|
||||
洗车机:获取历史记录 和导出历史记录
|
||||
</summary>
|
||||
<param name="input"></param>
|
||||
<returns></returns>
|
||||
|
|
@ -520,7 +520,7 @@
|
|||
</member>
|
||||
<member name="M:langguanApi.Controllers.TransportController.GetTransport(langguanApi.Model.transportReqPage)">
|
||||
<summary>
|
||||
获取清洁运输(门禁和地磅组合,地磅获取总重量,后期会用地磅重量-车辆车辆)
|
||||
清洁运输:获取清洁运输列表和饼图比例数据
|
||||
</summary>
|
||||
<param name="reqPage"></param>
|
||||
<returns></returns>
|
||||
|
|
@ -759,6 +759,56 @@
|
|||
车牌类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.CleanTransportationDto.Effluent">
|
||||
<summary>
|
||||
排放类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.CleanTransportationAllDto.cleans">
|
||||
<summary>
|
||||
清洁运输总记录
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.CleanTransportationAllDto.V5Percent">
|
||||
<summary>
|
||||
国五百分比
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.CleanTransportationAllDto.V5WeightPercent">
|
||||
<summary>
|
||||
国五运输量百分比
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.CleanTransportationAllDto.V6Percent">
|
||||
<summary>
|
||||
国六百分比
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.CleanTransportationAllDto.V6WeightPercent">
|
||||
<summary>
|
||||
国六运输量百分比
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.CleanTransportationAllDto.ElectricPrecent">
|
||||
<summary>
|
||||
电动百分比
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.CleanTransportationAllDto.ElectricWeightPrecent">
|
||||
<summary>
|
||||
电动运输量百分比
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.CleanTransportationAllDto.OtherPrecent">
|
||||
<summary>
|
||||
其他百分比
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.CleanTransportationAllDto.OtherWeightPrecent">
|
||||
<summary>
|
||||
其他运输量百分比
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.columnView.hour">
|
||||
<summary>
|
||||
|
||||
|
|
@ -1957,7 +2007,7 @@
|
|||
</member>
|
||||
<member name="P:langguanApi.Model.Transport.effluent">
|
||||
<summary>
|
||||
排放标准
|
||||
排放标准(0-7是国1-7,D:电动 X:无排放阶段)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.Transport.imgUrl">
|
||||
|
|
@ -2315,21 +2365,6 @@
|
|||
运行状态(RunStatus,0表示异常,1表示正常)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.GetWasherDto.WPAlarmString">
|
||||
<summary>
|
||||
水压报警(WPAlarm 0表示异常,1表示正常)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.GetWasherDto.PSAlarmString">
|
||||
<summary>
|
||||
相序报警(PSAlarm0表示异常,1表示正常)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.GetWasherDto.FaultAlarmString">
|
||||
<summary>
|
||||
故障报警(FaultAlarm 0表示异常,1表示正常)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.GetWasherDto.RinsePressure">
|
||||
<summary>
|
||||
冲洗压力
|
||||
|
|
@ -2345,26 +2380,6 @@
|
|||
冲洗电压(RinseVoltage 单位V)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.GetWasherDto.Discharge">
|
||||
<summary>
|
||||
水流量(Discharge 单位T)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.GetWasherDto.Electricity">
|
||||
<summary>
|
||||
电量(Electricity KW/H)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.GetWasherDto.Current">
|
||||
<summary>
|
||||
电流(Current A)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.GetWasherDto.WaterPressure">
|
||||
<summary>
|
||||
水压(WaterPressure MPa)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:langguanApi.Model.GetWasherDto.EquipmentId">
|
||||
<summary>
|
||||
洗车机编码
|
||||
|
|
@ -3146,7 +3161,7 @@
|
|||
</member>
|
||||
<member name="M:langguanApi.Service.TransportService.GetTransport(langguanApi.Model.transportReqPage)">
|
||||
<summary>
|
||||
获取清洁运输列表(门禁和地磅组合)
|
||||
获取清洁运输趋势列表(门禁和地磅组合,地磅获取总重量,后期会用地磅重量-车辆车辆)
|
||||
</summary>
|
||||
<param name="input"></param>
|
||||
<returns></returns>
|
||||
|
|
@ -3158,6 +3173,13 @@
|
|||
<param name="color"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:langguanApi.Service.TransportService.GetEffluentString(System.String)">
|
||||
<summary>
|
||||
排放标准(0-7是国1-7,D:电动 X:无排放阶段)
|
||||
</summary>
|
||||
<param name="effluent"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:langguanApi.Service.TruckScalesService.AddTruckScalesList(System.Collections.Generic.List{langguanApi.Model.AddTruckScalesDto})">
|
||||
<summary>
|
||||
新加
|
||||
|
|
@ -3247,7 +3269,7 @@
|
|||
</member>
|
||||
<member name="M:langguanApi.Service.WasherService.WasherHistoryList(langguanApi.Model.transportReqPage)">
|
||||
<summary>
|
||||
获取洗车机历史记录
|
||||
获取洗车机历史记录(起始时间和结束时间非空,根据起始时间和结束时间筛选数据,如果为空,默认获取30条数据)
|
||||
</summary>
|
||||
<param name="input"></param>
|
||||
<returns></returns>
|
||||
|
|
|
|||
|
|
@ -45,27 +45,8 @@ namespace langguanApi.Controllers
|
|||
{
|
||||
// 示例数据(需替换为实际接收到的协议数据)
|
||||
string hexData = "787811010868120321167279808D3202001AB12F0D0A";
|
||||
byte[] protocolData = HexStringToByteArray(hexData);
|
||||
// 进行转义还原
|
||||
byte[] restoredData = RestoreEscape(protocolData);
|
||||
byte[] loginPacket = BuildLoginPacket("123456789012345"); // 替换为实际的IMEI
|
||||
|
||||
// 验证校验码
|
||||
if (!VerifyChecksum(restoredData))
|
||||
{
|
||||
Console.WriteLine("Checksum verification failed.");
|
||||
}
|
||||
Position? position = ParsePosition(restoredData);
|
||||
|
||||
if (position.HasValue)
|
||||
{
|
||||
Console.WriteLine($"Latitude: {position.Value.Latitude}");
|
||||
Console.WriteLine($"Longitude: {position.Value.Longitude}");
|
||||
Console.WriteLine($"Altitude: {position.Value.Altitude}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Failed to parse position.");
|
||||
}
|
||||
// Console.WriteLine("经度:" + lon + " 纬度:" + lat);
|
||||
|
||||
// string rawText = "数据报:##0250QN=20240424224800000;ST=22;CN=2011;PW=123456;MN=LGYC022024690001;Flag=5;CP=&&DataTime=20240424224800;a34001-Rtd=356.2";
|
||||
|
|
@ -108,58 +89,109 @@ namespace langguanApi.Controllers
|
|||
};
|
||||
}
|
||||
|
||||
private static bool VerifyChecksum(byte[] data)
|
||||
static byte[] BuildLoginPacket(string imei)
|
||||
{
|
||||
// 校验码在数据包的倒数第二个字节
|
||||
byte receivedChecksum = data[data.Length - 2];
|
||||
byte calculatedChecksum = 0;
|
||||
using (MemoryStream ms = new MemoryStream())
|
||||
{
|
||||
BinaryWriter writer = new BinaryWriter(ms);
|
||||
|
||||
// 校验范围是从第一个字节到倒数第三个字节
|
||||
for (int i = 0; i < data.Length - 2; i++)
|
||||
{
|
||||
calculatedChecksum ^= data[i];
|
||||
}
|
||||
writer.Write(new byte[] { 0x78, 0x78 }); // 起始位
|
||||
writer.Write((byte)0x0D); // 包长度
|
||||
writer.Write((byte)0x01); // 协议号
|
||||
|
||||
return receivedChecksum == calculatedChecksum;
|
||||
}
|
||||
private static byte[] RestoreEscape(byte[] data)
|
||||
{
|
||||
List<byte> result = new List<byte>();
|
||||
for (int i = 0; i < data.Length; i++)
|
||||
{
|
||||
if (data[i] == 0x7D)
|
||||
{
|
||||
if (i + 1 < data.Length)
|
||||
{
|
||||
if (data[i + 1] == 0x02)
|
||||
{
|
||||
result.Add(0x7E);
|
||||
i++;
|
||||
}
|
||||
else if (data[i + 1] == 0x01)
|
||||
{
|
||||
result.Add(0x7D);
|
||||
i++;
|
||||
byte[] imeiBytes = Encoding.ASCII.GetBytes(imei);
|
||||
writer.Write(imeiBytes);
|
||||
|
||||
writer.Write((short)0x0001); // 信息序列号
|
||||
|
||||
byte[] content = ms.ToArray();
|
||||
short crc = CalculateCRC(content, 2, content.Length - 2);
|
||||
writer.Write(crc); // 错误校验
|
||||
|
||||
writer.Write(new byte[] { 0x0D, 0x0A }); // 停止位
|
||||
|
||||
return ms.ToArray();
|
||||
}
|
||||
}
|
||||
static short CalculateCRC(byte[] data, int start, int length)
|
||||
{
|
||||
// CRC计算方法(参考协议中的CRC-ITU算法)
|
||||
ushort crc = 0xFFFF;
|
||||
|
||||
for (int i = start; i < start + length; i++)
|
||||
{
|
||||
crc = (ushort)(crc ^ (data[i] << 8));
|
||||
|
||||
for (int j = 0; j < 8; j++)
|
||||
{
|
||||
if ((crc & 0x8000) != 0)
|
||||
{
|
||||
crc = (ushort)((crc << 1) ^ 0x1021);
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Add(data[i]);
|
||||
crc <<= 1;
|
||||
}
|
||||
}
|
||||
return result.ToArray();
|
||||
}
|
||||
private static byte[] HexStringToByteArray(string hex)
|
||||
|
||||
return (short)crc;
|
||||
}
|
||||
static void ParseServerResponse(byte[] data, int length)
|
||||
{
|
||||
int NumberChars = hex.Length;
|
||||
byte[] bytes = new byte[NumberChars / 2];
|
||||
for (int i = 0; i < NumberChars; i += 2)
|
||||
if (length < 10) // 根据协议响应包最小长度
|
||||
{
|
||||
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
|
||||
Console.WriteLine("响应包长度错误");
|
||||
return;
|
||||
}
|
||||
return bytes;
|
||||
|
||||
if (data[0] == 0x78 && data[1] == 0x78)
|
||||
{
|
||||
Console.WriteLine("起始位正确");
|
||||
|
||||
byte protocolNumber = data[3];
|
||||
if (protocolNumber == 0x01)
|
||||
{
|
||||
Console.WriteLine("协议号正确: 登录信息包响应");
|
||||
|
||||
byte[] sequenceNumber = new byte[2];
|
||||
Array.Copy(data, 4, sequenceNumber, 0, 2);
|
||||
Console.WriteLine($"信息序列号: {BitConverter.ToString(sequenceNumber)}");
|
||||
|
||||
byte[] crc = new byte[2];
|
||||
Array.Copy(data, length - 4, crc, 0, 2);
|
||||
Console.WriteLine($"CRC: {BitConverter.ToString(crc)}");
|
||||
}
|
||||
}
|
||||
}
|
||||
static void ParseLocationPacket(byte[] data, int length)
|
||||
{
|
||||
if (length < 16) // 根据协议位置数据包最小长度
|
||||
{
|
||||
Console.WriteLine("位置数据包长度错误");
|
||||
return;
|
||||
}
|
||||
|
||||
if (data[0] == 0x78 && data[1] == 0x78)
|
||||
{
|
||||
Console.WriteLine("起始位正确");
|
||||
|
||||
byte protocolNumber = data[3];
|
||||
if (protocolNumber == 0x12) // 位置数据包协议号
|
||||
{
|
||||
Console.WriteLine("协议号正确: 位置数据包");
|
||||
|
||||
int latitude = (data[5] & 0xFF) << 24 | (data[6] & 0xFF) << 16 | (data[7] & 0xFF) << 8 | (data[8] & 0xFF);
|
||||
int longitude = (data[9] & 0xFF) << 24 | (data[10] & 0xFF) << 16 | (data[11] & 0xFF) << 8 | (data[12] & 0xFF);
|
||||
|
||||
double lat = latitude / 1800000.0;
|
||||
double lon = longitude / 1800000.0;
|
||||
|
||||
Console.WriteLine($"纬度: {lat}, 经度: {lon}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public struct Position
|
||||
{
|
||||
public double Latitude;
|
||||
|
|
|
|||
|
|
@ -98,6 +98,7 @@ namespace langguanApi.Service
|
|||
if (hj.DecodeData(rawText))
|
||||
{
|
||||
var body = JsonConvert.SerializeObject(hj.CP);
|
||||
|
||||
Console.WriteLine("解析成功: " + body);
|
||||
var entity = JsonConvert.DeserializeObject<Model.HJ212>(body);
|
||||
entity.deviceMN = hj.DATA_HEAD["MN"];
|
||||
|
|
|
|||
Loading…
Reference in New Issue