648540858
2022-04-01 4ac63a158d16a0d2bce63f8fbadb9b7896397cd1
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
@@ -5,11 +5,15 @@
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
import com.genersoft.iot.vmp.service.IDeviceService;
import com.genersoft.iot.vmp.service.bean.CatalogSubscribeTask;
import com.genersoft.iot.vmp.service.bean.MobilePositionSubscribeTask;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * 设备业务(目录订阅)
 */
@Service
public class DeviceServiceImpl implements IDeviceService {
@@ -17,7 +21,6 @@
    @Autowired
    private DynamicTask dynamicTask;
;
    @Autowired
    private ISIPCommander sipCommander;
@@ -27,13 +30,19 @@
        if (device == null || device.getSubscribeCycleForCatalog() < 0) {
            return false;
        }
        if (dynamicTask.contains(device.getDeviceId() + "catalog")) {
            // 存在则停止现有的,开启新的
            dynamicTask.stop(device.getDeviceId() + "catalog");
        }
        logger.info("[添加目录订阅] 设备{}", device.getDeviceId());
        // 添加目录订阅
        CatalogSubscribeTask catalogSubscribeTask = new CatalogSubscribeTask(device, sipCommander);
        catalogSubscribeTask.run();
        // 提前开始刷新订阅
        // TODO 暂时关闭目录订阅的定时刷新,直到此功能完善
//        String cron = getCron(device.getSubscribeCycleForCatalog() - 60);
//        dynamicTask.startCron(device.getDeviceId(), catalogSubscribeTask, cron);
        int subscribeCycleForCatalog = device.getSubscribeCycleForCatalog();
        // 设置最小值为30
        subscribeCycleForCatalog = Math.max(subscribeCycleForCatalog, 30);
        dynamicTask.startCron(device.getDeviceId() + "catalog", catalogSubscribeTask, subscribeCycleForCatalog - 5);
        return true;
    }
@@ -42,21 +51,43 @@
        if (device == null || device.getSubscribeCycleForCatalog() < 0) {
            return false;
        }
        dynamicTask.stopCron(device.getDeviceId());
        logger.info("移除目录订阅: {}", device.getDeviceId());
        dynamicTask.stop(device.getDeviceId() + "catalog");
        device.setSubscribeCycleForCatalog(0);
        sipCommander.catalogSubscribe(device, null, null);
        return true;
    }
    public String getCron(int time) {
        if (time <= 59) {
            return "0/" + time +" * * * * ?";
        }else if (time <= 60* 59) {
            int minute = time/(60);
            return "0 0/" + minute +" * * * ?";
        }else if (time <= 60* 60* 59) {
            int hour = time/(60*60);
            return "0 0 0/" + hour +" * * ?";
        }else {
            return "0 0/10 * * * ?";
    @Override
    public boolean addMobilePositionSubscribe(Device device) {
        if (device == null || device.getSubscribeCycleForMobilePosition() < 0) {
            return false;
        }
        if (dynamicTask.contains(device.getDeviceId() + "mobile_position")) {
            // 存在则停止现有的,开启新的
            dynamicTask.stop(device.getDeviceId() + "mobile_position");
        }
        logger.info("[添加移动位置订阅] 设备{}", device.getDeviceId());
        // 添加目录订阅
        MobilePositionSubscribeTask mobilePositionSubscribeTask = new MobilePositionSubscribeTask(device, sipCommander);
        mobilePositionSubscribeTask.run();
        // 提前开始刷新订阅
        int subscribeCycleForCatalog = device.getSubscribeCycleForCatalog();
        // 设置最小值为30
        subscribeCycleForCatalog = Math.max(subscribeCycleForCatalog, 30);
        dynamicTask.startCron(device.getDeviceId() + "mobile_position" , mobilePositionSubscribeTask, subscribeCycleForCatalog - 5);
        return true;
    }
    @Override
    public boolean removeMobilePositionSubscribe(Device device) {
        if (device == null || device.getSubscribeCycleForCatalog() < 0) {
            return false;
        }
        logger.info("移除移动位置订阅: {}", device.getDeviceId());
        dynamicTask.stop(device.getDeviceId() + "mobile_position");
        device.setSubscribeCycleForCatalog(0);
        sipCommander.mobilePositionSubscribe(device, null, null);
        return true;
    }
}