status != Orders::STATUS_ONGOING) { $order->affected_orders = $affected_orders; return $order; } //护工没换 if ($order->paramedic_id == $from_paramedic) { $order->affected_orders = $affected_orders; return $order; } //更换护工,查询从原护工手上退出订单后,原护工的其他订单是否变成了1对1 if ($from_paramedic) { $last_orders = $this->getOrderModel()->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 = $this->getOrderModel()->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; } foreach ($affected_orders as $affected_order) { $affected_order->from_order_id = $order->id; $affected_order->from_paramedic_id = $from_paramedic; } $order->affected_orders = collect($affected_orders); return $order; } public function getOrderModel() { $model = Orders::with([ "project" => function ($query) { $query->select("id", "name"); }, "bed" => function ($query) { $query->select("bed.id", "bed.name") ->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"); }, "patient" => function ($query) { $query->select("id", "name", "sex", "age", "mobile"); }, "paramedic" => function ($query) { $query->select("paramedic.id", "paramedic.name", "paramedic.mobile") ->leftJoin("paramedic_level", "paramedic_level.id", "=", "paramedic.paramedic_level_id") ->addSelect("paramedic_level.name as paramedic_level_name"); } ]); return $model; } }