数据整理
This commit is contained in:
parent
772514da44
commit
ceea3b2291
106
langguanApi.xml
106
langguanApi.xml
|
|
@ -472,7 +472,7 @@
|
||||||
</member>
|
</member>
|
||||||
<member name="M:langguanApi.Controllers.TransportController.list(langguanApi.Model.reqpage)">
|
<member name="M:langguanApi.Controllers.TransportController.list(langguanApi.Model.reqpage)">
|
||||||
<summary>
|
<summary>
|
||||||
获取清洁运输列表
|
清洁运输:获取门禁数据和详情
|
||||||
</summary>
|
</summary>
|
||||||
<param name="input"></param>
|
<param name="input"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
|
|
@ -499,14 +499,14 @@
|
||||||
</member>
|
</member>
|
||||||
<member name="M:langguanApi.Controllers.TransportController.WasherList">
|
<member name="M:langguanApi.Controllers.TransportController.WasherList">
|
||||||
<summary>
|
<summary>
|
||||||
获取洗车机列表
|
洗车机:获取洗车机列表和右侧洗车状态等数据,默认右侧显示第一条的记录
|
||||||
</summary>
|
</summary>
|
||||||
<param name="input"></param>
|
<param name="input"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:langguanApi.Controllers.TransportController.WasherHistoryList(langguanApi.Model.transportReqPage)">
|
<member name="M:langguanApi.Controllers.TransportController.WasherHistoryList(langguanApi.Model.transportReqPage)">
|
||||||
<summary>
|
<summary>
|
||||||
获取洗车机历史记录(起始时间和结束时间非空,根据起始时间和结束时间筛选数据,如果为空,默认获取30条数据)
|
洗车机:获取历史记录 和导出历史记录
|
||||||
</summary>
|
</summary>
|
||||||
<param name="input"></param>
|
<param name="input"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
|
|
@ -520,7 +520,7 @@
|
||||||
</member>
|
</member>
|
||||||
<member name="M:langguanApi.Controllers.TransportController.GetTransport(langguanApi.Model.transportReqPage)">
|
<member name="M:langguanApi.Controllers.TransportController.GetTransport(langguanApi.Model.transportReqPage)">
|
||||||
<summary>
|
<summary>
|
||||||
获取清洁运输(门禁和地磅组合,地磅获取总重量,后期会用地磅重量-车辆车辆)
|
清洁运输:获取清洁运输列表和饼图比例数据
|
||||||
</summary>
|
</summary>
|
||||||
<param name="reqPage"></param>
|
<param name="reqPage"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
|
|
@ -759,6 +759,56 @@
|
||||||
车牌类型
|
车牌类型
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</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">
|
<member name="P:langguanApi.Model.columnView.hour">
|
||||||
<summary>
|
<summary>
|
||||||
|
|
||||||
|
|
@ -1957,7 +2007,7 @@
|
||||||
</member>
|
</member>
|
||||||
<member name="P:langguanApi.Model.Transport.effluent">
|
<member name="P:langguanApi.Model.Transport.effluent">
|
||||||
<summary>
|
<summary>
|
||||||
排放标准
|
排放标准(0-7是国1-7,D:电动 X:无排放阶段)
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="P:langguanApi.Model.Transport.imgUrl">
|
<member name="P:langguanApi.Model.Transport.imgUrl">
|
||||||
|
|
@ -2315,21 +2365,6 @@
|
||||||
运行状态(RunStatus,0表示异常,1表示正常)
|
运行状态(RunStatus,0表示异常,1表示正常)
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</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">
|
<member name="P:langguanApi.Model.GetWasherDto.RinsePressure">
|
||||||
<summary>
|
<summary>
|
||||||
冲洗压力
|
冲洗压力
|
||||||
|
|
@ -2345,26 +2380,6 @@
|
||||||
冲洗电压(RinseVoltage 单位V)
|
冲洗电压(RinseVoltage 单位V)
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</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">
|
<member name="P:langguanApi.Model.GetWasherDto.EquipmentId">
|
||||||
<summary>
|
<summary>
|
||||||
洗车机编码
|
洗车机编码
|
||||||
|
|
@ -3146,7 +3161,7 @@
|
||||||
</member>
|
</member>
|
||||||
<member name="M:langguanApi.Service.TransportService.GetTransport(langguanApi.Model.transportReqPage)">
|
<member name="M:langguanApi.Service.TransportService.GetTransport(langguanApi.Model.transportReqPage)">
|
||||||
<summary>
|
<summary>
|
||||||
获取清洁运输列表(门禁和地磅组合)
|
获取清洁运输趋势列表(门禁和地磅组合,地磅获取总重量,后期会用地磅重量-车辆车辆)
|
||||||
</summary>
|
</summary>
|
||||||
<param name="input"></param>
|
<param name="input"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
|
|
@ -3158,6 +3173,13 @@
|
||||||
<param name="color"></param>
|
<param name="color"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</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})">
|
<member name="M:langguanApi.Service.TruckScalesService.AddTruckScalesList(System.Collections.Generic.List{langguanApi.Model.AddTruckScalesDto})">
|
||||||
<summary>
|
<summary>
|
||||||
新加
|
新加
|
||||||
|
|
@ -3247,7 +3269,7 @@
|
||||||
</member>
|
</member>
|
||||||
<member name="M:langguanApi.Service.WasherService.WasherHistoryList(langguanApi.Model.transportReqPage)">
|
<member name="M:langguanApi.Service.WasherService.WasherHistoryList(langguanApi.Model.transportReqPage)">
|
||||||
<summary>
|
<summary>
|
||||||
获取洗车机历史记录
|
获取洗车机历史记录(起始时间和结束时间非空,根据起始时间和结束时间筛选数据,如果为空,默认获取30条数据)
|
||||||
</summary>
|
</summary>
|
||||||
<param name="input"></param>
|
<param name="input"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
|
|
|
||||||
|
|
@ -45,27 +45,8 @@ namespace langguanApi.Controllers
|
||||||
{
|
{
|
||||||
// 示例数据(需替换为实际接收到的协议数据)
|
// 示例数据(需替换为实际接收到的协议数据)
|
||||||
string hexData = "787811010868120321167279808D3202001AB12F0D0A";
|
string hexData = "787811010868120321167279808D3202001AB12F0D0A";
|
||||||
byte[] protocolData = HexStringToByteArray(hexData);
|
byte[] loginPacket = BuildLoginPacket("123456789012345"); // 替换为实际的IMEI
|
||||||
// 进行转义还原
|
|
||||||
byte[] restoredData = RestoreEscape(protocolData);
|
|
||||||
|
|
||||||
// 验证校验码
|
|
||||||
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);
|
// 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";
|
// 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)
|
||||||
{
|
{
|
||||||
// 校验码在数据包的倒数第二个字节
|
using (MemoryStream ms = new MemoryStream())
|
||||||
byte receivedChecksum = data[data.Length - 2];
|
{
|
||||||
byte calculatedChecksum = 0;
|
BinaryWriter writer = new BinaryWriter(ms);
|
||||||
|
|
||||||
// 校验范围是从第一个字节到倒数第三个字节
|
writer.Write(new byte[] { 0x78, 0x78 }); // 起始位
|
||||||
for (int i = 0; i < data.Length - 2; i++)
|
writer.Write((byte)0x0D); // 包长度
|
||||||
{
|
writer.Write((byte)0x01); // 协议号
|
||||||
calculatedChecksum ^= data[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
return receivedChecksum == calculatedChecksum;
|
byte[] imeiBytes = Encoding.ASCII.GetBytes(imei);
|
||||||
}
|
writer.Write(imeiBytes);
|
||||||
private static byte[] RestoreEscape(byte[] data)
|
|
||||||
{
|
writer.Write((short)0x0001); // 信息序列号
|
||||||
List<byte> result = new List<byte>();
|
|
||||||
for (int i = 0; i < data.Length; i++)
|
byte[] content = ms.ToArray();
|
||||||
{
|
short crc = CalculateCRC(content, 2, content.Length - 2);
|
||||||
if (data[i] == 0x7D)
|
writer.Write(crc); // 错误校验
|
||||||
{
|
|
||||||
if (i + 1 < data.Length)
|
writer.Write(new byte[] { 0x0D, 0x0A }); // 停止位
|
||||||
{
|
|
||||||
if (data[i + 1] == 0x02)
|
return ms.ToArray();
|
||||||
{
|
|
||||||
result.Add(0x7E);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
else if (data[i + 1] == 0x01)
|
|
||||||
{
|
|
||||||
result.Add(0x7D);
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
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
|
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;
|
if (length < 10) // 根据协议响应包最小长度
|
||||||
byte[] bytes = new byte[NumberChars / 2];
|
|
||||||
for (int i = 0; i < NumberChars; i += 2)
|
|
||||||
{
|
{
|
||||||
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 struct Position
|
||||||
{
|
{
|
||||||
public double Latitude;
|
public double Latitude;
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,7 @@ namespace langguanApi.Service
|
||||||
if (hj.DecodeData(rawText))
|
if (hj.DecodeData(rawText))
|
||||||
{
|
{
|
||||||
var body = JsonConvert.SerializeObject(hj.CP);
|
var body = JsonConvert.SerializeObject(hj.CP);
|
||||||
|
|
||||||
Console.WriteLine("解析成功: " + body);
|
Console.WriteLine("解析成功: " + body);
|
||||||
var entity = JsonConvert.DeserializeObject<Model.HJ212>(body);
|
var entity = JsonConvert.DeserializeObject<Model.HJ212>(body);
|
||||||
entity.deviceMN = hj.DATA_HEAD["MN"];
|
entity.deviceMN = hj.DATA_HEAD["MN"];
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue