From 64420eb40cd2a846bee0f152d832dc37e63871da Mon Sep 17 00:00:00 2001 From: weizong song Date: Sun, 18 Jun 2023 23:35:16 +0800 Subject: [PATCH 01/73] up --- app/Forms/ManagerForm.php | 4 ++++ app/Http/Controllers/Admin/CommonController.php | 2 +- app/Http/Controllers/Manager/OrdersController.php | 9 ++++++++- app/Manager.php | 2 +- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/app/Forms/ManagerForm.php b/app/Forms/ManagerForm.php index 2abb5e8..08ebeed 100755 --- a/app/Forms/ManagerForm.php +++ b/app/Forms/ManagerForm.php @@ -14,6 +14,10 @@ class ManagerForm extends Form "teacher" => "管理老师", "manager" => "项目经理" ]]); + $this->add("order_status_ability", Field::SELECT, ["label" => "订单恢复权限", "choices" => [ + "0" => "不开放", + "1" => "开放" + ]]); $this->add("project_id", Field::SELECT, ["label" => "管辖项目/医院", "rules" => "required", "attr" => ["multiple" => true, "data-plugin" => "select2"], "choices" => (new Project())->get()->pluck("name", "id")->toArray()]); $this->add("name", Field::TEXT, ["label" => "姓名", "rules" => "required"]); diff --git a/app/Http/Controllers/Admin/CommonController.php b/app/Http/Controllers/Admin/CommonController.php index b1bc340..f75ec71 100644 --- a/app/Http/Controllers/Admin/CommonController.php +++ b/app/Http/Controllers/Admin/CommonController.php @@ -155,7 +155,7 @@ class CommonController extends Controller public function update($id = null, Request $request) { try { - $data = $data = (new CommonModel())->setTable($this->model->getTable())->filterRequestColumns($request, ["id"]); + $data = (new CommonModel())->setTable($this->model->getTable())->filterRequestColumns($request, ["id"]); $model = $this->model->find($id ?: $request->id); $model->update($data); $this->updated($model); diff --git a/app/Http/Controllers/Manager/OrdersController.php b/app/Http/Controllers/Manager/OrdersController.php index 1ad1554..295fbf0 100644 --- a/app/Http/Controllers/Manager/OrdersController.php +++ b/app/Http/Controllers/Manager/OrdersController.php @@ -1713,7 +1713,6 @@ class OrdersController extends CommonController * summary="V2-更新订单状态", * description="更新订单状态", * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), - * @OA\Parameter(name="id", in="query", @OA\Schema(type="integer"), required=true, description="订单ID"), * @OA\Parameter(name="from_status", in="query", @OA\Schema(type="integer"), required=true, description="原状态"), * @OA\Parameter(name="to_status", in="query", @OA\Schema(type="integer"), required=true, description="更新状态"), * @OA\Response( @@ -1726,6 +1725,14 @@ class OrdersController extends CommonController public function changeOrderStatus($id) { try { + $manager = $this->guard()->user(); + if (!$manager->order_status_ability) { + return response()->json([ + "errorcode" => "4003", + "errormsg" => "权限不足" + ]); + } + $order = (new Orders())->find($id); if (request()->to_status == Orders::STATUS_ONGOING) { $other_ongoing_order = Orders::where("status", Orders::STATUS_ONGOING)->where("customer_id", $order->customer_id)->count(); diff --git a/app/Manager.php b/app/Manager.php index a321153..e000fd8 100644 --- a/app/Manager.php +++ b/app/Manager.php @@ -121,7 +121,7 @@ class Manager extends Authenticatable implements JWTSubject * @var array */ protected $fillable = [ - 'type', 'name', 'sex', 'username', 'password', 'openid', 'unionid', 'mobile', 'birthday', 'avatar' + 'type', 'name', 'sex', 'username', 'password', 'openid', 'unionid', 'mobile', 'birthday', 'avatar', 'order_status_ability' ]; /** From e11a6113baeddd5b746043eb02c7981fdbffa165 Mon Sep 17 00:00:00 2001 From: weizong song Date: Sun, 18 Jun 2023 23:54:44 +0800 Subject: [PATCH 02/73] up --- app/Http/Controllers/Manager/OrdersController.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Manager/OrdersController.php b/app/Http/Controllers/Manager/OrdersController.php index 295fbf0..d84fb9e 100644 --- a/app/Http/Controllers/Manager/OrdersController.php +++ b/app/Http/Controllers/Manager/OrdersController.php @@ -763,7 +763,7 @@ class OrdersController extends CommonController * @OA\POST( * path="/manager/update-order-items", * tags={"管理端订单处理"}, - * summary="V2-子订单修改(覆盖单条修改)", + * summary="V2-子订单修改(覆盖单条修改),20230618更新:对早于过上月的价格锁定", * description="子订单修改", * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), * @OA\Parameter(name="ids", in="query", @OA\Schema(type="integer"), required=true, description="子订单id,可传单个id或数组"), @@ -839,6 +839,12 @@ class OrdersController extends CommonController $warnings[] = "将对" . $price_changed_paid_items->count() . "天已付款的子订单进行价格更改"; } + foreach ($price_changed_paid_items as $price_changed_paid_item) { + if (date("Ym", strtotime($price_changed_paid_item->service_date)) < date("Ym", strtotime("-1 month", time()))) { + $errors[] = "子订单{$price_changed_paid_item->id}超期价格锁定"; + } + } + if ($total_increased > $customer->balance) { $errors[] = "价格补差{$total_increased}超过了客户余额{$customer->balance},请先充值"; } @@ -1710,7 +1716,7 @@ class OrdersController extends CommonController * @OA\Post( * path="/manager/change-order-status/{id}", * tags={"管理端订单处理"}, - * summary="V2-更新订单状态", + * summary="V2-更新订单状态,20230618更新:鉴定是否权限是否开启", * description="更新订单状态", * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), * @OA\Parameter(name="from_status", in="query", @OA\Schema(type="integer"), required=true, description="原状态"), From 4065958021906ac10f74f0c19fedc4dc22a2aa80 Mon Sep 17 00:00:00 2001 From: weizong song Date: Wed, 21 Jun 2023 11:54:04 +0800 Subject: [PATCH 03/73] up --- app/Http/Controllers/Manager/OrdersController.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/Http/Controllers/Manager/OrdersController.php b/app/Http/Controllers/Manager/OrdersController.php index d84fb9e..628f799 100644 --- a/app/Http/Controllers/Manager/OrdersController.php +++ b/app/Http/Controllers/Manager/OrdersController.php @@ -152,6 +152,8 @@ class OrdersController extends CommonController ->where("serial", "like", "%{$keyword}%") ->orWhereHas("patient", function ($query) use ($keyword) { $query->where("name", "like", "%{$keyword}%"); + })->orWhereHas("customer", function ($query) use ($keyword) { + $query->where("mobile", "like", "%{$keyword}%"); })->orWhereHas("paramedic", function ($query) use ($keyword) { $query->where("name", "like", "%{$keyword}%"); }); From dea10552fc99f98862f675e5355f2d22c25dc390 Mon Sep 17 00:00:00 2001 From: weizong song Date: Wed, 21 Jun 2023 12:47:09 +0800 Subject: [PATCH 04/73] up --- app/Http/Controllers/Manager/OrdersController.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/Http/Controllers/Manager/OrdersController.php b/app/Http/Controllers/Manager/OrdersController.php index 628f799..24737f7 100644 --- a/app/Http/Controllers/Manager/OrdersController.php +++ b/app/Http/Controllers/Manager/OrdersController.php @@ -1669,6 +1669,13 @@ class OrdersController extends CommonController //更新用户余额,创建流水记录 $customer_balance = $refund->customer->balance - $refund->money; + if ($customer_balance < 0) { + return response()->json([ + "errorcode" => "0", + "errormsg" => "客户余额为负异常,存在重复退款操作。" + ]); + } + $refund->customer->update([ "balance" => $customer_balance ]); From 41743cb269edffca2a466a0819a47dcd2886cf55 Mon Sep 17 00:00:00 2001 From: weizong song Date: Sun, 25 Jun 2023 12:08:04 +0800 Subject: [PATCH 05/73] up --- app/Events/AdminSaved.php | 36 +++++++++++++++++++ app/Forms/AdminForm.php | 2 ++ .../Controllers/Admin/AdminController.php | 10 ++++++ .../Controllers/Manager/OrdersController.php | 12 ++++++- app/Listeners/AdminSavedListener.php | 31 ++++++++++++++++ app/Providers/EventServiceProvider.php | 1 + ...2023_06_21_173325_create_admin_project.php | 33 +++++++++++++++++ 7 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 app/Events/AdminSaved.php create mode 100644 app/Listeners/AdminSavedListener.php create mode 100644 database/migrations/2023_06_21_173325_create_admin_project.php diff --git a/app/Events/AdminSaved.php b/app/Events/AdminSaved.php new file mode 100644 index 0000000..0e71486 --- /dev/null +++ b/app/Events/AdminSaved.php @@ -0,0 +1,36 @@ +add("name", Field::TEXT, ["label" => "姓名", "rules" => "required"]); $this->add("username", Field::TEXT, ["label" => "用户名", "rules" => "required", "attr" => ["autocomplete" => "off"]]); $this->add("password", Field::PASSWORD, ["label" => "密码", "rules" => "min:6", "value" => "", "attr" => ["autocomplete" => "off"]]); + $this->add("project_id", Field::SELECT, ["label" => "管辖项目/医院", "rules" => "required", "attr" => ["multiple" => true, "data-plugin" => "select2"], "choices" => (new Project())->get()->pluck("name", "id")->toArray()]); $this->add('buttons', 'buttongroup', ["splitted" => true, "buttons" => [ ["label" => "保存", "attr" => ["class" => "btn btn-primary mr-1", "type" => "submit"]], ["label" => "返回", "attr" => ["class" => "btn btn-light btn-back", "type" => "button"]] diff --git a/app/Http/Controllers/Admin/AdminController.php b/app/Http/Controllers/Admin/AdminController.php index 4a612dc..638a7ac 100644 --- a/app/Http/Controllers/Admin/AdminController.php +++ b/app/Http/Controllers/Admin/AdminController.php @@ -47,4 +47,14 @@ class AdminController extends CommonController return $this->ajaxError("授权失败:" . $exception->getMessage()); } } + + public function stored($model) + { + event(new ManagerSaved($model)); + } + + public function updated($model) + { + event(new ManagerSaved($model)); + } } diff --git a/app/Http/Controllers/Manager/OrdersController.php b/app/Http/Controllers/Manager/OrdersController.php index 24737f7..cf2007d 100644 --- a/app/Http/Controllers/Manager/OrdersController.php +++ b/app/Http/Controllers/Manager/OrdersController.php @@ -160,6 +160,16 @@ class OrdersController extends CommonController }); } + if (request()->area_id) { + $model = $model->whereHas("bed", function ($query) { + $query->where("area_id", request()->area_id); + }); + } elseif (request()->building_id) { + $model = $model->whereHas("bed", function ($query) { + $query->where("building_id", request()->building_id); + }); + } + switch (request()->status) { case "pending": $model = $model->whereIn("status", [Orders::STATUS_UNCONFIRMED, Orders::STATUS_UNASSIGNED]); @@ -386,7 +396,7 @@ class OrdersController extends CommonController $query->select("id", "name"); }, "bed" => function ($query) { - $query->select("bed.id", "bed.name") + $query->select("bed.id", "bed.name", "bed.building_id", "bed.area_id") ->leftJoin("building", "building.id", "=", "bed.building_id") ->leftJoin("area", "area.id", "=", "bed.area_id") ->leftJoin("room", "room.id", "=", "bed.room_id") diff --git a/app/Listeners/AdminSavedListener.php b/app/Listeners/AdminSavedListener.php new file mode 100644 index 0000000..43801b5 --- /dev/null +++ b/app/Listeners/AdminSavedListener.php @@ -0,0 +1,31 @@ + ["App\Listeners\FactorSavedListener"], "App\Events\ManagerSaved" => ["App\Listeners\ManagerSavedListener"], + "App\Events\AdminSaved" => ["App\Listeners\AdminSavedListener"], "App\Events\ProjectSaved" => ["App\Listeners\ProjectSavedListener"], "App\Events\ProductSaved" => ["App\Listeners\ProductSavedListener"], "App\Events\RechargeSucceed" => ["App\Listeners\RechargeSucceedListener"], diff --git a/database/migrations/2023_06_21_173325_create_admin_project.php b/database/migrations/2023_06_21_173325_create_admin_project.php new file mode 100644 index 0000000..e377744 --- /dev/null +++ b/database/migrations/2023_06_21_173325_create_admin_project.php @@ -0,0 +1,33 @@ +id(); + $table->integer("admin_id")->nullable(); + $table->integer("project_id")->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('admin_project'); + } +} From c3ceba4d13744f6398b5513ef983431944a20184 Mon Sep 17 00:00:00 2001 From: weizong song Date: Sun, 25 Jun 2023 12:08:37 +0800 Subject: [PATCH 06/73] up --- ...2023_06_21_173325_create_admin_project.php | 33 ------------------- 1 file changed, 33 deletions(-) delete mode 100644 database/migrations/2023_06_21_173325_create_admin_project.php diff --git a/database/migrations/2023_06_21_173325_create_admin_project.php b/database/migrations/2023_06_21_173325_create_admin_project.php deleted file mode 100644 index e377744..0000000 --- a/database/migrations/2023_06_21_173325_create_admin_project.php +++ /dev/null @@ -1,33 +0,0 @@ -id(); - $table->integer("admin_id")->nullable(); - $table->integer("project_id")->nullable(); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('admin_project'); - } -} From effa6c1828df31e2ad72cf9afb30fdf2a7ab7258 Mon Sep 17 00:00:00 2001 From: weizong song Date: Sun, 25 Jun 2023 13:46:59 +0800 Subject: [PATCH 07/73] up --- app/Http/Controllers/Manager/OrdersController.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/Http/Controllers/Manager/OrdersController.php b/app/Http/Controllers/Manager/OrdersController.php index cf2007d..5f6c645 100644 --- a/app/Http/Controllers/Manager/OrdersController.php +++ b/app/Http/Controllers/Manager/OrdersController.php @@ -131,6 +131,9 @@ class OrdersController extends CommonController * @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=false, description="医院ID"), * @OA\Parameter(name="keyword", in="query", @OA\Schema(type="string"), required=false, description="查询关键词"), + * @OA\Parameter(name="building_id", in="query", @OA\Schema(type="integer"), required=false, description="楼栋ID"), + * @OA\Parameter(name="area_id", in="query", @OA\Schema(type="integer"), required=false, description="病区ID"), + * @OA\Parameter(name="days", in="query", @OA\Schema(type="integer"), required=false, description="服务天数,以实际生成的to_date和from_date比对为准,改价为0的也算"), * @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="status", in="query", @OA\Schema(type="string"), required=false, description="订单状态:[pending=>待处理,ongoing=>进行中,finished=>已完成]"), @@ -170,6 +173,10 @@ class OrdersController extends CommonController }); } + if (request()->days) { + $model = $model->whereRaw(DB::raw("datediff(`to_date`,`from_date`) = ". (request()->days - 1))); + } + switch (request()->status) { case "pending": $model = $model->whereIn("status", [Orders::STATUS_UNCONFIRMED, Orders::STATUS_UNASSIGNED]); From 04452d052f738eece031f71d50c812ffa7d8c912 Mon Sep 17 00:00:00 2001 From: weizong song Date: Sun, 25 Jun 2023 14:26:16 +0800 Subject: [PATCH 08/73] up --- app/Http/Controllers/Manager/OrdersController.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Manager/OrdersController.php b/app/Http/Controllers/Manager/OrdersController.php index 5f6c645..d987eda 100644 --- a/app/Http/Controllers/Manager/OrdersController.php +++ b/app/Http/Controllers/Manager/OrdersController.php @@ -133,6 +133,8 @@ class OrdersController extends CommonController * @OA\Parameter(name="keyword", in="query", @OA\Schema(type="string"), required=false, description="查询关键词"), * @OA\Parameter(name="building_id", in="query", @OA\Schema(type="integer"), required=false, description="楼栋ID"), * @OA\Parameter(name="area_id", in="query", @OA\Schema(type="integer"), required=false, description="病区ID"), + * @OA\Parameter(name="start_date_from", in="query", @OA\Schema(type="string"), required=false, description="开始服务日期区间查询的第一个值"), + * @OA\Parameter(name="start_date_to", in="query", @OA\Schema(type="string"), required=false, description="开始服务日期区间查询的第二个值"), * @OA\Parameter(name="days", in="query", @OA\Schema(type="integer"), required=false, description="服务天数,以实际生成的to_date和from_date比对为准,改价为0的也算"), * @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"), @@ -174,7 +176,11 @@ class OrdersController extends CommonController } if (request()->days) { - $model = $model->whereRaw(DB::raw("datediff(`to_date`,`from_date`) = ". (request()->days - 1))); + $model = $model->whereRaw(DB::raw("datediff(`to_date`,`from_date`) = " . (request()->days - 1))); + } + + if (request()->start_date_from && request()->start_date_to) { + $model = $model->whereRaw(DB::raw("UNIX_TIMESTAMP(`from_date`) between " . strtotime(request()->start_date_from) . " and " . strtotime(request()->start_date_to))); } switch (request()->status) { From 6bedea3a97f01a77a507e8a08d6ce1a289593462 Mon Sep 17 00:00:00 2001 From: weizong song Date: Wed, 28 Jun 2023 16:58:22 +0800 Subject: [PATCH 09/73] up --- app/Http/Controllers/Manager/StatisticsController.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Manager/StatisticsController.php b/app/Http/Controllers/Manager/StatisticsController.php index e9ea1f8..b2cc581 100644 --- a/app/Http/Controllers/Manager/StatisticsController.php +++ b/app/Http/Controllers/Manager/StatisticsController.php @@ -249,6 +249,12 @@ class StatisticsController extends CommonController $checkout = $model_checkout->sum("total"); $refund = $model_refund->sum("money"); + $refund_by_methods = []; + $refund_methods = (new Refund())->groupBy("payment")->get()->keyBy("payment")->toArray(); + foreach ($refund_methods as $k => $refund_method) { + $refund_by_methods[$k] = $model_refund->where("payment", $k)->sum("money"); + } + $payment_methods = (new Recharge())->payment_methods; $payment_online_methods = (new Recharge())->payment_online_methods; @@ -267,7 +273,7 @@ class StatisticsController extends CommonController $recharge[$k] = $val; } - return response()->json(compact("checkout", "refund", "recharge", "payment_methods")); + return response()->json(compact("checkout", "refund", "recharge", "payment_methods", "refund_by_methods")); } public function _getDuration() From 5a3818a5fb8b4f0bbd25e522d1913958c16cd171 Mon Sep 17 00:00:00 2001 From: weizong song Date: Thu, 29 Jun 2023 09:13:38 +0800 Subject: [PATCH 10/73] up --- app/Http/Controllers/Manager/StatisticsController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Manager/StatisticsController.php b/app/Http/Controllers/Manager/StatisticsController.php index b2cc581..a927136 100644 --- a/app/Http/Controllers/Manager/StatisticsController.php +++ b/app/Http/Controllers/Manager/StatisticsController.php @@ -252,7 +252,7 @@ class StatisticsController extends CommonController $refund_by_methods = []; $refund_methods = (new Refund())->groupBy("payment")->get()->keyBy("payment")->toArray(); foreach ($refund_methods as $k => $refund_method) { - $refund_by_methods[$k] = $model_refund->where("payment", $k)->sum("money"); + $refund_by_methods[$k] = $model_refund->clone()->where("payment", $k)->sum("money"); } $payment_methods = (new Recharge())->payment_methods; From ad4c295df9d6cc46b1714f771400038052b06e12 Mon Sep 17 00:00:00 2001 From: weizong song Date: Thu, 29 Jun 2023 09:14:54 +0800 Subject: [PATCH 11/73] up --- app/Http/Controllers/Manager/StatisticsController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Manager/StatisticsController.php b/app/Http/Controllers/Manager/StatisticsController.php index a927136..b2cc581 100644 --- a/app/Http/Controllers/Manager/StatisticsController.php +++ b/app/Http/Controllers/Manager/StatisticsController.php @@ -252,7 +252,7 @@ class StatisticsController extends CommonController $refund_by_methods = []; $refund_methods = (new Refund())->groupBy("payment")->get()->keyBy("payment")->toArray(); foreach ($refund_methods as $k => $refund_method) { - $refund_by_methods[$k] = $model_refund->clone()->where("payment", $k)->sum("money"); + $refund_by_methods[$k] = $model_refund->where("payment", $k)->sum("money"); } $payment_methods = (new Recharge())->payment_methods; From 0eeb207103ffd3146b2943aca317c30338f9a4ae Mon Sep 17 00:00:00 2001 From: weizong song Date: Thu, 29 Jun 2023 09:19:00 +0800 Subject: [PATCH 12/73] up --- app/Http/Controllers/Manager/StatisticsController.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Manager/StatisticsController.php b/app/Http/Controllers/Manager/StatisticsController.php index b2cc581..e44be07 100644 --- a/app/Http/Controllers/Manager/StatisticsController.php +++ b/app/Http/Controllers/Manager/StatisticsController.php @@ -249,7 +249,9 @@ class StatisticsController extends CommonController $checkout = $model_checkout->sum("total"); $refund = $model_refund->sum("money"); - $refund_by_methods = []; + + $refund_by_payment = $model_refund->select("payment", "paid_at", "money", "order_id")->addSelect(DB::raw("sum(`money`) as total"))->groupBy("payment")->get()->keyBy("payment")->toArray(); + dd($refund_by_payment); $refund_methods = (new Refund())->groupBy("payment")->get()->keyBy("payment")->toArray(); foreach ($refund_methods as $k => $refund_method) { $refund_by_methods[$k] = $model_refund->where("payment", $k)->sum("money"); From 603c69410ea8cb60de0082be1e4f932a8046755d Mon Sep 17 00:00:00 2001 From: weizong song Date: Thu, 29 Jun 2023 09:19:53 +0800 Subject: [PATCH 13/73] up --- app/Http/Controllers/Manager/StatisticsController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Manager/StatisticsController.php b/app/Http/Controllers/Manager/StatisticsController.php index e44be07..05d6d5f 100644 --- a/app/Http/Controllers/Manager/StatisticsController.php +++ b/app/Http/Controllers/Manager/StatisticsController.php @@ -251,7 +251,7 @@ class StatisticsController extends CommonController $refund = $model_refund->sum("money"); $refund_by_payment = $model_refund->select("payment", "paid_at", "money", "order_id")->addSelect(DB::raw("sum(`money`) as total"))->groupBy("payment")->get()->keyBy("payment")->toArray(); - dd($refund_by_payment); + // dd($refund_by_payment); $refund_methods = (new Refund())->groupBy("payment")->get()->keyBy("payment")->toArray(); foreach ($refund_methods as $k => $refund_method) { $refund_by_methods[$k] = $model_refund->where("payment", $k)->sum("money"); From 39963d0edb65bab1106611600de150e5a54ec04c Mon Sep 17 00:00:00 2001 From: weizong song Date: Thu, 29 Jun 2023 09:21:30 +0800 Subject: [PATCH 14/73] up --- app/Http/Controllers/Manager/StatisticsController.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Manager/StatisticsController.php b/app/Http/Controllers/Manager/StatisticsController.php index 05d6d5f..bd9666b 100644 --- a/app/Http/Controllers/Manager/StatisticsController.php +++ b/app/Http/Controllers/Manager/StatisticsController.php @@ -251,10 +251,13 @@ class StatisticsController extends CommonController $refund = $model_refund->sum("money"); $refund_by_payment = $model_refund->select("payment", "paid_at", "money", "order_id")->addSelect(DB::raw("sum(`money`) as total"))->groupBy("payment")->get()->keyBy("payment")->toArray(); - // dd($refund_by_payment); $refund_methods = (new Refund())->groupBy("payment")->get()->keyBy("payment")->toArray(); foreach ($refund_methods as $k => $refund_method) { - $refund_by_methods[$k] = $model_refund->where("payment", $k)->sum("money"); + if (isset($refund_by_payment[$k])) { + $refund_by_methods[$k] = $refund_by_payment[$k]["total"]; + } else { + $refund_by_methods[$k] = 0; + } } $payment_methods = (new Recharge())->payment_methods; From da62a274793032d7bf41bae44e366f4eea816605 Mon Sep 17 00:00:00 2001 From: weizong song Date: Fri, 30 Jun 2023 09:47:21 +0800 Subject: [PATCH 15/73] up --- app/Models/OrderItems.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Models/OrderItems.php b/app/Models/OrderItems.php index 378f2d3..fc2b596 100755 --- a/app/Models/OrderItems.php +++ b/app/Models/OrderItems.php @@ -20,7 +20,7 @@ class OrderItems extends SoftDeletesModel return "未服务"; } if ($this->paid_at) { - return "已扣款"; + return "已扣款,下月结工资"; } else { return "未扣款"; } From 4ea9064fee0baf8eddd33cafebe8cc70ed433737 Mon Sep 17 00:00:00 2001 From: weizong song Date: Fri, 30 Jun 2023 09:55:52 +0800 Subject: [PATCH 16/73] up --- app/Models/OrderItems.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/Models/OrderItems.php b/app/Models/OrderItems.php index fc2b596..1ecfbd5 100755 --- a/app/Models/OrderItems.php +++ b/app/Models/OrderItems.php @@ -20,7 +20,8 @@ class OrderItems extends SoftDeletesModel return "未服务"; } if ($this->paid_at) { - return "已扣款,下月结工资"; + $next_month = date("m", strtotime("+1 month", strtotime($this->paid_at))); + return "已扣款,{$next_month}月结工资"; } else { return "未扣款"; } From 64ec6077d75be96a41ef9c4944d0832f76588019 Mon Sep 17 00:00:00 2001 From: weizong song Date: Fri, 30 Jun 2023 10:31:46 +0800 Subject: [PATCH 17/73] up --- .../Controllers/Manager/OrdersController.php | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/app/Http/Controllers/Manager/OrdersController.php b/app/Http/Controllers/Manager/OrdersController.php index d987eda..7a8a79f 100644 --- a/app/Http/Controllers/Manager/OrdersController.php +++ b/app/Http/Controllers/Manager/OrdersController.php @@ -30,6 +30,7 @@ use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use Intervention\Image\Facades\Image; use SimpleSoftwareIO\QrCode\Facades\QrCode; +use function GuzzleHttp\Psr7\str; class OrdersController extends CommonController { @@ -1019,6 +1020,20 @@ class OrdersController extends CommonController } $to_generate_days = max(0, $to_generate_days); + for ($i = 0; $i < $to_generate_days; $i++) { + if ($i > 0) { + $service_date = Carbon::parse($to_generate_start_date)->addDays($i)->toDateString(); + } else { + $service_date = $to_generate_start_date; + } + if (strtotime($service_date) >= strtotime("+1 month", strtotime(date("Y-m") . "-01"))) { + return response()->json([ + "errorcode" => 30003, + "errormsg" => "中途结算最大时限不能超过当月月底" + ]); + } + } + $prepay_total = $unpaid_order_items->sum("total") + $to_generate_days * $order->price; $to_recharge_total = $prepay_total - $order->customer->balance; @@ -1076,6 +1091,13 @@ class OrdersController extends CommonController } else { $service_date = $to_generate_start_date; } + if (strtotime($service_date) >= strtotime("+1 month", strtotime(date("Y-m") . "-01"))) { + return response()->json([ + "errorcode" => 30003, + "errormsg" => "中途结算最大时限不能超过当月月底,已收的多余款项将于下月使用" + ]); + } + $order_item = (new OrderItems())->createItem($order->id, $service_date); //更新子订单支付状态 From 29980893a704a911dd0170834f64a70f2b7f90dc Mon Sep 17 00:00:00 2001 From: weizong song Date: Fri, 30 Jun 2023 19:13:17 +0800 Subject: [PATCH 18/73] up --- app/Http/Controllers/Customer/PublicController.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Customer/PublicController.php b/app/Http/Controllers/Customer/PublicController.php index 3781cfe..a79bafc 100644 --- a/app/Http/Controllers/Customer/PublicController.php +++ b/app/Http/Controllers/Customer/PublicController.php @@ -22,10 +22,11 @@ class PublicController extends Controller * ) * ) */ - public function getOrdersCount() { + public function getOrdersCount() + { $orders_count = Orders::count(); $order_items_count = OrderItems::whereHas("order")->count(); - return response()->json(compact("orders_count","order_items_count")); + return response()->json(compact("orders_count", "order_items_count")); } /** @@ -43,7 +44,7 @@ class PublicController extends Controller public function getProjects() { - $projects = Project::select("id", "name", "address","logo","banners")->get(); + $projects = Project::select("id", "name", "address", "logo", "banners")->orderBy("id", "desc")->get(); return response()->json($projects->toArray()); } From 24efb7d4ecaef10c69b99d70b60e2282013c2ceb Mon Sep 17 00:00:00 2001 From: weizong song Date: Mon, 3 Jul 2023 18:02:50 +0800 Subject: [PATCH 19/73] up --- app/Libs/AlipayF2F.class.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/Libs/AlipayF2F.class.php b/app/Libs/AlipayF2F.class.php index 026d67d..4e499a5 100644 --- a/app/Libs/AlipayF2F.class.php +++ b/app/Libs/AlipayF2F.class.php @@ -35,6 +35,13 @@ class AlipayF2F return [ "status" => true ]; + } elseif ($result->code == "10003") { + Log::info("支付宝状态:" . $result->code . ";" . $result->msg . ";" . $result->subMsg); + return [ + "status" => false, + "code" => $result->code, + "msg" => "正在支付中,请稍后查询支付到账状态" + ]; } else { Log::info("支付宝错误:" . $result->code . ";" . $result->msg . ";" . $result->subMsg); return [ @@ -62,7 +69,7 @@ class AlipayF2F $responseChecker = new ResponseChecker(); //处理响应或异常 if ($responseChecker->success($query_result)) { - if($query_result->tradeStatus !== "TRADE_SUCCESS") { + if ($query_result->tradeStatus !== "TRADE_SUCCESS") { return false; } if (!$recharge->paid_at) { From 7d4dfe9f6d109f24ef5a02809f2d09f81e8d7e6e Mon Sep 17 00:00:00 2001 From: weizong song Date: Wed, 5 Jul 2023 15:25:45 +0800 Subject: [PATCH 20/73] up --- app/Http/Controllers/Manager/OrdersController.php | 1 + app/Libs/WxMicroPay.class.php | 3 +++ 2 files changed, 4 insertions(+) diff --git a/app/Http/Controllers/Manager/OrdersController.php b/app/Http/Controllers/Manager/OrdersController.php index 7a8a79f..fb18f35 100644 --- a/app/Http/Controllers/Manager/OrdersController.php +++ b/app/Http/Controllers/Manager/OrdersController.php @@ -50,6 +50,7 @@ class OrdersController extends CommonController public function getProjects() { + \Log::info("支付码不正确"); $projects = (new Project()) ->join("manager_project", 'project.id', '=', 'manager_project.project_id') ->join('managers', 'managers.id', '=', 'manager_project.manager_id') diff --git a/app/Libs/WxMicroPay.class.php b/app/Libs/WxMicroPay.class.php index 073726f..3c8960f 100644 --- a/app/Libs/WxMicroPay.class.php +++ b/app/Libs/WxMicroPay.class.php @@ -34,6 +34,9 @@ class WxMicroPay extends WxPayCommon } elseif (!$this->parameters["auth_code"]) { throw new Exception("缺少必填参数auth_code!"); } elseif (strlen((string)$this->parameters["auth_code"]) != 18) { + \Log::info("支付码不正确"); + \Log::info($this->parameters); + \Log::info(request()->all()); throw new Exception("支付码不正确!"); } From 42a86d74954c2babeed70766044739e63a1b9b5f Mon Sep 17 00:00:00 2001 From: weizong song Date: Wed, 5 Jul 2023 16:16:08 +0800 Subject: [PATCH 21/73] up --- resources/views/admin/statistics/overview.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/admin/statistics/overview.blade.php b/resources/views/admin/statistics/overview.blade.php index f721526..cd2c126 100755 --- a/resources/views/admin/statistics/overview.blade.php +++ b/resources/views/admin/statistics/overview.blade.php @@ -31,7 +31,7 @@ 项目 所属周期 上月未结算余额 - 本月预收 + 本月收款 本月退款 本月结算 本月未结算余额 From e150bb91924889635042b1ab15a0cbe05af8f4d8 Mon Sep 17 00:00:00 2001 From: weizong song Date: Wed, 5 Jul 2023 16:23:01 +0800 Subject: [PATCH 22/73] up --- resources/views/admin/statistics/overview.blade.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/resources/views/admin/statistics/overview.blade.php b/resources/views/admin/statistics/overview.blade.php index cd2c126..44028b0 100755 --- a/resources/views/admin/statistics/overview.blade.php +++ b/resources/views/admin/statistics/overview.blade.php @@ -47,6 +47,9 @@ {{ $this_month_balances->filter(function($item) { return $item->belongs_type == "App\Models\OrderItems"; })->sum("money") }} {{ $this_month_balance }} + + (上月未结算余额 + 本月收款) - (本月退款[正数] + 本月结算[正数]) = 本月未结算余额
本月结算是核心数字,是真正归属于公司的钱 + From 38830e70415d99fe1f0d9f8f2b2c06def97926bb Mon Sep 17 00:00:00 2001 From: weizong song Date: Wed, 5 Jul 2023 16:30:13 +0800 Subject: [PATCH 23/73] up --- resources/views/admin/statistics/overview.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/admin/statistics/overview.blade.php b/resources/views/admin/statistics/overview.blade.php index 44028b0..93d5742 100755 --- a/resources/views/admin/statistics/overview.blade.php +++ b/resources/views/admin/statistics/overview.blade.php @@ -48,7 +48,7 @@ {{ $this_month_balance }} - (上月未结算余额 + 本月收款) - (本月退款[正数] + 本月结算[正数]) = 本月未结算余额
本月结算是核心数字,是真正归属于公司的钱 + 上月未结算余额 + 本月收款 - 本月退款[正数] - 本月结算[正数] = 本月未结算余额
本月结算是核心数字,是真正归属于公司的钱 From 5ee21e9ae2eef2d9df3fde364cdc261db599fd69 Mon Sep 17 00:00:00 2001 From: weizong song Date: Wed, 5 Jul 2023 16:41:56 +0800 Subject: [PATCH 24/73] up --- resources/views/admin/statistics/overview.blade.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/resources/views/admin/statistics/overview.blade.php b/resources/views/admin/statistics/overview.blade.php index 93d5742..cd2c126 100755 --- a/resources/views/admin/statistics/overview.blade.php +++ b/resources/views/admin/statistics/overview.blade.php @@ -47,9 +47,6 @@ {{ $this_month_balances->filter(function($item) { return $item->belongs_type == "App\Models\OrderItems"; })->sum("money") }} {{ $this_month_balance }} - - 上月未结算余额 + 本月收款 - 本月退款[正数] - 本月结算[正数] = 本月未结算余额
本月结算是核心数字,是真正归属于公司的钱 - From 5633aa3631226b443bdbf0e79759244ca3fecbd6 Mon Sep 17 00:00:00 2001 From: weizong song Date: Wed, 5 Jul 2023 19:27:39 +0800 Subject: [PATCH 25/73] up --- app/Customer.php | 5 ++++ .../Admin/StatisticsController.php | 3 +- .../statistics/customer-balance.blade.php | 28 ++++++------------- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/app/Customer.php b/app/Customer.php index 981f758..bf54bd1 100644 --- a/app/Customer.php +++ b/app/Customer.php @@ -120,6 +120,11 @@ class Customer extends Authenticatable implements JWTSubject return $this->hasMany(Balance::class, "customer_id"); } + public function oneBalance() + { + return $this->hasOne(Balance::class, "customer_id"); + } + public function recharges() { return $this->hasMany(Recharge::class, "customer_id")->whereNotNull("paid_at"); diff --git a/app/Http/Controllers/Admin/StatisticsController.php b/app/Http/Controllers/Admin/StatisticsController.php index 968f673..7bdaae5 100755 --- a/app/Http/Controllers/Admin/StatisticsController.php +++ b/app/Http/Controllers/Admin/StatisticsController.php @@ -255,11 +255,12 @@ class StatisticsController extends CommonController DB::enableQueryLog(); //todo:子订单的数量增加,用更省查询时间的方式获取项目相关数据 $customers = (new Customer()) + ->whereNull("deleted_at") ->with([ "patients" => function ($query) use ($before_datetime) { $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->orderBy("id", "desc"); }, - "balances" => function ($query) use ($before_datetime) { + "oneBalance" => function ($query) use ($before_datetime) { $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->orderBy("id", "desc"); } ]) diff --git a/resources/views/admin/statistics/customer-balance.blade.php b/resources/views/admin/statistics/customer-balance.blade.php index 2e84a79..4d66d8d 100755 --- a/resources/views/admin/statistics/customer-balance.blade.php +++ b/resources/views/admin/statistics/customer-balance.blade.php @@ -35,35 +35,25 @@ 客户手机号 客户家属 截止日期 - 充值汇总 - 退款汇总 - 扣款汇总 - 已到帐未结算余额表 + 未结算余额 @foreach($customers as $item) + @if(!$item->oneBalance) + @continue + @elseif (!($item->oneBalance->balance > 0)) + @continue + @endif + {{ $loop->iteration }} {{ $item->mobile }} - {{ $item->patients->count() ? $item->patients->first()->name : "无" }} + {{ $item->patients->count() ? $item->patients->last()->name : "无" }} {{ date("Y-m-d H:i:s",$before_datetime) }} - {{ $item->balances->filter(function($item) { return $item->belongs_type == "App\Models\Recharge"; })->sum("money") }} - {{ $item->balances->filter(function($item) { return $item->belongs_type == "App\Models\Refund"; })->sum("money") }} - {{ $item->balances->filter(function($item) { return $item->belongs_type == "App\Models\OrderItems"; })->sum("money") }} - balances->first()->balance ? "text-danger" : "" }}">{{ $item->balances->sum("money") }} + {{ $item->oneBalance->balance }} @endforeach - -   -   -   -   -   -   - 总计 - {{ $customers->each(function($customer) { $customer->balance = $customer->balances->sum("money"); })->sum("balance") }} - From 43f880d7540b2faea3bf5a6b776459a00c8ee551 Mon Sep 17 00:00:00 2001 From: weizong song Date: Wed, 5 Jul 2023 19:45:58 +0800 Subject: [PATCH 26/73] up --- app/Customer.php | 8 +++++++- .../Controllers/Admin/StatisticsController.php | 15 ++++++++------- .../admin/statistics/customer-balance.blade.php | 9 +++++++++ 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/app/Customer.php b/app/Customer.php index bf54bd1..c6ba5dd 100644 --- a/app/Customer.php +++ b/app/Customer.php @@ -3,6 +3,7 @@ namespace App; use App\Models\Balance; +use App\Models\Orders; use App\Models\Patient; use App\Models\Recharge; use Illuminate\Foundation\Auth\User as Authenticatable; @@ -53,7 +54,7 @@ class Customer extends Authenticatable implements JWTSubject { use Notifiable; - CONST GUARD_NAME = "customer"; + const GUARD_NAME = "customer"; public function guardName() { @@ -130,4 +131,9 @@ class Customer extends Authenticatable implements JWTSubject return $this->hasMany(Recharge::class, "customer_id")->whereNotNull("paid_at"); } + public function orders() + { + return $this->hasMany(Orders::class, "customer_id"); + } + } diff --git a/app/Http/Controllers/Admin/StatisticsController.php b/app/Http/Controllers/Admin/StatisticsController.php index 7bdaae5..e75703e 100755 --- a/app/Http/Controllers/Admin/StatisticsController.php +++ b/app/Http/Controllers/Admin/StatisticsController.php @@ -248,12 +248,11 @@ class StatisticsController extends CommonController return $this->error($this->noProjects); } $project_id = request()->project_id ?? $projects->first()->id; - $before_date = $request->before_date ?: date("Y-m-d"); $before_datetime = strtotime($before_date . " 23:59:59"); DB::enableQueryLog(); - //todo:子订单的数量增加,用更省查询时间的方式获取项目相关数据 + $customers = (new Customer()) ->whereNull("deleted_at") ->with([ @@ -264,16 +263,18 @@ class StatisticsController extends CommonController $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->orderBy("id", "desc"); } ]) - ->whereHas("balances", function ($query) use ($before_datetime, $project_id) { + ->whereHas("oneBalance", function ($query) use ($before_datetime) { + $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->where("balance", ">", 0)->orderBy("id", "desc"); + }) + ->whereHas("orders", function ($query) use ($before_datetime, $project_id) { $query ->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}") - ->whereHas("order", function ($query) use ($project_id) { - $query->where("project_id", $project_id); - }); + ->where("project_id", $project_id); }) ->get(); - return view($this->bladePath . ".customer-balance", compact("customers", "before_datetime")); + $laravel_duration = microtime(true) - LARAVEL_START; + return view($this->bladePath . ".customer-balance", compact("customers", "before_datetime", "project_id", "laravel_duration")); } public function fixMonthLastDayCheckout(Request $request) diff --git a/resources/views/admin/statistics/customer-balance.blade.php b/resources/views/admin/statistics/customer-balance.blade.php index 4d66d8d..86a2ec1 100755 --- a/resources/views/admin/statistics/customer-balance.blade.php +++ b/resources/views/admin/statistics/customer-balance.blade.php @@ -20,7 +20,16 @@
+
+ + From 24e7a82f9c4d1d15c68488fe867a1bbb01d997aa Mon Sep 17 00:00:00 2001 From: weizong song Date: Wed, 5 Jul 2023 20:03:09 +0800 Subject: [PATCH 27/73] up --- app/Http/Controllers/Admin/StatisticsController.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Http/Controllers/Admin/StatisticsController.php b/app/Http/Controllers/Admin/StatisticsController.php index e75703e..38f2534 100755 --- a/app/Http/Controllers/Admin/StatisticsController.php +++ b/app/Http/Controllers/Admin/StatisticsController.php @@ -126,6 +126,7 @@ class StatisticsController extends CommonController return $this->error($this->noProjects); } $this->_getMonthData(); + $laravel_duration = microtime(true) - LARAVEL_START; return view($this->urlPrefix . "/salary"); } From fd06b4a1caebfef5cdde9c83ef5ec55f9d687919 Mon Sep 17 00:00:00 2001 From: weizong song Date: Wed, 5 Jul 2023 20:03:33 +0800 Subject: [PATCH 28/73] up --- app/Http/Controllers/Admin/StatisticsController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Admin/StatisticsController.php b/app/Http/Controllers/Admin/StatisticsController.php index 38f2534..283c92b 100755 --- a/app/Http/Controllers/Admin/StatisticsController.php +++ b/app/Http/Controllers/Admin/StatisticsController.php @@ -128,7 +128,7 @@ class StatisticsController extends CommonController $this->_getMonthData(); $laravel_duration = microtime(true) - LARAVEL_START; - return view($this->urlPrefix . "/salary"); + return view($this->urlPrefix . "/salary", compact("laravel_duration")); } public function overview(Request $request) From 2935fecf1ccd1146088f4b0dec1d101cc5c6cf00 Mon Sep 17 00:00:00 2001 From: weizong song Date: Tue, 11 Jul 2023 11:33:40 +0800 Subject: [PATCH 29/73] up --- .../Admin/StatisticsController.php | 1 - .../Controllers/Customer/OrdersController.php | 102 ++++++++++++++++++ ...3_07_11_111443_update_orders_add_score.php | 32 ++++++ routes/web.php | 2 + 4 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 database/migrations/2023_07_11_111443_update_orders_add_score.php diff --git a/app/Http/Controllers/Admin/StatisticsController.php b/app/Http/Controllers/Admin/StatisticsController.php index 283c92b..aee76c3 100755 --- a/app/Http/Controllers/Admin/StatisticsController.php +++ b/app/Http/Controllers/Admin/StatisticsController.php @@ -253,7 +253,6 @@ class StatisticsController extends CommonController $before_datetime = strtotime($before_date . " 23:59:59"); DB::enableQueryLog(); - $customers = (new Customer()) ->whereNull("deleted_at") ->with([ diff --git a/app/Http/Controllers/Customer/OrdersController.php b/app/Http/Controllers/Customer/OrdersController.php index 04e63af..bd4d70e 100644 --- a/app/Http/Controllers/Customer/OrdersController.php +++ b/app/Http/Controllers/Customer/OrdersController.php @@ -662,4 +662,106 @@ class OrdersController extends CommonController ])->select("id", "customer_id", "money", "balance", "belongs_type", "belongs_id", "remark", "order_id", "created_at")->orderBy("id", "desc")->paginate(10); return response()->json($balances->toArray()); } + + /** + * @OA\POST( + * path="/customer/score-order/{id}", + * tags={"用户端订单处理"}, + * summary="评价订单", + * 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"), + * @OA\Parameter(name="score", in="query", @OA\Schema(type="number"), required=true, description="分数,5分制,0.5分为一个阶梯"), + * @OA\Parameter(name="comment", in="query", @OA\Schema(type="string"), required=false, description="评语,不超过255字节"), + * @OA\Response( + * response="200", + * description="评价订单" + * ) + * ) + */ + + public function scoreOrder($id) + { + $order = (new Orders())->where("customer_id", $this->customer->id)->find($id); + if (!$order) { + return response()->json([ + "errorcode" => 40004, + "errormsg" => "没找到订单" + ]); + } + + if ($order->status !== Orders::STATUS_FINISHED) { + return response()->json([ + "errorcode" => 50001, + "errormsg" => "订单状态不适配" + ]); + } + + DB::beginTransaction(); + try { + $order->update([ + "score" => request()->score, + "comment" => request()->comment, + "scored_at" => date("Y-m-d H:i:s"), + ]); + DB::commit(); + return response()->json($order); + } catch (\Exception $exception) { + DB::rollBack(); + return response()->json([ + "errorcode" => $exception->getCode(), + "errormsg" => $exception->getMessage() + ]); + } + } + + /** + * @OA\POST( + * path="/customer/delete-score-order/{id}", + * tags={"用户端订单处理"}, + * summary="删除订单评价", + * 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"), + * @OA\Response( + * response="200", + * description="删除订单评价" + * ) + * ) + */ + + public function deleteScoreOrder($id) + { + $order = (new Orders())->where("customer_id", $this->customer->id)->find($id); + if (!$order) { + return response()->json([ + "errorcode" => 40004, + "errormsg" => "没找到订单" + ]); + } + + if ($order->status !== Orders::STATUS_FINISHED) { + return response()->json([ + "errorcode" => 50001, + "errormsg" => "订单状态不适配" + ]); + } + + DB::beginTransaction(); + try { + $order->update([ + "score" => null, + "comment" => null, + "scored_at" =>null + ]); + DB::commit(); + return response()->json($order); + } catch (\Exception $exception) { + DB::rollBack(); + return response()->json([ + "errorcode" => $exception->getCode(), + "errormsg" => $exception->getMessage() + ]); + } + } } diff --git a/database/migrations/2023_07_11_111443_update_orders_add_score.php b/database/migrations/2023_07_11_111443_update_orders_add_score.php new file mode 100644 index 0000000..55e479a --- /dev/null +++ b/database/migrations/2023_07_11_111443_update_orders_add_score.php @@ -0,0 +1,32 @@ +decimal("score")->nullable(); + $table->timestamp("scored_at")->nullable(); + $table->string("comment")->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/routes/web.php b/routes/web.php index 7a8e163..dfd27c2 100644 --- a/routes/web.php +++ b/routes/web.php @@ -119,6 +119,8 @@ Route::group(["namespace" => "Customer", "prefix" => "customer"], function () { Route::post('create-order', 'OrdersController@createOrder'); Route::post('cancel-order/{id}', 'OrdersController@cancelOrder'); Route::post('reserve-order/{id}', 'OrdersController@reserveOrder'); + Route::post('score-order/{id}', 'OrdersController@scoreOrder'); + Route::post('delete-score-order/{id}', 'OrdersController@deleteScoreOrder'); Route::get('recharge', 'OrdersController@recharge'); Route::get('get-balances', 'OrdersController@getBalances'); }); From 2eb6bac10d3876ed26a0724aa5000ccab23b2a15 Mon Sep 17 00:00:00 2001 From: weizong song Date: Tue, 11 Jul 2023 12:04:31 +0800 Subject: [PATCH 30/73] up --- app/Events/AdminSaved.php | 36 ------------------- .../Controllers/Admin/AdminController.php | 9 ++--- app/Listeners/AdminSavedListener.php | 31 ---------------- 3 files changed, 2 insertions(+), 74 deletions(-) delete mode 100644 app/Events/AdminSaved.php delete mode 100644 app/Listeners/AdminSavedListener.php diff --git a/app/Events/AdminSaved.php b/app/Events/AdminSaved.php deleted file mode 100644 index 0e71486..0000000 --- a/app/Events/AdminSaved.php +++ /dev/null @@ -1,36 +0,0 @@ - Date: Tue, 11 Jul 2023 13:49:37 +0800 Subject: [PATCH 31/73] up --- .../Controllers/Admin/AdminController.php | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Admin/AdminController.php b/app/Http/Controllers/Admin/AdminController.php index 362cfaf..ca0c979 100644 --- a/app/Http/Controllers/Admin/AdminController.php +++ b/app/Http/Controllers/Admin/AdminController.php @@ -48,8 +48,28 @@ class AdminController extends CommonController } } - public function store(Request $request) + public function stored($model) { - dd($request); + if (request()->project_id) { + $model->update([ + "project_ids" => implode(",", request()->project_id)]); + } else { + $model->update([ + "project_ids" => null + ]); + } + } + + public function updated($model) + { + if (request()->project_id) { + $model->update([ + "project_ids" => implode(",", request()->project_id) + ]); + } else { + $model->update([ + "project_ids" => null + ]); + } } } From 92b2e7dc9035c1da2f476998aab9f857b0464f06 Mon Sep 17 00:00:00 2001 From: weizong song Date: Tue, 11 Jul 2023 14:08:55 +0800 Subject: [PATCH 32/73] up --- app/Admin.php | 2 +- app/Http/Controllers/Admin/AdminController.php | 4 ++++ resources/views/admin/admin/index.blade.php | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/Admin.php b/app/Admin.php index f26526e..0f46077 100644 --- a/app/Admin.php +++ b/app/Admin.php @@ -68,7 +68,7 @@ class Admin extends Authenticatable implements Auditable * @var array */ protected $fillable = [ - 'name', 'username', 'password', + 'name', 'username', 'password','project_ids' ]; /** diff --git a/app/Http/Controllers/Admin/AdminController.php b/app/Http/Controllers/Admin/AdminController.php index ca0c979..3ced192 100644 --- a/app/Http/Controllers/Admin/AdminController.php +++ b/app/Http/Controllers/Admin/AdminController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Admin; use App\Admin; use App\Forms\AdminForm; +use App\Models\Project; use Illuminate\Http\Request; use Kris\LaravelFormBuilder\FormBuilder; use Spatie\Permission\Models\Role; @@ -19,6 +20,9 @@ class AdminController extends CommonController public function index(Request $request) { $data = $this->model->paginate(20); + foreach ($data as $item) { + $item->projects = Project::whereIn("id", explode(",", $item->project_ids))->get(); + } $roles = (new Role())->where("guard_name", $this->guardName)->get(); return view($this->bladePath . ".index", compact("data", "roles")); diff --git a/resources/views/admin/admin/index.blade.php b/resources/views/admin/admin/index.blade.php index 0ce8e73..eb079e9 100755 --- a/resources/views/admin/admin/index.blade.php +++ b/resources/views/admin/admin/index.blade.php @@ -19,6 +19,7 @@ 用户名 角色 + 项目 操作 @@ -32,6 +33,9 @@ {{ $row->roles ? implode(",",array_column($row->roles->toArray(),"name")) : "" }} + + {{ implode(",",$row->projects->pluck("name")->toArray()) }} + Date: Fri, 14 Jul 2023 10:11:41 +0800 Subject: [PATCH 33/73] up --- .../Commands/SyncAlipayRechargeState.php | 2 +- .../Admin/StatisticsController.php | 10 ++ .../Controllers/Worker/AuthController.php | 138 ++++++++++++++++++ .../Controllers/Worker/CommonController.php | 27 ++++ app/Http/Middleware/VerifyCsrfToken.php | 3 +- app/Worker.php | 88 +++++++++++ config/app.php | 4 +- config/auth.php | 10 ++ ...93851_update_paramedic_add_auth_fields.php | 31 ++++ .../views/admin/statistics/finance.blade.php | 10 ++ routes/web.php | 10 ++ 11 files changed, 330 insertions(+), 3 deletions(-) create mode 100644 app/Http/Controllers/Worker/AuthController.php create mode 100644 app/Http/Controllers/Worker/CommonController.php create mode 100644 app/Worker.php create mode 100644 database/migrations/2023_07_14_093851_update_paramedic_add_auth_fields.php diff --git a/app/Console/Commands/SyncAlipayRechargeState.php b/app/Console/Commands/SyncAlipayRechargeState.php index 1f7e9b6..5695cac 100644 --- a/app/Console/Commands/SyncAlipayRechargeState.php +++ b/app/Console/Commands/SyncAlipayRechargeState.php @@ -42,7 +42,7 @@ class SyncAlipayRechargeState extends Command { $threshold = 5; $offset_seconds = 40; //支付发起后多少秒开始轮询 - $due_minutes = 10; //支付发起后第一次开始轮询的时间往后延迟5分钟后不再轮询 + $due_minutes = 10; //支付发起后第一次开始轮询的时间往后延迟若干分钟后不再轮询 $last_id = cache("last_sync_alipay_recharge_id", 0); DB::enableQueryLog(); diff --git a/app/Http/Controllers/Admin/StatisticsController.php b/app/Http/Controllers/Admin/StatisticsController.php index aee76c3..8066377 100755 --- a/app/Http/Controllers/Admin/StatisticsController.php +++ b/app/Http/Controllers/Admin/StatisticsController.php @@ -39,6 +39,16 @@ class StatisticsController extends CommonController return $projects; } + public function getYears() + { + $start_year = config("start_year"); + $years = []; + for ($i = date("Y"); $i >= $start_year; $i--) { + $years[] = $i; + } + view()->share(compact("years")); + } + public function _getMonths() { $months = []; diff --git a/app/Http/Controllers/Worker/AuthController.php b/app/Http/Controllers/Worker/AuthController.php new file mode 100644 index 0000000..5c8c509 --- /dev/null +++ b/app/Http/Controllers/Worker/AuthController.php @@ -0,0 +1,138 @@ +authModel = new Worker(); + } + + /** + * Create a new AuthController instance. + * + * @return void + */ + + public function guard() + { + return auth()->guard($this->guardName); + } + + public function guardName() + { + return $this->guardName; + } + + /** + * @OA\Post( + * path="/worker/login-by-username", + * tags={"护工端用户相关"}, + * summary="V2-通过用户名密码登录", + * description="", + * @OA\Parameter(name="username", in="query", @OA\Schema(type="string"), required=true, description="用户名(身份证号)"), + * @OA\Parameter(name="password", in="query", @OA\Schema(type="string"), required=true, description="密码"), + * @OA\Response( + * response="200", + * description="护工通过用户名(身份证号)密码登录" + * ) + * ) + */ + public function loginByUsername() + { + $credentials = [ + "id_card_number" => request()->username, + "password" => request()->password + ]; + if (!$token = $this->guard()->attempt($credentials)) { + return response()->json([ + 'errorcode' => '401', + 'errormsg' => '登录失败' + ], 401); + } + + return $this->respondWithToken($token); + } + + /** + * @OA\Post( + * path="/worker/me", + * tags={"护工端用户相关"}, + * summary="V2-获取登录者信息", + * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), + * description="", + * @OA\Response( + * response="200", + * description="获取登录者信息" + * ) + * ) + */ + public function me() + { + $id = $this->guard()->id(); + $paramedic = (new Paramedic())->find($id); + return response()->json($paramedic->toArray()); + } + + /** + * @OA\Post( + * path="/worker/logout", + * tags={"护工端用户相关"}, + * summary="V2 退出登录", + * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), + * description="", + * @OA\Response( + * response="200", + * description="退出登录" + * ) + * ) + */ + public function logout() + { + DB::beginTransaction(); + try { + $this->guard()->logout(); + DB::commit(); + return response()->json([ + 'errormsg' => "退出登录成功!" + ]); + } catch (\Exception $exception) { + DB::rollBack(); + return response()->json([ + 'errorcode' => '402', + 'errormsg' => $exception->getMessage() + ]); + } + } + + + /** + * Get the token array structure. + * + * @param string $token + * + * @return \Illuminate\Http\JsonResponse + */ + protected function respondWithToken($token) + { + $user = $this->guard()->user(); + $user = $user->toArray(); + + return response()->json([ + 'access_token' => $token, + 'token_type' => 'bearer', + 'expires_in' => $this->guard()->factory()->getTTL() * 60, + 'user_info' => $user + ]); + } +} diff --git a/app/Http/Controllers/Worker/CommonController.php b/app/Http/Controllers/Worker/CommonController.php new file mode 100644 index 0000000..df24d7e --- /dev/null +++ b/app/Http/Controllers/Worker/CommonController.php @@ -0,0 +1,27 @@ +guard()->user(); + $this->worker = $worker; + } + + public function guard() + { + return auth()->guard($this->guardName); + } + + public function guardName() + { + return $this->guardName; + } +} diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php index 454152c..fbf5dfc 100644 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -13,6 +13,7 @@ class VerifyCsrfToken extends Middleware */ protected $except = [ 'customer/*', - 'manager/*' + 'manager/*', + 'worker/*', ]; } diff --git a/app/Worker.php b/app/Worker.php new file mode 100644 index 0000000..d9a7115 --- /dev/null +++ b/app/Worker.php @@ -0,0 +1,88 @@ +secure() ? "https" : "http"; + if (!$this->avatar) { + switch ($this->sex) { + case "男": + $this->avatar = "/images/male.png"; + break; + case "女": + $this->avatar = "/images/female.png"; + break; + } + } + return $this->avatar ? $protocol . "://" . request()->getHost() . $this->avatar : $this->avatar; + } + + public function guardName() + { + return self::GUARD_NAME; + } + + // Rest omitted for brevity + + /** + * Get the identifier that will be stored in the subject claim of the JWT. + * + * @return mixed + */ + public function getJWTIdentifier() + { + return $this->getKey(); + } + + /** + * Return a key value array, containing any custom claims to be added to the JWT. + * + * @return array + */ + public function getJWTCustomClaims() + { + return []; + } + + /** + * The attributes that are mass assignable. + * + * @var array + */ + protected $fillable = []; + + /** + * The attributes that should be hidden for arrays. + * + * @var array + */ + protected $hidden = [ + 'password', 'remember_token', + ]; + + /** + * The attributes that should be cast to native types. + * + * @var array + */ + protected $casts = [ + 'verified_at' => 'datetime', + ]; +} diff --git a/config/app.php b/config/app.php index 4c2cf5f..99d7613 100644 --- a/config/app.php +++ b/config/app.php @@ -39,7 +39,7 @@ return [ | */ - 'debug' => (bool) env('APP_DEBUG', false), + 'debug' => (bool)env('APP_DEBUG', false), /* |-------------------------------------------------------------------------- @@ -56,6 +56,8 @@ return [ 'asset_url' => env('ASSET_URL', null), + 'start_year' => env('START_YEAR', 2017), + /* |-------------------------------------------------------------------------- | Application Timezone diff --git a/config/auth.php b/config/auth.php index 287c850..a6b5d38 100644 --- a/config/auth.php +++ b/config/auth.php @@ -50,6 +50,11 @@ return [ 'provider' => 'manager', ], + 'worker' => [ + 'driver' => 'jwt', + 'provider' => 'worker', + ], + // 'api' => [ // 'driver' => 'token', // 'provider' => 'users', @@ -90,6 +95,11 @@ return [ 'model' => App\Manager::class, ], + 'worker' => [ + 'driver' => 'eloquent', + 'model' => App\Worker::class, + ], + // 'users' => [ // 'driver' => 'database', // 'table' => 'users', diff --git a/database/migrations/2023_07_14_093851_update_paramedic_add_auth_fields.php b/database/migrations/2023_07_14_093851_update_paramedic_add_auth_fields.php new file mode 100644 index 0000000..2618294 --- /dev/null +++ b/database/migrations/2023_07_14_093851_update_paramedic_add_auth_fields.php @@ -0,0 +1,31 @@ +string("remember_token")->nullable(); + $table->string("password")->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/resources/views/admin/statistics/finance.blade.php b/resources/views/admin/statistics/finance.blade.php index 9f6d32b..9f62fdd 100755 --- a/resources/views/admin/statistics/finance.blade.php +++ b/resources/views/admin/statistics/finance.blade.php @@ -33,6 +33,16 @@ @endforeach +{{-- --}} +{{-- --}}
收款明细
diff --git a/routes/web.php b/routes/web.php index dfd27c2..92ce0d6 100644 --- a/routes/web.php +++ b/routes/web.php @@ -188,3 +188,13 @@ Route::group(["namespace" => "Manager", "prefix" => "manager"], function () { }); }); +Route::group(["namespace" => "Worker", "prefix" => "worker"], function () { + Route::post('logout', 'AuthController@logout'); + Route::post('login-by-username', 'AuthController@loginByUsername'); + + Route::group(['middleware' => ['authorize.jwt:manager']], function () { + Route::post('me', 'AuthController@me'); + + }); +}); + From 38b484000017f88abd38414d399eb3a87cbf78bf Mon Sep 17 00:00:00 2001 From: weizong song Date: Fri, 14 Jul 2023 10:58:14 +0800 Subject: [PATCH 34/73] up --- .../Controllers/Worker/AuthController.php | 2 +- .../Controllers/Worker/OrdersController.php | 183 ++++++++++++++++++ routes/web.php | 7 +- 3 files changed, 188 insertions(+), 4 deletions(-) create mode 100644 app/Http/Controllers/Worker/OrdersController.php diff --git a/app/Http/Controllers/Worker/AuthController.php b/app/Http/Controllers/Worker/AuthController.php index 5c8c509..b40b4f3 100644 --- a/app/Http/Controllers/Worker/AuthController.php +++ b/app/Http/Controllers/Worker/AuthController.php @@ -65,7 +65,7 @@ class AuthController extends Controller } /** - * @OA\Post( + * @OA\Get( * path="/worker/me", * tags={"护工端用户相关"}, * summary="V2-获取登录者信息", diff --git a/app/Http/Controllers/Worker/OrdersController.php b/app/Http/Controllers/Worker/OrdersController.php new file mode 100644 index 0000000..67ece84 --- /dev/null +++ b/app/Http/Controllers/Worker/OrdersController.php @@ -0,0 +1,183 @@ +待处理,ongoing=>进行中,finished=>已完成]"), + * @OA\Response( + * response="200", + * description="获取订单列表" + * ) + * ) + */ + + public function list() + { + $worker = $this->guard()->user(); + $model = $this->_getOrderModel(); + + $ids = OrderItems::where("paramedic_id", $worker->id)->where("total", ">", 0)->pluck("order_id")->toArray(); + $model = $model->whereIn("id", $ids); + + if (request()->keyword) { + $keyword = request()->keyword; + $model = $model->where(function ($query) use ($keyword) { + $query + ->where("serial", "like", "%{$keyword}%") + ->orWhereHas("patient", function ($query) use ($keyword) { + $query->where("name", "like", "%{$keyword}%"); + })->orWhereHas("customer", function ($query) use ($keyword) { + $query->where("mobile", "like", "%{$keyword}%"); + })->orWhereHas("paramedic", function ($query) use ($keyword) { + $query->where("name", "like", "%{$keyword}%"); + }); + }); + } + + if (request()->start_date_from && request()->start_date_to) { + $model = $model->whereRaw(DB::raw("UNIX_TIMESTAMP(`from_date`) between " . strtotime(request()->start_date_from) . " and " . strtotime(request()->start_date_to))); + } + + switch (request()->status) { + case "pending": + $model = $model->whereIn("status", [Orders::STATUS_UNCONFIRMED, Orders::STATUS_UNASSIGNED]); + break; + case "ongoing": + case "finished": + $model = $model->where("status", constant(Orders::class . "::STATUS_" . strtoupper(request()->status))); + break; + default: + //do nothing + } + + $page_size = request()->page_size ?? 5; + $data = $model->orderBy("id", "desc")->paginate($page_size); + + return response()->json($data->toArray()); + } + + /** + * @OA\Get( + * path="/worker/get-order/{id}", + * tags={"护工端订单处理"}, + * 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"), + * @OA\Response( + * response="200", + * description="获取订单详情" + * ) + * ) + */ + + public function getOrder($id) + { + $worker = $this->guard()->user(); + $model = $this->_getOrderModel(); + $ids = OrderItems::where("order_id", $id)->where("paramedic_id", $worker->id)->where("total", ">", 0)->pluck("order_id")->toArray(); + if (!$ids) { + return response()->json([ + "errorcode" => "40004", + "errormsg" => "没找到订单" + ]); + } + + $order = $model->with([ + "orderItems" => function ($query) use ($worker) { + $query->where("paramedic_id", $worker->id)->where("total", ">", 0)->orderBy("service_date", "desc"); + } + ])->find($id); + + return response()->json($order->toArray()); + } + + public function _getOrderModel() + { + $model = $order = (new Orders()) + ->select( + "orders.id", + "orders.serial", + "orders.customer_id", + "orders.manager_id", + "orders.bed_id", + "orders.patient_id", + "orders.project_id", + "orders.product_id", + "orders.product_item_id", + "orders.product_paramedic_level_id", + "orders.from_date", + "orders.to_date", + "orders.status", + "orders.total", + "orders.paid_total", + "orders.contact", + "orders.mobile", + "orders.paramedic_id", + "orders.price", + "orders.factors", + "orders.patient_quantity", + "orders.created_at" + ) + ->with([ + "project" => function ($query) { + $query->select("id", "name"); + }, + "bed" => function ($query) { + $query->select("bed.id", "bed.name", "bed.building_id", "bed.area_id") + ->leftJoin("building", "building.id", "=", "bed.building_id") + ->leftJoin("area", "area.id", "=", "bed.area_id") + ->leftJoin("room", "room.id", "=", "bed.room_id") + ->addSelect("room.name as room_name", "area.name as area_name", "building.name as building_name"); + }, + "customer" => function ($query) { + $query->select("id", "name", "balance"); + }, + "patient" => function ($query) { + $query->select("id", "name", "sex", "age", "mobile"); + } + ]); + return $model; + } +} diff --git a/routes/web.php b/routes/web.php index 92ce0d6..9d8068f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -192,9 +192,10 @@ Route::group(["namespace" => "Worker", "prefix" => "worker"], function () { Route::post('logout', 'AuthController@logout'); Route::post('login-by-username', 'AuthController@loginByUsername'); - Route::group(['middleware' => ['authorize.jwt:manager']], function () { - Route::post('me', 'AuthController@me'); - + Route::group(['middleware' => ['authorize.jwt:worker']], function () { + Route::get('me', 'AuthController@me'); + Route::get('get-orders', 'OrdersController@list'); + Route::get('get-order/{id}', 'OrdersController@getOrder'); }); }); From 009cef1a41fe7af44cabf68955b0a95be445b57b Mon Sep 17 00:00:00 2001 From: weizong song Date: Sun, 16 Jul 2023 14:17:55 +0800 Subject: [PATCH 35/73] up --- .../Controllers/Admin/OrdersController.php | 25 ++++ resources/views/admin/orders/score.blade.php | 110 ++++++++++++++++++ routes/web.php | 1 + 3 files changed, 136 insertions(+) create mode 100755 resources/views/admin/orders/score.blade.php diff --git a/app/Http/Controllers/Admin/OrdersController.php b/app/Http/Controllers/Admin/OrdersController.php index c6e6324..1113a9f 100755 --- a/app/Http/Controllers/Admin/OrdersController.php +++ b/app/Http/Controllers/Admin/OrdersController.php @@ -129,4 +129,29 @@ class OrdersController extends CommonController $order_item = $order_item->calculateFee(); return $this->ajaxResponse($order_item); } + + public function score() + { + $projects = (new StatisticsController())->_checkProjects(); + if (!$projects->count()) { + return $this->error($this->noProjects); + } + $project_id = request()->project_id ?? $projects->first()->id; + $this->model = $this->model->where("project_id", $project_id)->whereNotNull("scored_at"); + + $data = $this->model + ->with([ + "orderItems", + "project", + "product", + "customer", + "manager", + "bed" => function ($query) { + $query->with(["room", "building"]); + } + ]) + ->orderBy("id", "desc") + ->paginate(10); + return view($this->bladePath . ".score", compact("data", "project_id")); + } } diff --git a/resources/views/admin/orders/score.blade.php b/resources/views/admin/orders/score.blade.php new file mode 100755 index 0000000..e52a6f8 --- /dev/null +++ b/resources/views/admin/orders/score.blade.php @@ -0,0 +1,110 @@ +@extends("admin.layouts.layout") + +@section("content") +
+
+
+
+
+
+ + +
+
+ + + + + + + + + + + + + + + + @foreach ($data as $row) + + + + + + + + + + + + + + + @endforeach + +
订单编号所属项目/医院客户姓名联系电话被护理人开始服务日期评分评价操作
+ {{ $row->serial }} + {{ $row->project->name }}{{ $row->customer->name ?: $row->patient->name }}{{ $row->customer->mobile }}{{ $row->patient->name }}{{ $row->from_date }}{{ $row->score }}{{ $row->comment }} + 查看 +
+ + + + + + + + + + + @foreach($row->orderItems as $item) + + + + + + + @endforeach + +
所在床位护理日期护工单价
{{ $item->building->name }}-{{ $item->room->name }} + -{{ $item->bed->name }}床 + {{ $item->service_date }}{{ $item->paramedic ? $item->paramedic->name : "" }}{{ $item->total }}
+
+ @include("public._pages") +
+ +
+
+
+ +@endsection + +@push("footer") + +@endpush diff --git a/routes/web.php b/routes/web.php index 9d8068f..0e27595 100644 --- a/routes/web.php +++ b/routes/web.php @@ -78,6 +78,7 @@ Route::group(["namespace" => "Admin", "prefix" => "admin"], function () { Route::get("orders", 'OrdersController@index'); Route::post("orders/change-item", 'OrdersController@changeItem'); Route::get("orders/get-item/{item_id}", 'OrdersController@getItem'); + Route::get("orders/score", 'OrdersController@score'); Route::get("statistics/overview", 'StatisticsController@overview'); Route::get("statistics/salary", 'StatisticsController@salary'); From d05e7411ec85bb702edcccb593f6f00c118640d1 Mon Sep 17 00:00:00 2001 From: weizong song Date: Sun, 16 Jul 2023 14:36:19 +0800 Subject: [PATCH 36/73] up --- app/Http/Controllers/Admin/OrdersController.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/Http/Controllers/Admin/OrdersController.php b/app/Http/Controllers/Admin/OrdersController.php index 1113a9f..3dfd89c 100755 --- a/app/Http/Controllers/Admin/OrdersController.php +++ b/app/Http/Controllers/Admin/OrdersController.php @@ -138,6 +138,13 @@ class OrdersController extends CommonController } $project_id = request()->project_id ?? $projects->first()->id; $this->model = $this->model->where("project_id", $project_id)->whereNotNull("scored_at"); + if (request()->keyword) { + $this->model = $this->model->where(function ($query) { + $query->where("serial", "like", "%" . request()->keyword . "%") + ->orWhere("contact", "like", "%" . request()->keyword . "%") + ->orWhere("mobile", "like", "%" . request()->keyword . "%"); + }); + } $data = $this->model ->with([ From 0a6ac0c65745f450b4d30ae955dfa34f19de35a6 Mon Sep 17 00:00:00 2001 From: weizong song Date: Sun, 16 Jul 2023 20:03:54 +0800 Subject: [PATCH 37/73] up --- app/Forms/ProjectForm.php | 1 + .../Controllers/Customer/OrdersController.php | 1 + ...update_project_add_percent_first_party.php | 30 +++++++++++++++++++ resources/views/admin/project/index.blade.php | 2 ++ .../views/admin/statistics/overview.blade.php | 2 ++ 5 files changed, 36 insertions(+) create mode 100644 database/migrations/2023_07_16_144532_update_project_add_percent_first_party.php diff --git a/app/Forms/ProjectForm.php b/app/Forms/ProjectForm.php index 84de7c2..503192a 100755 --- a/app/Forms/ProjectForm.php +++ b/app/Forms/ProjectForm.php @@ -13,6 +13,7 @@ class ProjectForm extends Form $this->add("longitude", Field::HIDDEN); $this->add("name", Field::TEXT, ["label" => "名称", "rules" => "required"]); $this->add("address", Field::TEXT, ["label" => "地址", "rules" => "required"]); + $this->add("percent_first_party", Field::NUMBER, ["label" => "院方结算百分比"]); $this->add("logo", Field::TEXT, ["label" => "logo", "attr" => ["data-plugin" => "uploader"]]); $this->add("banners", Field::TEXT, ["label" => "banner", "attr" => ["data-plugin" => "uploader", "data-multiple-multiple" => 1]]); $this->add("profile", Field::TEXTAREA, ["label" => "简介"]); diff --git a/app/Http/Controllers/Customer/OrdersController.php b/app/Http/Controllers/Customer/OrdersController.php index bd4d70e..4be4b2e 100644 --- a/app/Http/Controllers/Customer/OrdersController.php +++ b/app/Http/Controllers/Customer/OrdersController.php @@ -505,6 +505,7 @@ class OrdersController extends CommonController public function cancelOrder($id) { $order = (new Orders())->with("orderItems")->find($id); + \Log::info($order); if ($order->status !== Orders::STATUS_UNCONFIRMED) { return response()->json([ "errorcode" => 50001, diff --git a/database/migrations/2023_07_16_144532_update_project_add_percent_first_party.php b/database/migrations/2023_07_16_144532_update_project_add_percent_first_party.php new file mode 100644 index 0000000..6a5f14a --- /dev/null +++ b/database/migrations/2023_07_16_144532_update_project_add_percent_first_party.php @@ -0,0 +1,30 @@ +decimal("percent_first_party", 5, 2)->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/resources/views/admin/project/index.blade.php b/resources/views/admin/project/index.blade.php index 11e2cb7..8f39fdc 100755 --- a/resources/views/admin/project/index.blade.php +++ b/resources/views/admin/project/index.blade.php @@ -18,6 +18,7 @@ {{$modelName}} 地址 + 项目结算比例 操作 @@ -28,6 +29,7 @@ {{ $row->name }} {{ $row->address }} + {{ $row->percent_first_party }}
床位管理 diff --git a/resources/views/admin/statistics/overview.blade.php b/resources/views/admin/statistics/overview.blade.php index cd2c126..1f9dfb4 100755 --- a/resources/views/admin/statistics/overview.blade.php +++ b/resources/views/admin/statistics/overview.blade.php @@ -35,6 +35,7 @@ 本月退款 本月结算 本月未结算余额 + 院方结算 @@ -46,6 +47,7 @@ {{ $this_month_balances->filter(function($item) { return $item->belongs_type == "App\Models\Refund"; })->sum("money") }} {{ $this_month_balances->filter(function($item) { return $item->belongs_type == "App\Models\OrderItems"; })->sum("money") }} {{ $this_month_balance }} + @if($project->percent_first_party){{ -$this_month_balances->filter(function($item) { return $item->belongs_type == "App\Models\OrderItems"; })->sum("money") * $project->percent_first_party / 100 }}@else{{ "未设置" }}@endif From ba3fa7f31993960523aa9092ba173fb56d25bc86 Mon Sep 17 00:00:00 2001 From: weizong song Date: Sun, 16 Jul 2023 21:15:20 +0800 Subject: [PATCH 38/73] up --- .DS_Store | Bin 0 -> 6148 bytes app/Forms/ParamedicForm.php | 2 ++ public/.DS_Store | Bin 0 -> 6148 bytes public/dashboard/.DS_Store | Bin 0 -> 6148 bytes public/dashboard/skin/.DS_Store | Bin 0 -> 6148 bytes public/dashboard/skin/default/.DS_Store | Bin 0 -> 6148 bytes public/dashboard/skin/default/images/head.png | Bin 30085 -> 13345 bytes public/js/common.js | 4 ++-- .../views/admin/paramedic/create.blade.php | 2 +- .../views/admin/paramedic/index.blade.php | 1 - 10 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 .DS_Store create mode 100644 public/.DS_Store create mode 100644 public/dashboard/.DS_Store create mode 100644 public/dashboard/skin/.DS_Store create mode 100644 public/dashboard/skin/default/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..7c435d0ae7da7dc075c9f732f1dfc6b43615eac4 GIT binary patch literal 6148 zcmeHKI|>3Z5S>vG!N$@uSMUZw^aNf&RuKe2LF~8kTprCgpF&yfv{2r_^|vYm-cL}Uavl&cM0vwic9^)jMBIL_G1X16_Wn&a`%$$lL$?odv0kwy-WeA}Q= z0V+TRr~nn90v}f(OYCU;@soKV6`%sYu7G_X3f! WHL(qJI^s?T@@K$wp;3WvD{uz~u@!g# literal 0 HcmV?d00001 diff --git a/app/Forms/ParamedicForm.php b/app/Forms/ParamedicForm.php index b8ffceb..9c07649 100755 --- a/app/Forms/ParamedicForm.php +++ b/app/Forms/ParamedicForm.php @@ -14,6 +14,8 @@ class ParamedicForm extends Form $this->add("mobile", Field::TEXT, ["label" => "电话", "rules" => "required"]); $this->add("serial", Field::TEXT, ["label" => "编号", "rules" => "required"]); $this->add("avatar", Field::TEXT, ["label" => "照片", "attr" => ["data-plugin" => "uploader"]]); + $this->add("health_certificate", Field::TEXT, ["label" => "健康证", "attr" => ["data-plugin" => "uploader"]]); + $this->add("work_certificate", Field::TEXT, ["label" => "护理员证", "attr" => ["data-plugin" => "uploader"]]); $this->add("id_card_number", Field::TEXT, ["label" => "身份证号"]); $this->add("sex", Field::SELECT, ["label" => "性别", "choices" => [ "男" => "男", diff --git a/public/.DS_Store b/public/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..898243f9e30b060ba87519ec58e128e770490ecc GIT binary patch literal 6148 zcmeHKJ5EC}5S)b+K{P2TeFbh{Md1Wo0K!w0BGQwH=wHRTax`W?1<`{pX`)$aJ@$IX zmZy087J#k4hG$>}U`cnxw-0mkefOE&Rm6yNp0UMl4YTaO1I~TGK-Lla-~8jp zb{r4BEt3LLKnh3!DIf(ds6Z9h<>Lj<)KOAE3fzVQ{(We4$6h!k#;1crv;f2f!(p69 zFF|Y`Aojv3krA3Dm6%kk7Q>Rxc&of#I3*?>R?Uai%~lQsCMO`~W~C6b>!3`IW^4*{}x?5HIN$PI)bIYBQ_G)94-0_7^TtBA!`Tcggc#*d1fT#2kv;Eu_q<|EV0#ZN< zNPz_@kjMCDyP#*%qeuZMunYzK`%vi4nrxl%>0pQvfE-v3<2q&uvUq{4$=1mV&2oCM zY_%9eydLdj$?Iyeb@p~x4j-0xHlJc>*4tr)3C(IiK?+ELnF8yckAD82=zq=svlgXN zKnnab1#CFJ9uIt}JX;@L&+Bhl^>w3@aXG`Up8zI)6u;2JxLET HJXL`oqlyx) literal 0 HcmV?d00001 diff --git a/public/dashboard/skin/.DS_Store b/public/dashboard/skin/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..0efb1658f0edc8156f30c8d17248a551918b80ce GIT binary patch literal 6148 zcmeHKJ5EC}5S)cbL`svA(pTUHR+O9|7YOi36)6Rze--EAXv}^JqL*}`0L@D4vDZ7c zJjL6$0Bm&{o`5BQIo%PTK1|K`-6wWe5hK!h#t8>}?1%T)m*XV+a=^I{81RNYo`3R> z2j7xO0VyB_q<|EV0ykEm3haDw<8yVK6p#XcUjhF&5}w?s#S|&NoTxOUN0OIlMbuq!|GKJ1^$%+Hd}AkD?X`e>*R4>Ya4w>_na@f8|Ojc5apN{<(LaE$B&Ve adClkC?}cMx&>0UpQ9lE&i%bgqwgTVRDiw_Y literal 0 HcmV?d00001 diff --git a/public/dashboard/skin/default/.DS_Store b/public/dashboard/skin/default/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5c3c6c2f9724dd4dd277ebc9126dd114ea190606 GIT binary patch literal 6148 zcmeHKJ8r`;3?&nz2#_UXMqQyd5RCK$xj;WoiUJKh7}-7bTs>MJKSKhin>#dk1gIxb zd=m5q(-aYH&)uWQMnqO{L;12{YPN4au|-A{2*()*8IIlX_S*NKlkD38<37lToa9B` zFZs4XqXJZb3Qz$mKm}%3AWQ6OJ^RT#kP1+N|E_?29}3*CCXRvr>A>JE0I)&W4Rh}$ zfW-p9nm7g`0@I)ZgR0qLXwVTanO76Xz@Up}^PzdOW{0AFJI*hjE?NUQQUNM(t-vyt z8>|0M@L&4>YZ6yffC}7|0^02MyB1H%+B$ih)!G7ohFi`z+zfN4VDNGb^m2@amE)}^ bMP9Kv_G{u8=yb%L4&={(=|ZCdf33g|P&^fT literal 0 HcmV?d00001 diff --git a/public/dashboard/skin/default/images/head.png b/public/dashboard/skin/default/images/head.png index 9f601537dca35886f6bc72e15a802cb817a37c2c..506a6a8f2e5a7ddf8caf2d9ba4f5f08f9a7a6907 100644 GIT binary patch literal 13345 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 literal 30085 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

h>uOHM2y-<9)tjp`Tggu=q`x8Bsf>(x zpVjtAAa9vEM)zU%GJVAF_V2zI)+vS$y(kXF+4{zIUnZf@m1E|a{4n*16fZpE;0Oc# z+ODj$M{dkF_;;$3lc$p_8?5ZOMu4iRm2l&?X6>WsdGTGdN>WRAWtYCSxKlju0<}a6 zS6(UKvvU)7r=i46Xgd4f$biM2Y;)Ze(r&d=)gtW9Z-nM0ZG;VM@VODgtdXmlh0His zWvT5BD0Gd%(>%kEfj-uIY5mRK{j@dDp)GTgyUeF(?4J|p)zk%RPjac?`|xaRU~JsT z0RM9wpCr%j{1TrJe>-wq2Qpt?aN;|bs-|HlvN_jCql1=a#_5acW8FLC`<89cxi=Tm zP6Os~L_#(i^Y#^1J4Ikk2^Tb!izyO>gSrF$p2hR_1S@ftyfZMFtsO z%#7MI6S>TlebEFPU)fn7<}Fr4!}#7;N95dbR8$$4&4=+@1n65|CjOYCGX4VG)CcCn zn8`k&Ut!0C5w)k6<0GPDG!*$l^-+isLWa4bYegt>YW{|UP*x;@&A?7(zY@^SJYmkf zwJw(Y*ipK?4G@rOT?2;*o4Vy*DXQX-0TolrM8@d?KL&Y?sT$^yx@H3HaXG% zTC`=n?cOx&>WKY1@5f?Ku<-&?;%ZE<|Dq9X$Yb^cm5yk25#-ShGQx=|3`|vhXSNzrhIlzLWfNJ7?;h4@uWxK8&%h6CsECsTS zg_UP)U3Ob@iAfy&`l^_(GU?GyJFi1_)l!I_YwrQgx7nv2D)ZC~51!y!)P z$Ar3$WF3VRr(zx{E@g3*>#uxwLVAQ9%4RB`%>C>9^ zmg}Sb#y~T0zYe$}eab6h9(WcQmDcjb$0*M_YejalVE4sb}X7zz-#m+Qh9l{n>at z9oxO0QBREkJi+57Cs^XT#+0|1Gc8ouou$LJf=Ey$xi7N_2EzGM6-+y|Q z)0&l;Yd)EI`7wQFJuGO(q9-~=QQQW;ib9_k$5|tw;M;{2L*?;p^+RRz)dL@f%Y{iz zLLHtI1L#M1`k@RtlFruxWp$s~ff(SFS|DPGa;eFFew9!VH&yU1w)g2+Kek+!RJzt? z-YF4MDvOLVTLZOJ?zwUOk2=8ynvz=5KY$cq}%IejD+FY$Y~Y`kdb;PidHH zM0o9a$6%=uyjgUNGYS=~SWN$xbXC52vKX_|s2I2B|zhn!67pfewi{cZXf^0q?U-oQY>Z=;pXKi_d#^7UA=F zur=(?eAF%NnyllRxJX4Q_&Z4xC!L^&GXfkJlj%sUF&ByUgkV_4?Y%3SjXEJ}MrU`b z-cptOm_=PUJxyi?o^_ix2@zdCFVK-m(orscdUZWbt7^X|Pd74Amnv9S3rEA=U=!RSX zXG8&S9#Sy3iq)p*1-Oq6*vsiqv7P9)y()P?L!dz51aMJYvnGBKVwL}eT*c$H%jcfB z5+VZ5xlKr!$hMV773!e+bDN0L!hcVP?<mGTtzzbzcM>_>9kJ;nKd=T}iZ)&@5>U>kO00pW(p0uU1&ij55{{({ zrO`|jP-@c>g7}%Us0Qw|&A~tC@(y0ejYAQ!pE-Kw2?_I-PeRQfB5Ic+cdejeuh9Vu z!m={eb3)Z(0q=NLnJ{~XH9gw_ib1KoGX0z9BkZwG20g1f9LBhPDLaKvDnnr3+tq@f z8A1hgOjWVO2j^UuiBWsZOoa*=zp}9cUyciONT3DoVXl8mDTm^#qK;16`{usa_Mi9WA+*}}zsu#H*6s86ey z1oN@@m$^sPPp|sl1#5e?vd*e=GANLnV<|+~V!2B~IBL%1MG_KCZk~8^Ity}K40K2F zE{iwPHhh`;Qu0=;YRW5xC5P$J>|y=xg91PrE=9_N)hS*2#h$mz{ru-@Xa zc)f=={U`ZbWTV==A3Y=|ZfTdxi>pswXR>eT&J)7m=?}gcGq%0>4Re}TAg6A^VG_HE zYLEgOepk6`Px^(qg0A+G3Gaqb@7Mk8Or+k|=IDa-&?gRufZm?IJQwGLq`;q&oE*wt z(;rUT0PJ73*Q#xdqN+?j5tQ$D?@IJGPUq2=48E%~h%1dRe#{J@>-j;8UaEGgmdRyo z@|8W0Ys-_g>FNk2xgrDDpcV2NndyE^)VN=tWsfpn#bNnT#*x^JuB<|tCE0IH^m$5A z73Bx|FBT;JEfl`~?aqbA%gx{e-lJ{-;^*(;mSXD*-$}$x372|4y3=K}qX&rq5%%pA zZERPACN5Zdzg?U%+acEM<>CE&9S#3YN9MS3_#@e6MAFy)$h12GBLDF?zb({V) zahDl+>^CmL-zsGKF8kgDXgtN_H6c{ioBBBA<~mA_*x4$m1JFDAel`$XQvD#EXr<1# zae`|yoDiD)SuH9>h-@i3b_|y?|A6hp5GcE{H}-`#>YG+|#BGTLWu1C{Y|NhU_^ZQV4Oi|gtZ4wjse<0S&o36O??I12jn-vM z9P}}(mCAIFbT)-Rb=3StD}p8V9n4?e;DomBPsc4AtuFJdtm;_Z2q*hL+np!0jH=Cy z>`Da12ie{|9y6-Iz>c-&&zlsz;{GgVSBl~?#K?PF)u3injh&X0)+K4=zMVE;WBOClagRmo+FKoWmf}`{NnQV)e*^0{5l01 zw@o1GmY<%&y=Yj$^uBI6poA5N1*-~z_KxGX_7sATI48MOCdM}nm=>>3=StW_sct*y|GSo z+(%FHx{h-GgeN5b8Q@vW<;7S3;DKjVvO{6u^7P4;vBN$0Ec{!aD4P`IWCr*!Vx3(O z-{BfH#Oa^R#BxLbV^qK=YBG*kxm@th8!oADLqH#(v?5qUXJ6QqxNIZ}LbNkHL_a^2 z+5)4pR6~2-KO|-PtqTzXuL?^87aSNL(2lW)2bDDn9#Ad--ukK?j|_CC8Fa4bj!S(o zLu(D``Q7VQ6%b{~Vd#v+5ypcjO8PzNxvuBR__^g*&6n* z{Z8{GcOYpm$w4r)WNYF*AtU~ye~fBJM!mW6Ie`E)-eR#JQnNG@S+o+)!cA21&*G3< z;QRQGFD0!u6D92U(uE3iK&P`0W503g4Ap%{*2}xAU(T9e(^wsCDSEYb$-UBspUx(s zS)RW`*%X{+4npj?^+x6X2Hg#aBI{WyRn@8|@+-BXXW|deG?X!)KH}akST-#6zqW8W zFY^pyW1}{&l*FG)aNU47VhkOW!}G?4)uu9K!t%p#wK;JuqbAtWG6_KLWY)ii6XbMV zyaY%QU^i+q)_(M>`#wI2)AhS^+L*q{H2K?#L{|%#z$|EK1}`LcS_hh52bsU5(#7qv zK&7JV*$kzBR?qZ&ce=gj{O4fRRXH1st)kSb>4B1D9Ha`}Rq#4ma7T+Y5-pq1I%S^d zmnt(gOuD5(`Ie~QFBh!~)mea8IrZcxSUypmnG-Vzy3O9*!(u&jifvU)`M)2%pX+Us z6uKM%{oDkZK^B`ripLa<nlC%u{RA8Z@R*L7n(1H8b zpp^+3i0_lmO|NI9>KpTi3{Z|x3oFm_Nq~JghHd64@B7Z1e)c65yw3n$(CzwRi$A5S zS|k0zLtFXX2%hFl_;>3k^XsM@zg3&OR0k1Ha3v)O;Lpc3ZwjC-=ch9gP8Embc-V7g z18I)d1%`+7=VuAbnw;CVpH5{GFmWfW&963LK7xGFE^a+k!N zh}OWAUv?92_3hFPb&ir2Je;-1L*kcbO9BW`gQ&+~=cd;#7dTto8naZjpJ|b=wj|jK zT`WtTpWX_zbGmJ)P>W9pT=!5G9p*$4(U^=4Q@fU&F8p;&4pYkzLniRq+ut zrEULiO4|?@>vRXXOTSPGAcV`%tl<>nn+@bDln(eEr$y$%n(u|I9^^!kquL%sl5Eq@|pVE^DHVw zsW$C%e+C0`gP;S@nPLet-VIX;CZ6U}H-OaikG}`!{j`u6Shx7um^%>{p>2p6+0%hg zsoT9Ea1(`eiB$qNfclKt|b1_E6lL43XHlKK4l0dJW2^>{wFh;}}CtC87|lKu}s z+>dD){9Zknws@HDvgv+BrQs$X<$%DugV#SL$`hXSpaq?hM!ewDjwr7IEpCRaOI^kM zdTi;fUuxQi`fOXa^(c(OJz>1&qbcOnjWK;2rYV_^u zlnKOjzL<=5m=m6oq)ymTPW;Gj5Xqeu{XYiBKT4FeJm1oQLrX3$SG$HID z&`FV1R4JphDtA9pN)7875!zYcjpVJk%O2mGSI_Jsa@N4&BhwOA>D&*dIV~%jzd2$n z!T#&XLAY%1@b1)mt-$FxvoLt()T+%gGf(chSB)!+Z&=|Fs;6*VJ9P_TO#8a^Hm9m)0b?t<8LWY9>!1$ez!2ey7SpzV1eyCpO73fyxbjh?NN|nHv zSuzGT(#QJTM8_Z`zAP)y_oA(+2@B?mx$fsb&c4Oq8du&&x30#vAc5_$QQ*XVNnTSY z1T)SQuDb==fL#|Fa*_YN{2M6`Off-R5qX)Xh-0r@YFP{f6`@G8ua0ohV$AsC;>^C^|JtH|Gm!yxZz+XFF9QSmjG0=fH>~L`h8n4V z+iFR*kRoq-6fZumYifb~y?mb@=t*CeP|9&vY!+l+E}b~ts3;%Lb_5RXa69*&4Hbf0rLmhc1WSbkBI4^6~0+WEde=yV_)fC|7uh#P6cyn zz|g{&++?ugK-uWVRhu8wEk|j%>0(B?#x#88lFzUt$>@Yb@!70;R#PSo&sC~3*<@ft z!!sRl-crf^l!79_!c@iHXp@>D*P_RF*VOk|r&fjF&~!DUGtTJw#)AA~z=a1Ay3(gT zZ}Tv6%>ev8P};rKk!^ZWxPSzYN)vF^A+#`2^~Ic`OXWEG3)T^ z`o|<=7ACH^C^Rm4t4=PR|M2W+5iamZ)@^LRq=qSpM1nCjQTfrJ-m5cwBu3ku%eVn#*8%6vmdUEIj}+4KbmdKvpR1H9%WIZN(OZCXuC1@!&ah3&c;oW@$8V< zt$!CT1^6h?mFuS)k2S;;llJLWd_TwP`=!G=WMm;@v$%R!6gSWsxs{3FrK>qhuYwFa zT8gS}c)3`(orq%-EG1V=z7qp8cTp|gE4e(OSBxV(=QNaAZa%-~a$YUvE0W**326%) zoYuX!Ag42Yr%k~zq^fmm(R6ijYxCjBC{}LvlUd{1bd4^Gxx7>Bq4okx)FI&t_#dWR z1k1+4z$`*VIuG4oWN6-xpi@LvyEAkShgGqxLe*DBgZ-<^(@c-U4D$ouvS6xZaK+90 zrJRk&UGajt-0o(}wnyi2wDki|b!?ozrSdsT5OW=b%X2RQx221XDsA3n-sm7L#^p3+ zxX)A0=Rt&NPhZjQej?lT%w3m)tYc<7si>BF>W@|oLuY&rPQ2?^5fTXaaId;jt#FNEv@sb!9sIEpMs3b zuH?;5%*H>}SYrIeUlYVI(!!u+__p)v_(Xu$sU?&G*x<6Jqs9!U33cUW=Zvv&N4Zbj z>U{{MpTEuNPO^iRhMeki#y$A^V=}7b*0d!g7iy|pk&0PP5W77|#@tZlHmRkM-OmxD zx_{s3Z7%~=8`+KvlQ1w;UiZ>HmQi;{3zlqbUxaD#J zQ~PVyZ3b1a2z2z1&t0k)9||2Yy#iZ3+pKUDK=%9hNWTvk0iQGGrYUW1g~2!To;>OG zzs40t3m^5oJlE_ZONdb`s#j&mH;$D32D!51rEEbg;OGsLhc_2Rr8|R)nyaM+>Q?%= z{K+E2E-CyrG~0$2CHUP$wEZzjJ^3D~PKVJF zhIJ9aKbHtWBkmAilu{S8(%mecq~{$ZEaPfmR7I0e=*S=SmzsX8(>87Iw!3IDKPXn)eW71Scs8A*>M7W$~j!16}Y4<%d9EomTCFuW=*Ewg3E?9Hk ze6uw9$5~Ix_fd^C23&ckpk2o4hc;k~8bX1aWk+`S%8~@}dfK1i2noEmXg1S*xx`ZQ z&kB*T)tm8?Pd_Y_%aqMsHj~-vOeGqX9_2iN!HuFQ)WNe#P_97MSyFfYp>wN618N>j z@;q09^C91XG5l0jam|xouu4UQ%VH@osgN*oWbCvGRq@oO*k|UaO1NZ^jjMf=A#q zVDEtHGlevjY`Dog>PmHuX#9vNfMf@?$Zpm!JW9O-{A_J?&h;6Spy*C|no4|Wi`EcO zwa#kBAcYkyMlCB{kE4dA**kHBi0u+rND_3nB;&LRv&v^7Nc1gkd_a@=@$bir0#+E@0&Z{c z)C>vNLqR$kWD&@k4QDS;;n6z&EQRj1X#Y7=WObV0(Gx`f1bO&YC?de1W^l@d?0s8^ z#gjF^jMC6$VUlz9B6v5}l!Ij+9l9~sJNkQ@QY`*%)o$ONNqlwhyKSXRM`!}YPNnZw zM+7O*&xn$mpX``um@DI-)!ECDoO6G81bAuvySd5+aYVEV99zDWtZW+r)Z+NZxc&$J zkNmWJ9uDbH)83tR?Jv6?mr6=S0EYx4JY4sM%z6QG`MLN^+6@X!>nYz+s{|A$>7Cy6#Lg z((q2SCPvKAHbNNPV{kxJO4e~bqy6Z?*(c-3RrGj?2y;(!tN)^bHFU9FUJ6(fY${sP zOflOp0#SiYZs4Nu!ud~hm-IF5_1k-XEUyL z%}zSI`lXi78F2*LzSh2*v7Vc0HWc1BYD+8I(9El7AQ{me__fllN5P?c9{USC>1zR= zW^eSu#k8Xm)R=i|t0-G9h6>qu@I!lYw6FoT5?UoGq;-)9`XTy|z)q_#<+u>=*E6aG z_#2GC8&}>eY+6aiCZf*HmME+2JKhooa!3FQ45m3KrOP{B&H$Rqi=V)Bnj#)wZh=u7 zqh<2Q4~XgbJ#r+7l$drl6Pe$$`J^&=RgfH`ZeS944S0j+smxwbYZj&HOxU?^W8HE^ z;YawVa_Os)$yGbVIfNsN)XjgK-xIt?89hY!7r(mWqjRHs>SGOG;s*dDd0SPhNmCfX z9>moeqPSG7yWw8Ue5`<|LHBqgP4o4@v#>i1WTeA1(e&c?eXJ(8@OM-CbEdqx%T|$2 zh@77nyZEm52gWG<)-$dkfeVdY@S~>37Ahq*Wl>kn^}5U4>vv+m3Qqm!{A$C^cel3c zj@frc&c|p9vEJ7O19vco2TKc#S7#nJZUjbEvq(s#<%do2^UoZ90^{{l*D5sZc{!>q ze?`9;puNE!H47rVlrNt%WJ6?3z|qti9|%kt81eb zf%C_yXNuyq(UWLDO#{7o&O89oKpNnu0~|D7Kuiz-$1gLl+7WhX&B848bFU9{_01Yx z<5n#FUT{UiL1(7z=Z6f(ve)xTM=>9r;fGlgMD+V}yO?nITOlBjO+o7cE4i_rN#k?D z1M;O8h6mf)jkQ%Ui>Y|;BtjnF=}D^g&=33yf*J}g~5ad z*@lIL^z?k#iV-6Lq|JDT-ee_QHXYMq{Gi3Fh^}~+y7{FGrP+JC=IZ_7=a(}TxvBaD zw5;mZDrT4Tzhu(GM+A`?2}W_B#8y`;sC@ZdQWwCoM=kK~AqE57p2kCquFoL{B@rrbyzrripl2P)qR2nuw)d%}mGI zEFQlfx}}qYQW;kMv-ZuG#^+JqZMM`~Sqt%u)~a3J{6Ii6ZqYC5H*ib1=?*G2VvoihZ-K*frslV$G(Ma6!j(Qt_IY(L;;Gk%fl6ydd zol*&{&V*);0ow+pUnaYMAi#&)r=blczxPnQ>pp@CGw0$Kn5N%K)6l+Es*_!6O0|2C zehEvp)v4C3t)hP!%$x6&ZHR=N&hE=*{X+fe;IBbNR77(?f)%KBvKTL)88oIxJ!-lw z6DZd{o8px{m1&2b4MI<~VPJmYO`Dgx?L+H&u+xZkw2rVquER;lvo^b#E@U)Q7p|vk z65;H7YeG^Hw)%FV-)pn}fTra_r2l@U{q!PbXX7x6wHUeMOPty*89zIemOVBxQ}I^m z*M#KNKAV-n`f}0rtv*K&S;g)!5l=wfHzDUPeL7}fnoDO9ISJ1+a{d#ORy&Ds1)pMw+>wb)03k5q(q3 z-lnE*a>(dFYiys~J{s~$KM~_)USy1_Lc8&wyi(l3hxK$D2ZY}DA+<=k^2coq#dK_S zJ(ues^oQRl;f6ZWt1x6*cX2hW$k?)aojg7Xg2m3rx>)Onv<-hrC8W&q{SjwT{K569moX(@>JOz8+x*``sFT(y9s`khQaRWe-bAE}_*QmW zq|(_rT4D+OtKuG6*>T*|;w!hm_8)tOfRexjo2$#W7hiWEG?TXj?s`YtdE)z!+^-2R_nWzqk>+kxj`TCRBfN7Ir4>PJ{sAgE2H#O3 zoHtSPTXz0Mx`XP>ieiODFqtQYPe#ym+C(n2{!*3MVq+}Nyv&K@XOnQfcvTq&^mX1Z zt74EzmLpkywlN&Zsf89Ydq;Zre6%_>pEVd+!QR$2SOJ`Y$ecQn_D^#a&<)aafbe!I ze*OFPah4f(p510ce|~mTp8@4??Lvi|(Tu1pwQOH@71op-mL8G-z#IszB{h-1L1?JZ zR3|@BH%kJ(iqcM!+sJam%Lr?B`>&HmU$l%%?U^jdTxIrb#b%@HSjOss;KlYiG2cF; z`kNhQrd=t2hI0c`YKE1F+n_G|Nm5k@t7+ETD9GpKmh*|xEf<4Ft87hzbfQIex`Xi< zNv_$ct&7vsiC`My9wOTivIZvL`puVaXFAso_$kZv4b}k89j+$tA@W&k_fW?4TX{ft z9%BDsPpp{IBrm-4W^kNC7}$Zlpvm7(X+|7e^`eduE8m%Clu}yG{=Ku!9A4E@ z(S7>?^?01Sfkjqpd|*KvX1eZlSP?3j3gjA>zZ(r%7U|n?^wZA@&CeYXkz;%*Xsg>! zCWF)2BLT)u3V(5>!D!rsNA>ztFUZ2YSJxzp&3v|gQXZM6Set$<=OX!QKO2TKwnokG zzcA7&;UiJ%(|uNG8%2q0#Kb$3!^6 zvMH%NCEZ~uxzkYa)|WWlML6)!Kjd{L_WO2bw&CWvsy^PNvbw4)&qXC^u2woX*Yeq~ zsMF+TLS5c_wz27Qsf)>JxF}L$Nb;QkF z8hS<47fBd~#Rf(qcmTlUipshsgP=#NC;py(QsKj7)77)T(RL0!K=VtDE+WH0FUETi zgs)NH-9r>3AF}qN9s}_lt-?Q`!?+2Cy7V?wZ(br3N5!xQEixY46>2`H7Scq;VKiyH ze2`Xa+_fsK@^L3(Fa>k~{57WB@Jqn?dtsU(>4efz*~rKva$Uq<%EB4;T9g=bK zB~>35s0S~pgSuZL@VQ18A*N!o4z4;lxO!UA5c;@TLC7Ab5|%Ds6J5{I$Gge{~nsnZGGbu`jSS z3arj7*&PQr7lM_>QR*(M?X*sJUz*pypNbaiLP=CP@*|oyDmmBjCOrCUsg0+`(bZ8d zr=kx{bTk!zdXGoAWSeW`vKO0k>_!Wi%&P2i8`XZJon8_br!1v>I`3VLjc7gqo9u5X z9XpTFNcz(vZ^6DJl738e*L)@kAPbgb(x36l3?DHS+JxhlEEoO&2OX;a;SarGa)Vv* zYZ+wy(KcIQPfo$d?Vp1THW74)|Kuy;-3o=qkpQDrc{Mx_& zV2PkaB(Y*JJ4jnz=O#RSqCF*F0NQA$uJI=P3V5V?gTr6KFcuRV>YEN9`G76`gy6_I zCX=KB#SC4OoeJW=*nW22)WF5jO3!I7q&aiOIr|m3@>Rmb3_;chU+}d?dti&XZ7m*( zDLSWR0I>6voFDOj1jhK8TIW-HBo) z#fss^Bg19?3;7g2;$qtl4Mi9f>yBIfB*jS3YJpOopv|~be}pVblh&&Mtw#N7EG4Rt z8URb2Y5X%9D@K#&0pm7*9-h)soNJJlLw^umZU1QP>53v7GOoPdma_PNqqHypm00tz zWFK1c?j~uMRb#^$+3i?LzHs9{!LjO!j_8`3CRlOCG2&+E{s(~c|3yK9JeqOR)30Rr zDDzoCdke^6`?Z~0!b`we6c~GcuQK@cKUr`X0NapsI9;?iWX-;~esn+Oa46?!`$H}a zUcL{3M)m)7BBf)1d%#>EO%jk!w>Hm`%CuaJ8_No0x0bu`M o6Bv51d<4ZR{hwqyTbCz)|8YtpnGI2o|A11Z#pT7SMGb@g2a8|$>Hq)$ diff --git a/public/js/common.js b/public/js/common.js index 6bd4431..d360648 100755 --- a/public/js/common.js +++ b/public/js/common.js @@ -325,7 +325,7 @@ function initUploader(obj, index) { var li = '

'; $(".uploader-list[data-uploader-index=" + index + "]").append(li); $(".uploader-list[data-uploader-index=" + index + "]").children(":last").find(".close").click(function () { @@ -439,7 +439,7 @@ function initUploader(obj, index) { var index = this.options.uploaderIndex; $('#' + file.id).addClass("alert-success").attr("data-id", data.id); - $('#' + file.id).find("a").attr("href", "/storage/" + (data.folder ? data.folder + "/" : "") + data.name).attr("target", "_blank").addClass("text-success"); + $('#' + file.id).find("a").attr("href", "/storage/" + (data.folder && data.folder != "public" ? data.folder + "/" : "") + data.name).attr("target", "_blank").addClass("text-success"); if (typeof uploaderCallback === "function") { var res = uploaderCallback(file, data, index); diff --git a/resources/views/admin/paramedic/create.blade.php b/resources/views/admin/paramedic/create.blade.php index 621e566..68bb134 100755 --- a/resources/views/admin/paramedic/create.blade.php +++ b/resources/views/admin/paramedic/create.blade.php @@ -35,7 +35,7 @@ } function uploaderCallback(file, data, index) { - $('input[data-uploader-index=' + index + ']').val("/storage/" + (data.folder ? data.folder + "/" : "") + data.name); + $('input[data-uploader-index=' + index + ']').val("/storage/" + (data.folder && data.folder != "public" ? data.folder + "/" : "") + data.name); return true; } diff --git a/resources/views/admin/paramedic/index.blade.php b/resources/views/admin/paramedic/index.blade.php index 92c6794..cb8ee14 100755 --- a/resources/views/admin/paramedic/index.blade.php +++ b/resources/views/admin/paramedic/index.blade.php @@ -6,7 +6,6 @@
-
@lang("icons.action_create") @lang('actions.create'){{$modelName}} From ec4fb9b2b49d789aec785e31d37c2817f11aa473 Mon Sep 17 00:00:00 2001 From: weizong song Date: Sun, 16 Jul 2023 21:19:26 +0800 Subject: [PATCH 39/73] up --- .DS_Store | Bin 6148 -> 0 bytes public/.DS_Store | Bin 6148 -> 0 bytes public/dashboard/.DS_Store | Bin 6148 -> 0 bytes public/dashboard/skin/.DS_Store | Bin 6148 -> 0 bytes public/dashboard/skin/default/.DS_Store | Bin 6148 -> 0 bytes 5 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store delete mode 100644 public/.DS_Store delete mode 100644 public/dashboard/.DS_Store delete mode 100644 public/dashboard/skin/.DS_Store delete mode 100644 public/dashboard/skin/default/.DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 7c435d0ae7da7dc075c9f732f1dfc6b43615eac4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKI|>3Z5S>vG!N$@uSMUZw^aNf&RuKe2LF~8kTprCgpF&yfv{2r_^|vYm-cL}Uavl&cM0vwic9^)jMBIL_G1X16_Wn&a`%$$lL$?odv0kwy-WeA}Q= z0V+TRr~nn90v}f(OYCU;@soKV6`%sYu7G_X3f! WHL(qJI^s?T@@K$wp;3WvD{uz~u@!g# diff --git a/public/.DS_Store b/public/.DS_Store deleted file mode 100644 index 898243f9e30b060ba87519ec58e128e770490ecc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJ5EC}5S)b+K{P2TeFbh{Md1Wo0K!w0BGQwH=wHRTax`W?1<`{pX`)$aJ@$IX zmZy087J#k4hG$>}U`cnxw-0mkefOE&Rm6yNp0UMl4YTaO1I~TGK-Lla-~8jp zb{r4BEt3LLKnh3!DIf(ds6Z9h<>Lj<)KOAE3fzVQ{(We4$6h!k#;1crv;f2f!(p69 zFF|Y`Aojv3krA3Dm6%kk7Q>Rxc&of#I3*?>R?Uai%~lQsCMO`~W~C6b>!3`IW^4*{}x?5HIN$PI)bIYBQ_G)94-0_7^TtBA!`Tcggc#*d1fT#2kv;Eu_q<|EV0#ZN< zNPz_@kjMCDyP#*%qeuZMunYzK`%vi4nrxl%>0pQvfE-v3<2q&uvUq{4$=1mV&2oCM zY_%9eydLdj$?Iyeb@p~x4j-0xHlJc>*4tr)3C(IiK?+ELnF8yckAD82=zq=svlgXN zKnnab1#CFJ9uIt}JX;@L&+Bhl^>w3@aXG`Up8zI)6u;2JxLET HJXL`oqlyx) diff --git a/public/dashboard/skin/.DS_Store b/public/dashboard/skin/.DS_Store deleted file mode 100644 index 0efb1658f0edc8156f30c8d17248a551918b80ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJ5EC}5S)cbL`svA(pTUHR+O9|7YOi36)6Rze--EAXv}^JqL*}`0L@D4vDZ7c zJjL6$0Bm&{o`5BQIo%PTK1|K`-6wWe5hK!h#t8>}?1%T)m*XV+a=^I{81RNYo`3R> z2j7xO0VyB_q<|EV0ykEm3haDw<8yVK6p#XcUjhF&5}w?s#S|&NoTxOUN0OIlMbuq!|GKJ1^$%+Hd}AkD?X`e>*R4>Ya4w>_na@f8|Ojc5apN{<(LaE$B&Ve adClkC?}cMx&>0UpQ9lE&i%bgqwgTVRDiw_Y diff --git a/public/dashboard/skin/default/.DS_Store b/public/dashboard/skin/default/.DS_Store deleted file mode 100644 index 5c3c6c2f9724dd4dd277ebc9126dd114ea190606..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJ8r`;3?&nz2#_UXMqQyd5RCK$xj;WoiUJKh7}-7bTs>MJKSKhin>#dk1gIxb zd=m5q(-aYH&)uWQMnqO{L;12{YPN4au|-A{2*()*8IIlX_S*NKlkD38<37lToa9B` zFZs4XqXJZb3Qz$mKm}%3AWQ6OJ^RT#kP1+N|E_?29}3*CCXRvr>A>JE0I)&W4Rh}$ zfW-p9nm7g`0@I)ZgR0qLXwVTanO76Xz@Up}^PzdOW{0AFJI*hjE?NUQQUNM(t-vyt z8>|0M@L&4>YZ6yffC}7|0^02MyB1H%+B$ih)!G7ohFi`z+zfN4VDNGb^m2@amE)}^ bMP9Kv_G{u8=yb%L4&={(=|ZCdf33g|P&^fT From 11237a24f25e8ca39576418ecde031ce3f8d1d0d Mon Sep 17 00:00:00 2001 From: weizong song Date: Sun, 16 Jul 2023 21:52:07 +0800 Subject: [PATCH 40/73] up --- .../Controllers/Customer/OrdersController.php | 12 +++- app/Notifications/CustomerOrderCreated.php | 65 +++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 app/Notifications/CustomerOrderCreated.php diff --git a/app/Http/Controllers/Customer/OrdersController.php b/app/Http/Controllers/Customer/OrdersController.php index 4be4b2e..6057887 100644 --- a/app/Http/Controllers/Customer/OrdersController.php +++ b/app/Http/Controllers/Customer/OrdersController.php @@ -13,10 +13,14 @@ use App\Models\Product; use App\Models\ProductItems; use App\Models\ProductParamedicLevel; use App\Models\Recharge; +use App\Notifications\CustomerOrderCreated; +use App\Notifications\RechargePaid; use Carbon\Carbon; use Illuminate\Database\Eloquent\Relations\MorphTo; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\Notification; class OrdersController extends CommonController { @@ -428,6 +432,12 @@ class OrdersController extends CommonController ]); $order->getSerial(); + if ($order->prokect->managers) { + foreach ($order->prokect->managers as $manager) { + Notification::send($manager, new CustomerOrderCreated($order)); + } + } + DB::commit(); return $this->getOrder($order->id); } catch (\Exception $exception) { @@ -505,7 +515,7 @@ class OrdersController extends CommonController public function cancelOrder($id) { $order = (new Orders())->with("orderItems")->find($id); - \Log::info($order); + Log::info($order); if ($order->status !== Orders::STATUS_UNCONFIRMED) { return response()->json([ "errorcode" => 50001, diff --git a/app/Notifications/CustomerOrderCreated.php b/app/Notifications/CustomerOrderCreated.php new file mode 100644 index 0000000..399754b --- /dev/null +++ b/app/Notifications/CustomerOrderCreated.php @@ -0,0 +1,65 @@ +order = $order; + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * @return array + */ + public function via($notifiable) + { + return ['database']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + return (new MailMessage) + ->line('The introduction to the notification.') + ->action('Notification Action', url('/')) + ->line('Thank you for using our application!'); + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray($notifiable) + { + return [ + "order_id" => $this->order->id, + "order_serial" => $this->order->serial + ]; + } +} From c76268eca67a972323e0978db13dbf9e989e0e14 Mon Sep 17 00:00:00 2001 From: weizong song Date: Sun, 16 Jul 2023 21:53:01 +0800 Subject: [PATCH 41/73] up --- app/Http/Controllers/Customer/OrdersController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Customer/OrdersController.php b/app/Http/Controllers/Customer/OrdersController.php index 6057887..06fb6d6 100644 --- a/app/Http/Controllers/Customer/OrdersController.php +++ b/app/Http/Controllers/Customer/OrdersController.php @@ -432,8 +432,8 @@ class OrdersController extends CommonController ]); $order->getSerial(); - if ($order->prokect->managers) { - foreach ($order->prokect->managers as $manager) { + if ($order->project->managers) { + foreach ($order->project->managers as $manager) { Notification::send($manager, new CustomerOrderCreated($order)); } } From 1a0efa4a73c37d08488b5c09f1d72abe7677424a Mon Sep 17 00:00:00 2001 From: weizong song Date: Sun, 16 Jul 2023 22:00:33 +0800 Subject: [PATCH 42/73] up --- app/Models/Notifications.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/Models/Notifications.php b/app/Models/Notifications.php index caf0393..6c14a83 100644 --- a/app/Models/Notifications.php +++ b/app/Models/Notifications.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Notifications\CustomerOrderCreated; use App\Notifications\RechargePaid; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Request; @@ -26,6 +27,9 @@ class Notifications extends CommonModel $title = "有一笔新的收款到账,请注意查看。"; } break; + case CustomerOrderCreated::class: + $title = "有用户通过小程序进行了下单,订单编号:{$data["oder_serial"]},请注意及时处理。"; + break; default: $title = "创建于{$this->created_at}的通知"; } From 862fb3ac9a6509f1619ee4e065b3e553df590754 Mon Sep 17 00:00:00 2001 From: weizong song Date: Sun, 16 Jul 2023 22:01:12 +0800 Subject: [PATCH 43/73] up --- app/Models/Notifications.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Models/Notifications.php b/app/Models/Notifications.php index 6c14a83..5930a9a 100644 --- a/app/Models/Notifications.php +++ b/app/Models/Notifications.php @@ -28,7 +28,7 @@ class Notifications extends CommonModel } break; case CustomerOrderCreated::class: - $title = "有用户通过小程序进行了下单,订单编号:{$data["oder_serial"]},请注意及时处理。"; + $title = "有用户通过小程序进行了下单,订单编号:{$data["order_serial"]},请注意及时处理。"; break; default: $title = "创建于{$this->created_at}的通知"; From 02f2ac76f556b7abf0d2c2ace16d87f0d356ec9f Mon Sep 17 00:00:00 2001 From: weizong song Date: Sun, 16 Jul 2023 22:19:06 +0800 Subject: [PATCH 44/73] up --- app/Exports/OrdersExport.php | 39 +++++++++++++++++++ .../Controllers/Admin/OrdersController.php | 12 +++++- resources/views/admin/orders/index.blade.php | 10 +++++ 3 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 app/Exports/OrdersExport.php diff --git a/app/Exports/OrdersExport.php b/app/Exports/OrdersExport.php new file mode 100644 index 0000000..ead439a --- /dev/null +++ b/app/Exports/OrdersExport.php @@ -0,0 +1,39 @@ +data = $data; + } + + /** + * @return \Illuminate\Support\Collection + */ + public function collection() + { + $res = []; + foreach ($this->data as $row) { + $res[] = [ + "订单编号" => " ".$row->serial, + "所属项目/医院" => $row->project->name, + "客户姓名" => $row->customer->name ?: $row->patient->name, + "联系电话" => " ".$row->customer->mobile, + "被护理人" => $row->patient->name, + "开始服务日期" => $row->from_date, + "结束服务日期" => $row->to_date, + "总计" => $row->total, + "状态" => $row->getStatusLabelAttribute(), + ]; + } + if (count($res)) { + array_unshift($res, array_keys($res[0])); + } + return collect($res); + } +} diff --git a/app/Http/Controllers/Admin/OrdersController.php b/app/Http/Controllers/Admin/OrdersController.php index 3dfd89c..42d4cbb 100755 --- a/app/Http/Controllers/Admin/OrdersController.php +++ b/app/Http/Controllers/Admin/OrdersController.php @@ -8,11 +8,13 @@ namespace App\Http\Controllers\Admin; +use App\Exports\OrdersExport; use App\Models\OrderItems; use App\Models\Orders; use App\Models\Project; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Maatwebsite\Excel\Facades\Excel; class OrdersController extends CommonController { @@ -66,8 +68,14 @@ class OrdersController extends CommonController $query->with(["room", "building"]); } ]) - ->orderBy("id", "desc") - ->paginate(10); + ->orderBy("id", "desc"); + + if (request()->is_export) { + $data = $data->get(); + return Excel::download(new OrdersExport($data), "订单导出.xlsx"); + } + + $data = $data->paginate(10); foreach ($data as $order) { $order = $order->refreshTotal(); } diff --git a/resources/views/admin/orders/index.blade.php b/resources/views/admin/orders/index.blade.php index 2ea0035..6045946 100755 --- a/resources/views/admin/orders/index.blade.php +++ b/resources/views/admin/orders/index.blade.php @@ -28,6 +28,8 @@ + +
@@ -250,5 +252,13 @@ var item_id = $("#modal-box form input[name=item_id]").val(); $("#data-table tbody tr[data-item-id='" + item_id + "']").find("td[data-field=total]").html(total); } + + function doExport(ele) { + var url = "{{ url("admin/orders") }}"; + url += "?is_export=1"; + var params = $(ele).closest("form").serialize(); + url += "&" + params; + window.open(url); + } @endpush From 4599442116375f594379afbd2e084ad7e8f75fda Mon Sep 17 00:00:00 2001 From: weizong song Date: Mon, 17 Jul 2023 09:58:25 +0800 Subject: [PATCH 45/73] up --- app/Http/Controllers/Admin/ParamedicController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Admin/ParamedicController.php b/app/Http/Controllers/Admin/ParamedicController.php index 24011f1..f7fd7f5 100755 --- a/app/Http/Controllers/Admin/ParamedicController.php +++ b/app/Http/Controllers/Admin/ParamedicController.php @@ -37,7 +37,7 @@ class ParamedicController extends CommonController ->orWhere("id_card_number", "like", "%" . request()->keyword . "%"); }); } - $data = $data->paginate(10); + $data = $data->orderBy("id","desc")->paginate(10); return view($this->bladePath . ".index", compact("data")); } From 6077e7e2cf0301e7e5270310e53dc26c89657c22 Mon Sep 17 00:00:00 2001 From: weizong song Date: Mon, 17 Jul 2023 10:00:18 +0800 Subject: [PATCH 46/73] up --- resources/views/admin/paramedic/index.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/admin/paramedic/index.blade.php b/resources/views/admin/paramedic/index.blade.php index cb8ee14..0d69729 100755 --- a/resources/views/admin/paramedic/index.blade.php +++ b/resources/views/admin/paramedic/index.blade.php @@ -33,7 +33,7 @@ From d7d963b8a39e4765080a57a9ed0ca7b26dae6612 Mon Sep 17 00:00:00 2001 From: weizong song Date: Mon, 17 Jul 2023 14:06:47 +0800 Subject: [PATCH 52/73] up --- app/Models/Project.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Models/Project.php b/app/Models/Project.php index 9d4d50c..5152174 100755 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -16,7 +16,7 @@ class Project extends SoftDeletesModel if ($ids) { $split = (new CommonModel())->split; $ids = explode($split, $ids); - $query->whereIn('id', $ids); + $query->whereIn('id', $ids)->orderBy("id","desc"); } } From 49f17d2e86589c1d9de2929e1e3888800f5daa6e Mon Sep 17 00:00:00 2001 From: weizong song Date: Mon, 17 Jul 2023 14:12:06 +0800 Subject: [PATCH 53/73] up --- app/Http/Controllers/Admin/StatisticsController.php | 2 +- app/Models/Project.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Admin/StatisticsController.php b/app/Http/Controllers/Admin/StatisticsController.php index 8066377..38659b9 100755 --- a/app/Http/Controllers/Admin/StatisticsController.php +++ b/app/Http/Controllers/Admin/StatisticsController.php @@ -34,7 +34,7 @@ class StatisticsController extends CommonController public function _checkProjects() { - $projects = (new Project())->adminProject()->get(); + $projects = (new Project())->adminProject()->orderBy("id","desc")->get(); view()->share(compact("projects")); return $projects; } diff --git a/app/Models/Project.php b/app/Models/Project.php index 5152174..9d4d50c 100755 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -16,7 +16,7 @@ class Project extends SoftDeletesModel if ($ids) { $split = (new CommonModel())->split; $ids = explode($split, $ids); - $query->whereIn('id', $ids)->orderBy("id","desc"); + $query->whereIn('id', $ids); } } From 89bd760fc26bf57e81e56ba5714e97e02bd6c9fb Mon Sep 17 00:00:00 2001 From: weizong song Date: Fri, 28 Jul 2023 16:06:54 +0800 Subject: [PATCH 54/73] up --- app/Http/Controllers/Admin/HomeController.php | 28 ++--- .../Controllers/Manager/OrdersController.php | 1 - resources/views/admin/home.blade.php | 108 +++++++++--------- 3 files changed, 68 insertions(+), 69 deletions(-) diff --git a/app/Http/Controllers/Admin/HomeController.php b/app/Http/Controllers/Admin/HomeController.php index 28fc751..6da2c6f 100644 --- a/app/Http/Controllers/Admin/HomeController.php +++ b/app/Http/Controllers/Admin/HomeController.php @@ -10,20 +10,20 @@ class HomeController extends CommonController public function index() { - $month = date("Y-m"); - $order_items = OrderItems::whereHas("order")->whereRaw("DATE_FORMAT(`service_date`,'%Y-%m') = '{$month}'") - ->where("total", ">", 0)->get(); - $order_items_count = $order_items->count(); - $total = $order_items->sum("total"); - $orders_count = $order_items->groupBy("order_id")->count(); +// $month = date("Y-m"); +// $order_items = OrderItems::whereHas("order")->whereRaw("DATE_FORMAT(`service_date`,'%Y-%m') = '{$month}'") +// ->where("total", ">", 0)->get(); +// $order_items_count = $order_items->count(); +// $total = $order_items->sum("total"); +// $orders_count = $order_items->groupBy("order_id")->count(); +// +// foreach ($order_items as &$item) { +// $item = $item->calculateFee(); +// } +// $total_paramedic = $order_items->sum("paramedic_total"); +// $fee = $total - $total_paramedic; +// $laravel_duration = microtime(true) - LARAVEL_START; - foreach ($order_items as &$item) { - $item = $item->calculateFee(); - } - $total_paramedic = $order_items->sum("paramedic_total"); - $fee = $total - $total_paramedic; - $laravel_duration = microtime(true) - LARAVEL_START; - - return view($this->bladePath . ".home", compact("orders_count", "order_items_count", "total", "total_paramedic", "fee", "laravel_duration")); + return view($this->bladePath . ".home"); } } diff --git a/app/Http/Controllers/Manager/OrdersController.php b/app/Http/Controllers/Manager/OrdersController.php index fb18f35..7a8a79f 100644 --- a/app/Http/Controllers/Manager/OrdersController.php +++ b/app/Http/Controllers/Manager/OrdersController.php @@ -50,7 +50,6 @@ class OrdersController extends CommonController public function getProjects() { - \Log::info("支付码不正确"); $projects = (new Project()) ->join("manager_project", 'project.id', '=', 'manager_project.project_id') ->join('managers', 'managers.id', '=', 'manager_project.manager_id') diff --git a/resources/views/admin/home.blade.php b/resources/views/admin/home.blade.php index e31b831..c2bcce0 100644 --- a/resources/views/admin/home.blade.php +++ b/resources/views/admin/home.blade.php @@ -15,61 +15,61 @@ @endpush @section("content") -
-
-
-
-
-

- -
本月护理人天数/订单数
- {{ $order_items_count }} / {{ $orders_count }} -

-
-
-
-
+{{--
--}} +{{--
--}} +{{--
--}} +{{--
--}} +{{--
--}} +{{--

--}} +{{-- --}} +{{--
本月护理人天数/订单数
--}} +{{-- {{ $order_items_count }} / {{ $orders_count }}--}} +{{--

--}} +{{--
--}} +{{--
--}} +{{--
--}} +{{--
--}} -
-
-
-
-

- -
本月应扣款
- {{ $total }} -

-
-
-
-
+{{--
--}} +{{--
--}} +{{--
--}} +{{--
--}} +{{--

--}} +{{-- --}} +{{--
本月应扣款
--}} +{{-- {{ $total }}--}} +{{--

--}} +{{--
--}} +{{--
--}} +{{--
--}} +{{--
--}} -
-
-
-
-

- -
本月应发护工酬劳
- {{ $total_paramedic }} -

-
-
-
-
+{{--
--}} +{{--
--}} +{{--
--}} +{{--
--}} +{{--

--}} +{{-- --}} +{{--
本月应发护工酬劳
--}} +{{-- {{ $total_paramedic }}--}} +{{--

--}} +{{--
--}} +{{--
--}} +{{--
--}} +{{--
--}} -
-
-
-
-

- -
本月管理费
- {{ $fee }} -

-
-
-
-
-
+{{--
--}} +{{--
--}} +{{--
--}} +{{--
--}} +{{--

--}} +{{-- --}} +{{--
本月管理费
--}} +{{-- {{ $fee }}--}} +{{--

--}} +{{--
--}} +{{--
--}} +{{--
--}} +{{--
--}} +{{--
--}} @endsection From 3729250fde745ef2847b98ffa98494b4f812e36d Mon Sep 17 00:00:00 2001 From: weizong song Date: Tue, 1 Aug 2023 11:09:22 +0800 Subject: [PATCH 55/73] up --- app/Http/Controllers/Admin/StatisticsController.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Admin/StatisticsController.php b/app/Http/Controllers/Admin/StatisticsController.php index 38659b9..c20bc32 100755 --- a/app/Http/Controllers/Admin/StatisticsController.php +++ b/app/Http/Controllers/Admin/StatisticsController.php @@ -273,9 +273,9 @@ class StatisticsController extends CommonController $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->orderBy("id", "desc"); } ]) - ->whereHas("oneBalance", function ($query) use ($before_datetime) { - $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->where("balance", ">", 0)->orderBy("id", "desc"); - }) +// ->whereHas("oneBalance", function ($query) use ($before_datetime) { +// $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->where("balance", ">", 0)->orderBy("id", "desc"); +// }) ->whereHas("orders", function ($query) use ($before_datetime, $project_id) { $query ->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}") From f5d3654882db859a09ea396a432b74e712bed695 Mon Sep 17 00:00:00 2001 From: weizong song Date: Tue, 1 Aug 2023 11:10:01 +0800 Subject: [PATCH 56/73] up --- resources/views/admin/statistics/customer-balance.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/admin/statistics/customer-balance.blade.php b/resources/views/admin/statistics/customer-balance.blade.php index 86a2ec1..ba7daaf 100755 --- a/resources/views/admin/statistics/customer-balance.blade.php +++ b/resources/views/admin/statistics/customer-balance.blade.php @@ -60,7 +60,7 @@
- + @endforeach From 6685aa5c66817236b3a9efad34625d0fd6e35993 Mon Sep 17 00:00:00 2001 From: weizong song Date: Tue, 1 Aug 2023 11:32:14 +0800 Subject: [PATCH 57/73] up --- app/Http/Controllers/Admin/StatisticsController.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/Admin/StatisticsController.php b/app/Http/Controllers/Admin/StatisticsController.php index c20bc32..f92b514 100755 --- a/app/Http/Controllers/Admin/StatisticsController.php +++ b/app/Http/Controllers/Admin/StatisticsController.php @@ -276,11 +276,11 @@ class StatisticsController extends CommonController // ->whereHas("oneBalance", function ($query) use ($before_datetime) { // $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->where("balance", ">", 0)->orderBy("id", "desc"); // }) - ->whereHas("orders", function ($query) use ($before_datetime, $project_id) { - $query - ->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}") - ->where("project_id", $project_id); - }) +// ->whereHas("orders", function ($query) use ($before_datetime, $project_id) { +// $query +// ->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}") +// ->where("project_id", $project_id); +// }) ->get(); $laravel_duration = microtime(true) - LARAVEL_START; From 37307b8c091e9b35598bfa9420377c2734a80897 Mon Sep 17 00:00:00 2001 From: weizong song Date: Tue, 1 Aug 2023 11:33:11 +0800 Subject: [PATCH 58/73] up --- app/Http/Controllers/Admin/StatisticsController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Admin/StatisticsController.php b/app/Http/Controllers/Admin/StatisticsController.php index f92b514..3f97c20 100755 --- a/app/Http/Controllers/Admin/StatisticsController.php +++ b/app/Http/Controllers/Admin/StatisticsController.php @@ -281,7 +281,7 @@ class StatisticsController extends CommonController // ->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}") // ->where("project_id", $project_id); // }) - ->get(); + ->paninate(); $laravel_duration = microtime(true) - LARAVEL_START; return view($this->bladePath . ".customer-balance", compact("customers", "before_datetime", "project_id", "laravel_duration")); From 482df429a4179402c27d3611c42127a305eab793 Mon Sep 17 00:00:00 2001 From: weizong song Date: Tue, 1 Aug 2023 11:34:14 +0800 Subject: [PATCH 59/73] up --- app/Http/Controllers/Admin/StatisticsController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Admin/StatisticsController.php b/app/Http/Controllers/Admin/StatisticsController.php index 3f97c20..29b3e47 100755 --- a/app/Http/Controllers/Admin/StatisticsController.php +++ b/app/Http/Controllers/Admin/StatisticsController.php @@ -281,7 +281,7 @@ class StatisticsController extends CommonController // ->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}") // ->where("project_id", $project_id); // }) - ->paninate(); + ->paginate(); $laravel_duration = microtime(true) - LARAVEL_START; return view($this->bladePath . ".customer-balance", compact("customers", "before_datetime", "project_id", "laravel_duration")); From be23a706fb0fdbe2b812fae8523d73e38cff226e Mon Sep 17 00:00:00 2001 From: weizong song Date: Tue, 1 Aug 2023 11:35:19 +0800 Subject: [PATCH 60/73] up --- app/Http/Controllers/Admin/StatisticsController.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Admin/StatisticsController.php b/app/Http/Controllers/Admin/StatisticsController.php index 29b3e47..b305791 100755 --- a/app/Http/Controllers/Admin/StatisticsController.php +++ b/app/Http/Controllers/Admin/StatisticsController.php @@ -273,9 +273,9 @@ class StatisticsController extends CommonController $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->orderBy("id", "desc"); } ]) -// ->whereHas("oneBalance", function ($query) use ($before_datetime) { -// $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->where("balance", ">", 0)->orderBy("id", "desc"); -// }) + ->whereHas("oneBalance", function ($query) use ($before_datetime) { + $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->where("balance", ">", 0)->orderBy("id", "desc"); + }) // ->whereHas("orders", function ($query) use ($before_datetime, $project_id) { // $query // ->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}") From e8faad37f61840ffd859e107e9fb1967a146b864 Mon Sep 17 00:00:00 2001 From: weizong song Date: Tue, 1 Aug 2023 11:35:43 +0800 Subject: [PATCH 61/73] up --- app/Http/Controllers/Admin/StatisticsController.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/Admin/StatisticsController.php b/app/Http/Controllers/Admin/StatisticsController.php index b305791..6834540 100755 --- a/app/Http/Controllers/Admin/StatisticsController.php +++ b/app/Http/Controllers/Admin/StatisticsController.php @@ -276,11 +276,11 @@ class StatisticsController extends CommonController ->whereHas("oneBalance", function ($query) use ($before_datetime) { $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->where("balance", ">", 0)->orderBy("id", "desc"); }) -// ->whereHas("orders", function ($query) use ($before_datetime, $project_id) { -// $query -// ->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}") -// ->where("project_id", $project_id); -// }) + ->whereHas("orders", function ($query) use ($before_datetime, $project_id) { + $query + ->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}") + ->where("project_id", $project_id); + }) ->paginate(); $laravel_duration = microtime(true) - LARAVEL_START; From 7c53fde53ee63a2df08127a6a92cf1bd5a868542 Mon Sep 17 00:00:00 2001 From: weizong song Date: Tue, 1 Aug 2023 11:36:04 +0800 Subject: [PATCH 62/73] up --- app/Http/Controllers/Admin/StatisticsController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Admin/StatisticsController.php b/app/Http/Controllers/Admin/StatisticsController.php index 6834540..38659b9 100755 --- a/app/Http/Controllers/Admin/StatisticsController.php +++ b/app/Http/Controllers/Admin/StatisticsController.php @@ -281,7 +281,7 @@ class StatisticsController extends CommonController ->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}") ->where("project_id", $project_id); }) - ->paginate(); + ->get(); $laravel_duration = microtime(true) - LARAVEL_START; return view($this->bladePath . ".customer-balance", compact("customers", "before_datetime", "project_id", "laravel_duration")); From 742d7d07deb873c06d0766a872d5b7d36b5cd53d Mon Sep 17 00:00:00 2001 From: weizong song Date: Tue, 1 Aug 2023 11:37:33 +0800 Subject: [PATCH 63/73] up --- .../Admin/StatisticsController.php | 22 +++++++++---------- .../statistics/customer-balance.blade.php | 8 +++---- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/Http/Controllers/Admin/StatisticsController.php b/app/Http/Controllers/Admin/StatisticsController.php index 38659b9..d1f382b 100755 --- a/app/Http/Controllers/Admin/StatisticsController.php +++ b/app/Http/Controllers/Admin/StatisticsController.php @@ -269,18 +269,18 @@ class StatisticsController extends CommonController "patients" => function ($query) use ($before_datetime) { $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->orderBy("id", "desc"); }, - "oneBalance" => function ($query) use ($before_datetime) { - $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->orderBy("id", "desc"); - } +// "oneBalance" => function ($query) use ($before_datetime) { +// $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->orderBy("id", "desc"); +// } ]) - ->whereHas("oneBalance", function ($query) use ($before_datetime) { - $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->where("balance", ">", 0)->orderBy("id", "desc"); - }) - ->whereHas("orders", function ($query) use ($before_datetime, $project_id) { - $query - ->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}") - ->where("project_id", $project_id); - }) +// ->whereHas("oneBalance", function ($query) use ($before_datetime) { +// $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->where("balance", ">", 0)->orderBy("id", "desc"); +// }) +// ->whereHas("orders", function ($query) use ($before_datetime, $project_id) { +// $query +// ->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}") +// ->where("project_id", $project_id); +// }) ->get(); $laravel_duration = microtime(true) - LARAVEL_START; diff --git a/resources/views/admin/statistics/customer-balance.blade.php b/resources/views/admin/statistics/customer-balance.blade.php index ba7daaf..4ebb65c 100755 --- a/resources/views/admin/statistics/customer-balance.blade.php +++ b/resources/views/admin/statistics/customer-balance.blade.php @@ -30,9 +30,9 @@ @endforeach - +{{-- --}} @@ -60,7 +60,7 @@ - + @endforeach From bc74746639e6e8e48790297d06bc93b8607d61b0 Mon Sep 17 00:00:00 2001 From: weizong song Date: Tue, 1 Aug 2023 11:38:31 +0800 Subject: [PATCH 64/73] up --- app/Http/Controllers/Admin/StatisticsController.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/Admin/StatisticsController.php b/app/Http/Controllers/Admin/StatisticsController.php index d1f382b..ef608b7 100755 --- a/app/Http/Controllers/Admin/StatisticsController.php +++ b/app/Http/Controllers/Admin/StatisticsController.php @@ -276,11 +276,11 @@ class StatisticsController extends CommonController // ->whereHas("oneBalance", function ($query) use ($before_datetime) { // $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->where("balance", ">", 0)->orderBy("id", "desc"); // }) -// ->whereHas("orders", function ($query) use ($before_datetime, $project_id) { -// $query -// ->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}") -// ->where("project_id", $project_id); -// }) + ->whereHas("orders", function ($query) use ($before_datetime, $project_id) { + $query + ->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}") + ->where("project_id", $project_id); + }) ->get(); $laravel_duration = microtime(true) - LARAVEL_START; From 57f0eebc85128423e35c159d324b29a3008e2233 Mon Sep 17 00:00:00 2001 From: weizong song Date: Tue, 1 Aug 2023 11:38:46 +0800 Subject: [PATCH 65/73] up --- app/Http/Controllers/Admin/StatisticsController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Admin/StatisticsController.php b/app/Http/Controllers/Admin/StatisticsController.php index ef608b7..2139b2e 100755 --- a/app/Http/Controllers/Admin/StatisticsController.php +++ b/app/Http/Controllers/Admin/StatisticsController.php @@ -278,7 +278,7 @@ class StatisticsController extends CommonController // }) ->whereHas("orders", function ($query) use ($before_datetime, $project_id) { $query - ->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}") +// ->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}") ->where("project_id", $project_id); }) ->get(); From e522265c8ff5eeae287c159f1503c90820e64aba Mon Sep 17 00:00:00 2001 From: weizong song Date: Tue, 1 Aug 2023 11:39:25 +0800 Subject: [PATCH 66/73] up --- resources/views/admin/statistics/customer-balance.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/admin/statistics/customer-balance.blade.php b/resources/views/admin/statistics/customer-balance.blade.php index 4ebb65c..f29da80 100755 --- a/resources/views/admin/statistics/customer-balance.blade.php +++ b/resources/views/admin/statistics/customer-balance.blade.php @@ -59,7 +59,7 @@ - + @endforeach From 7fee40da09cca5e6ef52e6f3da3010708e1b6ec0 Mon Sep 17 00:00:00 2001 From: weizong song Date: Wed, 2 Aug 2023 10:45:06 +0800 Subject: [PATCH 67/73] up --- app/Http/Controllers/Manager/OrdersController.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Manager/OrdersController.php b/app/Http/Controllers/Manager/OrdersController.php index 7a8a79f..fd8d33e 100644 --- a/app/Http/Controllers/Manager/OrdersController.php +++ b/app/Http/Controllers/Manager/OrdersController.php @@ -865,9 +865,9 @@ class OrdersController extends CommonController $warnings[] = "将对" . $price_changed_paid_items->count() . "天已付款的子订单进行价格更改"; } - foreach ($price_changed_paid_items as $price_changed_paid_item) { - if (date("Ym", strtotime($price_changed_paid_item->service_date)) < date("Ym", strtotime("-1 month", time()))) { - $errors[] = "子订单{$price_changed_paid_item->id}超期价格锁定"; + foreach ($order_items as $_item) { + if (date("Ym", strtotime($_item->service_date)) < date("Ym", strtotime("-1 month", time()))) { + $errors[] = "子订单{$_item->id}已锁定"; } } From d438edbedee4acc7d015e5971251e9badf6b494f Mon Sep 17 00:00:00 2001 From: weizong song Date: Wed, 2 Aug 2023 11:49:57 +0800 Subject: [PATCH 68/73] up --- .../Controllers/Manager/OrdersController.php | 9 ++++-- ...33_update_managers_add_no_lock_ability.php | 30 +++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 database/migrations/2023_08_02_114733_update_managers_add_no_lock_ability.php diff --git a/app/Http/Controllers/Manager/OrdersController.php b/app/Http/Controllers/Manager/OrdersController.php index fd8d33e..a025416 100644 --- a/app/Http/Controllers/Manager/OrdersController.php +++ b/app/Http/Controllers/Manager/OrdersController.php @@ -865,9 +865,12 @@ class OrdersController extends CommonController $warnings[] = "将对" . $price_changed_paid_items->count() . "天已付款的子订单进行价格更改"; } - foreach ($order_items as $_item) { - if (date("Ym", strtotime($_item->service_date)) < date("Ym", strtotime("-1 month", time()))) { - $errors[] = "子订单{$_item->id}已锁定"; + $manager = $this->guard()->user(); + if (!$manager->no_lock_ability) { + foreach ($order_items as $_item) { + if (date("Ym", strtotime($_item->service_date)) < date("Ym", strtotime("-1 month", time()))) { + $errors[] = "子订单{$_item->id}已锁定"; + } } } diff --git a/database/migrations/2023_08_02_114733_update_managers_add_no_lock_ability.php b/database/migrations/2023_08_02_114733_update_managers_add_no_lock_ability.php new file mode 100644 index 0000000..720fbdf --- /dev/null +++ b/database/migrations/2023_08_02_114733_update_managers_add_no_lock_ability.php @@ -0,0 +1,30 @@ +tinyInteger("no_lock_ability")->default(0)->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} From 27b5193fecb3e0c2eaec146065dc2173aae1d313 Mon Sep 17 00:00:00 2001 From: weizong song Date: Fri, 11 Aug 2023 13:52:32 +0800 Subject: [PATCH 69/73] up --- .../Controllers/Admin/ProjectController.php | 43 +++- resources/views/admin/project/beds.blade.php | 225 +++++++++--------- routes/web.php | 1 + 3 files changed, 156 insertions(+), 113 deletions(-) diff --git a/app/Http/Controllers/Admin/ProjectController.php b/app/Http/Controllers/Admin/ProjectController.php index 99a3040..877f399 100755 --- a/app/Http/Controllers/Admin/ProjectController.php +++ b/app/Http/Controllers/Admin/ProjectController.php @@ -63,14 +63,28 @@ class ProjectController extends CommonController public function beds($id) { - $project = (new Project())->with(["buildings" => function ($query) { - $query->with(["areas" => function ($query) { - $query->with("rooms"); - }]); - }])->find($id); - - $data = (new Bed())->where("project_id", $id)->orderBy("id", "desc")->with(["project", "building", "area", "room"])->paginate(10); + $project = (new Project())->with(["buildings"])->find($id); + $data = (new Bed())->where("project_id", $id)->orderBy("id", "desc")->with(["project", "building", "area", "room"]); + if (request()->room_id) { + $data = $data->where("room_id", request()->room_id); + $room = (new Room())->find(request()->room_id); + $rooms = (new Room())->where("area_id", $room->area_id)->get(); + $area = (new Area())->where("id", $room->area_id)->first(); + $areas = (new Area())->where("building_id", $area->building_id)->get(); + view()->share(compact("rooms", "areas")); + } elseif (request()->area_id) { + $data = $data->where("area_id", request()->area_id); + $area = (new Area())->find(request()->area_id); + $areas = (new Area())->where("building_id", $area->building_id)->get(); + $rooms = (new Room())->where("area_id", $area->id)->get(); + view()->share(compact("areas", "rooms")); + } elseif (request()->building_id) { + $areas = (new Area())->where("building_id", request()->building_id)->get(); + $data = $data->where("building_id", request()->building_id); + view()->share(compact("areas")); + } + $data = $data->paginate(10); return view($this->bladePath . ".beds", compact("project", "data")); } @@ -125,6 +139,21 @@ class ProjectController extends CommonController return $this->success("添加成功!", '', $res); } + public function getSubs(Request $request) + { + switch ($request->type) { + case "building": + $res = (new Area())->where("building_id", $request->id)->get(); + break; + case "area": + $res = (new Room())->where("area_id", $request->id)->get(); + break; + default: + $res = []; + } + return $this->ajaxResponse($res); + } + public function editDepartment(Request $request) { $data = [ diff --git a/resources/views/admin/project/beds.blade.php b/resources/views/admin/project/beds.blade.php index 6ed8347..319852d 100755 --- a/resources/views/admin/project/beds.blade.php +++ b/resources/views/admin/project/beds.blade.php @@ -10,98 +10,70 @@ @section("content")
-
+
-
-
{{ $row->project->name }} - 专属二维码 +{{-- 专属二维码--}} @lang("icons.action_edit") @lang("actions.edit") Date: Mon, 17 Jul 2023 10:25:55 +0800 Subject: [PATCH 47/73] up --- app/Forms/ParamedicForm.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Forms/ParamedicForm.php b/app/Forms/ParamedicForm.php index 9c07649..2a92cb1 100755 --- a/app/Forms/ParamedicForm.php +++ b/app/Forms/ParamedicForm.php @@ -14,7 +14,7 @@ class ParamedicForm extends Form $this->add("mobile", Field::TEXT, ["label" => "电话", "rules" => "required"]); $this->add("serial", Field::TEXT, ["label" => "编号", "rules" => "required"]); $this->add("avatar", Field::TEXT, ["label" => "照片", "attr" => ["data-plugin" => "uploader"]]); - $this->add("health_certificate", Field::TEXT, ["label" => "健康证", "attr" => ["data-plugin" => "uploader"]]); +// $this->add("health_certificate", Field::TEXT, ["label" => "健康证", "attr" => ["data-plugin" => "uploader"]]); $this->add("work_certificate", Field::TEXT, ["label" => "护理员证", "attr" => ["data-plugin" => "uploader"]]); $this->add("id_card_number", Field::TEXT, ["label" => "身份证号"]); $this->add("sex", Field::SELECT, ["label" => "性别", "choices" => [ From d549eda66259778735024b79c5cb4b4374825681 Mon Sep 17 00:00:00 2001 From: weizong song Date: Mon, 17 Jul 2023 10:32:17 +0800 Subject: [PATCH 48/73] up --- public/js/common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/js/common.js b/public/js/common.js index d360648..2cf95db 100755 --- a/public/js/common.js +++ b/public/js/common.js @@ -346,7 +346,7 @@ function initUploader(obj, index) { for (var i = 0; i < ids.length; i++) { var li = ''; $(".uploader-list[data-uploader-index=" + index + "]").append(li); $(".uploader-list[data-uploader-index=" + index + "]").children(":last").find(".close").click(function () { From 94c9f0494ba68302260d4c0eba512a1104640225 Mon Sep 17 00:00:00 2001 From: weizong song Date: Mon, 17 Jul 2023 10:57:14 +0800 Subject: [PATCH 49/73] up --- app/Http/Controllers/Admin/ParamedicController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Admin/ParamedicController.php b/app/Http/Controllers/Admin/ParamedicController.php index f7fd7f5..0040ce6 100755 --- a/app/Http/Controllers/Admin/ParamedicController.php +++ b/app/Http/Controllers/Admin/ParamedicController.php @@ -37,7 +37,7 @@ class ParamedicController extends CommonController ->orWhere("id_card_number", "like", "%" . request()->keyword . "%"); }); } - $data = $data->orderBy("id","desc")->paginate(10); + $data = $data->orderBy("updated_at","desc")->paginate(10); return view($this->bladePath . ".index", compact("data")); } From d94178cb0c15c72b8038b78c6331979adfe58752 Mon Sep 17 00:00:00 2001 From: weizong song Date: Mon, 17 Jul 2023 11:02:33 +0800 Subject: [PATCH 50/73] up --- app/Forms/ParamedicForm.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Forms/ParamedicForm.php b/app/Forms/ParamedicForm.php index 2a92cb1..9c07649 100755 --- a/app/Forms/ParamedicForm.php +++ b/app/Forms/ParamedicForm.php @@ -14,7 +14,7 @@ class ParamedicForm extends Form $this->add("mobile", Field::TEXT, ["label" => "电话", "rules" => "required"]); $this->add("serial", Field::TEXT, ["label" => "编号", "rules" => "required"]); $this->add("avatar", Field::TEXT, ["label" => "照片", "attr" => ["data-plugin" => "uploader"]]); -// $this->add("health_certificate", Field::TEXT, ["label" => "健康证", "attr" => ["data-plugin" => "uploader"]]); + $this->add("health_certificate", Field::TEXT, ["label" => "健康证", "attr" => ["data-plugin" => "uploader"]]); $this->add("work_certificate", Field::TEXT, ["label" => "护理员证", "attr" => ["data-plugin" => "uploader"]]); $this->add("id_card_number", Field::TEXT, ["label" => "身份证号"]); $this->add("sex", Field::SELECT, ["label" => "性别", "choices" => [ From f57c42becb324a44cf45bc5f05476f6462996a05 Mon Sep 17 00:00:00 2001 From: weizong song Date: Mon, 17 Jul 2023 11:03:08 +0800 Subject: [PATCH 51/73] up --- resources/views/admin/paramedic/index.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/admin/paramedic/index.blade.php b/resources/views/admin/paramedic/index.blade.php index 0d69729..605c77c 100755 --- a/resources/views/admin/paramedic/index.blade.php +++ b/resources/views/admin/paramedic/index.blade.php @@ -35,7 +35,7 @@ {{-- 专属二维码--}} @lang("icons.action_edit") @lang("actions.edit") + href="{{url("{$urlPrefix}/edit?id={$row['id']}")}}">@lang("icons.action_edit") 查看 @lang("icons.action_delete") @lang("actions.delete") {{ $item->mobile }} {{ $item->patients->count() ? $item->patients->last()->name : "无" }} {{ date("Y-m-d H:i:s",$before_datetime) }}{{ $item->oneBalance->balance }}{{ $item->oneBalance ? $item->oneBalance->balance : "0" }}
{{ $item->mobile }} {{ $item->patients->count() ? $item->patients->last()->name : "无" }} {{ date("Y-m-d H:i:s",$before_datetime) }}{{ $item->oneBalance ? $item->oneBalance->balance : "0" }}{{ $item->balance }}
{{ $loop->iteration }} {{ $item->mobile }} {{ $item->patients->count() ? $item->patients->last()->name : "无" }}{{ date("Y-m-d H:i:s",$before_datetime) }}{{ date("Y-m-d",$before_datetime) }} {{ $item->balance }}
- - - - - @foreach($project->buildings as $building) - - - - @foreach($building->areas as $area) - - - - @foreach($area->rooms as $room) - - - - @endforeach - @endforeach - @endforeach - -
- {{ $project->name }} +
+

{{ $project->name }}床位管理

+
+
+
+ +
+ +
+
- +
+ +
+ +
+
- 返回 -
- {{$building->name}} - - - +
+ +
+ +
+
-
- {{$area->name}} - - - - -
- {{$room->name}} - - - + + + 返回 + + -
-
-
-
-
-
-
@@ -203,9 +175,59 @@ }); }); - function createSub(element) { - var type = $(element).closest("tr").attr("data-type"); - var id = $(element).closest("tr").attr("data-id"); + function changeBuilding() { + $("#area_id option:gt(0)").remove(); + $("#room_id option:gt(0)").remove(); + + var building_id = $("#building_id").val(); + var url = "{{ url($urlPrefix."/get-subs") }}"; + $.get(url, {type: "building", id: building_id}, function (res) { + for (var i = 0; i < res.length; i++) { + $("#area_id").append(''); + } + }); + } + + function changeArea() { + $("#room_id option:gt(0)").remove(); + + var area_id = $("#area_id").val(); + var url = "{{ url($urlPrefix."/get-subs") }}"; + $.get(url, {type: "area", id: area_id}, function (res) { + for (var i = 0; i < res.length; i++) { + $("#room_id").append(''); + } + }); + } + + function createSub(type) { + switch (type) { + case "project": + var id = "{{ $project->id }}"; + break; + case "building": + var id = $("#building_id").val(); + if (id == "") { + alertError("请先选择楼栋"); + return false; + } + break; + case "area": + var id = $("#area_id").val(); + if (id == "") { + alertError("请先选择病区/楼层"); + return false; + } + break; + case "room": + var id = $("#room_id").val(); + if (id == "") { + alertError("请先选择病房"); + return false; + } + break; + } + var url = "{{ url($urlPrefix."/create-sub") }}"; $("#model-form form input[name=type]").val(type); @@ -219,13 +241,16 @@ $("#model-form .modal-title").html("新增楼栋"); break; case "building": - $("#model-form .modal-title").html("新增病区/楼层"); + var building_name = $("#building_id option:selected").html(); + $("#model-form .modal-title").html("新增病区/楼层-" + building_name); break; case "area": - $("#model-form .modal-title").html("新增病房"); + var area_name = $("#area_id option:selected").html(); + $("#model-form .modal-title").html("新增病房-" + area_name); break; case "room": - $("#model-form .modal-title").html("新增病床"); + var room_name = $("#room_id option:selected").html(); + $("#model-form .modal-title").html("新增病床-" + room_name); break; } @@ -305,19 +330,7 @@ $("#model-form").modal("hide"); $.post(url, data, function (res) { if (res.status) { - - if (res.data.room_id) { - $("#data-table tbody").prepend('\n' + - ' \n' + - ' \n' + - ' \n' + - ' \n' + - ' \n' + - ' \n' + - ' '); - return; - } - window.location.reload(); + $("#search-form").submit(); } else { alertError(res.msg); } diff --git a/routes/web.php b/routes/web.php index 0e27595..8d7c612 100644 --- a/routes/web.php +++ b/routes/web.php @@ -41,6 +41,7 @@ Route::group(["namespace" => "Admin", "prefix" => "admin"], function () { \App\Models\CommonModel::generateCurdRouter("ProjectController", "project"); Route::get("project/beds/{id}", 'ProjectController@beds'); + Route::get("project/get-subs", 'ProjectController@getSubs'); Route::post("project/create-sub", 'ProjectController@createSub'); Route::post("project/edit-department", 'ProjectController@editDepartment'); Route::post("project/delete-department", 'ProjectController@deleteDepartment'); From 4bb74ff4c351d7b3f1103e9582891aae1e611a68 Mon Sep 17 00:00:00 2001 From: weizong song Date: Fri, 11 Aug 2023 14:14:22 +0800 Subject: [PATCH 70/73] up --- resources/views/admin/project/beds.blade.php | 75 +++++++++++++++----- 1 file changed, 56 insertions(+), 19 deletions(-) diff --git a/resources/views/admin/project/beds.blade.php b/resources/views/admin/project/beds.blade.php index 319852d..2eaedbd 100755 --- a/resources/views/admin/project/beds.blade.php +++ b/resources/views/admin/project/beds.blade.php @@ -17,22 +17,27 @@
-
+
+ +
- @@ -47,10 +52,14 @@
+
+ +
- @@ -65,12 +74,16 @@
+
+ +
- - 返回 + 返回 @@ -82,6 +95,7 @@
+ @@ -96,10 +110,10 @@ - + @@ -160,18 +174,18 @@ - - @include("plugins.treetable") @endsection @push("footer")
'+res.data.name+''+res.data.room_id+''+res.data.project_id+''+res.data.building_id+''+res.data.area_id+' 
医院/项目 楼栋 病区/楼层排序 操作
{{ $row->project->name }} {{ $row->building ? $row->building->name : "已删除" }} {{ $row->area ? $row->area->name : "已删除" }}{{ $row->myindex }} @lang("icons.action_edit") + href="javascript:;" onclick="editBed(this)">@lang("icons.action_edit") @lang("icons.action_delete")