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

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; return;
} }
if (cycle > 0) { if (cycle > 0) {
// 目录订阅相关的信息 // 报警订阅相关的信息
if (device.getSubscribeCycleForAlarm() > 0) { if (device.getSubscribeCycleForAlarm() > 0) {
// 订阅周期不同则先取消 // 订阅周期不同则先取消
removeAlarmSubscribe(device, result->{ removeAlarmSubscribe(device, result->{
device.setSubscribeCycleForCatalog(cycle); device.setSubscribeCycleForAlarm(cycle);
updateDevice(device); updateDevice(device);
// 开启订阅 // 开启订阅
addAlarmSubscribe(device, null); addAlarmSubscribe(device, null);

View File

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

View File

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