Commit 4f22994cdbf1254005def8bb7639cbfd3fd2b450
1 parent
193e1a24
优化国标级联的更新
Showing
4 changed files
with
87 additions
and
59 deletions
src/main/java/com/genersoft/iot/vmp/service/IPlatformService.java
| @@ -26,6 +26,12 @@ public interface IPlatformService { | @@ -26,6 +26,12 @@ public interface IPlatformService { | ||
| 26 | boolean add(ParentPlatform parentPlatform); | 26 | boolean add(ParentPlatform parentPlatform); |
| 27 | 27 | ||
| 28 | /** | 28 | /** |
| 29 | + * 添加级联平台 | ||
| 30 | + * @param parentPlatform 级联平台 | ||
| 31 | + */ | ||
| 32 | + boolean update(ParentPlatform parentPlatform); | ||
| 33 | + | ||
| 34 | + /** | ||
| 29 | * 平台上线 | 35 | * 平台上线 |
| 30 | * @param parentPlatform 平台信息 | 36 | * @param parentPlatform 平台信息 |
| 31 | */ | 37 | */ |
src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java
| @@ -11,8 +11,8 @@ import com.genersoft.iot.vmp.service.IMediaServerService; | @@ -11,8 +11,8 @@ import com.genersoft.iot.vmp.service.IMediaServerService; | ||
| 11 | import com.genersoft.iot.vmp.service.IPlatformService; | 11 | import com.genersoft.iot.vmp.service.IPlatformService; |
| 12 | import com.genersoft.iot.vmp.service.bean.GPSMsgInfo; | 12 | import com.genersoft.iot.vmp.service.bean.GPSMsgInfo; |
| 13 | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; | 13 | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; |
| 14 | -import com.genersoft.iot.vmp.storager.dao.GbStreamMapper; | ||
| 15 | -import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper; | 14 | +import com.genersoft.iot.vmp.storager.dao.*; |
| 15 | +import com.genersoft.iot.vmp.utils.DateUtil; | ||
| 16 | import com.github.pagehelper.PageHelper; | 16 | import com.github.pagehelper.PageHelper; |
| 17 | import com.github.pagehelper.PageInfo; | 17 | import com.github.pagehelper.PageInfo; |
| 18 | import org.slf4j.Logger; | 18 | import org.slf4j.Logger; |
| @@ -42,6 +42,15 @@ public class PlatformServiceImpl implements IPlatformService { | @@ -42,6 +42,15 @@ public class PlatformServiceImpl implements IPlatformService { | ||
| 42 | private ParentPlatformMapper platformMapper; | 42 | private ParentPlatformMapper platformMapper; |
| 43 | 43 | ||
| 44 | @Autowired | 44 | @Autowired |
| 45 | + private PlatformCatalogMapper catalogMapper; | ||
| 46 | + | ||
| 47 | + @Autowired | ||
| 48 | + private PlatformChannelMapper platformChannelMapper; | ||
| 49 | + | ||
| 50 | + @Autowired | ||
| 51 | + private PlatformGbStreamMapper platformGbStreamMapper; | ||
| 52 | + | ||
| 53 | + @Autowired | ||
| 45 | private IRedisCatchStorage redisCatchStorage; | 54 | private IRedisCatchStorage redisCatchStorage; |
| 46 | 55 | ||
| 47 | @Autowired | 56 | @Autowired |
| @@ -113,6 +122,69 @@ public class PlatformServiceImpl implements IPlatformService { | @@ -113,6 +122,69 @@ public class PlatformServiceImpl implements IPlatformService { | ||
| 113 | } | 122 | } |
| 114 | 123 | ||
| 115 | @Override | 124 | @Override |
| 125 | + public boolean update(ParentPlatform parentPlatform) { | ||
| 126 | + parentPlatform.setCharacterSet(parentPlatform.getCharacterSet().toUpperCase()); | ||
| 127 | + ParentPlatform parentPlatformOld = platformMapper.getParentPlatById(parentPlatform.getId()); | ||
| 128 | + parentPlatform.setUpdateTime(DateUtil.getNow()); | ||
| 129 | + if (!parentPlatformOld.getTreeType().equals(parentPlatform.getTreeType())) { | ||
| 130 | + // 目录结构发生变化,清空之前的关联关系 | ||
| 131 | + logger.info("保存平台{}时发现目录结构变化,清空关联关系", parentPlatform.getDeviceGBId()); | ||
| 132 | + catalogMapper.delByPlatformId(parentPlatformOld.getServerGBId()); | ||
| 133 | + platformChannelMapper.delByPlatformId(parentPlatformOld.getServerGBId()); | ||
| 134 | + platformGbStreamMapper.delByPlatformId(parentPlatformOld.getServerGBId()); | ||
| 135 | + } | ||
| 136 | + | ||
| 137 | + // 停止心跳定时 | ||
| 138 | + final String keepaliveTaskKey = KEEPALIVE_KEY_PREFIX + parentPlatformOld.getServerGBId(); | ||
| 139 | + dynamicTask.stop(keepaliveTaskKey); | ||
| 140 | + // 停止注册定时 | ||
| 141 | + final String registerTaskKey = REGISTER_KEY_PREFIX + parentPlatformOld.getServerGBId(); | ||
| 142 | + dynamicTask.stop(registerTaskKey); | ||
| 143 | + // 注销旧的 | ||
| 144 | + try { | ||
| 145 | + commanderForPlatform.unregister(parentPlatformOld, null, eventResult -> { | ||
| 146 | + logger.info("[国标级联] 注销成功, 平台:{}", parentPlatformOld.getServerGBId()); | ||
| 147 | + }); | ||
| 148 | + } catch (InvalidArgumentException | ParseException | SipException e) { | ||
| 149 | + logger.error("[命令发送失败] 国标级联 注销: {}", e.getMessage()); | ||
| 150 | + } | ||
| 151 | + | ||
| 152 | + // 更新数据库 | ||
| 153 | + if (parentPlatform.getCatalogGroup() == 0) { | ||
| 154 | + parentPlatform.setCatalogGroup(1); | ||
| 155 | + } | ||
| 156 | + if (parentPlatform.getAdministrativeDivision() == null) { | ||
| 157 | + parentPlatform.setAdministrativeDivision(parentPlatform.getAdministrativeDivision()); | ||
| 158 | + } | ||
| 159 | + | ||
| 160 | + platformMapper.updateParentPlatform(parentPlatform); | ||
| 161 | + // 更新redis | ||
| 162 | + redisCatchStorage.delPlatformCatchInfo(parentPlatformOld.getServerGBId()); | ||
| 163 | + ParentPlatformCatch parentPlatformCatch = new ParentPlatformCatch(); | ||
| 164 | + parentPlatformCatch.setParentPlatform(parentPlatform); | ||
| 165 | + parentPlatformCatch.setId(parentPlatform.getServerGBId()); | ||
| 166 | + redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch); | ||
| 167 | + // 注册 | ||
| 168 | + if (parentPlatform.isEnable()) { | ||
| 169 | + // 保存时启用就发送注册 | ||
| 170 | + // 注册成功时由程序直接调用了online方法 | ||
| 171 | + try { | ||
| 172 | + commanderForPlatform.register(parentPlatform, eventResult -> { | ||
| 173 | + logger.info("[国标级联] {},添加向上级注册失败,请确定上级平台可用时重新保存", parentPlatform.getServerGBId()); | ||
| 174 | + }, null); | ||
| 175 | + } catch (InvalidArgumentException | ParseException | SipException e) { | ||
| 176 | + logger.error("[命令发送失败] 国标级联: {}", e.getMessage()); | ||
| 177 | + } | ||
| 178 | + } | ||
| 179 | + // 重新开启定时注册, 使用续订消息 | ||
| 180 | + // 重新开始心跳保活 | ||
| 181 | + | ||
| 182 | + | ||
| 183 | + return false; | ||
| 184 | + } | ||
| 185 | + | ||
| 186 | + | ||
| 187 | + @Override | ||
| 116 | public void online(ParentPlatform parentPlatform) { | 188 | public void online(ParentPlatform parentPlatform) { |
| 117 | logger.info("[国标级联]:{}, 平台上线/更新注册", parentPlatform.getServerGBId()); | 189 | logger.info("[国标级联]:{}, 平台上线/更新注册", parentPlatform.getServerGBId()); |
| 118 | platformMapper.updateParentPlatformStatus(parentPlatform.getServerGBId(), true); | 190 | platformMapper.updateParentPlatformStatus(parentPlatform.getServerGBId(), true); |
| @@ -137,7 +209,7 @@ public class PlatformServiceImpl implements IPlatformService { | @@ -137,7 +209,7 @@ public class PlatformServiceImpl implements IPlatformService { | ||
| 137 | ()-> { | 209 | ()-> { |
| 138 | registerTask(parentPlatform); | 210 | registerTask(parentPlatform); |
| 139 | }, | 211 | }, |
| 140 | - (parentPlatform.getExpires() - 10) *1000); | 212 | + (parentPlatform.getExpires()) *1000); |
| 141 | } | 213 | } |
| 142 | 214 | ||
| 143 | 215 | ||
| @@ -183,7 +255,7 @@ public class PlatformServiceImpl implements IPlatformService { | @@ -183,7 +255,7 @@ public class PlatformServiceImpl implements IPlatformService { | ||
| 183 | logger.error("[命令发送失败] 国标级联 发送心跳: {}", e.getMessage()); | 255 | logger.error("[命令发送失败] 国标级联 发送心跳: {}", e.getMessage()); |
| 184 | } | 256 | } |
| 185 | }, | 257 | }, |
| 186 | - (parentPlatform.getKeepTimeout() - 10)*1000); | 258 | + (parentPlatform.getKeepTimeout())*1000); |
| 187 | } | 259 | } |
| 188 | } | 260 | } |
| 189 | 261 |
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java
| @@ -205,58 +205,8 @@ public class PlatformController { | @@ -205,58 +205,8 @@ public class PlatformController { | ||
| 205 | ) { | 205 | ) { |
| 206 | throw new ControllerException(ErrorCode.ERROR400); | 206 | throw new ControllerException(ErrorCode.ERROR400); |
| 207 | } | 207 | } |
| 208 | - parentPlatform.setCharacterSet(parentPlatform.getCharacterSet().toUpperCase()); | ||
| 209 | - ParentPlatform parentPlatformOld = storager.queryParentPlatByServerGBId(parentPlatform.getServerGBId()); | ||
| 210 | - parentPlatform.setUpdateTime(DateUtil.getNow()); | ||
| 211 | - if (!parentPlatformOld.getTreeType().equals(parentPlatform.getTreeType())) { | ||
| 212 | - // 目录结构发生变化,清空之前的关联关系 | ||
| 213 | - logger.info("保存平台{}时发现目录结构变化,清空关联关系", parentPlatform.getDeviceGBId()); | ||
| 214 | - storager.cleanContentForPlatform(parentPlatform.getServerGBId()); | ||
| 215 | - | ||
| 216 | - } | ||
| 217 | - boolean updateResult = storager.updateParentPlatform(parentPlatform); | ||
| 218 | - | ||
| 219 | - if (updateResult) { | ||
| 220 | - // 保存时启用就发送注册 | ||
| 221 | - if (parentPlatform.isEnable()) { | ||
| 222 | - if (parentPlatformOld != null && parentPlatformOld.isStatus()) { | ||
| 223 | - try { | ||
| 224 | - commanderForPlatform.unregister(parentPlatformOld, null, null); | ||
| 225 | - } catch (InvalidArgumentException | ParseException | SipException e) { | ||
| 226 | - logger.error("[命令发送失败] 国标级联 注销: {}", e.getMessage()); | ||
| 227 | - } | ||
| 228 | - try { | ||
| 229 | - Thread.sleep(500); | ||
| 230 | - } catch (InterruptedException e) { | ||
| 231 | - logger.error("[线程休眠失败] : {}", e.getMessage()); | ||
| 232 | - } | ||
| 233 | - // 只要保存就发送注册 | ||
| 234 | - try { | ||
| 235 | - commanderForPlatform.register(parentPlatform, null, null); | ||
| 236 | - } catch (InvalidArgumentException | ParseException | SipException e) { | ||
| 237 | - logger.error("[命令发送失败] 国标级联 注册: {}", e.getMessage()); | ||
| 238 | - } | ||
| 239 | - | ||
| 240 | - } else { | ||
| 241 | - // 只要保存就发送注册 | ||
| 242 | - try { | ||
| 243 | - commanderForPlatform.register(parentPlatform, null, null); | ||
| 244 | - } catch (InvalidArgumentException | ParseException | SipException e) { | ||
| 245 | - logger.error("[命令发送失败] 国标级联 注册: {}", e.getMessage()); | ||
| 246 | - } | ||
| 247 | - } | ||
| 248 | - } else if (parentPlatformOld != null && parentPlatformOld.isEnable() && !parentPlatform.isEnable()) { // 关闭启用时注销 | ||
| 249 | - try { | ||
| 250 | - commanderForPlatform.unregister(parentPlatformOld, null, null); | ||
| 251 | - } catch (InvalidArgumentException | ParseException | SipException e) { | ||
| 252 | - logger.error("[命令发送失败] 国标级联 注销: {}", e.getMessage()); | ||
| 253 | - } | ||
| 254 | - // 停止订阅相关的定时任务 | ||
| 255 | - subscribeHolder.removeAllSubscribe(parentPlatform.getServerGBId()); | ||
| 256 | - } | ||
| 257 | - } else { | ||
| 258 | - throw new ControllerException(ErrorCode.ERROR100.getCode(),"写入数据库失败"); | ||
| 259 | - } | 208 | + |
| 209 | + platformService.update(parentPlatform); | ||
| 260 | } | 210 | } |
| 261 | 211 | ||
| 262 | /** | 212 | /** |
web_src/src/components/dialog/platformEdit.vue
| @@ -157,7 +157,7 @@ export default { | @@ -157,7 +157,7 @@ export default { | ||
| 157 | devicePort: null, | 157 | devicePort: null, |
| 158 | username: null, | 158 | username: null, |
| 159 | password: null, | 159 | password: null, |
| 160 | - expires: 300, | 160 | + expires: 3600, |
| 161 | keepTimeout: 60, | 161 | keepTimeout: 60, |
| 162 | transport: "UDP", | 162 | transport: "UDP", |
| 163 | characterSet: "GB2312", | 163 | characterSet: "GB2312", |
| @@ -305,7 +305,7 @@ export default { | @@ -305,7 +305,7 @@ export default { | ||
| 305 | devicePort: null, | 305 | devicePort: null, |
| 306 | username: null, | 306 | username: null, |
| 307 | password: null, | 307 | password: null, |
| 308 | - expires: 300, | 308 | + expires: 3600, |
| 309 | keepTimeout: 60, | 309 | keepTimeout: 60, |
| 310 | transport: "UDP", | 310 | transport: "UDP", |
| 311 | characterSet: "GB2312", | 311 | characterSet: "GB2312", |
| @@ -332,7 +332,7 @@ export default { | @@ -332,7 +332,7 @@ export default { | ||
| 332 | }, | 332 | }, |
| 333 | checkExpires: function() { | 333 | checkExpires: function() { |
| 334 | if (this.platform.enable && this.platform.expires === "0") { | 334 | if (this.platform.enable && this.platform.expires === "0") { |
| 335 | - this.platform.expires = "300"; | 335 | + this.platform.expires = "3600"; |
| 336 | } | 336 | } |
| 337 | }, | 337 | }, |
| 338 | rtcpCheckBoxChange: function (result){ | 338 | rtcpCheckBoxChange: function (result){ |