You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

200 lines
7.5 KiB

11 months ago
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Requests\BlacklistRequest;
use App\Models\Blacklist;
use App\Helpers\ResponseCode;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
11 months ago
use Illuminate\Support\Facades\Validator;
11 months ago
/**
* @OA\Tag(
* name="黑名单管理",
* description="黑名单相关接口"
* )
*/
class BlacklistController extends BaseController
{
public function __construct()
{
parent::__construct(new Blacklist());
}
/**
* @OA\Get(
* path="/api/admin/blacklists/index",
* tags={"黑名单管理"},
* summary="黑名单列表",
* description="获取黑名单列表",
* @OA\Parameter(name="is_export", in="query", @OA\Schema(type="string"), required=false, description="是否导出0否1是"),
* @OA\Parameter(name="export_fields", in="query", @OA\Schema(type="string"), required=false, description="需要导出的字段数组"),
* @OA\Parameter(name="filter", in="query", @OA\Schema(type="string"), required=false, description="查询条件。数组"),
* @OA\Parameter(name="show_relation", in="query", @OA\Schema(type="string"), required=false, description="需要输出的关联关系数组,填写输出指定数据"),
* @OA\Parameter(name="page_size", in="query", @OA\Schema(type="string"), required=false, description="每页显示的条数"),
* @OA\Parameter(name="page", in="query", @OA\Schema(type="string"), required=false, description="页码"),
* @OA\Parameter(name="sort_name", in="query", @OA\Schema(type="string"), required=false, description="排序字段名字"),
* @OA\Parameter(name="sort_type", in="query", @OA\Schema(type="string"), required=false, description="排序类型"),
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Response(
* response="200",
* description="成功获取黑名单列表"
* )
* )
*/
public function index()
{
$all = request()->all();
$filter = $all['filter'] ?? [];
$show_relation = $all['show_relation'] ?? [];
$page_size = $all['page_size'] ?? 10;
$page = $all['page'] ?? 1;
$sort_name = $all['sort_name'] ?? 'id';
$sort_type = $all['sort_type'] ?? 'desc';
$query = $this->model->query();
// 应用过滤条件
if (!empty($filter)) {
$query = $this->applyFilters($query, $filter);
}
// 应用排序
$query->orderBy($sort_name, $sort_type);
// 加载关联关系
if (!empty($show_relation)) {
$query->with($show_relation);
}
// 分页
$result = $query->paginate($page_size, ['*'], 'page', $page);
return $this->success($result);
}
/**
* @OA\Get(
* path="/api/admin/blacklists/show",
* tags={"黑名单管理"},
* summary="黑名单详情",
* description="获取指定的黑名单详情",
* @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=true, description="黑名单ID"),
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Response(
* response="200",
* description="成功获取黑名单详情"
* )
* )
*/
public function show()
{
$all = request()->all();
$detail = $this->model->find($all['id']);
return $this->success($detail);
}
/**
* @OA\Post(
* path="/api/admin/blacklists/save",
* tags={"黑名单管理"},
* summary="新增/更新黑名单",
* description="创建或更新黑名单记录",
* @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=false, description="黑名单ID更新时必填"),
* @OA\Parameter(name="name", in="query", @OA\Schema(type="string"), required=true, description="姓名"),
* @OA\Parameter(name="mobile", in="query", @OA\Schema(type="string"), required=false, description="手机号"),
* @OA\Parameter(name="idcard", in="query", @OA\Schema(type="string"), required=false, description="身份证号"),
* @OA\Parameter(name="reason", in="query", @OA\Schema(type="string"), required=true, description="拉黑原因"),
* @OA\Parameter(name="expire_time", in="query", @OA\Schema(type="string"), required=false, description="过期时间"),
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Response(
* response="200",
* description="成功保存黑名单记录"
* )
* )
*/
public function save()
{
11 months ago
$formRequest = app(BlacklistRequest::class);
11 months ago
DB::beginTransaction();
try {
$all = request()->all();
11 months ago
$validator = Validator::make($all, $formRequest->rules(), $formRequest->messages(), method_exists($formRequest, 'attributes') ? $formRequest->attributes() : []);
if ($validator->fails()) {
return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
}
$data = $validator->validated();
11 months ago
if (isset($all['id'])) {
// 更新
$blacklist = $this->model->find($all['id']);
if (!$blacklist) {
return $this->fail([ResponseCode::ERROR_BUSINESS, __('blacklist.not_found')]);
}
$blacklist->update($data);
$message = __('blacklist.updated_successfully');
} else {
// 新增
$blacklist = $this->model->create($data);
$message = __('blacklist.created_successfully');
}
DB::commit();
return $this->success($blacklist);
} catch (\Exception $exception) {
DB::rollBack();
return $this->fail([$exception->getCode(), $exception->getMessage()]);
}
}
/**
* @OA\Get(
* path="/api/admin/blacklists/destroy",
* tags={"黑名单管理"},
* summary="删除黑名单",
* description="删除指定的黑名单记录",
* @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=true, description="黑名单ID"),
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Response(
* response="200",
* description="成功删除黑名单记录"
* )
* )
*/
public function destroy()
{
$all = request()->all();
$blacklist = $this->model->find($all['id']);
if (!$blacklist) {
return $this->fail([ResponseCode::ERROR_BUSINESS, __('blacklist.not_found')]);
}
DB::beginTransaction();
try {
$blacklist->delete();
DB::commit();
return $this->success(__('blacklist.deleted_successfully'));
} catch (\Exception $exception) {
DB::rollBack();
return $this->fail([$exception->getCode(), $exception->getMessage()]);
}
}
/**
* 应用过滤条件
*/
private function applyFilters($query, $filter)
{
foreach ($filter as $key => $value) {
if (is_array($value)) {
$query->whereIn($key, $value);
} else {
$query->where($key, $value);
}
}
return $query;
}
}