From ec74488b4a0f99a228d682c58aeeb1557df0f9bf Mon Sep 17 00:00:00 2001 From: lin <648540858@qq.com> Date: Thu, 20 Mar 2025 09:21:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9B=BD=E6=A0=87=E7=BA=A7?= =?UTF-8?q?=E8=81=94=E6=B3=A8=E5=86=8C=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/genersoft/iot/vmp/conf/SipConfig.java | 2 +- .../genersoft/iot/vmp/conf/UserSetting.java | 6 ++++ .../iot/vmp/gb28181/bean/CommonGBChannel.java | 12 ++++++++ .../gb28181/dao/CommonGBChannelMapper.java | 14 ++++++--- .../gb28181/service/IGbChannelService.java | 6 ++-- .../service/impl/GbChannelServiceImpl.java | 14 +++++---- .../service/impl/PlatformServiceImpl.java | 21 +++++++++++--- .../transmit/SIPProcessorObserver.java | 20 ++++++------- .../cmd/impl/SIPCommanderForPlatform.java | 4 +-- .../iot/vmp/service/bean/GPSMsgInfo.java | 10 +++---- .../service/redisMsg/RedisGpsMsgListener.java | 25 +++++++++++----- .../iot/vmp/streamPush/bean/StreamPush.java | 24 +++++++++++++++ .../service/IStreamPushService.java | 2 -- .../service/impl/StreamPushServiceImpl.java | 14 --------- src/main/resources/配置详情.yml | 2 ++ 数据库/2.7.3/初始化-mysql-2.7.3.sql | 3 ++ .../2.7.3/初始化-postgresql-kingbase-2.7.3.sql | 3 ++ 数据库/2.7.3/更新-mysql-2.7.1升级到2.7.3.sql | 3 ++ 数据库/2.7.3/更新-mysql-2.7.3.sql | 29 +++++++++++++++++++ ...更新-postgresql-kingbase-2.7.1升级到2.7.3.sql | 3 ++ .../2.7.3/更新-postgresql-kingbase-2.7.3.sql | 6 ++++ 21 files changed, 166 insertions(+), 57 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java index 67c926e61..6be84b0a9 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java @@ -34,5 +34,5 @@ public class SipConfig { private boolean alarm = false; - private long timeout = 150; + private long timeout = 500; } diff --git a/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java b/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java index ca346dfab..c4f2c4bae 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java @@ -190,5 +190,11 @@ public class UserSetting { */ private boolean autoRegisterPlatform = false; + /** + * 按需发送推流设备位置, 默认发送移动位置订阅时如果位置不变则不发送, 设置为false按照国标间隔持续发送 + */ + private boolean sendPositionOnDemand = true; + + } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/CommonGBChannel.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/CommonGBChannel.java index 43c22cb2f..755fc8876 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/CommonGBChannel.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/CommonGBChannel.java @@ -86,6 +86,18 @@ public class CommonGBChannel { @Schema(description = "国标-纬度 WGS-84坐标系") private Double gbLatitude; + @Schema(description = "") + private Double gpsAltitude; + + @Schema(description = "") + private Double gpsSpeed; + + @Schema(description = "") + private Double gpsDirection; + + @Schema(description = "") + private String gbGpsTime; + @Schema(description = "国标-虚拟组织所属的业务分组ID") private String gbBusinessGroupId; diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/CommonGBChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/CommonGBChannelMapper.java index 3b71eb1da..efa826c36 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/CommonGBChannelMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/CommonGBChannelMapper.java @@ -2,6 +2,7 @@ package com.genersoft.iot.vmp.gb28181.dao; import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.gb28181.dao.provider.ChannelProvider; +import com.genersoft.iot.vmp.service.bean.GPSMsgInfo; import com.genersoft.iot.vmp.streamPush.bean.StreamPush; import org.apache.ibatis.annotations.*; import org.springframework.stereotype.Repository; @@ -451,13 +452,18 @@ public interface CommonGBChannelMapper { List queryListByStreamPushList(@Param("dataType") Integer dataType, List streamPushList); @Update(value = {" "}) - void updateGpsByDeviceIdForStreamPush(@Param("dataType") Integer dataType, List channels); + void updateGpsByDeviceId(List gpsMsgInfoList); @SelectProvider(type = ChannelProvider.class, method = "queryList") List queryList(@Param("query") String query, @Param("online") Boolean online, diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IGbChannelService.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IGbChannelService.java index 82c9b4066..0aa27dd71 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IGbChannelService.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IGbChannelService.java @@ -2,6 +2,7 @@ package com.genersoft.iot.vmp.gb28181.service; import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.service.bean.ErrorCallback; +import com.genersoft.iot.vmp.service.bean.GPSMsgInfo; import com.genersoft.iot.vmp.streamPush.bean.StreamPush; import com.github.pagehelper.PageInfo; @@ -84,8 +85,6 @@ public interface IGbChannelService { List queryListByStreamPushList(List streamPushList); - void updateGpsByDeviceIdForStreamPush(List channels); - PageInfo queryList(int page, int count, String query, Boolean online, Boolean hasRecordPlan, Integer channelType); void queryRecordInfo(CommonGBChannel channel, String startTime, String endTime, ErrorCallback callback); @@ -97,4 +96,7 @@ public interface IGbChannelService { PageInfo queryListByParentForUnusual(int page, int count, String query, Boolean online, Integer channelType); void clearChannelParent(Boolean all, List channelIds); + + void updateGPSFromGPSMsgInfo(List gpsMsgInfoList); + } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelServiceImpl.java index aaceab224..2019a0bdc 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelServiceImpl.java @@ -13,6 +13,7 @@ import com.genersoft.iot.vmp.gb28181.service.IDeviceChannelService; import com.genersoft.iot.vmp.gb28181.service.IGbChannelService; import com.genersoft.iot.vmp.gb28181.service.IPlatformChannelService; import com.genersoft.iot.vmp.service.bean.ErrorCallback; +import com.genersoft.iot.vmp.service.bean.GPSMsgInfo; import com.genersoft.iot.vmp.streamPush.bean.StreamPush; import com.genersoft.iot.vmp.utils.DateUtil; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; @@ -715,11 +716,6 @@ public class GbChannelServiceImpl implements IGbChannelService { return commonGBChannelMapper.queryListByStreamPushList(ChannelDataType.STREAM_PUSH.value, streamPushList); } - @Override - public void updateGpsByDeviceIdForStreamPush(List channels) { - commonGBChannelMapper.updateGpsByDeviceIdForStreamPush(ChannelDataType.STREAM_PUSH.value, channels); - } - @Override public PageInfo queryList(int page, int count, String query, Boolean online, Boolean hasRecordPlan, Integer channelType) { PageHelper.startPage(page, count); @@ -797,4 +793,12 @@ public class GbChannelServiceImpl implements IGbChannelService { } commonGBChannelMapper.removeParentIdByChannelIds(channelIdsForClear); } + + @Override + public void updateGPSFromGPSMsgInfo(List gpsMsgInfoList) { + if (gpsMsgInfoList == null || gpsMsgInfoList.isEmpty()) { + return; + } + commonGBChannelMapper.updateGpsByDeviceId(gpsMsgInfoList); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlatformServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlatformServiceImpl.java index f76c0dc81..af96adcd5 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlatformServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlatformServiceImpl.java @@ -559,12 +559,25 @@ public class PlatformServiceImpl implements IPlatformService { } for (CommonGBChannel channel : channelList) { GPSMsgInfo gpsMsgInfo = redisCatchStorage.getGpsMsgInfo(channel.getGbDeviceId()); + + // 无最新位置则发送当前位置 + if (gpsMsgInfo != null && (gpsMsgInfo.getLng() == 0 && gpsMsgInfo.getLat() == 0)) { + gpsMsgInfo = null; + } + + if (gpsMsgInfo == null && !userSetting.isSendPositionOnDemand()){ + gpsMsgInfo = new GPSMsgInfo(); + gpsMsgInfo.setId(channel.getGbDeviceId()); + gpsMsgInfo.setLng(channel.getGbLongitude()); + gpsMsgInfo.setLat(channel.getGbLatitude()); + gpsMsgInfo.setAltitude(channel.getGpsAltitude()); + gpsMsgInfo.setSpeed(channel.getGpsSpeed()); + gpsMsgInfo.setDirection(channel.getGpsDirection()); + gpsMsgInfo.setTime(channel.getGbGpsTime()); + } + // 无最新位置不发送 if (gpsMsgInfo != null) { - // 经纬度都为0不发送 - if (gpsMsgInfo.getLng() == 0 && gpsMsgInfo.getLat() == 0) { - continue; - } // 发送GPS消息 try { commanderForPlatform.sendNotifyMobilePosition(platform, gpsMsgInfo, channel, subscribe); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java index b7892dbd3..0fb336397 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java @@ -84,18 +84,16 @@ public class SIPProcessorObserver implements ISIPProcessorObserver { // Success if (((status >= Response.OK) && (status < Response.MULTIPLE_CHOICES)) || status == Response.UNAUTHORIZED) { - if (status != Response.UNAUTHORIZED && responseEvent.getResponse() != null && !sipSubscribe.isEmpty() ) { - CallIdHeader callIdHeader = response.getCallIdHeader(); - CSeqHeader cSeqHeader = response.getCSeqHeader(); - if (callIdHeader != null) { - SipEvent sipEvent = sipSubscribe.getSubscribe(callIdHeader.getCallId() + cSeqHeader.getSeqNumber()); - if (sipEvent != null) { - if (sipEvent.getOkEvent() != null) { - SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult<>(responseEvent); - sipEvent.getOkEvent().response(eventResult); - } - sipSubscribe.removeSubscribe(callIdHeader.getCallId() + cSeqHeader.getSeqNumber()); + CallIdHeader callIdHeader = response.getCallIdHeader(); + CSeqHeader cSeqHeader = response.getCSeqHeader(); + if (callIdHeader != null) { + SipEvent sipEvent = sipSubscribe.getSubscribe(callIdHeader.getCallId() + cSeqHeader.getSeqNumber()); + if (sipEvent != null) { + if (sipEvent.getOkEvent() != null) { + SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult<>(responseEvent); + sipEvent.getOkEvent().response(eventResult); } + sipSubscribe.removeSubscribe(callIdHeader.getCallId() + cSeqHeader.getSeqNumber()); } } ISIPResponseProcessor sipRequestProcessor = responseProcessorMap.get(response.getCSeqHeader().getMethod()); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderForPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderForPlatform.java index 5e5a207b6..bce60a796 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderForPlatform.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderForPlatform.java @@ -136,7 +136,7 @@ public class SIPCommanderForPlatform implements ISIPCommanderForPlatform { if (errorEvent != null ) { errorEvent.response(event); } - }, okEvent, 5L); + }, okEvent, 2000L); } @Override @@ -369,7 +369,7 @@ public class SIPCommanderForPlatform implements ISIPCommanderForPlatform { .append("MobilePosition\r\n") .append("" + (int)((Math.random()*9+1)*100000) + "\r\n") .append("" + channel.getGbDeviceId() + "\r\n") - .append("\r\n") + .append("\r\n") .append("" + gpsMsgInfo.getLng() + "\r\n") .append("" + gpsMsgInfo.getLat() + "\r\n") .append("" + gpsMsgInfo.getSpeed() + "\r\n") diff --git a/src/main/java/com/genersoft/iot/vmp/service/bean/GPSMsgInfo.java b/src/main/java/com/genersoft/iot/vmp/service/bean/GPSMsgInfo.java index 7156985c6..fca4751d3 100755 --- a/src/main/java/com/genersoft/iot/vmp/service/bean/GPSMsgInfo.java +++ b/src/main/java/com/genersoft/iot/vmp/service/bean/GPSMsgInfo.java @@ -30,7 +30,7 @@ public class GPSMsgInfo { /** * 速度,单位:km/h (可选) */ - private double speed; + private Double speed; /** * 产生通知时间, 时间格式: 2020-01-14T14:32:12 @@ -40,23 +40,23 @@ public class GPSMsgInfo { /** * 方向,取值为当前摄像头方向与正北方的顺时针夹角,取值范围0°~360°,单位:(°)(可选) */ - private String direction; + private Double direction; /** * 海拔高度,单位:m(可选) */ - private String altitude; + private Double altitude; private boolean stored; public static GPSMsgInfo getInstance(MobilePosition mobilePosition) { GPSMsgInfo gpsMsgInfo = new GPSMsgInfo(); gpsMsgInfo.setChannelId(mobilePosition.getChannelId()); - gpsMsgInfo.setAltitude(mobilePosition.getAltitude() + ""); + gpsMsgInfo.setAltitude(mobilePosition.getAltitude()); gpsMsgInfo.setLng(mobilePosition.getLongitude()); gpsMsgInfo.setLat(mobilePosition.getLatitude()); gpsMsgInfo.setSpeed(mobilePosition.getSpeed()); - gpsMsgInfo.setDirection(mobilePosition.getDirection() + ""); + gpsMsgInfo.setDirection(mobilePosition.getDirection()); gpsMsgInfo.setTime(DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(mobilePosition.getTime())); return gpsMsgInfo; } diff --git a/src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisGpsMsgListener.java b/src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisGpsMsgListener.java index bd34dd6f6..0c19ab986 100755 --- a/src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisGpsMsgListener.java +++ b/src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisGpsMsgListener.java @@ -1,9 +1,11 @@ package com.genersoft.iot.vmp.service.redisMsg; import com.alibaba.fastjson2.JSON; +import com.genersoft.iot.vmp.gb28181.service.IGbChannelService; import com.genersoft.iot.vmp.service.bean.GPSMsgInfo; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.streamPush.service.IStreamPushService; +import com.genersoft.iot.vmp.utils.DateUtil; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; @@ -15,9 +17,11 @@ import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; /** - * 接收来自redis的GPS更新通知, 此处只针对推流设备 + * 接收来自redis的GPS更新通知 * * @author lin * 监听: SUBSCRIBE VM_MSG_GPS @@ -33,6 +37,9 @@ public class RedisGpsMsgListener implements MessageListener { @Autowired private IStreamPushService streamPushService; + @Autowired + private IGbChannelService channelService; + private final ConcurrentLinkedQueue taskQueue = new ConcurrentLinkedQueue<>(); @@ -42,7 +49,7 @@ public class RedisGpsMsgListener implements MessageListener { taskQueue.offer(message); } - @Scheduled(fixedDelay = 200) //每400毫秒执行一次 + @Scheduled(fixedDelay = 200, timeUnit = TimeUnit.MILLISECONDS) //每400毫秒执行一次 public void executeTaskQueue() { if (taskQueue.isEmpty()) { return; @@ -61,6 +68,7 @@ public class RedisGpsMsgListener implements MessageListener { for (Message msg : messageDataList) { try { GPSMsgInfo gpsMsgInfo = JSON.parseObject(msg.getBody(), GPSMsgInfo.class); + gpsMsgInfo.setTime(DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(gpsMsgInfo.getTime())); log.info("[REDIS的位置变化通知], {}", JSON.toJSONString(gpsMsgInfo)); // 只是放入redis缓存起来 redisCatchStorage.updateGpsMsgInfo(gpsMsgInfo); @@ -74,15 +82,18 @@ public class RedisGpsMsgListener implements MessageListener { /** * 定时将经纬度更新到数据库 */ - @Scheduled(fixedDelay = 2 * 1000) //每2秒执行一次 + @Scheduled(fixedDelay = 2, timeUnit = TimeUnit.SECONDS) //每2秒执行一次 public void execute() { // 需要查询到 List gpsMsgInfoList = redisCatchStorage.getAllGpsMsgInfo(); if (!gpsMsgInfoList.isEmpty()) { - streamPushService.updateGPSFromGPSMsgInfo(gpsMsgInfoList); - for (GPSMsgInfo msgInfo : gpsMsgInfoList) { - msgInfo.setStored(true); - redisCatchStorage.updateGpsMsgInfo(msgInfo); + gpsMsgInfoList = gpsMsgInfoList.stream().filter(gpsMsgInfo -> !gpsMsgInfo.isStored()).collect(Collectors.toList());; + if (!gpsMsgInfoList.isEmpty()) { + channelService.updateGPSFromGPSMsgInfo(gpsMsgInfoList); + for (GPSMsgInfo msgInfo : gpsMsgInfoList) { + msgInfo.setStored(true); + redisCatchStorage.updateGpsMsgInfo(msgInfo); + } } } } diff --git a/src/main/java/com/genersoft/iot/vmp/streamPush/bean/StreamPush.java b/src/main/java/com/genersoft/iot/vmp/streamPush/bean/StreamPush.java index ef4517bdd..5b282c2d7 100755 --- a/src/main/java/com/genersoft/iot/vmp/streamPush/bean/StreamPush.java +++ b/src/main/java/com/genersoft/iot/vmp/streamPush/bean/StreamPush.java @@ -77,6 +77,30 @@ public class StreamPush extends CommonGBChannel implements Comparable ids); - void updateGPSFromGPSMsgInfo(List gpsMsgInfoList); } diff --git a/src/main/java/com/genersoft/iot/vmp/streamPush/service/impl/StreamPushServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/streamPush/service/impl/StreamPushServiceImpl.java index 72e03468c..f8e5e7da3 100755 --- a/src/main/java/com/genersoft/iot/vmp/streamPush/service/impl/StreamPushServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/streamPush/service/impl/StreamPushServiceImpl.java @@ -16,7 +16,6 @@ import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.media.zlm.dto.StreamAuthorityInfo; import com.genersoft.iot.vmp.media.zlm.dto.hook.OriginType; import com.genersoft.iot.vmp.service.ISendRtpServerService; -import com.genersoft.iot.vmp.service.bean.GPSMsgInfo; import com.genersoft.iot.vmp.service.bean.StreamPushItemFromRedis; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.streamPush.bean.StreamPush; @@ -586,17 +585,4 @@ public class StreamPushServiceImpl implements IStreamPushService { streamPushMapper.batchDel(streamPushList); gbChannelService.delete(ids); } - - @Override - public void updateGPSFromGPSMsgInfo(List gpsMsgInfoList) { - List channels = new ArrayList<>(); - for (GPSMsgInfo gpsMsgInfo : gpsMsgInfoList) { - CommonGBChannel channel = new CommonGBChannel(); - channel.setGbDeviceId(gpsMsgInfo.getId()); - channel.setGbLongitude(gpsMsgInfo.getLng()); - channel.setGbLatitude(gpsMsgInfo.getLat()); - channels.add(channel); - } - gbChannelService.updateGpsByDeviceIdForStreamPush(channels); - } } diff --git a/src/main/resources/配置详情.yml b/src/main/resources/配置详情.yml index a501da9e7..dd76aa9e6 100644 --- a/src/main/resources/配置详情.yml +++ b/src/main/resources/配置详情.yml @@ -249,6 +249,8 @@ user-settings: jwk-file: classpath:jwk.json # wvp集群模式下如果注册向上级的wvp奔溃,则自动选择一个其他wvp继续注册到上级 auto-register-platform: true + # 按需发送位置, 默认发送移动位置订阅时如果位置不变则不发送, 设置为false按照国标间隔持续发送 + send-position-on-demand: true # 关闭在线文档(生产环境建议关闭) springdoc: diff --git a/数据库/2.7.3/初始化-mysql-2.7.3.sql b/数据库/2.7.3/初始化-mysql-2.7.3.sql index 7d3a10986..0d0a4f2c7 100644 --- a/数据库/2.7.3/初始化-mysql-2.7.3.sql +++ b/数据库/2.7.3/初始化-mysql-2.7.3.sql @@ -156,6 +156,9 @@ create table IF NOT EXISTS wvp_device_channel record_plan_id integer, data_type integer not null, data_device_id integer not null, + gps_speed double precision, + gps_altitude double precision, + gps_direction double precision, constraint uk_wvp_unique_channel unique (gb_device_id) ); diff --git a/数据库/2.7.3/初始化-postgresql-kingbase-2.7.3.sql b/数据库/2.7.3/初始化-postgresql-kingbase-2.7.3.sql index 2b9174bdf..05d04538e 100644 --- a/数据库/2.7.3/初始化-postgresql-kingbase-2.7.3.sql +++ b/数据库/2.7.3/初始化-postgresql-kingbase-2.7.3.sql @@ -156,6 +156,9 @@ create table IF NOT EXISTS wvp_device_channel record_plan_id integer, data_type integer not null, data_device_id integer not null, + gps_speed double precision, + gps_altitude double precision, + gps_direction double precision, constraint uk_wvp_unique_channel unique (gb_device_id) ); diff --git a/数据库/2.7.3/更新-mysql-2.7.1升级到2.7.3.sql b/数据库/2.7.3/更新-mysql-2.7.1升级到2.7.3.sql index ea97f2bcd..36b92b390 100644 --- a/数据库/2.7.3/更新-mysql-2.7.1升级到2.7.3.sql +++ b/数据库/2.7.3/更新-mysql-2.7.1升级到2.7.3.sql @@ -167,6 +167,9 @@ create table IF NOT EXISTS wvp_device_channel record_plan_id integer, data_type integer not null, data_device_id integer not null, + gps_speed double precision, + gps_altitude double precision, + gps_direction double precision, constraint uk_wvp_unique_channel unique (gb_device_id) ); diff --git a/数据库/2.7.3/更新-mysql-2.7.3.sql b/数据库/2.7.3/更新-mysql-2.7.3.sql index 247c536f4..63dc4ddee 100644 --- a/数据库/2.7.3/更新-mysql-2.7.3.sql +++ b/数据库/2.7.3/更新-mysql-2.7.3.sql @@ -233,3 +233,32 @@ call wvp_20250312(); DROP PROCEDURE wvp_20250312; +/* +* 20250319 +*/ +CREATE PROCEDURE `wvp_20250319`() +BEGIN + IF NOT EXISTS (SELECT column_name FROM information_schema.STATISTICS + WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_device_channel' and column_name = 'gps_speed') + THEN + alter table wvp_device_channel add gps_speed double precision; + END IF; + + IF NOT EXISTS (SELECT column_name FROM information_schema.STATISTICS + WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_device_channel' and column_name = 'gps_altitude') + THEN + alter table wvp_device_channel add gps_altitude double precision; + END IF; + + IF NOT EXISTS (SELECT column_name FROM information_schema.STATISTICS + WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_device_channel' and column_name = 'gps_direction') + THEN + alter table wvp_device_channel add gps_direction double precision; + END IF; +END; +call wvp_20250319(); +DROP PROCEDURE wvp_20250319; + + + + diff --git a/数据库/2.7.3/更新-postgresql-kingbase-2.7.1升级到2.7.3.sql b/数据库/2.7.3/更新-postgresql-kingbase-2.7.1升级到2.7.3.sql index 43ed0066c..b312323f2 100644 --- a/数据库/2.7.3/更新-postgresql-kingbase-2.7.1升级到2.7.3.sql +++ b/数据库/2.7.3/更新-postgresql-kingbase-2.7.1升级到2.7.3.sql @@ -134,6 +134,9 @@ create table IF NOT EXISTS wvp_device_channel record_plan_id integer, data_type integer not null, data_device_id integer not null, + gps_speed double precision, + gps_altitude double precision, + gps_direction double precision, constraint uk_wvp_unique_channel unique (gb_device_id) ); diff --git a/数据库/2.7.3/更新-postgresql-kingbase-2.7.3.sql b/数据库/2.7.3/更新-postgresql-kingbase-2.7.3.sql index 9bd7cf2b1..2de2d1efe 100644 --- a/数据库/2.7.3/更新-postgresql-kingbase-2.7.3.sql +++ b/数据库/2.7.3/更新-postgresql-kingbase-2.7.3.sql @@ -95,5 +95,11 @@ update wvp_media_server set server_id = '你的服务ID'; update wvp_stream_proxy set server_id = '你的服务ID'; update wvp_cloud_record set server_id = '你的服务ID'; +/* +* 20250319 +*/ +alter table wvp_device_channel add column if not exists gps_speed double precision; +alter table wvp_device_channel add column if not exists gps_altitude double precision; +alter table wvp_device_channel add column if not exists gps_direction double precision;