调整订阅周期处理和任务创建逻辑

This commit is contained in:
lin 2026-03-31 11:22:05 +08:00
parent 85c7ec3d3e
commit 383081f244
3 changed files with 24 additions and 25 deletions

View File

@ -1080,11 +1080,11 @@ public class DeviceServiceImpl implements IDeviceService, CommandLineRunner {
return;
}
if (cycle > 0) {
// 目录订阅相关的信息
// 报警订阅相关的信息
if (device.getSubscribeCycleForAlarm() > 0) {
// 订阅周期不同则先取消
removeAlarmSubscribe(device, result->{
device.setSubscribeCycleForCatalog(cycle);
device.setSubscribeCycleForAlarm(cycle);
updateDevice(device);
// 开启订阅
addAlarmSubscribe(device, null);

View File

@ -12,15 +12,15 @@ public class SubscribeTaskForAlarm extends SubscribeTask {
public static final String name = "alarm";
public static SubscribeTask getInstance(Device device, SubscribeCallback callback, SipTransactionInfo transactionInfo) {
if (device.getSubscribeCycleForCatalog() <= 0) {
if (device.getSubscribeCycleForAlarm() <= 0) {
return null;
}
SubscribeTaskForAlarm subscribeTaskForCatalog = new SubscribeTaskForAlarm();
subscribeTaskForCatalog.setDelayTime((device.getSubscribeCycleForCatalog() * 1000L - 500L) + System.currentTimeMillis());
subscribeTaskForCatalog.setDeviceId(device.getDeviceId());
subscribeTaskForCatalog.setCallback(callback);
subscribeTaskForCatalog.setTransactionInfo(transactionInfo);
return subscribeTaskForCatalog;
SubscribeTaskForAlarm subscribeTaskForAlarm = new SubscribeTaskForAlarm();
subscribeTaskForAlarm.setDelayTime((device.getSubscribeCycleForAlarm() * 1000L - 500L) + System.currentTimeMillis());
subscribeTaskForAlarm.setDeviceId(device.getDeviceId());
subscribeTaskForAlarm.setCallback(callback);
subscribeTaskForAlarm.setTransactionInfo(transactionInfo);
return subscribeTaskForAlarm;
}
@Override

View File

@ -41,7 +41,6 @@ import javax.sip.SipFactory;
import javax.sip.header.CallIdHeader;
import javax.sip.message.Request;
import java.text.ParseException;
import java.time.LocalDateTime;
import java.util.List;
/**
@ -1231,17 +1230,17 @@ public class SIPCommander implements ISIPCommander {
cmdXml.append("<CmdType>Alarm</CmdType>\r\n");
cmdXml.append("<SN>" + (int) ((Math.random() * 9 + 1) * 100000) + "</SN>\r\n");
cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
cmdXml.append("<StartAlarmPriority>1</StartAlarmPriority>\r\n");
cmdXml.append("<EndAlarmPriority>4/EndAlarmPriority>\r\n");
cmdXml.append("<AlarmMethod>0</AlarmMethod>\r\n");
LocalDateTime nowDateTime = LocalDateTime.now();
String startTime = DateUtil.formatterISO8601.format(nowDateTime);
// 退后一个月作为结束时间
String endTime = DateUtil.formatterISO8601.format(nowDateTime.plusMonths(1));
cmdXml.append("<StartTime>" + startTime + "</StartTime>\r\n");
cmdXml.append("<EndTime>" + endTime + "</EndTime>\r\n");
// cmdXml.append("<StartAlarmPriority>1</StartAlarmPriority>\r\n");
// cmdXml.append("<EndAlarmPriority>4/EndAlarmPriority>\r\n");
// cmdXml.append("<AlarmMethod>0</AlarmMethod>\r\n");
//
// LocalDateTime nowDateTime = LocalDateTime.now();
// String startTime = DateUtil.formatterISO8601.format(nowDateTime);
// // 退后一个月作为结束时间
// String endTime = DateUtil.formatterISO8601.format(nowDateTime.plusMonths(1));
//
// cmdXml.append("<StartTime>" + startTime + "</StartTime>\r\n");
// cmdXml.append("<EndTime>" + endTime + "</EndTime>\r\n");
cmdXml.append("</Query>\r\n");
@ -1253,14 +1252,14 @@ public class SIPCommander implements ISIPCommander {
callIdHeader = sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport());
}
int subscribeCycleForCatalog = device.getSubscribeCycleForCatalog();
if (subscribeCycleForCatalog > 0) {
int subscribeCycleForAlarm = device.getSubscribeCycleForAlarm();
if (subscribeCycleForAlarm > 0) {
// 目录订阅有效期不小于 30
subscribeCycleForCatalog = Math.max(subscribeCycleForCatalog, 30);
subscribeCycleForAlarm = Math.max(subscribeCycleForAlarm, 30);
}
// 有效时间默认为60秒以上
SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, cmdXml.toString(), sipTransactionInfo, subscribeCycleForCatalog, "presence",
SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, cmdXml.toString(), sipTransactionInfo, subscribeCycleForAlarm, "presence",
callIdHeader);
sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, okEvent);
return request;