提交factory 和 remote 接口

This commit is contained in:
孙小云 2026-01-20 13:12:04 +08:00
parent 828797ca37
commit fb17f9fb41
6 changed files with 285 additions and 0 deletions

View File

@ -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<AircraftDetailVO> getAircraftDetail(@PathVariable("aircraftId") Long aircraftId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}

View File

@ -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<List<DockVO>> 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<DockDetailVO> getDockDetail(@PathVariable("dockId") Long dockId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}

View File

@ -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<Long> createGroup(@RequestBody GroupVO groupVO, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 删除分组
*
* @param groupId 分组ID
* @param source 请求来源
* @return 结果
*/
@DeleteMapping("/group/delete/{groupId}")
R<Void> 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<Void> 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<List<DockVO>> getDocksByGroupId(@PathVariable("groupId") Long groupId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 查看所有分组
*
* @param source 请求来源
* @return 结果
*/
@GetMapping("/group/list")
R<List<Long>> getAllGroupIds(@RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}

View File

@ -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<RemoteAircraftService>
{
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<AircraftDetailVO> getAircraftDetail(Long aircraftId, String source)
{
return R.fail("查看无人机详情失败:" + throwable.getMessage());
}
};
}
}

View File

@ -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<RemoteDockService>
{
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<List<DockVO>> searchDocks(String dockStatus, Long dockId, String source)
{
return R.fail("搜索机场失败:" + throwable.getMessage());
}
@Override
public R<DockDetailVO> getDockDetail(Long dockId, String source)
{
return R.fail("查看机场详情失败:" + throwable.getMessage());
}
};
}
}

View File

@ -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<RemoteGroupService>
{
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<Long> createGroup(GroupVO groupVO, String source)
{
return R.fail("创建分组失败:" + throwable.getMessage());
}
@Override
public R<Void> deleteGroup(Long groupId, String source)
{
return R.fail("删除分组失败:" + throwable.getMessage());
}
@Override
public R<Void> switchDockGroup(Long dockId, Long groupId, String source)
{
return R.fail("切换机场分组失败:" + throwable.getMessage());
}
@Override
public R<List<DockVO>> getDocksByGroupId(Long groupId, String source)
{
return R.fail("查看分组下的机场失败:" + throwable.getMessage());
}
@Override
public R<List<Long>> getAllGroupIds(String source)
{
return R.fail("查看所有分组失败:" + throwable.getMessage());
}
};
}
}