/** | /** | ||||
* 机场平台:获取机场列表接口 | * 机场平台:获取机场列表接口 | ||||
*/ | */ | ||||
String API_AIRPORT_LIST = "/api/airportInterface/airportList"; | |||||
String API_AIRPORT_LIST = "/airportInterface/airportList"; | |||||
/** | /** | ||||
* 机场平台:获取机场路线列表接口 | * 机场平台:获取机场路线列表接口 | ||||
*/ | */ | ||||
String API_AIRPORT_LINE_LIST = "/api/airportInterface/taskByDroneId"; | |||||
String API_AIRPORT_LINE_LIST = "/airportInterface/taskByDroneId"; | |||||
/** | /** | ||||
* 机场平台:执行接口 | * 机场平台:执行接口 | ||||
*/ | */ | ||||
String API_AIRPORT_EXECUTE_TASK = "/api/airportInterface/executeTaskAnsy"; | |||||
String API_AIRPORT_EXECUTE_TASK = "/airportInterface/executeTaskAnsy"; | |||||
/** | /** | ||||
* 机场平台:获取天气 | * 机场平台:获取天气 | ||||
*/ | */ | ||||
String API_AIRPORT_GET_WEATHER = "/api/airportInterface/getWeather"; | |||||
String API_AIRPORT_GET_WEATHER = "/airportInterface/getWeather"; | |||||
/** | /** | ||||
* 机场平台:控制无人机 | * 机场平台:控制无人机 | ||||
*/ | */ | ||||
String API_AIRPORT_DRONE_CONTROL = "/api/airportInterface/droneCommand"; | |||||
String API_AIRPORT_DRONE_CONTROL = "/airportInterface/droneCommand"; | |||||
/** | /** | ||||
* 机场平台:定点飞行 | * 机场平台:定点飞行 | ||||
*/ | */ | ||||
String API_AIRPORT_POINT_FLIGH = "/api/airportInterface/createPointLine"; | |||||
String API_AIRPORT_POINT_FLIGH = "/airportInterface/createPointLine"; | |||||
// 飞手平台不同接口url | // 飞手平台不同接口url | ||||
/** | /** | ||||
/** | /** | ||||
* 机场平台:获取机场状态 | * 机场平台:获取机场状态 | ||||
*/ | */ | ||||
String API_AIRPORT_STATUS_BY_AIRPORT_ID = "/api/airportInterface/getAirportStatusByAirportId"; | |||||
String API_AIRPORT_STATUS_BY_AIRPORT_ID = "/airportInterface/getAirportStatusByAirportId"; | |||||
/** | /** | ||||
* 机场平台:获取航点文件坐标 | * 机场平台:获取航点文件坐标 | ||||
*/ | */ | ||||
String API_AIRPORT_LOCATION = "/api/airportInterface/getLocationById"; | |||||
String API_AIRPORT_LOCATION = "/airportInterface/getLocationById"; | |||||
/** | /** | ||||
* 机场平台:自动规划航线 | * 机场平台:自动规划航线 | ||||
*/ | */ | ||||
String API_AIRPORT_DRONE_LINE = "/api/airportInterface/createDroneLine"; | |||||
String API_AIRPORT_DRONE_LINE = "/airportInterface/createDroneLine"; | |||||
} | } |
package com.tuoheng.admin.entity.vo; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import java.io.Serializable; | |||||
/** | |||||
* 机场视图Vo | |||||
* | |||||
* @author wanjing | |||||
* @team tuoheng | |||||
* @date 2022-11-23 | |||||
*/ | |||||
@Data | |||||
@NoArgsConstructor | |||||
public class AirPortVo implements Serializable { | |||||
private static final long serialVersionUID = 1L; | |||||
/** | |||||
* 机场id | |||||
*/ | |||||
private String id; | |||||
/** | |||||
* 机场代码 | |||||
*/ | |||||
private String code; | |||||
/** | |||||
* 机场名称 | |||||
*/ | |||||
private String name; | |||||
/** | |||||
* 机场图片 | |||||
*/ | |||||
private String image; | |||||
/** | |||||
* 机场外部监控地址 | |||||
*/ | |||||
private String externalMonitorUrl; | |||||
/** | |||||
* 机场外部监控FLV地址 | |||||
*/ | |||||
private String flvExternalMonitorUrl; | |||||
/** | |||||
* 机场内部监控地址 | |||||
*/ | |||||
private String internalMonitorUrl; | |||||
/** | |||||
* 覆盖范围(km) | |||||
*/ | |||||
private String coverage; | |||||
/** | |||||
* 排序 | |||||
*/ | |||||
private String sort; | |||||
/** | |||||
* 经度 | |||||
*/ | |||||
private String longitude; | |||||
/** | |||||
* 纬度 | |||||
*/ | |||||
private String latitude; | |||||
/** | |||||
* 无人机id | |||||
*/ | |||||
private String droneId; | |||||
/** | |||||
* 无人机名称 | |||||
*/ | |||||
private String droneName; | |||||
/** | |||||
* 设备id | |||||
*/ | |||||
private String edgeId; | |||||
/** | |||||
* 创建人 | |||||
*/ | |||||
private String createUser; | |||||
/** | |||||
* 创建时间 | |||||
*/ | |||||
private String createTime; | |||||
/** | |||||
* 修改人 | |||||
*/ | |||||
private String updateUser; | |||||
/** | |||||
* 修改时间 | |||||
*/ | |||||
private String updateTime; | |||||
/** | |||||
* 状态: 1:空闲 2:飞行中 | |||||
*/ | |||||
private String status; | |||||
/** | |||||
* 是否在线:true:在线 false:离线 | |||||
*/ | |||||
private String online; | |||||
} |
client.connect(options); | client.connect(options); | ||||
//String topic = "$share/airmonitor/298dd766/environment/message"; | //String topic = "$share/airmonitor/298dd766/environment/message"; | ||||
String topic = "/v1/298dd766/environment/message"; | |||||
String topic = "/v1/+/environment/message"; | |||||
//String topic = "#"; | |||||
client.subscribe(topic, 0); | client.subscribe(topic, 0); | ||||
} catch (MqttException e) { | } catch (MqttException e) { | ||||
e.printStackTrace(); | e.printStackTrace(); |
import com.tuoheng.admin.entity.domain.User; | import com.tuoheng.admin.entity.domain.User; | ||||
import com.tuoheng.admin.entity.dto.AirportRouteDto; | import com.tuoheng.admin.entity.dto.AirportRouteDto; | ||||
import com.tuoheng.admin.entity.request.inspection.AirportLineRequest; | import com.tuoheng.admin.entity.request.inspection.AirportLineRequest; | ||||
import com.tuoheng.admin.entity.vo.AirPortVo; | |||||
import com.tuoheng.admin.enums.AirportLineEnum; | import com.tuoheng.admin.enums.AirportLineEnum; | ||||
import com.tuoheng.admin.enums.MarkEnum; | import com.tuoheng.admin.enums.MarkEnum; | ||||
import com.tuoheng.admin.mapper.AirportLineMapper; | import com.tuoheng.admin.mapper.AirportLineMapper; | ||||
import com.tuoheng.admin.mapper.TenantMapper; | import com.tuoheng.admin.mapper.TenantMapper; | ||||
import com.tuoheng.admin.service.third.airport.GetAirportListService; | |||||
import com.tuoheng.admin.utils.AliyunOSSUtil; | import com.tuoheng.admin.utils.AliyunOSSUtil; | ||||
import com.tuoheng.admin.utils.CurrentUserUtil; | import com.tuoheng.admin.utils.CurrentUserUtil; | ||||
import com.tuoheng.common.core.config.common.CommonConfig; | import com.tuoheng.common.core.config.common.CommonConfig; | ||||
@Autowired | @Autowired | ||||
private TenantMapper tenantMapper; | private TenantMapper tenantMapper; | ||||
@Autowired | |||||
private GetAirportListService getAirportListService; | |||||
public JsonResult add(AirportLineRequest request) { | public JsonResult add(AirportLineRequest request) { | ||||
log.info("进入添加航线接口"); | log.info("进入添加航线接口"); | ||||
log.info("添加航线数据校验失败:{}",jsonResult.getMsg()); | log.info("添加航线数据校验失败:{}",jsonResult.getMsg()); | ||||
return jsonResult; | return jsonResult; | ||||
} | } | ||||
String ossUrl = this.createPointLineForOss(request.getAirportRouteDtoList()); | |||||
List<AirPortVo> airPortVoList = getAirportListService.getAirportListByTenantId(tenantId); | |||||
if (CollectionUtils.isEmpty(airPortVoList)) { | |||||
log.info("添加航线数据,获取机场信息为空"); | |||||
return jsonResult; | |||||
} | |||||
AirPortVo airPortVo = airPortVoList.get(0); | |||||
String ossUrl = this.createPointLineForOss(airPortVo, request.getAirportRouteDtoList()); | |||||
String airportLineName = request.getAirportLineName(); | String airportLineName = request.getAirportLineName(); | ||||
Integer airportId = request.getAirportId(); | Integer airportId = request.getAirportId(); | ||||
//回调机场平台接口 生成航线id | //回调机场平台接口 生成航线id | ||||
return JsonResult.success(); | return JsonResult.success(); | ||||
} | } | ||||
/** | /** | ||||
* 生成指点航线 | * 生成指点航线 | ||||
* | * | ||||
* @param airportRouteList | * @param airportRouteList | ||||
* @return | * @return | ||||
*/ | */ | ||||
public String createPointLineForOss(List<AirportRouteDto> airportRouteList) { | |||||
public String createPointLineForOss(AirPortVo airPortVo, List<AirportRouteDto> airportRouteList) { | |||||
String fileUrl = ""; | String fileUrl = ""; | ||||
try { | try { | ||||
String s = "QGC WPL 110\n"; | String s = "QGC WPL 110\n"; | ||||
String tmp = "\t0.00000000\t0.00000000\t0.00000000\t0.00000000\t"; | String tmp = "\t0.00000000\t0.00000000\t0.00000000\t0.00000000\t"; | ||||
String tmp16 = "\t0\t3\t16" + tmp; | |||||
String tmpFirst16 = "\t1\t0\t16" + tmp; | |||||
String tmpEnd16 = "\t0\t3\t16" + tmp; | |||||
String tmp22 = "\t0\t3\t22" + tmp; | String tmp22 = "\t0\t3\t22" + tmp; | ||||
String tmp20 = "\t0\t3\t20" + tmp; | |||||
String tmp20 = "\t0\t0\t20" + tmp; | |||||
String end = ".000000\t1\n"; | String end = ".000000\t1\n"; | ||||
AirportRouteDto airportRoute; | AirportRouteDto airportRoute; | ||||
s += 0 + tmpFirst16 + airPortVo.getLatitude() + "\t" + airPortVo.getLongitude() + "\t" + "100" + end; | |||||
s += 1 + tmp22 + airPortVo.getLatitude() + "\t" + airPortVo.getLongitude() + "\t" + "100" + end; | |||||
for (int i = 1; i <= airportRouteList.size(); i++) { | for (int i = 1; i <= airportRouteList.size(); i++) { | ||||
airportRoute = airportRouteList.get(i - 1); | airportRoute = airportRouteList.get(i - 1); | ||||
if (1 == i) { | |||||
s += i + tmp22; | |||||
} else if (airportRouteList.size() == i) { | |||||
s += i + tmp20; | |||||
} else { | |||||
s += i + tmp16; | |||||
} | |||||
s += (i + 1) + tmpEnd16; | |||||
s += airportRoute.getLat() + "\t" + airportRoute.getLng() + "\t" + airportRoute.getAltitude() + end; | s += airportRoute.getLat() + "\t" + airportRoute.getLng() + "\t" + airportRoute.getAltitude() + end; | ||||
} | } | ||||
s += 2 + airportRouteList.size() + tmp20 + airPortVo.getLatitude() + "\t" + airPortVo.getLongitude() + "\t" + "100" + ".000000\t1"; | |||||
ByteArrayOutputStream out = new ByteArrayOutputStream(); | ByteArrayOutputStream out = new ByteArrayOutputStream(); | ||||
out.write(s.getBytes()); | out.write(s.getBytes()); | ||||
// 将outputstream转成inputstream | // 将outputstream转成inputstream |
log.info("获取的数据,dataObject={}", dataObject.toJSONString()); | log.info("获取的数据,dataObject={}", dataObject.toJSONString()); | ||||
String records = dataObject.get("records").toString(); | String records = dataObject.get("records").toString(); | ||||
List<Airport> airportList = JSONObject.parseArray(records, Airport.class); | List<Airport> airportList = JSONObject.parseArray(records, Airport.class); | ||||
log.info("获取records中的数据为:airportList={}", airportList); | |||||
//log.info("获取records中的数据为:airportList={}", airportList); | |||||
if(CollectionUtil.isNotEmpty(airportList) || airportList.size() != 0){ | if(CollectionUtil.isNotEmpty(airportList) || airportList.size() != 0){ | ||||
Airport airport = airportList.get(0); | Airport airport = airportList.get(0); | ||||
if(ObjectUtil.isNotNull(airport)){ | if(ObjectUtil.isNotNull(airport)){ |
import cn.hutool.core.util.ObjectUtil; | import cn.hutool.core.util.ObjectUtil; | ||||
import com.tuoheng.admin.constant.SystemConstant; | import com.tuoheng.admin.constant.SystemConstant; | ||||
import com.tuoheng.admin.entity.domain.Tenant; | import com.tuoheng.admin.entity.domain.Tenant; | ||||
import com.tuoheng.admin.entity.vo.AirPortVo; | |||||
import com.tuoheng.admin.enums.code.AriportCodeEnum; | import com.tuoheng.admin.enums.code.AriportCodeEnum; | ||||
import com.tuoheng.admin.mapper.TenantMapper; | import com.tuoheng.admin.mapper.TenantMapper; | ||||
import com.tuoheng.admin.utils.CurrentUserUtil; | import com.tuoheng.admin.utils.CurrentUserUtil; | ||||
import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
import java.lang.reflect.Field; | |||||
import java.util.ArrayList; | |||||
import java.util.HashMap; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
@Slf4j | @Slf4j | ||||
@Service | @Service | ||||
public class GetAirportListService { | public class GetAirportListService { | ||||
return jsonResult; | return jsonResult; | ||||
} | } | ||||
public List<AirPortVo> getAirportListByTenantId(String tenantId) { | |||||
List<AirPortVo> airPortVoList = new ArrayList<>(); | |||||
//读取不同租户的机场平台url | |||||
Tenant tenant = tenantMapper.selectById(tenantId); | |||||
if (ObjectUtil.isEmpty(tenant)) { | |||||
log.info("获取机场信息, 租户为空,tenantId={}", tenantId); | |||||
return null; | |||||
} | |||||
String url = CommonConfig.airportURL + SystemConstant.API_AIRPORT_LIST; | |||||
String param = "page=1&limit=100&tenantCode=" + tenant.getCode(); | |||||
String airPortStr = HttpUtils.sendGet(url, param); | |||||
JsonResult jsonResult = JacksonUtil.json2pojo(airPortStr, JsonResult.class); | |||||
if (ObjectUtil.isEmpty(jsonResult) || (!ObjectUtil.isEmpty(jsonResult.getData()) && jsonResult.getCode() != 0)) { | |||||
log.info("获取机场信息失败, jsonResult={}", jsonResult); | |||||
return null; | |||||
} | |||||
Map<String, Object> map = (Map<String, Object>) jsonResult.getData(); | |||||
List<Object> list = (List<Object>) map.get("records"); | |||||
AirPortVo airPortVo; | |||||
Map<String, Object> airPortVoMap; | |||||
for (Object obj : list) { | |||||
airPortVoMap = new HashMap<>(); | |||||
for (Object entry : ((Map) obj).entrySet()) { | |||||
String key = ((Map.Entry) entry).getKey().toString(); | |||||
String value = ""; | |||||
if (ObjectUtil.isNotEmpty(((Map.Entry) entry).getValue())) { | |||||
value = ((Map.Entry) entry).getValue().toString(); | |||||
} | |||||
airPortVoMap.put(key, value); | |||||
} | |||||
airPortVo = (AirPortVo) this.copyObject(airPortVoMap); | |||||
if (ObjectUtil.isNotEmpty(airPortVo)) { | |||||
airPortVoList.add(airPortVo); | |||||
} | |||||
} | |||||
return airPortVoList; | |||||
} | |||||
public static <T> Object copyObject(Map<String, Object> field_Val) { | |||||
Object o; | |||||
try { | |||||
Class clz = AirPortVo.class; | |||||
o = clz.newInstance(); | |||||
for (Field tf : clz.getDeclaredFields()) { | |||||
String fieldName = tf.getName(); | |||||
Object targetV = field_Val.get(fieldName); | |||||
if (targetV == null) { | |||||
continue; | |||||
} | |||||
tf.setAccessible(true); | |||||
tf.set(o, targetV); | |||||
} | |||||
} catch (InstantiationException e) { | |||||
log.info("获取机场信息,InstantiationException:{}", e); | |||||
throw new RuntimeException(e); | |||||
} catch (IllegalAccessException e) { | |||||
log.info("获取机场信息,IllegalAccessException:{}", e); | |||||
throw new RuntimeException(e); | |||||
} | |||||
return o; | |||||
} | |||||
} | } |
pilot-url: http://192.168.11.11:7011/pilot/web/ | pilot-url: http://192.168.11.11:7011/pilot/web/ | ||||
#airport配置地址 | #airport配置地址 | ||||
#airport-url: https://airport-test.t-aaron.com | #airport-url: https://airport-test.t-aaron.com | ||||
airport-url: http://192.168.11.22:9060 | |||||
airport-url: http://192.168.11.11:7011/airport/admin | |||||
# 文件配置 | # 文件配置 | ||||
uploads: | uploads: | ||||
#上传的服务器上的映射文件夹 | #上传的服务器上的映射文件夹 |
#飞手平台地址 | #飞手平台地址 | ||||
pilot-url: http://192.168.11.241:7011/pilot/web/ | pilot-url: http://192.168.11.241:7011/pilot/web/ | ||||
#airport配置地址 | #airport配置地址 | ||||
airport-url: https://airport-test.t-aaron.com | |||||
airport-url: https://airport-test.t-aaron.com/airport/admin | |||||
# 文件配置 | # 文件配置 | ||||
uploads: | uploads: | ||||
#上传的服务器上的映射文件夹 | #上传的服务器上的映射文件夹 |
#飞手平台地址 | #飞手平台地址 | ||||
pilot-url: https://pilot.t-aaron.com/pilot/web/ | pilot-url: https://pilot.t-aaron.com/pilot/web/ | ||||
#airport配置地址 | #airport配置地址 | ||||
airport-url: https://airport.t-aaron.com | |||||
airport-url: https://airport.t-aaron.com/airport/admin | |||||
# 文件配置 | # 文件配置 | ||||
uploads: | uploads: | ||||
#上传的服务器上的映射文件夹 | #上传的服务器上的映射文件夹 |
#飞手平台地址 | #飞手平台地址 | ||||
pilot-url: http://172.15.1.11:7011/pilot/web/ | pilot-url: http://172.15.1.11:7011/pilot/web/ | ||||
#airport配置地址 | #airport配置地址 | ||||
airport-url: https://airport-test.t-aaron.com | |||||
airport-url: https://airport-test.t-aaron.com/airport/admin | |||||
# 文件配置 | # 文件配置 | ||||
uploads: | uploads: | ||||
#上传的服务器上的映射文件夹 | #上传的服务器上的映射文件夹 |