소스 검색

完善readme 和单元测试用例

tags/v2.2.0
waterliu99 5 년 전
부모
커밋
2e916692c4
3개의 변경된 파일265개의 추가작업 그리고 6개의 파일을 삭제
  1. +36
    -5
      README.md
  2. +1
    -1
      src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1600_0x1602Test.cs
  3. +228
    -0
      src/JT809.Protocol.Test/Simples/Demo5.cs

+ 36
- 5
README.md 파일 보기

@@ -261,6 +261,34 @@ public class JT809_2019_Config : JT809GlobalConfigBase
}
```

### 举个栗子5

如何在项目中同时使用808的2019版本和809的2019版本

``` data4
IServiceCollection serviceDescriptors = new ServiceCollection();
serviceDescriptors.AddJT808Configure(new JT808_2019_Config());
serviceDescriptors.AddJT809Configure(new JT809_2019_Config());
JT808Serializer JT808_2019_Serializer = ServiceProvider.GetRequiredService<JT808_2019_Config>().GetSerializer();
JT809Serializer JT809_2019_Serializer = ServiceProvider.GetRequiredService<JT809_2019_Config>().GetSerializer();
public class JT808_2019_Config : GlobalConfigBase
{
public override string ConfigId { get; protected set; }
public JT808_2019_Config(string configId = "jt808_2019")
{
ConfigId = configId;
}
}
public class JT809_2019_Config : JT809GlobalConfigBase
{
public override string ConfigId => "JT809_2019";
public JT809_2019_Config()
{
Version = JT809Version.JTT2019;
}
}
```

## NuGet安装

| Package Name | Version | Downloads
@@ -325,6 +353,8 @@ Platform=AnyCpu Server=False Toolchain=.NET Core 3.1
|序号|消息ID|完成情况|测试情况|消息体名称|
|:------:|:------:|:------:|:------:|:------:|
| 1 | 0x9101 | √ | √ |接收定位信息数量通知消息 |
| 1 | 0x9102 | √ | √ |平台链路连接情况与车辆定位消息传输情况上报请求消息 |
| 1 | 0x9103 | √ | √ |下发平台间消息序列号通知消息 |

### 车辆动态信息交换

@@ -343,8 +373,8 @@ Platform=AnyCpu Server=False Toolchain=.NET Core 3.1
| 9 | 0x1209 | √ | √ | 补发车辆定位信息请求 |
| 10 | 0x120A | √ | √ | 上报车辆驾驶员身份识别信息应答 |
| 11 | 0x120B | √ | √ | 上报车辆电子运单应答 |
| 12 | 0x120C | √ | √ | 主动上报驾驶员身份信息(809补充协议文档) |
| 13 | 0x120D | √ | √ | 主动上报车辆电子运单信息(809补充协议文档) |
| 12 | 0x120C | √ | √ | 主动上报驾驶员身份信息 |
| 13 | 0x120D | √ | √ | 主动上报车辆电子运单信息 |
| 14 | 0x120E | √ | √ | 主动上报车辆行驶路线信息(809-2019) |

#### 从链路动态信息交换消息
@@ -352,6 +382,7 @@ Platform=AnyCpu Server=False Toolchain=.NET Core 3.1
|序号|消息ID|完成情况|测试情况|消息体名称|
|:------:|:------:|:------:|:------:|:------:|
| 1 | 0x9200 | √ | √ | 从链路动态信息交换消息 |
| 1 | 0x9201 | √ | √(0x1201) | 车辆注册信息应答消息 |
| 2 | 0x9202 | √ | √(0x1202) | 交换车辆定位信息消息(809补充协议文档) |
| 3 | 0x9203 | √ | √(0x1203) | 车辆定位信息交换补发消息 |
| 4 | 0x9204 | √ | √ | 交换车辆静态信息消息 |
@@ -383,7 +414,7 @@ Platform=AnyCpu Server=False Toolchain=.NET Core 3.1
| 1 | 0x9300 | √ | √ | 从链路平台间信息交互消息 |
| 2 | 0x9301 | √ | √ | 平台查岗请求(809补充协议文档) |
| 3 | 0x9302 | √ | √ | 下发平台间报文请求(809补充协议文档) |
| 4 | 0x9304 | √ | √ | 下发平台间消息补传请求消息(809-2019) |
| 4 | 0x9303 | √ | √ | 下发平台间消息补传请求消息(809-2019) |

### 车辆报警信息交互类

@@ -426,8 +457,8 @@ Platform=AnyCpu Server=False Toolchain=.NET Core 3.1
| 2 | 0x9501 | √ | √ | 车辆单向监听请求 |
| 3 | 0x9502 | √ | √ | 车辆拍照请求 |
| 4 | 0x9503 | √ | √ | 下发车辆报文请求 |
| 5 | 0x9504 | √ | √ | 上报车辆行驶记录请求(809补充协议文档) |
| 6 | 0x9505 | √ | √ | 车辆应急接入监管平台请求消息(809补充协议文档) |
| 5 | 0x9504 | √ | √ | 上报车辆行驶记录请求 |
| 6 | 0x9505 | √ | √ | 车辆应急接入监管平台请求消息 |

### 车辆静态信息交换类



+ 1
- 1
src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1600_0x1602Test.cs 파일 보기

@@ -21,7 +21,7 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
private JT809Serializer JT809Serializer = new JT809Serializer();
private JT809Serializer JT809_2019_Serializer = new JT809Serializer(new DefaultGlobalConfig() { Version = JT809Version.JTT2019 });
private JT808Serializer JT808Serializer_2019;
#warning 结合808协议包,解析808中的路线信息
public JT809_0x1600_0x1602Test()
{
IJT808Config jT808Config = new DefaultGlobal808_2019Config();


+ 228
- 0
src/JT809.Protocol.Test/Simples/Demo5.cs 파일 보기

@@ -0,0 +1,228 @@
using Microsoft.Extensions.DependencyInjection;
using System;
using JT809.Protocol.Test.JT1078;
using JT809.Protocol.Extensions;
using Xunit;
using JT809.Protocol.Enums;
using JT809.Protocol.Interfaces;
using JT808.Protocol.Interfaces;
using JT808.Protocol;
using JT808.Protocol.MessageBody;
using System.Collections.Generic;
using JT809.Protocol.SubMessageBody;
using JT808.Protocol.Metadata;

namespace JT809.Protocol.Test.Simples
{
/// <summary>
/// 1.此处结合808协议包解析 808中的定位信息
/// 2.此处结合808协议包解析 808中的路线信息
/// </summary>
public class Demo5
{
IServiceProvider ServiceProvider;
JT809Serializer JT809_2019_Serializer;
JT809Serializer JT809_Serializer;
JT808Serializer JT808_2019_Serializer;

public Demo5()
{
IServiceCollection serviceDescriptors = new ServiceCollection();
serviceDescriptors.AddJT808Configure(new JT808_2019_Config());
serviceDescriptors.AddJT809Configure(new JT809_2011_Config())
.AddJT1078Configure();
serviceDescriptors.AddJT809Configure(new JT809_2019_Config())
.AddJT1078Configure();
ServiceProvider = serviceDescriptors.BuildServiceProvider();
var jT809_2011_Config = ServiceProvider.GetRequiredService<JT809_2011_Config>();
var jT809_2019_Config = ServiceProvider.GetRequiredService<JT809_2019_Config>();
var jT808_Config = ServiceProvider.GetRequiredService<JT808_2019_Config>();

JT809_2019_Serializer = jT809_2019_Config.GetSerializer();
JT809_Serializer = jT809_2011_Config.GetSerializer();
JT808_2019_Serializer = jT808_Config.GetSerializer();
}
[Fact]
public void Test_2019_1()
{
JT808_0x8606 jT808_0X8606 = new JT808_0x8606
{
RouteId = 9999,
RouteProperty = 1268,
StartTime = DateTime.Parse("2018-11-20 00:00:12"),
EndTime = DateTime.Parse("2018-11-21 00:00:12"),
InflectionPointItems = new List<JT808InflectionPointProperty>()
};
jT808_0X8606.InflectionPointItems.Add(new JT808InflectionPointProperty()
{
InflectionPointId = 1000,
InflectionPointLat = 123456789,
InflectionPointLng = 123456788,
SectionDrivingUnderThreshold = 123,
SectionHighestSpeed = 69,
SectionId = 1287,
SectionLongDrivingThreshold = 50,
SectionOverspeedDuration = 23,
SectionProperty = 89,
SectionWidth = 56
});
jT808_0X8606.InflectionPointItems.Add(new JT808InflectionPointProperty()
{
InflectionPointId = 1001,
InflectionPointLat = 123456780,
InflectionPointLng = 123456781,
SectionDrivingUnderThreshold = 124,
SectionHighestSpeed = 42,
SectionId = 12007,
SectionLongDrivingThreshold = 58,
SectionOverspeedDuration = 26,
SectionProperty = 50,
SectionWidth = 75
});
var jt808_hex = JT808_2019_Serializer.Serialize(jT808_0X8606);

JT809_0x1600_0x1602 jT809_0x1600_0x1602 = new JT809_0x1600_0x1602
{
DRVLine = jt808_hex
};
var hex = JT809_2019_Serializer.Serialize(jT809_0x1600_0x1602).ToHexString();
Assert.Equal("0000270F04F40002000003E800000507075BCD15075BCD1438590032007B000003E900002EE7075BCD0C075BCD0D4B32002A1A", hex);
}

[Fact]
public void Test_2019_2()
{
var bytes = "0000270F04F40002000003E800000507075BCD15075BCD1438590032007B000003E900002EE7075BCD0C075BCD0D4B32002A1A".ToHexBytes();
JT809_0x1600_0x1602 jT809_0x1600_0x1602 = JT809_2019_Serializer.Deserialize<JT809_0x1600_0x1602>(bytes);

JT808_0x8606 jT808_0X8606 = JT808_2019_Serializer.Deserialize<JT808_0x8606>(bytes);

Assert.Equal((uint)9999, jT808_0X8606.RouteId);
Assert.Equal((uint)1268, jT808_0X8606.RouteProperty);
//Assert.Equal(DateTime.Parse("2018-11-20 00:00:12"), jT808_0X8606.StartTime);
//Assert.Equal(DateTime.Parse("2018-11-21 00:00:12"), jT808_0X8606.EndTime);
Assert.Null(jT808_0X8606.StartTime);
Assert.Null(jT808_0X8606.EndTime);

Assert.Equal(2, jT808_0X8606.InflectionPointItems.Count);

Assert.Equal((uint)1000, jT808_0X8606.InflectionPointItems[0].InflectionPointId);
Assert.Equal((uint)123456789, jT808_0X8606.InflectionPointItems[0].InflectionPointLat);
Assert.Equal((uint)123456788, jT808_0X8606.InflectionPointItems[0].InflectionPointLng);

Assert.Equal((ushort)123, jT808_0X8606.InflectionPointItems[0].SectionDrivingUnderThreshold);
//Assert.Equal((ushort)69, jT808_0X8606.InflectionPointItems[0].SectionHighestSpeed);
Assert.Null(jT808_0X8606.InflectionPointItems[0].SectionHighestSpeed);
Assert.Equal((uint)1287, jT808_0X8606.InflectionPointItems[0].SectionId);
Assert.Equal((ushort)50, jT808_0X8606.InflectionPointItems[0].SectionLongDrivingThreshold);
//Assert.Equal((byte)23, jT808_0X8606.InflectionPointItems[0].SectionOverspeedDuration);
Assert.Equal(89, jT808_0X8606.InflectionPointItems[0].SectionProperty);
Assert.Equal(56, jT808_0X8606.InflectionPointItems[0].SectionWidth);

Assert.Equal((uint)1001, jT808_0X8606.InflectionPointItems[1].InflectionPointId);
Assert.Equal((uint)123456780, jT808_0X8606.InflectionPointItems[1].InflectionPointLat);
Assert.Equal((uint)123456781, jT808_0X8606.InflectionPointItems[1].InflectionPointLng);
//Assert.Equal((ushort)124, jT808_0X8606.InflectionPointItems[1].SectionDrivingUnderThreshold);
Assert.Null(jT808_0X8606.InflectionPointItems[1].SectionDrivingUnderThreshold);
Assert.Equal((ushort)42, jT808_0X8606.InflectionPointItems[1].SectionHighestSpeed);
Assert.Equal((uint)12007, jT808_0X8606.InflectionPointItems[1].SectionId);
//Assert.Equal((ushort)58, jT808_0X8606.InflectionPointItems[1].SectionLongDrivingThreshold);
Assert.Null(jT808_0X8606.InflectionPointItems[1].SectionLongDrivingThreshold);

Assert.Equal((byte)26, jT808_0X8606.InflectionPointItems[1].SectionOverspeedDuration);
Assert.Equal(50, jT808_0X8606.InflectionPointItems[1].SectionProperty);
Assert.Equal(75, jT808_0X8606.InflectionPointItems[1].SectionWidth);
}


[Fact]
public void Test_2019_3()
{
JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
{
AlarmFlag = 1,
Altitude = 40,
GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
Lat = 12222222,
Lng = 132444444,
Speed = 60,
Direction = 0,
StatusFlag = 2,
JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
};
jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x01, new JT808_0x0200_0x01
{
Mileage = 100
});
jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x02, new JT808_0x0200_0x02
{
Oil = 55
});
var jt808_0x0200Hex = JT808_2019_Serializer.Serialize(jT808UploadLocationRequest, JT808.Protocol.Enums.JT808Version.JTT2019);

JT809_0x1200_0x1202 jT809_0X1200_0X1202 = new JT809_0x1200_0x1202();
jT809_0X1200_0X1202.GNSSData = new Metadata.JT809VehiclePositionProperties_2019();
jT809_0X1200_0X1202.GNSSData.Encrypt = JT809_VehiclePositionEncrypt.已加密;
jT809_0X1200_0X1202.GNSSData.GnssData = jt808_0x0200Hex;
jT809_0X1200_0X1202.GNSSData.PlatformId1 = "11111111111";
jT809_0X1200_0X1202.GNSSData.Alarm1 = 1;
jT809_0X1200_0X1202.GNSSData.PlatformId2 = "22222222222";
jT809_0X1200_0X1202.GNSSData.Alarm2 = 2;
jT809_0X1200_0X1202.GNSSData.PlatformId3 = "33333333333";
jT809_0X1200_0X1202.GNSSData.Alarm3 = 3;
var hex = JT809_2019_Serializer.Serialize(jT809_0X1200_0X1202).ToHexString();
Assert.Equal("0100000026000000010000000200BA7F0E07E4F11C0028003C000018071510101001040000006402020037313131313131313131313100000001323232323232323232323200000002333333333333333333333300000003", hex);

}

[Fact]
public void Test_2019_4()
{
var bytes = "0100000026000000010000000200BA7F0E07E4F11C0028003C000018071510101001040000006402020037313131313131313131313100000001323232323232323232323200000002333333333333333333333300000003".ToHexBytes();
JT809_0x1200_0x1202 jT809_0X1200_0X1202 = JT809_2019_Serializer.Deserialize<JT809_0x1200_0x1202>(bytes);
Assert.Equal(JT809_VehiclePositionEncrypt.已加密, jT809_0X1200_0X1202.GNSSData.Encrypt);
Assert.Equal("11111111111", jT809_0X1200_0X1202.GNSSData.PlatformId1);
Assert.Equal(1u, jT809_0X1200_0X1202.GNSSData.Alarm1);
Assert.Equal("22222222222", jT809_0X1200_0X1202.GNSSData.PlatformId2);
Assert.Equal(2u, jT809_0X1200_0X1202.GNSSData.Alarm2);
Assert.Equal("33333333333", jT809_0X1200_0X1202.GNSSData.PlatformId3);
Assert.Equal(3u, jT809_0X1200_0X1202.GNSSData.Alarm3);

var jt808_0x0200Hex = jT809_0X1200_0X1202.GNSSData.GnssData;
var jt808_0x0200 = JT808_2019_Serializer.Deserialize<JT808_0x0200>(jt808_0x0200Hex, JT808.Protocol.Enums.JT808Version.JTT2019);
Assert.Equal((uint)1, jt808_0x0200.AlarmFlag);
Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jt808_0x0200.GPSTime);
Assert.Equal(12222222, jt808_0x0200.Lat);
Assert.Equal(132444444, jt808_0x0200.Lng);
Assert.Equal(60, jt808_0x0200.Speed);
Assert.Equal((uint)2, jt808_0x0200.StatusFlag);
Assert.Equal(100, ((JT808_0x0200_0x01)jt808_0x0200.JT808LocationAttachData[JT808Constants.JT808_0x0200_0x01]).Mileage);
Assert.Equal(55, ((JT808_0x0200_0x02)jt808_0x0200.JT808LocationAttachData[JT808Constants.JT808_0x0200_0x02]).Oil);

}

public class JT809_2011_Config : JT809GlobalConfigBase
{
public override string ConfigId => "JT809_2011";
}

public class JT809_2019_Config : JT809GlobalConfigBase
{
public override string ConfigId => "JT809_2019";

public JT809_2019_Config()
{
Version = JT809Version.JTT2019;
}
}

public class JT808_2019_Config : GlobalConfigBase
{
public override string ConfigId { get; protected set; }
public JT808_2019_Config(string configId = "jt808_2019")
{
ConfigId = configId;
}
}
}
}

불러오는 중...
취소
저장