package com.dji.sample.manage.service.impl; import com.dji.sample.manage.model.dto.DeviceDTO; import com.dji.sample.manage.model.dto.TopologyDTO; import com.dji.sample.manage.model.dto.TopologyDeviceDTO; import com.dji.sample.manage.model.enums.DeviceDomainEnum; import com.dji.sample.manage.model.param.DeviceQueryParam; import com.dji.sample.manage.service.IDeviceService; import com.dji.sample.manage.service.ITopologyService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Optional; /** * @author sean * @version 0.2 * @date 2021/12/8 */ @Service public class TopologyServiceImpl implements ITopologyService { @Autowired private IDeviceService deviceService; @Override public List getDeviceTopology(String workspaceId) { // Query the information of all gateway devices in the workspace. List gatewayList = deviceService.getDevicesByParams( DeviceQueryParam.builder() .workspaceId(workspaceId) .domains(List.of(DeviceDomainEnum.GATEWAY.getVal())) .build()); List topologyList = new ArrayList<>(); gatewayList.forEach(device -> this.getDeviceTopologyByGatewaySn(device.getDeviceSn()) .ifPresent(topologyList::add)); return topologyList; } public Optional getDeviceTopologyByGatewaySn(String gatewaySn) { Optional dtoOptional = deviceService.getDeviceBySn(gatewaySn); if (dtoOptional.isEmpty()) { return Optional.empty(); } List parents = new ArrayList<>(); DeviceDTO device = dtoOptional.get(); TopologyDeviceDTO gateway = deviceService.deviceConvertToTopologyDTO(device); parents.add(gateway); // Query the topology data of the drone based on the drone sn. Optional deviceTopo = deviceService.getDeviceTopoForPilot(device.getChildDeviceSn()); List deviceTopoList = new ArrayList<>(); deviceTopo.ifPresent(deviceTopoList::add); return Optional.ofNullable(TopologyDTO.builder().parents(parents).hosts(deviceTopoList).build()); } }