优化国标级联的更新
parent
193e1a24a1
commit
4f22994cdb
|
@ -25,6 +25,12 @@ public interface IPlatformService {
|
||||||
*/
|
*/
|
||||||
boolean add(ParentPlatform parentPlatform);
|
boolean add(ParentPlatform parentPlatform);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加级联平台
|
||||||
|
* @param parentPlatform 级联平台
|
||||||
|
*/
|
||||||
|
boolean update(ParentPlatform parentPlatform);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 平台上线
|
* 平台上线
|
||||||
* @param parentPlatform 平台信息
|
* @param parentPlatform 平台信息
|
||||||
|
|
|
@ -11,8 +11,8 @@ import com.genersoft.iot.vmp.service.IMediaServerService;
|
||||||
import com.genersoft.iot.vmp.service.IPlatformService;
|
import com.genersoft.iot.vmp.service.IPlatformService;
|
||||||
import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
|
import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
|
||||||
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
|
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
|
||||||
import com.genersoft.iot.vmp.storager.dao.GbStreamMapper;
|
import com.genersoft.iot.vmp.storager.dao.*;
|
||||||
import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper;
|
import com.genersoft.iot.vmp.utils.DateUtil;
|
||||||
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageHelper;
|
||||||
import com.github.pagehelper.PageInfo;
|
import com.github.pagehelper.PageInfo;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
@ -41,6 +41,15 @@ public class PlatformServiceImpl implements IPlatformService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private ParentPlatformMapper platformMapper;
|
private ParentPlatformMapper platformMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private PlatformCatalogMapper catalogMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private PlatformChannelMapper platformChannelMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private PlatformGbStreamMapper platformGbStreamMapper;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private IRedisCatchStorage redisCatchStorage;
|
private IRedisCatchStorage redisCatchStorage;
|
||||||
|
|
||||||
|
@ -112,6 +121,69 @@ public class PlatformServiceImpl implements IPlatformService {
|
||||||
return result > 0;
|
return result > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean update(ParentPlatform parentPlatform) {
|
||||||
|
parentPlatform.setCharacterSet(parentPlatform.getCharacterSet().toUpperCase());
|
||||||
|
ParentPlatform parentPlatformOld = platformMapper.getParentPlatById(parentPlatform.getId());
|
||||||
|
parentPlatform.setUpdateTime(DateUtil.getNow());
|
||||||
|
if (!parentPlatformOld.getTreeType().equals(parentPlatform.getTreeType())) {
|
||||||
|
// 目录结构发生变化,清空之前的关联关系
|
||||||
|
logger.info("保存平台{}时发现目录结构变化,清空关联关系", parentPlatform.getDeviceGBId());
|
||||||
|
catalogMapper.delByPlatformId(parentPlatformOld.getServerGBId());
|
||||||
|
platformChannelMapper.delByPlatformId(parentPlatformOld.getServerGBId());
|
||||||
|
platformGbStreamMapper.delByPlatformId(parentPlatformOld.getServerGBId());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 停止心跳定时
|
||||||
|
final String keepaliveTaskKey = KEEPALIVE_KEY_PREFIX + parentPlatformOld.getServerGBId();
|
||||||
|
dynamicTask.stop(keepaliveTaskKey);
|
||||||
|
// 停止注册定时
|
||||||
|
final String registerTaskKey = REGISTER_KEY_PREFIX + parentPlatformOld.getServerGBId();
|
||||||
|
dynamicTask.stop(registerTaskKey);
|
||||||
|
// 注销旧的
|
||||||
|
try {
|
||||||
|
commanderForPlatform.unregister(parentPlatformOld, null, eventResult -> {
|
||||||
|
logger.info("[国标级联] 注销成功, 平台:{}", parentPlatformOld.getServerGBId());
|
||||||
|
});
|
||||||
|
} catch (InvalidArgumentException | ParseException | SipException e) {
|
||||||
|
logger.error("[命令发送失败] 国标级联 注销: {}", e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新数据库
|
||||||
|
if (parentPlatform.getCatalogGroup() == 0) {
|
||||||
|
parentPlatform.setCatalogGroup(1);
|
||||||
|
}
|
||||||
|
if (parentPlatform.getAdministrativeDivision() == null) {
|
||||||
|
parentPlatform.setAdministrativeDivision(parentPlatform.getAdministrativeDivision());
|
||||||
|
}
|
||||||
|
|
||||||
|
platformMapper.updateParentPlatform(parentPlatform);
|
||||||
|
// 更新redis
|
||||||
|
redisCatchStorage.delPlatformCatchInfo(parentPlatformOld.getServerGBId());
|
||||||
|
ParentPlatformCatch parentPlatformCatch = new ParentPlatformCatch();
|
||||||
|
parentPlatformCatch.setParentPlatform(parentPlatform);
|
||||||
|
parentPlatformCatch.setId(parentPlatform.getServerGBId());
|
||||||
|
redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch);
|
||||||
|
// 注册
|
||||||
|
if (parentPlatform.isEnable()) {
|
||||||
|
// 保存时启用就发送注册
|
||||||
|
// 注册成功时由程序直接调用了online方法
|
||||||
|
try {
|
||||||
|
commanderForPlatform.register(parentPlatform, eventResult -> {
|
||||||
|
logger.info("[国标级联] {},添加向上级注册失败,请确定上级平台可用时重新保存", parentPlatform.getServerGBId());
|
||||||
|
}, null);
|
||||||
|
} catch (InvalidArgumentException | ParseException | SipException e) {
|
||||||
|
logger.error("[命令发送失败] 国标级联: {}", e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 重新开启定时注册, 使用续订消息
|
||||||
|
// 重新开始心跳保活
|
||||||
|
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void online(ParentPlatform parentPlatform) {
|
public void online(ParentPlatform parentPlatform) {
|
||||||
logger.info("[国标级联]:{}, 平台上线/更新注册", parentPlatform.getServerGBId());
|
logger.info("[国标级联]:{}, 平台上线/更新注册", parentPlatform.getServerGBId());
|
||||||
|
@ -137,7 +209,7 @@ public class PlatformServiceImpl implements IPlatformService {
|
||||||
()-> {
|
()-> {
|
||||||
registerTask(parentPlatform);
|
registerTask(parentPlatform);
|
||||||
},
|
},
|
||||||
(parentPlatform.getExpires() - 10) *1000);
|
(parentPlatform.getExpires()) *1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -183,7 +255,7 @@ public class PlatformServiceImpl implements IPlatformService {
|
||||||
logger.error("[命令发送失败] 国标级联 发送心跳: {}", e.getMessage());
|
logger.error("[命令发送失败] 国标级联 发送心跳: {}", e.getMessage());
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
(parentPlatform.getKeepTimeout() - 10)*1000);
|
(parentPlatform.getKeepTimeout())*1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -205,58 +205,8 @@ public class PlatformController {
|
||||||
) {
|
) {
|
||||||
throw new ControllerException(ErrorCode.ERROR400);
|
throw new ControllerException(ErrorCode.ERROR400);
|
||||||
}
|
}
|
||||||
parentPlatform.setCharacterSet(parentPlatform.getCharacterSet().toUpperCase());
|
|
||||||
ParentPlatform parentPlatformOld = storager.queryParentPlatByServerGBId(parentPlatform.getServerGBId());
|
|
||||||
parentPlatform.setUpdateTime(DateUtil.getNow());
|
|
||||||
if (!parentPlatformOld.getTreeType().equals(parentPlatform.getTreeType())) {
|
|
||||||
// 目录结构发生变化,清空之前的关联关系
|
|
||||||
logger.info("保存平台{}时发现目录结构变化,清空关联关系", parentPlatform.getDeviceGBId());
|
|
||||||
storager.cleanContentForPlatform(parentPlatform.getServerGBId());
|
|
||||||
|
|
||||||
}
|
platformService.update(parentPlatform);
|
||||||
boolean updateResult = storager.updateParentPlatform(parentPlatform);
|
|
||||||
|
|
||||||
if (updateResult) {
|
|
||||||
// 保存时启用就发送注册
|
|
||||||
if (parentPlatform.isEnable()) {
|
|
||||||
if (parentPlatformOld != null && parentPlatformOld.isStatus()) {
|
|
||||||
try {
|
|
||||||
commanderForPlatform.unregister(parentPlatformOld, null, null);
|
|
||||||
} catch (InvalidArgumentException | ParseException | SipException e) {
|
|
||||||
logger.error("[命令发送失败] 国标级联 注销: {}", e.getMessage());
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
Thread.sleep(500);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
logger.error("[线程休眠失败] : {}", e.getMessage());
|
|
||||||
}
|
|
||||||
// 只要保存就发送注册
|
|
||||||
try {
|
|
||||||
commanderForPlatform.register(parentPlatform, null, null);
|
|
||||||
} catch (InvalidArgumentException | ParseException | SipException e) {
|
|
||||||
logger.error("[命令发送失败] 国标级联 注册: {}", e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// 只要保存就发送注册
|
|
||||||
try {
|
|
||||||
commanderForPlatform.register(parentPlatform, null, null);
|
|
||||||
} catch (InvalidArgumentException | ParseException | SipException e) {
|
|
||||||
logger.error("[命令发送失败] 国标级联 注册: {}", e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (parentPlatformOld != null && parentPlatformOld.isEnable() && !parentPlatform.isEnable()) { // 关闭启用时注销
|
|
||||||
try {
|
|
||||||
commanderForPlatform.unregister(parentPlatformOld, null, null);
|
|
||||||
} catch (InvalidArgumentException | ParseException | SipException e) {
|
|
||||||
logger.error("[命令发送失败] 国标级联 注销: {}", e.getMessage());
|
|
||||||
}
|
|
||||||
// 停止订阅相关的定时任务
|
|
||||||
subscribeHolder.removeAllSubscribe(parentPlatform.getServerGBId());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new ControllerException(ErrorCode.ERROR100.getCode(),"写入数据库失败");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -157,7 +157,7 @@ export default {
|
||||||
devicePort: null,
|
devicePort: null,
|
||||||
username: null,
|
username: null,
|
||||||
password: null,
|
password: null,
|
||||||
expires: 300,
|
expires: 3600,
|
||||||
keepTimeout: 60,
|
keepTimeout: 60,
|
||||||
transport: "UDP",
|
transport: "UDP",
|
||||||
characterSet: "GB2312",
|
characterSet: "GB2312",
|
||||||
|
@ -305,7 +305,7 @@ export default {
|
||||||
devicePort: null,
|
devicePort: null,
|
||||||
username: null,
|
username: null,
|
||||||
password: null,
|
password: null,
|
||||||
expires: 300,
|
expires: 3600,
|
||||||
keepTimeout: 60,
|
keepTimeout: 60,
|
||||||
transport: "UDP",
|
transport: "UDP",
|
||||||
characterSet: "GB2312",
|
characterSet: "GB2312",
|
||||||
|
@ -332,7 +332,7 @@ export default {
|
||||||
},
|
},
|
||||||
checkExpires: function() {
|
checkExpires: function() {
|
||||||
if (this.platform.enable && this.platform.expires === "0") {
|
if (this.platform.enable && this.platform.expires === "0") {
|
||||||
this.platform.expires = "300";
|
this.platform.expires = "3600";
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
rtcpCheckBoxChange: function (result){
|
rtcpCheckBoxChange: function (result){
|
||||||
|
|
Loading…
Reference in New Issue