From 74022736e33d9a4e7f74cd1cd23cc0aba1a03dd8 Mon Sep 17 00:00:00 2001 From: weizong song Date: Wed, 7 Apr 2021 21:25:11 +0800 Subject: [PATCH] up --- .../Controllers/Manager/AuthController.php | 71 ++++++++++++ .../Controllers/Manager/OrdersController.php | 103 ++++++++++++++---- app/Models/Notifications.php | 32 ++++++ ...e_paramedic_add_has_health_certificate.php | 31 ++++++ routes/web.php | 6 +- 5 files changed, 222 insertions(+), 21 deletions(-) create mode 100644 database/migrations/2021_04_07_212220_update_paramedic_add_has_health_certificate.php diff --git a/app/Http/Controllers/Manager/AuthController.php b/app/Http/Controllers/Manager/AuthController.php index 0b90551..2c352f1 100644 --- a/app/Http/Controllers/Manager/AuthController.php +++ b/app/Http/Controllers/Manager/AuthController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Manager; use App\Manager; +use App\Models\Notifications; use App\Models\Recharge; use App\Notifications\RechargePaid; use Illuminate\Support\Facades\Auth; @@ -233,4 +234,74 @@ class AuthController extends Controller 'user_info' => $user ]); } + + /** + * @OA\Get( + * path="/manager/get-notifications", + * summary="V2-获取通知列表", + * description="获取通知列表", + * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), + * @OA\Parameter(name="page", in="query", @OA\Schema(type="integer"), required=false, description="当前页码,默认为1"), + * @OA\Parameter(name="page_size", in="query", @OA\Schema(type="integer"), required=false, description="每页数量,默认为10"), + * @OA\Parameter(name="order_by", in="query", @OA\Schema(type="integer"), required=false, description="排序方法[created_at|desc/created_at|asc],默认为created_at|desc"), + * @OA\Parameter(name="status", in="query", @OA\Schema(type="integer"), required=false, description="已读状态[read/unread],默认为空即全部内容,read表示已读,unread表示未读"), + * @OA\Response( + * response="200", + * description="获取通知列表" + * ) + * ) + */ + public function getNotifications() + { + $page_size = request()->page_size ? (int)request()->page_size : 10; + if (in_array(request()->order_by, ["created_at|desc", "created_at|asc"])) { + $order_by = explode("|", request()->order_by); + } else { + $order_by = ["created_at", "desc"]; + } + + $notifications = new Notifications(); + switch (request()->status) { + case "read": + $notifications = $notifications->whereNotNull("read_at"); + break; + case "unread": + $notifications = $notifications->whereNull("read_at"); + break; + } + + $notifications = $notifications->where("notifiable_type", Manager::class) + ->where("notifiable_id", $this->guard()->id()) + ->select("id", "type", "notifiable_type", "notifiable_id", "data", "read_at", "created_at") + ->orderBy($order_by[0], $order_by[1]) + ->paginate($page_size); + return response()->json($notifications->toArray()); + } + + /** + * @OA\Get( + * path="/manager/get-notification/{id}", + * summary="V2-获取通知内容", + * description="获取通知内容", + * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), + * @OA\Response( + * response="200", + * description="获取通知内容" + * ) + * ) + */ + public function getNotification($id) + { + $notification = (new Notifications())->where("id", $id)->select("id", "type", "notifiable_type", "notifiable_id", "data", "read_at", "created_at")->first(); + if (!$notification) { + return response()->json([ + 'errorcode' => '801', + 'errormsg' => "获取通知内容失败" + ]); + } + $notification->update([ + "read_at" => date("Y-m-d H:i:s") + ]); + return response()->json($notification->toArray()); + } } diff --git a/app/Http/Controllers/Manager/OrdersController.php b/app/Http/Controllers/Manager/OrdersController.php index 062e6c7..7191fe3 100644 --- a/app/Http/Controllers/Manager/OrdersController.php +++ b/app/Http/Controllers/Manager/OrdersController.php @@ -18,6 +18,7 @@ use App\Models\ManagerProject; use App\Models\OrderItems; use App\Models\Orders; use App\Models\Paramedic; +use App\Models\ParamedicLevel; use App\Models\Patient; use App\Models\Product; use App\Models\ProductItems; @@ -100,24 +101,25 @@ class OrdersController extends CommonController /** * @OA\Get( - * path="/manager/get-badges", - * summary="V2-获取首页数量角标", - * description="获取首页数量角标", + * path="/manager/get-project-orders-count/{project_id}", + * summary="V2-获取医院订单数量角标", + * description="获取医院订单数量角标", * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), + * @OA\Parameter(name="project_id", in="query", @OA\Schema(type="integer"), required=true, description="医院id"), * @OA\Response( * response="200", - * description="获取首页数量角标" + * description="获取医院订单数量角标" * ) * ) */ - public function getBadges() + public function getProjectOrdersCount($project_id) { $orders_count = []; - $orders_count["unconfirmed"] = 0; - $orders_count["unassigned"] = 0; - $orders_count["ongoing"] = 0; - $orders_count["finished"] = 0; + $orders_count["all"] = (new Orders())->ofProject($project_id)->count(); + $orders_count["pending"] = (new Orders())->ofProject($project_id)->whereIn("status", [Orders::STATUS_UNCONFIRMED, Orders::STATUS_UNASSIGNED])->count(); + $orders_count["ongoing"] = (new Orders())->ofProject($project_id)->where("status", Orders::STATUS_ONGOING)->count(); + $orders_count["finished"] = (new Orders())->ofProject($project_id)->where("status", Orders::STATUS_ONGOING)->count(); return response()->json(compact("orders_count")); } @@ -345,6 +347,7 @@ class OrdersController extends CommonController * description="获取护工", * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), * @OA\Parameter(name="project_id", in="path", @OA\Schema(type="string"), required=true, description="医院id"), + * @OA\Parameter(name="keyword", in="query", @OA\Schema(type="string"), required=true, description=""), * @OA\Parameter(name="page", in="query", @OA\Schema(type="integer"), required=false, description="当前页码,默认为1"), * @OA\Parameter(name="page_size", in="query", @OA\Schema(type="integer"), required=false, description="每页数量,默认为5"), * @OA\Parameter(name="has_ongoing_orders", in="query", @OA\Schema(type="integer"), required=false, description="是否空闲的筛选,枚举[0,1]"), @@ -1664,7 +1667,7 @@ class OrdersController extends CommonController /** * @OA\POST( * path="/manager/cancel-order/{id}", - * summary="取消订单", + * summary="V2-取消订单", * description="取消订单", * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), * @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=true, description="订单id"), @@ -2093,22 +2096,45 @@ class OrdersController extends CommonController return response()->json($approval); } + /** + * @OA\Get( + * path="/manager/get-project-paramedic-levels/{project_id}", + * summary="V2-获取医院护工等级", + * description="获取医院护工等级", + * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), + * @OA\Parameter(name="project_id", in="query", @OA\Schema(type="string"), required=true, description="医院ID"), + * @OA\Response( + * response="200", + * description="获取医院护工等级" + * ) + * ) + */ + + public function getProjectParamedicLevels($project_id) + { + $paramedic_levels = ParamedicLevel::where("project_id", $project_id)->orderBy("myindex")->get(); + return response()->json($paramedic_levels->toArray()); + } + /** * @OA\POST( - * path="/manager/create-paramedic", - * summary="新增护工", + * path="/manager/create-paramedic/{project_id}", + * summary="V2-新增护工", * description="", * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), + * @OA\Parameter(name="project_id", in="path", @OA\Schema(type="integer"), required=true, description="医院/项目ID"), * @OA\Parameter(name="name", in="query", @OA\Schema(type="string"), required=true, description="姓名"), * @OA\Parameter(name="id_card_number", in="query", @OA\Schema(type="string"), required=true, description="身份证号"), * @OA\Parameter(name="mobile", in="query", @OA\Schema(type="string"), required=true, description="手机号码"), * @OA\Parameter(name="join_at", in="query", @OA\Schema(type="string"), required=true, description="入职日期"), - * @OA\Parameter(name="project_id", in="query", @OA\Schema(type="integer"), required=true, description="医院/项目ID"), + * @OA\Parameter(name="work_years", in="query", @OA\Schema(type="string"), required=true, description="护理经验年限"), * @OA\Parameter(name="paramedic_level_id", in="query", @OA\Schema(type="integer"), required=true, description="项目护工级别ID"), * @OA\Parameter(name="bank", in="query", @OA\Schema(type="string"), required=false, description="开户行"), * @OA\Parameter(name="account", in="query", @OA\Schema(type="string"), required=false, description="银行卡号"), - * @OA\Parameter(name="idcard_front", in="query", @OA\Schema(type="integer"), required=true, description="身份证正面图片ID"), - * @OA\Parameter(name="idcard_back", in="query", @OA\Schema(type="integer"), required=true, description="身份证反面图片ID"), + * @OA\Parameter(name="idcard_front", in="query", @OA\Schema(type="integer"), required=false, description="身份证正面图片ID"), + * @OA\Parameter(name="idcard_back", in="query", @OA\Schema(type="integer"), required=false, description="身份证反面图片ID"), + * @OA\Parameter(name="has_health_certificate", in="query", @OA\Schema(type="integer"), required=true, description="是否持有健康证"), + * @OA\Parameter(name="has_work_certificate", in="query", @OA\Schema(type="integer"), required=true, description="是否是有技能资格证"), * @OA\Response( * response="200", * description="新增护工" @@ -2154,12 +2180,46 @@ class OrdersController extends CommonController /** * @OA\POST( * path="/manager/upload-image", - * summary="上传图片", - * description="", + * summary="V2-上传图片", + * description="上传图片", * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), + * @OA\Parameter(name="folder", in="query", @OA\Schema(type="string"), required=true, description="文件存放目录:[public/manager],public表示可以公开查看的,一般用于头像等公开图片,manager是需要鉴权后查看的,一般用于身份证、资格证书等非公开图片"), * @OA\Response( * response="200", - * description="上传图片" + * description="上传图片", + * content={ + * @OA\MediaType( + * mediaType="application/json", + * @OA\Schema( + * @OA\Property( + * property="id", + * type="integer", + * description="文件存储id" + * ), + * @OA\Property( + * property="folder", + * type="string", + * description="文件存储目录" + * ), + * @OA\Property( + * property="name", + * type="string", + * description="文件名" + * ), + * @OA\Property( + * property="public_path", + * type="string", + * description="公开访问路径,如果为null,表示不可公开访问" + * ), + * example={ + * "id": "1", + * "folder": "public", + * "name": "eufgw83ascasc.jpg", + * "public_path": "/storage/eufgw83ascasc.jpg" + * } + * ) + * ) + * } * ) * ) */ @@ -2187,13 +2247,18 @@ class OrdersController extends CommonController $upload = new Uploads(); $upload->original_name = $original_name; - $upload->folder = $request->folder ? $request->folder : ""; + $upload->folder = $save_folder; $upload->name = $name; $upload->extension = $extension; $upload->creator_type = get_class($this->manager); $upload->creator_id = $this->manager->id; $upload->size = Storage::size($save_folder . "/" . $name); $upload->save(); + if ($save_folder == "public") { + $upload->public_path = "/storage/" . $name; + } else { + $upload->public_path = null; + } return response()->json($upload); } catch (\Exception $exception) { diff --git a/app/Models/Notifications.php b/app/Models/Notifications.php index 054f995..caf0393 100644 --- a/app/Models/Notifications.php +++ b/app/Models/Notifications.php @@ -11,6 +11,38 @@ class Notifications extends CommonModel protected $table = "notifications"; protected $tryTimes = 3; protected $scheduleNumber = 10; + protected $appends = ["title", "content"]; + public $incrementing = false; + + public function getTitleAttribute() + { + $data = json_decode($this->data, true); + switch ($this->type) { + case RechargePaid::class: + if (isset($data["recharge_id"])) { + $recharge = Recharge::find($data["recharge_id"]); + $title = $recharge->order ? "订单编号:" . $recharge->order->serial . "有一笔收款到账,请注意查看。" : $recharge->customer->name . "支付了一笔款项,请注意查看。"; + } else { + $title = "有一笔新的收款到账,请注意查看。"; + } + break; + default: + $title = "创建于{$this->created_at}的通知"; + } + return $title; + } + + public function getContentAttribute() + { + switch ($this->type) { + case RechargePaid::class: + $content = $this->getTitleAttribute(); + break; + default: + $content = ""; + } + return $content; + } public function notifiable() { diff --git a/database/migrations/2021_04_07_212220_update_paramedic_add_has_health_certificate.php b/database/migrations/2021_04_07_212220_update_paramedic_add_has_health_certificate.php new file mode 100644 index 0000000..ebeb9c5 --- /dev/null +++ b/database/migrations/2021_04_07_212220_update_paramedic_add_has_health_certificate.php @@ -0,0 +1,31 @@ +tinyInteger("has_health_certificate")->nullable(); + $table->tinyInteger("has_work_certificate")->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/routes/web.php b/routes/web.php index b5a1577..7003f40 100644 --- a/routes/web.php +++ b/routes/web.php @@ -122,18 +122,20 @@ Route::group(["namespace" => "Manager", "prefix" => "manager"], function () { Route::post('login', 'AuthController@login'); Route::post('logout', 'AuthController@logout'); Route::post('refresh', 'AuthController@refresh'); - Route::post('me', 'AuthController@me'); Route::post('login-by-code', 'AuthController@loginByCode'); Route::post('login-by-username', 'AuthController@loginByUsername'); Route::get('get-videos', 'TrainingController@index'); Route::get('get-video/{id}', 'TrainingController@getVideo'); Route::group(['middleware' => ['authorize.jwt:manager']], function () { + Route::post('me', 'AuthController@me'); Route::get('get-projects', 'OrdersController@getProjects'); + Route::get('get-notifications', 'AuthController@getNotifications'); + Route::get('get-notification/{id}', 'AuthController@getNotification'); Route::get('get-care-product/{project_id}', 'OrdersController@getCareProduct'); Route::get('get-paramedics', 'OrdersController@getParamedics'); Route::get('get-paramedic/{id}', 'OrdersController@getParamedic'); - Route::get('get-badges', 'OrdersController@getBadges'); + Route::get('get-project-orders-count/{project_id}', 'OrdersController@getProjectOrdersCount'); Route::get('get-available-paramedics', 'OrdersController@getAvailableParamedics'); Route::get('get-project-paramedics/{project_id}', 'OrdersController@getProjectParamedics'); Route::get('get-project-areas/{project_id}', 'OrdersController@getProjectAreas');