From 5da2b59a097f8986a6cd876604adb68e18590366 Mon Sep 17 00:00:00 2001 From: weizong song Date: Sat, 11 Sep 2021 11:08:33 +0800 Subject: [PATCH] up --- app/Actions/AttachAffectedOrders.php | 61 +++++++++++++++++++ .../Controllers/Manager/OrdersController.php | 60 +++++++++++++++++- 2 files changed, 119 insertions(+), 2 deletions(-) create mode 100644 app/Actions/AttachAffectedOrders.php diff --git a/app/Actions/AttachAffectedOrders.php b/app/Actions/AttachAffectedOrders.php new file mode 100644 index 0000000..08c637f --- /dev/null +++ b/app/Actions/AttachAffectedOrders.php @@ -0,0 +1,61 @@ +status != Orders::STATUS_ONGOING) { + $order->affected_orders = $affected_orders; + return $order; + } + + //更换护工,查询从原护工手上退出订单后,原护工的其他订单是否变成了1对1 + if ($from_paramedic) { + $last_orders = Orders::where("paramedic_id", $from_paramedic) + ->where("status", Orders::STATUS_ONGOING) + ->where("paramedic_id", "<>", $order->paramedic_id) //剔除未更换护工的情况 + ->get(); + + //仅取唯一的一条。如果总数大于1,说明护工撤出后仍然是一对多,按照既定规则,不产生价格变化 + if ($last_orders->count() === 1) { + $many_to_one = $last_orders->first(); + $many_to_one->change = "many_to_one"; + $affected_orders[] = $many_to_one; + } + } + + //查询护工新接手一张单之后,是否有订单从1对1变成了1对多 + $new_same_paramedic_orders = Orders::where("paramedic_id", $order->paramedic_id) + ->where("status", Orders::STATUS_ONGOING) + ->where("id", "<>", $order->id) //剔除订单本身 + ->get(); + + //仅取唯一的一条。如果总数大于1,说明护工在未增加订单之前已经是1对多,按照既定规则,不产生价格变化 + if ($new_same_paramedic_orders->count() === 1) { + $one_to_many = $new_same_paramedic_orders->first(); + $one_to_many->change = "one_to_many"; + $affected_orders[] = $one_to_many; + } + + $order->affected_orders = $affected_orders; + return $order; + } +} diff --git a/app/Http/Controllers/Manager/OrdersController.php b/app/Http/Controllers/Manager/OrdersController.php index 4cd5272..1c51194 100644 --- a/app/Http/Controllers/Manager/OrdersController.php +++ b/app/Http/Controllers/Manager/OrdersController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Manager; use AlicFeng\IdentityCard\InfoHelper; +use App\Actions\AttachAffectedOrders; use App\Customer; use App\Events\OrderAssigned; use App\Libs\AlipayF2F; @@ -542,7 +543,34 @@ class OrdersController extends CommonController * @OA\Parameter(name="price", in="query", @OA\Schema(type="number"), required=true, description="协商价格"), * @OA\Response( * response="200", - * description="订单修改" + * description="订单修改", + * content={ + * @OA\MediaType( + * mediaType="application/json", + * @OA\Schema( + * @OA\Property( + * property="errorcode", + * type="integer", + * description="错误码;仅在发生错误时发送" + * ), + * @OA\Property( + * property="errormsg", + * type="string", + * description="返回消息;有errorcode时为错误内容,无errorcode时为提示内容" + * ), + * @OA\Property( + * property="order.*", + * type="array", + * description="订单实体" + * ) + * @OA\Property( + * property="affected_orders", + * type="array", + * description="特别说明:影响到的订单,如果无此字段或数组为空表示未发生订单影响。影响到的订单实体数组,实体中的change字段(many_to_one或one_to_many)表示影响的方向" + * ) + * ) + * ) + * } * ) * ) */ @@ -607,6 +635,7 @@ class OrdersController extends CommonController "status" => Orders::STATUS_ONGOING ]); event(new OrderAssigned($order)); + $order = (new AttachAffectedOrders)($order); } DB::commit(); @@ -1247,7 +1276,34 @@ class OrdersController extends CommonController * @OA\Parameter(name="paramedic_id", in="query", @OA\Schema(type="integer"), required=true, description="护工id"), * @OA\Response( * response="200", - * description="派单" + * description="订单派单", + * content={ + * @OA\MediaType( + * mediaType="application/json", + * @OA\Schema( + * @OA\Property( + * property="errorcode", + * type="integer", + * description="错误码;仅在发生错误时发送" + * ), + * @OA\Property( + * property="errormsg", + * type="string", + * description="返回消息;有errorcode时为错误内容,无errorcode时为提示内容" + * ), + * @OA\Property( + * property="order.*", + * type="array", + * description="订单实体" + * ) + * @OA\Property( + * property="affected_orders", + * type="array", + * description="特别说明:影响到的订单,如果无此字段或数组为空表示未发生订单影响。影响到的订单实体数组,实体中的change字段(many_to_one或one_to_many)表示影响的方向" + * ) + * ) + * ) + * } * ) * ) */