From 36ea9e79a8b75aebe0a367ce8aca23df7ef944e7 Mon Sep 17 00:00:00 2001 From: lin <648540858@qq.com> Date: Sun, 19 Apr 2026 10:14:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=89=B9=E9=87=8F=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=B9=B6=E4=BC=98=E5=8C=96=E5=BC=82=E6=AD=A5=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iot/vmp/gb28181/event/EventPublisher.java | 2 +- .../mobilePosition/MobilePositionEvent.java | 4 -- .../impl/MobilePositionServiceImpl.java | 4 ++ .../custom/service/CameraChannelService.java | 53 +++++++++++-------- 4 files changed, 37 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java index 4b9ed231a..b84872af9 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java @@ -115,7 +115,7 @@ public class EventPublisher { public void mobilePositionEventPublish(MobilePosition mobilePosition) { MobilePositionEvent event = new MobilePositionEvent(this); - event.setMobilePosition(mobilePosition); + event.setMobilePositionList(List.of(mobilePosition)); applicationEventPublisher.publishEvent(event); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/mobilePosition/MobilePositionEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/mobilePosition/MobilePositionEvent.java index ffb70a7e6..33972b24f 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/mobilePosition/MobilePositionEvent.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/mobilePosition/MobilePositionEvent.java @@ -13,10 +13,6 @@ public class MobilePositionEvent extends ApplicationEvent { super(source); } - @Getter - @Setter - private MobilePosition mobilePosition; - @Getter @Setter private List mobilePositionList; diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MobilePositionServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MobilePositionServiceImpl.java index 198831d18..f4867629f 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/MobilePositionServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MobilePositionServiceImpl.java @@ -71,6 +71,10 @@ public class MobilePositionServiceImpl implements IMobilePositionService { if (event.getMobilePositionList() == null || event.getMobilePositionList().isEmpty()) { return; } + if (event.getMobilePositionList().get(0).getChannelId() != null) { + mobilePositionQueue.addAll(event.getMobilePositionList()); + return; + } for (ISourceOtherService sourceOtherService : sourceOtherServiceMap.values()) { try { // 此时已经完成了通道ID的添加,以及坐标系的转换,后续只需要将数据保存到数据库即可 diff --git a/src/main/java/com/genersoft/iot/vmp/web/custom/service/CameraChannelService.java b/src/main/java/com/genersoft/iot/vmp/web/custom/service/CameraChannelService.java index fdfa51283..4956778b5 100644 --- a/src/main/java/com/genersoft/iot/vmp/web/custom/service/CameraChannelService.java +++ b/src/main/java/com/genersoft/iot/vmp/web/custom/service/CameraChannelService.java @@ -30,9 +30,11 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.event.EventListener; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.util.*; +import java.util.concurrent.Executors; @Slf4j @Service @@ -322,32 +324,41 @@ public class CameraChannelService implements CommandLineRunner { } // 监听GPS消息,如果是移动设备则发送redis消息 + @Async @EventListener public void onApplicationEvent(MobilePositionEvent event) { - MobilePosition mobilePosition = event.getMobilePosition(); + List mobilePositionList = event.getMobilePositionList(); + try (var executor = Executors.newVirtualThreadPerTaskExecutor()) { + for (MobilePosition mobilePosition : mobilePositionList) { + executor.submit(() -> { + // 从redis补充信息 + SYMember member = getMember(mobilePosition.getChannelDeviceId()); + if (member == null) { + log.info("[SY-redis发送通知-移动设备位置信息] 缓存未获取 {}", mobilePosition.toString()); + return; + } - // 从redis补充信息 - SYMember member = getMember(mobilePosition.getChannelDeviceId()); - if (member == null) { - log.info("[SY-redis发送通知-移动设备位置信息] 缓存未获取 {}", mobilePosition.toString()); - return; + // 发送redis消息 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("gpsDate", DateUtil.timestampMsTo_yyyy_MM_dd_HH_mm_ss(mobilePosition.getTimestamp())); + jsonObject.put("unicodeNo", member.getUnicodeNo()); + jsonObject.put("memberNo", member.getNo()); + jsonObject.put("unitNo", member.getUnitNo()); + jsonObject.put("longitude", mobilePosition.getLongitude()); + jsonObject.put("latitude", mobilePosition.getLatitude()); + jsonObject.put("altitude", mobilePosition.getAltitude()); + jsonObject.put("direction", mobilePosition.getDirection()); + jsonObject.put("speed", mobilePosition.getSpeed()); + jsonObject.put("blockId", member.getBlockId()); + jsonObject.put("gbDeviceId", mobilePosition.getChannelDeviceId()); + log.info("[SY-redis发送通知-移动设备位置信息] 发送 {}: {}", REDIS_GPS_MESSAGE, jsonObject.toString()); + redisTemplateForString.convertAndSend(REDIS_GPS_MESSAGE, jsonObject.toString()); + }); + } } - // 发送redis消息 - JSONObject jsonObject = new JSONObject(); - jsonObject.put("gpsDate", DateUtil.timestampMsTo_yyyy_MM_dd_HH_mm_ss(mobilePosition.getTimestamp())); - jsonObject.put("unicodeNo", member.getUnicodeNo()); - jsonObject.put("memberNo", member.getNo()); - jsonObject.put("unitNo", member.getUnitNo()); - jsonObject.put("longitude", mobilePosition.getLongitude()); - jsonObject.put("latitude", mobilePosition.getLatitude()); - jsonObject.put("altitude", mobilePosition.getAltitude()); - jsonObject.put("direction", mobilePosition.getDirection()); - jsonObject.put("speed", mobilePosition.getSpeed()); - jsonObject.put("blockId", member.getBlockId()); - jsonObject.put("gbDeviceId", mobilePosition.getChannelDeviceId()); - log.info("[SY-redis发送通知-移动设备位置信息] 发送 {}: {}", REDIS_GPS_MESSAGE, jsonObject.toString()); - redisTemplateForString.convertAndSend(REDIS_GPS_MESSAGE, jsonObject.toString()); + + } public SYMember getMember(String deviceId) {