chore: decouple history gb32960 decoding

This commit is contained in:
lingniu
2026-07-01 16:10:31 +08:00
parent fc81693285
commit 68253901cf
5 changed files with 57 additions and 15 deletions

View File

@@ -29,10 +29,6 @@ springdoc:
lingniu:
ingest:
gb32960:
enabled: true
server:
enabled: false
sink:
kafka:
enabled: true

View File

@@ -11,7 +11,6 @@ import com.lingniu.ingest.eventhistory.Jt808LocationHistoryController;
import com.lingniu.ingest.eventhistory.LocationHistoryController;
import com.lingniu.ingest.eventhistory.RawFrameHistoryController;
import com.lingniu.ingest.protocol.gb32960.codec.Gb32960MessageDecoder;
import com.lingniu.ingest.protocol.gb32960.config.Gb32960AutoConfiguration;
import com.lingniu.ingest.protocol.gb32960.inbound.Gb32960NettyServer;
import com.lingniu.ingest.sink.kafka.KafkaEnvelopeDeadLetterSink;
import com.lingniu.ingest.sink.kafka.KafkaEventSink;
@@ -80,7 +79,6 @@ class VehicleHistoryAppCompositionTest {
.withConfiguration(AutoConfigurations.of(
TdengineHistoryAutoConfiguration.class,
KafkaSinkAutoConfiguration.class,
Gb32960AutoConfiguration.class,
EventHistoryAutoConfiguration.class))
.withUserConfiguration(VehicleHistoryKafkaConsumerConfiguration.class)
.withAllowBeanDefinitionOverriding(true)
@@ -89,8 +87,6 @@ class VehicleHistoryAppCompositionTest {
"lingniu.ingest.tdengine-history.enabled=true",
"lingniu.ingest.tdengine-history.database=vehicle_history_test",
"lingniu.ingest.event-history.enabled=true",
"lingniu.ingest.gb32960.enabled=true",
"lingniu.ingest.gb32960.server.enabled=false",
"lingniu.ingest.sink.kafka.enabled=true",
"lingniu.ingest.sink.kafka.bootstrap-servers=localhost:9092",
"lingniu.ingest.sink.kafka.consumer.enabled=false",
@@ -144,8 +140,7 @@ class VehicleHistoryAppCompositionTest {
"lingniu.ingest.event-history.enabled=true",
"lingniu.ingest.tdengine-history.enabled=false",
"lingniu.ingest.sink.kafka.enabled=false",
"lingniu.ingest.sink.kafka.consumer.enabled=false",
"lingniu.ingest.gb32960.enabled=false")
"lingniu.ingest.sink.kafka.consumer.enabled=false")
.run(context -> {
assertThat(context).hasSingleBean(LocationHistoryController.class);
assertThat(context).hasSingleBean(RawFrameHistoryController.class);

View File

@@ -25,8 +25,6 @@ class VehicleHistoryAppDefaultsTest {
"spring.config.import[0]",
"optional:nacos:${spring.application.name}.${NACOS_CONFIG_FILE_EXTENSION:yml}?group=${NACOS_GROUP:DEFAULT_GROUP}&refreshEnabled=${NACOS_REFRESH_ENABLED:true}")
.containsEntry("spring.cloud.nacos.config.server-addr", "${NACOS_SERVER_ADDR:127.0.0.1:8848}")
.containsEntry("lingniu.ingest.gb32960.enabled", true)
.containsEntry("lingniu.ingest.gb32960.server.enabled", false)
.containsEntry("lingniu.ingest.tdengine-history.enabled", "${TDENGINE_HISTORY_ENABLED:false}")
.containsEntry("lingniu.ingest.tdengine-history.database", "${TDENGINE_HISTORY_DATABASE:vehicle_history}")
.containsEntry(
@@ -104,6 +102,7 @@ class VehicleHistoryAppDefaultsTest {
.containsEntry("management.endpoints.web.exposure.include", "health,info,metrics,prometheus");
assertThat(properties.stringPropertyNames())
.noneMatch(name -> name.startsWith("lingniu.ingest.gb32960."))
.noneMatch(name -> name.startsWith("lingniu.ingest.vehicle-state."))
.noneMatch(name -> name.startsWith("lingniu.ingest.vehicle-stat."))
.noneMatch(name -> name.startsWith("lingniu.ingest.sink.archive."))

View File

@@ -10,8 +10,31 @@ import com.lingniu.ingest.eventhistory.Jt808LocationHistoryController;
import com.lingniu.ingest.eventhistory.Jt808RawFrameHistoryController;
import com.lingniu.ingest.eventhistory.LocationHistoryController;
import com.lingniu.ingest.eventhistory.RawFrameHistoryController;
import com.lingniu.ingest.protocol.gb32960.codec.Gb32960BodyParser;
import com.lingniu.ingest.protocol.gb32960.codec.Gb32960CommandParser;
import com.lingniu.ingest.protocol.gb32960.codec.Gb32960MessageDecoder;
import com.lingniu.ingest.protocol.gb32960.config.Gb32960AutoConfiguration;
import com.lingniu.ingest.protocol.gb32960.codec.InfoBlockParser;
import com.lingniu.ingest.protocol.gb32960.codec.InfoBlockParserRegistry;
import com.lingniu.ingest.protocol.gb32960.codec.parser.v2016.AlarmV2016BlockParser;
import com.lingniu.ingest.protocol.gb32960.codec.parser.v2016.DriveMotorV2016BlockParser;
import com.lingniu.ingest.protocol.gb32960.codec.parser.v2016.EngineV2016BlockParser;
import com.lingniu.ingest.protocol.gb32960.codec.parser.v2016.ExtremeValueV2016BlockParser;
import com.lingniu.ingest.protocol.gb32960.codec.parser.v2016.FuelCellV2016BlockParser;
import com.lingniu.ingest.protocol.gb32960.codec.parser.v2016.PositionV2016BlockParser;
import com.lingniu.ingest.protocol.gb32960.codec.parser.v2016.TemperatureV2016BlockParser;
import com.lingniu.ingest.protocol.gb32960.codec.parser.v2016.VehicleV2016BlockParser;
import com.lingniu.ingest.protocol.gb32960.codec.parser.v2016.VoltageV2016BlockParser;
import com.lingniu.ingest.protocol.gb32960.codec.parser.v2025.AlarmV2025BlockParser;
import com.lingniu.ingest.protocol.gb32960.codec.parser.v2025.BatteryTemperatureV2025BlockParser;
import com.lingniu.ingest.protocol.gb32960.codec.parser.v2025.DriveMotorV2025BlockParser;
import com.lingniu.ingest.protocol.gb32960.codec.parser.v2025.EngineV2025BlockParser;
import com.lingniu.ingest.protocol.gb32960.codec.parser.v2025.FuelCellStackV2025BlockParser;
import com.lingniu.ingest.protocol.gb32960.codec.parser.v2025.FuelCellV2025BlockParser;
import com.lingniu.ingest.protocol.gb32960.codec.parser.v2025.MinParallelVoltageV2025BlockParser;
import com.lingniu.ingest.protocol.gb32960.codec.parser.v2025.PositionV2025BlockParser;
import com.lingniu.ingest.protocol.gb32960.codec.parser.v2025.SuperCapacitorExtremeV2025BlockParser;
import com.lingniu.ingest.protocol.gb32960.codec.parser.v2025.SuperCapacitorV2025BlockParser;
import com.lingniu.ingest.protocol.gb32960.codec.parser.v2025.VehicleV2025BlockParser;
import com.lingniu.ingest.sink.kafka.KafkaSinkAutoConfiguration;
import com.lingniu.ingest.tdenginehistory.config.TdengineHistoryAutoConfiguration;
import com.lingniu.ingest.tdenginehistory.TdengineHistoryReader;
@@ -27,6 +50,7 @@ import org.springframework.beans.factory.annotation.Value;
import java.net.URI;
import java.nio.file.Path;
import java.util.List;
/**
* Event History 查询/消费服务自动装配。
@@ -42,7 +66,6 @@ import java.nio.file.Path;
*/
@AutoConfiguration
@AutoConfigureAfter({
Gb32960AutoConfiguration.class,
KafkaSinkAutoConfiguration.class,
TdengineHistoryAutoConfiguration.class
})
@@ -86,6 +109,34 @@ public class EventHistoryAutoConfiguration {
return new ApiExceptionHandler();
}
@Bean
@ConditionalOnMissingBean
public Gb32960MessageDecoder gb32960HistoryMessageDecoder() {
List<InfoBlockParser> parsers = List.of(
new VehicleV2016BlockParser(),
new DriveMotorV2016BlockParser(),
new FuelCellV2016BlockParser(),
new EngineV2016BlockParser(),
new PositionV2016BlockParser(),
new ExtremeValueV2016BlockParser(),
new AlarmV2016BlockParser(),
new VoltageV2016BlockParser(),
new TemperatureV2016BlockParser(),
new VehicleV2025BlockParser(),
new DriveMotorV2025BlockParser(),
new FuelCellV2025BlockParser(),
new EngineV2025BlockParser(),
new PositionV2025BlockParser(),
new AlarmV2025BlockParser(),
new MinParallelVoltageV2025BlockParser(),
new BatteryTemperatureV2025BlockParser(),
new FuelCellStackV2025BlockParser(),
new SuperCapacitorV2025BlockParser(),
new SuperCapacitorExtremeV2025BlockParser());
Gb32960BodyParser bodyParser = new Gb32960BodyParser(new InfoBlockParserRegistry(parsers));
return new Gb32960MessageDecoder(bodyParser, new Gb32960CommandParser());
}
@Bean
@ConditionalOnBean(Gb32960MessageDecoder.class)
@ConditionalOnMissingBean

View File

@@ -41,7 +41,8 @@ class EventHistoryAutoConfigurationTest {
.containsOnlyKeys(
"eventHistoryEnvelopeConsumerProcessor",
"eventHistoryRawEnvelopeConsumerProcessor");
assertThat(context).doesNotHaveBean(Gb32960DecodedFrameService.class);
assertThat(context).hasSingleBean(Gb32960MessageDecoder.class);
assertThat(context).hasSingleBean(Gb32960DecodedFrameService.class);
assertThat(context).doesNotHaveBean(Gb32960FrameController.class);
});
}