You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
2.0 KiB
56 lines
2.0 KiB
package com.dji.sample.component; |
|
|
|
import com.dji.sample.component.redis.RedisConst; |
|
import com.dji.sample.component.redis.RedisOpsUtils; |
|
import com.dji.sample.manage.model.dto.DeviceDTO; |
|
import com.dji.sample.manage.service.IDeviceRedisService; |
|
import com.dji.sample.manage.service.IDeviceService; |
|
import com.dji.sdk.cloudapi.device.DeviceDomainEnum; |
|
import com.dji.sdk.common.SDKManager; |
|
import org.springframework.beans.factory.annotation.Autowired; |
|
import org.springframework.boot.CommandLineRunner; |
|
import org.springframework.stereotype.Component; |
|
|
|
import jakarta.annotation.Resource; |
|
import java.util.Optional; |
|
|
|
/** |
|
* @author sean.zhou |
|
* @date 2021/11/24 |
|
* @version 0.1 |
|
*/ |
|
@Component |
|
public class ApplicationBootInitial implements CommandLineRunner { |
|
|
|
@Autowired |
|
private IDeviceService deviceService; |
|
|
|
@Autowired |
|
private IDeviceRedisService deviceRedisService; |
|
|
|
@Resource |
|
SDKManager sdkManager; |
|
|
|
/** |
|
* Subscribe to the devices that exist in the redis when the program starts, |
|
* to prevent the data from being different from the pilot side due to program interruptions. |
|
* @param args |
|
* @throws Exception |
|
*/ |
|
@Override |
|
public void run(String... args) throws Exception { |
|
int start = RedisConst.DEVICE_ONLINE_PREFIX.length(); |
|
|
|
RedisOpsUtils.getAllKeys(RedisConst.DEVICE_ONLINE_PREFIX + "*") |
|
.stream() |
|
.map(key -> key.substring(start)) |
|
.map(deviceRedisService::getDeviceOnline) |
|
.map(Optional::get) |
|
.filter(device -> DeviceDomainEnum.DRONE != device.getDomain()) |
|
.forEach(device -> deviceService.subDeviceOnlineSubscribeTopic( |
|
sdkManager.registerDevice(device.getDeviceSn(), device.getChildDeviceSn(), device.getDomain(), |
|
device.getType(), device.getSubType(), device.getThingVersion(), |
|
deviceRedisService.getDeviceOnline(device.getChildDeviceSn()).map(DeviceDTO::getThingVersion).orElse(null)))); |
|
|
|
} |
|
} |