diff --git a/app/Http/Controllers/Manager/OrdersController.php b/app/Http/Controllers/Manager/OrdersController.php index 45e5a4d..5f01b00 100644 --- a/app/Http/Controllers/Manager/OrdersController.php +++ b/app/Http/Controllers/Manager/OrdersController.php @@ -569,29 +569,61 @@ class OrdersController extends CommonController */ public function updateOrderItems(Request $request) { - $order_items = (new OrderItems())->whereHas("order")->whereIn("id", (array)$request->ids)->get(); - if ($request->has("price")) { - $warnings = []; - $errors = []; + $order_items = (new OrderItems())->whereHas("order")->whereIn("id", (array)$request->ids)->with("customer")->get(); + $customer = $order_items->first()->customer; + $price_changed_paid_items = $order_items->filter(function ($item) use ($request) { + return $request->has("price") && $item->paid_at && $request->price != $item->total; + }); + $total_increased = $price_changed_paid_items->count() * $request->price - $price_changed_paid_items->sum("total"); + + $warnings = []; + $errors = []; + + if ($price_changed_paid_items->count()) { + $warnings[] = "将对" . $price_changed_paid_items->count() . "天已付款的子订单进行价格更改"; } + + if ($total_increased > $customer->balance) { + $errors[] = "价格补差超过了客户余额,请先充值"; + } + + //todo:价格低于指导价的提示 + if (count($errors)) { return response()->json([ "errorcode" => "105", - "errormsg" => implode(",", $errors) + "errormsg" => implode(";", $errors) ]); } if (count($errors) && !$request->skip_warnings) { return response()->json([ "has_warnings" => true, - "errormsg" => implode(",", $warnings) + "errormsg" => implode(";", $warnings) ]); } DB::beginTransaction(); try { + //循环更新所有子订单 + $update = (new OrderItems())->filterRequestColumns($request); foreach ($order_items as $order_item) { - //todo + $order_item->update($update); + } + //根据已付款的价格异动子订单循环添加余额平衡表记录,并随时更新客户余额值 + foreach ($price_changed_paid_items as $price_changed_paid_item) { + $total_offset = $price_changed_paid_item->total - $request->price; + $customer->balance = $customer->balance + $total_offset; + (new Balance())->create([ + "customer_id" => $customer->id, + "order_id" => $price_changed_paid_item->order_id, + "belongs_type" => get_class($price_changed_paid_item), + "belongs_id" => $price_changed_paid_item->id, + "money" => $total_offset, + "balance" => $customer->balance + ]); } + //保存客户余额更新 + $customer->save(); DB::commit(); return response()->json(["updated_items" => count($order_items)]); } catch (\Exception $exception) {