fix: resolve xinda vehicles by mysql plate binding
This commit is contained in:
@@ -131,12 +131,7 @@ public final class MySqlVehicleIdentityService implements VehicleIdentityResolve
|
||||
PreparedStatement statement = connection.prepareStatement(sql);
|
||||
ResultSet resultSet = statement.executeQuery()) {
|
||||
while (resultSet.next()) {
|
||||
loaded.bind(new VehicleIdentityBinding(
|
||||
ProtocolId.JT808,
|
||||
resultSet.getString("vin"),
|
||||
"",
|
||||
"",
|
||||
resultSet.getString("plate")));
|
||||
bindGlobalPlate(loaded, resultSet.getString("vin"), resultSet.getString("plate"));
|
||||
}
|
||||
loadRegistrationIndex(loaded, connection);
|
||||
return loaded;
|
||||
@@ -145,6 +140,17 @@ public final class MySqlVehicleIdentityService implements VehicleIdentityResolve
|
||||
}
|
||||
}
|
||||
|
||||
private static void bindGlobalPlate(InMemoryVehicleIdentityService loaded, String vin, String plate) {
|
||||
for (ProtocolId protocol : new ProtocolId[]{
|
||||
ProtocolId.GB32960,
|
||||
ProtocolId.JT808,
|
||||
ProtocolId.MQTT_YUTONG,
|
||||
ProtocolId.XINDA_PUSH
|
||||
}) {
|
||||
loaded.bind(new VehicleIdentityBinding(protocol, vin, "", "", plate));
|
||||
}
|
||||
}
|
||||
|
||||
private void loadRegistrationIndex(InMemoryVehicleIdentityService loaded, Connection connection) throws SQLException {
|
||||
String sql = "SELECT r.protocol, r.phone, r.device_id, r.plate, b.vin FROM " + registrationTable + " r "
|
||||
+ "JOIN " + table + " b ON b.plate = r.plate "
|
||||
|
||||
@@ -83,6 +83,22 @@ class MySqlVehicleIdentityServiceTest {
|
||||
assertThat(jdbc.lookupSelects).isZero();
|
||||
}
|
||||
|
||||
@Test
|
||||
void resolvesGlobalPlateBindingForXindaPush() {
|
||||
RecordingIdentityJdbc jdbc = new RecordingIdentityJdbc();
|
||||
jdbc.seed("浙F00780F", "LA9GG68L8PBAF4776");
|
||||
MySqlVehicleIdentityService service = new MySqlVehicleIdentityService(jdbc.dataSource(), "vehicle_identity_binding");
|
||||
|
||||
VehicleIdentity byPlate = service.resolve(new VehicleIdentityLookup(
|
||||
ProtocolId.XINDA_PUSH, "", "", "", "浙F00780F"));
|
||||
|
||||
assertThat(byPlate.vin()).isEqualTo("LA9GG68L8PBAF4776");
|
||||
assertThat(byPlate.resolved()).isTrue();
|
||||
assertThat(byPlate.source()).isEqualTo(VehicleIdentitySource.BOUND_PLATE);
|
||||
assertThat(jdbc.loadAllSelects).isEqualTo(1);
|
||||
assertThat(jdbc.lookupSelects).isZero();
|
||||
}
|
||||
|
||||
@Test
|
||||
void refreshLoadsExternallyInsertedBindingWithoutPerFrameDatabaseLookup() {
|
||||
RecordingIdentityJdbc jdbc = new RecordingIdentityJdbc();
|
||||
|
||||
Reference in New Issue
Block a user