diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteDictService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteDictService.java new file mode 100644 index 0000000..fc2343e --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteDictService.java @@ -0,0 +1,43 @@ +package com.ruoyi.system.api; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestHeader; +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.system.api.domain.SysDictData; +import com.ruoyi.system.api.factory.RemoteDictFallbackFactory; + +import java.util.List; + +/** + * 数据字典服务 + * + * @author ruoyi + */ +@FeignClient(contextId = "remoteDictService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteDictFallbackFactory.class) +public interface RemoteDictService +{ + /** + * 根据字典类型查询字典数据 + * + * @param dictType 字典类型 + * @param source 请求来源 + * @return 结果 + */ + @GetMapping("/dict/data/type/{dictType}") + public R> getDictDataByType(@PathVariable("dictType") String dictType, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * 根据字典类型和值获取字典标签 + * + * @param dictType 字典类型 + * @param dictValue 字典值 + * @param source 请求来源 + * @return 结果 + */ + @GetMapping("/dict/data/label/{dictType}/{dictValue}") + public R getDictLabel(@PathVariable("dictType") String dictType, @PathVariable("dictValue") String dictValue, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteDictFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteDictFallbackFactory.java new file mode 100644 index 0000000..266d5e6 --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteDictFallbackFactory.java @@ -0,0 +1,45 @@ +package com.ruoyi.system.api.factory; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.system.api.RemoteDictService; +import com.ruoyi.system.api.domain.SysDictData; + +import java.util.ArrayList; +import java.util.List; + +/** + * 数据字典服务降级处理 + * + * @author ruoyi + */ +@Component +public class RemoteDictFallbackFactory implements FallbackFactory +{ + private static final Logger log = LoggerFactory.getLogger(RemoteDictFallbackFactory.class); + + @Override + public RemoteDictService create(Throwable throwable) + { + log.error("数据字典服务调用失败: {}", throwable.getMessage()); + return new RemoteDictService() + { + @Override + public R> getDictDataByType(String dictType, String source) + { + log.error("根据字典类型查询字典数据失败: {}", dictType); + return R.fail("根据字典类型查询字典数据失败"); + } + + @Override + public R getDictLabel(String dictType, String dictValue, String source) + { + log.error("根据字典类型和值获取字典标签失败: {} - {}", dictType, dictValue); + return R.fail("根据字典类型和值获取字典标签失败"); + } + }; + } +}