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.

276 lines
11 KiB

6 months ago
<?php
namespace App\Http\Controllers\Admin;
use App\Helpers\StarterResponseCode;
use App\Models\Parameter;
use App\Models\ParameterDetail;
use Illuminate\Support\Facades\Validator;
class ParameterController extends CommonController
{
/**
* @OA\Get(
* path="/api/admin/parameter/index",
* tags={"数据参数字典"},
* summary="数据参数字典列表",
* 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="number", in="query", @OA\Schema(type="string"), required=false, description="编号"),
* @OA\Parameter(name="status", in="query", @OA\Schema(type="string"), required=false, description="状态 0禁用 1启用"),
* @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();
$list = Parameter::where(function ($query) use ($all) {
if (isset($all['number'])) {
$query->where('number', 'like', '%' . $all['number'] . '%');
}
if (isset($all['status'])) {
$query->where('status', $all['status']);
}
})->orderBy($all['sort_name'] ?? 'id', $all['sort_type'] ?? 'desc')
->paginate($all['page_size'] ?? 20);
return $this->success($list);
}
/**
* @OA\Post(
* path="/api/admin/parameter/store",
* tags={"数据参数字典"},
* summary="添加数据参数字典",
* description="",
* @OA\Parameter(name="number", in="query", @OA\Schema(type="int"), required=true, description="编号"),
* @OA\Parameter(name="name", in="query", @OA\Schema(type="string"), required=true, description="名字"),
* @OA\Parameter(name="pid", in="query", @OA\Schema(type="string"), required=true, description="父id"),
* @OA\Parameter(name="sort", in="query", @OA\Schema(type="string"), required=true, description="排序"),
* @OA\Parameter(name="status", in="query", @OA\Schema(type="string"), required=true, description="状态 0禁用1启用"),
* @OA\Parameter(name="remark", in="query", @OA\Schema(type="string"), required=true, description="备注"),
* @OA\Parameter(name="detail_list", in="query", @OA\Schema(type="object"), required=false, description="字典明细二维数组。包括key数据源idvalue数据值sort排序status状态0禁用1启用remark备注"),
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Response(
* response="200",
* description="暂无"
* )
* )
*/
public function store()
{
$all = \request()->all();
$messages = [
'number.required' => '编号必填',
'name.required' => '名称必填',
];
$validator = Validator::make($all, [
'number' => 'required',
'name' => 'required'
], $messages);
if ($validator->fails()) {
return $this->fail([StarterResponseCode::START_ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
}
$model = new Parameter();
// number唯一性检测
$check = $model->where('number', $all['number'])->first();
if ($check) {
return $this->fail([StarterResponseCode::START_ERROR_BUSINESS, '编号已存在']);
}
$all['admin_id'] = 0;
$model->fill($all);
$model->save();
// 新增附件表
if (isset($all['detail_list']) && !empty($all['detail_list'])) {
$model->detail()->createMany($all['detail_list']);
}
return $this->success('添加成功');
}
/**
* @OA\Get(
* path="/api/admin/parameter/show",
* tags={"数据参数字典"},
* summary="数据参数字典详情",
* description="",
* @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=false, description="id值或数组"),
* @OA\Parameter(name="number", in="query", @OA\Schema(type="string"), required=false, description="number编号值或数组"),
* @OA\Parameter(name="pid", in="query", @OA\Schema(type="string"), required=false, 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 = [];
if (isset($all['id'])) {
$detail = Parameter::with(['detail' => function ($query) {
$query->orderBy('sort', 'asc');
}]);
if (is_array($all['id'])) {
$detail = $detail->whereIn('id', $all['id'])->get();
} else {
$detail = $detail->where('id', $all['id'])->first();
}
}
if (isset($all['number'])) {
$detail = Parameter::with(['detail' => function ($query) {
$query->orderBy('sort', 'asc');
}]);
if (is_array($all['number'])) {
$detail = $detail->whereIn('number', $all['number'])->get();
} else {
$detail = $detail->where('number', $all['number'])->first();
}
}
if (isset($all['pid'])) {
$detail = Parameter::with(['detail' => function ($query) {
$query->orderBy('sort', 'asc');
}]);
if (is_array($all['pid'])) {
$detail = $detail->whereIn('pid', $all['pid'])->get();
} else {
$detail = $detail->where('pid', $all['pid'])->first();
}
}
return $this->success($detail);
}
/**
* @OA\Post(
* path="/api/admin/parameter/save",
* tags={"数据参数字典"},
* summary="更新数据参数字典",
* description="",
* @OA\Parameter(name="id", in="query", @OA\Schema(type="int"), required=true, description="Id"),
* @OA\Parameter(name="number", in="query", @OA\Schema(type="int"), required=true, description="编号"),
* @OA\Parameter(name="name", in="query", @OA\Schema(type="string"), required=true, description="名字"),
* @OA\Parameter(name="pid", in="query", @OA\Schema(type="string"), required=true, description="父id"),
* @OA\Parameter(name="sort", in="query", @OA\Schema(type="string"), required=true, description="排序"),
* @OA\Parameter(name="status", in="query", @OA\Schema(type="string"), required=true, description="状态 0禁用1启用"),
* @OA\Parameter(name="remark", in="query", @OA\Schema(type="string"), required=true, description="备注"),
* @OA\Parameter(name="detail_list", in="query", @OA\Schema(type="object"), required=false, description="字典明细二维数组。包括id数据原始id有就传没有就传空,value数据值sort排序status状态0禁用1启用remark备注"),
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Response(
* response="200",
* description="暂无"
* )
* )
*/
public function save()
{
$all = \request()->all();
$messages = [
'id.required' => 'Id必填',
'number.required' => '编号必填',
'name.required' => '名称必填',
];
$validator = Validator::make($all, [
'id' => 'required',
'number' => 'required',
'name' => 'required'
], $messages);
if ($validator->fails()) {
return $this->fail([StarterResponseCode::START_ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
}
// number唯一性检测
$check = Parameter::where('number', $all['number'])->where('id', '!=', $all['id'])->first();
if ($check) {
return $this->fail([StarterResponseCode::START_ERROR_BUSINESS, '编号已存在']);
}
$model = Parameter::find($all['id']);
$model->fill($all);
$model->save();
// 更新关联表
if (isset($all['detail_list']) && !empty($all['detail_list'])) {
foreach ($all['detail_list'] as $key => $detail) {
if (isset($detail['id'])) {
// 更新
(ParameterDetail::find($detail['id']))->fill($detail)->save();
} else {
// 新增
$model->detail()->create($detail);
}
}
}
return $this->success('更新成功');
}
/**
* @OA\Get(
* path="/api/admin/parameter/delete",
* 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 delete()
{
$all = \request()->all();
$messages = [
'id.required' => 'Id必填',
];
$validator = Validator::make($all, [
'id' => 'required'
], $messages);
if ($validator->fails()) {
return $this->fail([StarterResponseCode::START_ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
}
Parameter::where('id', $all['id'])->delete();
ParameterDetail::where('parameter_id', $all['id'])->delete();
return $this->success('删除成功');
}
/**
* @OA\Get(
* path="/api/admin/parameter/detail-delete",
* 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 deleteDetail()
{
$all = \request()->all();
$messages = [
'id.required' => 'Id必填',
];
$validator = Validator::make($all, [
'id' => 'required'
], $messages);
if ($validator->fails()) {
return $this->fail([StarterResponseCode::START_ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
}
ParameterDetail::where('id', $all['id'])->delete();
return $this->success('删除成功');
}
}