| | |
| | | * @return 同步数量 |
| | | */ |
| | | @Override |
| | | @Async |
| | | @Scheduled(cron = "0 0 0 * * ?") |
| | | public int syncXingtuDevice() throws Exception { |
| | | int total = 0; |
| | |
| | | return total; |
| | | } |
| | | |
| | | /** |
| | | * 同步星图无人机设备并入库 |
| | | * |
| | | * @return 新增或更新数量 |
| | | */ |
| | | private int syncPilotDevices() throws Exception { |
| | | R response = jianXingtuApiService.getDevicePilotList(null); |
| | | List<GdXingtuPilotListDTO> items = parseList(response, GdXingtuPilotListDTO.class); |
| | |
| | | return count; |
| | | } |
| | | |
| | | /** |
| | | * 同步星图机巢设备并入库 |
| | | * |
| | | * @return 新增或更新数量 |
| | | */ |
| | | private int syncAirportDevices() throws Exception { |
| | | R response = jianXingtuApiService.getDeviceAirportList(null); |
| | | List<GdXingtuAirportListDTO> items = parseList(response, GdXingtuAirportListDTO.class); |
| | |
| | | return count; |
| | | } |
| | | |
| | | /** |
| | | * 按机场ID保存或更新设备信息 |
| | | * |
| | | * @param entity 设备信息 |
| | | * @return 是否保存成功 |
| | | */ |
| | | private boolean saveOrUpdateByAirportId(GdManageDeviceEntity entity) throws Exception { |
| | | if (StringUtil.isBlank(entity.getAirportId())) { |
| | | return false; |
| | |
| | | return saveOrUpdateDevice(entity); |
| | | } |
| | | |
| | | /** |
| | | * 从星图无人机数据构建设备实体 |
| | | * |
| | | * @param item 星图无人机数据 |
| | | * @return 设备实体 |
| | | */ |
| | | private GdManageDeviceEntity buildFromPilot(GdXingtuPilotListDTO item) { |
| | | if (item == null) { |
| | | return null; |
| | |
| | | return entity; |
| | | } |
| | | |
| | | /** |
| | | * 从星图机巢数据构建设备实体 |
| | | * |
| | | * @param item 星图机巢数据 |
| | | * @return 设备实体 |
| | | */ |
| | | private GdManageDeviceEntity buildFromAirport(GdXingtuAirportListDTO item) { |
| | | if (item == null) { |
| | | return null; |
| | |
| | | return entity; |
| | | } |
| | | |
| | | /** |
| | | * 将设备在线状态转换为模式码 |
| | | * |
| | | * @param status 状态文本 |
| | | * @return 模式码 |
| | | */ |
| | | private Long parseModeCode(String status) { |
| | | if ("在线".equals(status)) { |
| | | return 0L; |
| | |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 安全解析字符串为 Double |
| | | * |
| | | * @param value 字符串值 |
| | | * @return Double 或 null |
| | | */ |
| | | private Double parseDouble(String value) { |
| | | if (StringUtil.isBlank(value)) { |
| | | return null; |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 提取区域编码中的末级编码 |
| | | * |
| | | * @param regionCode 区域编码 |
| | | * @return 末级区域编码 |
| | | */ |
| | | private String extractAreaCode(String regionCode) { |
| | | if (StringUtil.isBlank(regionCode)) { |
| | | return null; |
| | |
| | | return regionCode; |
| | | } |
| | | |
| | | /** |
| | | * 解析保险信息并获取最新保险日期 |
| | | * |
| | | * @param insuranceInfo 保险信息JSON |
| | | * @return 保险日期 |
| | | */ |
| | | private Date parseInsuranceDate(String insuranceInfo) { |
| | | if (StringUtil.isBlank(insuranceInfo)) { |
| | | return null; |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 解析星图接口返回的列表数据 |
| | | * |
| | | * @param response 接口响应 |
| | | * @param clazz 目标类型 |
| | | * @return 列表数据 |
| | | */ |
| | | private <T> List<T> parseList(R response, Class<T> clazz) { |
| | | if (response == null || !response.isSuccess() || response.getData() == null) { |
| | | return Collections.emptyList(); |