diff --git a/ruoyi-api/tuoheng-api-device/src/main/java/com/ruoyi/device/api/RemoteAircraftService.java b/ruoyi-api/tuoheng-api-device/src/main/java/com/ruoyi/device/api/RemoteAircraftService.java new file mode 100644 index 0000000..bd2fd87 --- /dev/null +++ b/ruoyi-api/tuoheng-api-device/src/main/java/com/ruoyi/device/api/RemoteAircraftService.java @@ -0,0 +1,29 @@ +package com.ruoyi.device.api; + +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.device.api.domain.AircraftDetailVO; +import com.ruoyi.device.api.factory.RemoteAircraftFallbackFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.*; + +/** + * 无人机服务 + * + * @author ruoyi + * @date 2026-01-20 + */ +@FeignClient(contextId = "remoteAircraftService", value = ServiceNameConstants.DEVICE_SERVICE, fallbackFactory = RemoteAircraftFallbackFactory.class) +public interface RemoteAircraftService +{ + /** + * 查看无人机详情 + * + * @param aircraftId 无人机ID + * @param source 请求来源 + * @return 结果 + */ + @GetMapping("/aircraft/detail/{aircraftId}") + R getAircraftDetail(@PathVariable("aircraftId") Long aircraftId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); +} diff --git a/ruoyi-api/tuoheng-api-device/src/main/java/com/ruoyi/device/api/RemoteDockService.java b/ruoyi-api/tuoheng-api-device/src/main/java/com/ruoyi/device/api/RemoteDockService.java new file mode 100644 index 0000000..78e09fa --- /dev/null +++ b/ruoyi-api/tuoheng-api-device/src/main/java/com/ruoyi/device/api/RemoteDockService.java @@ -0,0 +1,43 @@ +package com.ruoyi.device.api; + +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.device.api.domain.DockVO; +import com.ruoyi.device.api.domain.DockDetailVO; +import com.ruoyi.device.api.factory.RemoteDockFallbackFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 机场服务 + * + * @author ruoyi + * @date 2026-01-20 + */ +@FeignClient(contextId = "remoteDockService", value = ServiceNameConstants.DEVICE_SERVICE, fallbackFactory = RemoteDockFallbackFactory.class) +public interface RemoteDockService +{ + /** + * 搜索机场 + * + * @param dockStatus 机场状态 + * @param dockId 机场ID + * @param source 请求来源 + * @return 结果 + */ + @GetMapping("/dock/search") + R> searchDocks(@RequestParam(required = false) String dockStatus, @RequestParam(required = false) Long dockId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * 查看机场详情 + * + * @param dockId 机场ID + * @param source 请求来源 + * @return 结果 + */ + @GetMapping("/dock/detail/{dockId}") + R getDockDetail(@PathVariable("dockId") Long dockId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); +} diff --git a/ruoyi-api/tuoheng-api-device/src/main/java/com/ruoyi/device/api/RemoteGroupService.java b/ruoyi-api/tuoheng-api-device/src/main/java/com/ruoyi/device/api/RemoteGroupService.java new file mode 100644 index 0000000..c36c56c --- /dev/null +++ b/ruoyi-api/tuoheng-api-device/src/main/java/com/ruoyi/device/api/RemoteGroupService.java @@ -0,0 +1,72 @@ +package com.ruoyi.device.api; + +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.device.api.domain.GroupVO; +import com.ruoyi.device.api.domain.DockVO; +import com.ruoyi.device.api.factory.RemoteGroupFallbackFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 分组服务 + * + * @author ruoyi + * @date 2026-01-20 + */ +@FeignClient(contextId = "remoteGroupService", value = ServiceNameConstants.DEVICE_SERVICE, fallbackFactory = RemoteGroupFallbackFactory.class) +public interface RemoteGroupService +{ + /** + * 创建分组 + * + * @param groupVO 分组信息 + * @param source 请求来源 + * @return 结果 + */ + @PostMapping("/group/create") + R createGroup(@RequestBody GroupVO groupVO, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * 删除分组 + * + * @param groupId 分组ID + * @param source 请求来源 + * @return 结果 + */ + @DeleteMapping("/group/delete/{groupId}") + R deleteGroup(@PathVariable("groupId") Long groupId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * 切换机场所在的分组 + * + * @param dockId 机场ID + * @param groupId 分组ID + * @param source 请求来源 + * @return 结果 + */ + @PutMapping("/group/switch/{dockId}/{groupId}") + R switchDockGroup(@PathVariable("dockId") Long dockId, @PathVariable("groupId") Long groupId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * 查看分组下的机场 + * + * @param groupId 分组ID + * @param source 请求来源 + * @return 结果 + */ + @GetMapping("/group/docks/{groupId}") + R> getDocksByGroupId(@PathVariable("groupId") Long groupId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * 查看所有分组 + * + * @param source 请求来源 + * @return 结果 + */ + @GetMapping("/group/list") + R> getAllGroupIds(@RequestHeader(SecurityConstants.FROM_SOURCE) String source); +} diff --git a/ruoyi-api/tuoheng-api-device/src/main/java/com/ruoyi/device/api/factory/RemoteAircraftFallbackFactory.java b/ruoyi-api/tuoheng-api-device/src/main/java/com/ruoyi/device/api/factory/RemoteAircraftFallbackFactory.java new file mode 100644 index 0000000..48f7243 --- /dev/null +++ b/ruoyi-api/tuoheng-api-device/src/main/java/com/ruoyi/device/api/factory/RemoteAircraftFallbackFactory.java @@ -0,0 +1,35 @@ +package com.ruoyi.device.api.factory; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.device.api.RemoteAircraftService; +import com.ruoyi.device.api.domain.AircraftDetailVO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +/** + * 无人机服务降级处理 + * + * @author ruoyi + * @date 2026-01-20 + */ +@Component +public class RemoteAircraftFallbackFactory implements FallbackFactory +{ + private static final Logger log = LoggerFactory.getLogger(RemoteAircraftFallbackFactory.class); + + @Override + public RemoteAircraftService create(Throwable throwable) + { + log.error("无人机服务调用失败:", throwable.getMessage()); + return new RemoteAircraftService() + { + @Override + public R getAircraftDetail(Long aircraftId, String source) + { + return R.fail("查看无人机详情失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/tuoheng-api-device/src/main/java/com/ruoyi/device/api/factory/RemoteDockFallbackFactory.java b/ruoyi-api/tuoheng-api-device/src/main/java/com/ruoyi/device/api/factory/RemoteDockFallbackFactory.java new file mode 100644 index 0000000..69a5363 --- /dev/null +++ b/ruoyi-api/tuoheng-api-device/src/main/java/com/ruoyi/device/api/factory/RemoteDockFallbackFactory.java @@ -0,0 +1,44 @@ +package com.ruoyi.device.api.factory; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.device.api.RemoteDockService; +import com.ruoyi.device.api.domain.DockVO; +import com.ruoyi.device.api.domain.DockDetailVO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 机场服务降级处理 + * + * @author ruoyi + * @date 2026-01-20 + */ +@Component +public class RemoteDockFallbackFactory implements FallbackFactory +{ + private static final Logger log = LoggerFactory.getLogger(RemoteDockFallbackFactory.class); + + @Override + public RemoteDockService create(Throwable throwable) + { + log.error("机场服务调用失败:", throwable.getMessage()); + return new RemoteDockService() + { + @Override + public R> searchDocks(String dockStatus, Long dockId, String source) + { + return R.fail("搜索机场失败:" + throwable.getMessage()); + } + + @Override + public R getDockDetail(Long dockId, String source) + { + return R.fail("查看机场详情失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/tuoheng-api-device/src/main/java/com/ruoyi/device/api/factory/RemoteGroupFallbackFactory.java b/ruoyi-api/tuoheng-api-device/src/main/java/com/ruoyi/device/api/factory/RemoteGroupFallbackFactory.java new file mode 100644 index 0000000..7081622 --- /dev/null +++ b/ruoyi-api/tuoheng-api-device/src/main/java/com/ruoyi/device/api/factory/RemoteGroupFallbackFactory.java @@ -0,0 +1,62 @@ +package com.ruoyi.device.api.factory; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.device.api.RemoteGroupService; +import com.ruoyi.device.api.domain.GroupVO; +import com.ruoyi.device.api.domain.DockVO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 分组服务降级处理 + * + * @author ruoyi + * @date 2026-01-20 + */ +@Component +public class RemoteGroupFallbackFactory implements FallbackFactory +{ + private static final Logger log = LoggerFactory.getLogger(RemoteGroupFallbackFactory.class); + + @Override + public RemoteGroupService create(Throwable throwable) + { + log.error("分组服务调用失败:", throwable.getMessage()); + return new RemoteGroupService() + { + @Override + public R createGroup(GroupVO groupVO, String source) + { + return R.fail("创建分组失败:" + throwable.getMessage()); + } + + @Override + public R deleteGroup(Long groupId, String source) + { + return R.fail("删除分组失败:" + throwable.getMessage()); + } + + @Override + public R switchDockGroup(Long dockId, Long groupId, String source) + { + return R.fail("切换机场分组失败:" + throwable.getMessage()); + } + + @Override + public R> getDocksByGroupId(Long groupId, String source) + { + return R.fail("查看分组下的机场失败:" + throwable.getMessage()); + } + + @Override + public R> getAllGroupIds(String source) + { + return R.fail("查看所有分组失败:" + throwable.getMessage()); + } + }; + } +}