123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- <?php
- namespace App\Http\Controllers;
- use Illuminate\Http\JsonResponse;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Redis;
- /**
- * @group 通用接口
- */
- class EnumController extends Controller
- {
- /**
- * 获取枚举数据
- *
- * @queryParam enum string required 枚举类名称,例如:UserType,OrderStatus等 Example: UserType
- *
- * @response 200 {
- * "items": [
- * {
- * "label": "普通用户",
- * "value": 1
- * },
- * {
- * "label": "VIP用户",
- * "value": 2
- * }
- * ],
- * "message": "",
- * "code": 0
- * }
- *
- * @response 400 {
- * "items": [],
- * "message": "枚举名称不能为空",
- * "code": 400
- * }
- *
- * @response 404 {
- * "items": [],
- * "message": "枚举类不存在",
- * "code": 404
- * }
- */
- public function getEnumData(Request $request): JsonResponse
- {
- $enumName = $request->input('enum');
- if (empty($enumName)) {
- return response()->json([
- 'items' => [],
- 'message' => '枚举名称不能为空',
- 'code' => 400
- ]);
- }
- try {
- // 构造完整的枚举类名
- $enumClass = "App\\Enums\\{$enumName}";
- // 检查类是否存在
- if (!class_exists($enumClass)) {
- return response()->json([
- 'items' => [],
- 'message' => "枚举类 {$enumName} 不存在",
- 'code' => 404
- ]);
- }
- // 从Redis缓存获取数据
- $cacheKey = "enum:{$enumName}";
- $enumData = Redis::get($cacheKey);
- if (!$enumData) {
- // 缓存不存在,获取枚举数据并转换格式
- $rawData = $enumClass::all();
- $items = [];
- foreach ($rawData as $value => $label) {
- $items[] = [
- 'label' => $label,
- 'value' => $value
- ];
- }
- // 存入Redis缓存,设置过期时间为1天
- Redis::setex($cacheKey, 86400, json_encode($items));
- } else {
- $items = json_decode($enumData, true);
- }
- return response()->json([
- 'items' => $items,
- 'message' => '',
- 'code' => 0
- ]);
- } catch (\Throwable $e) {
- return response()->json([
- 'items' => [],
- 'message' => $e->getMessage(),
- 'code' => 500
- ]);
- }
- }
- }
|