diff --git a/app/AdminAgent/Extensions/Grid/ChangeOrderStatus.php b/app/AdminAgent/Extensions/Grid/ChangeOrderStatus.php index a26bd9c..2d6b3de 100644 --- a/app/AdminAgent/Extensions/Grid/ChangeOrderStatus.php +++ b/app/AdminAgent/Extensions/Grid/ChangeOrderStatus.php @@ -3,8 +3,12 @@ namespace App\AdminAgent\Extensions\Grid; use App\Common\OrderStatus; use App\Models\Order; +use App\Models\Agent; +use App\Models\OrderProductItem; +use App\Models\Supplier; use Dcat\Admin\Admin; use Dcat\Admin\Grid\RowAction; +use Illuminate\Support\Facades\DB; /** * 改变订单状态 @@ -25,17 +29,35 @@ class ChangeOrderStatus extends RowAction public function handle() { + DB::beginTransaction(); try { $order = Order::firstWhere(['id' => $this->getKey(), 'agent_id' => Admin::user()->id, 'status' => OrderStatus::OFFLINE_UNPAID]); if (!$order) { return $this->response()->error("订单不存在或已处理过了")->refresh(); } + $agent = Agent::query()->where('id', Admin::user()->id)->lockForUpdate()->first(); + if ($agent->balance < $order->price) { + return $this->response()->error("账户余额不足,请先进行充值")->refresh(); + } + $order->status = OrderStatus::OFFLINE_PAID; $order->verify_code = uniqid(); //生成核销码 $order->save(); + //扣供应商余额 + $agent->balance = bcsub($agent->balance,$order->price,6); + $agent->save(); + + $orderItem = OrderProductItem::query()->where('order_id',$order->id)->get(); + foreach ($orderItem as $item) { + $supplier = Supplier::query()->where('id',$item->supplier_id)->lockForUpdate()->first(); + $supplier->balance = bcadd($supplier->balance,$item->price,6); + $supplier->save(); + } + DB::commit(); return $this->response()->success("操作成功,已设置为“线下已付款”")->refresh(); } catch (\Exception $e) { + DB::rollBack(); return $this->response()->error($e->getMessage()); } } diff --git a/app/Http/Controllers/Api/OrderController.php b/app/Http/Controllers/Api/OrderController.php index 4b37509..42c1f05 100644 --- a/app/Http/Controllers/Api/OrderController.php +++ b/app/Http/Controllers/Api/OrderController.php @@ -185,8 +185,10 @@ class OrderController extends Controller //订单总价 $order_price = 0; + $costPrice = 0; foreach ($spec as $v) { $order_price += $v['price'] * $formData['num']; + $costPrice = bcadd($costPrice,bcmul($v->productSpec->cost_price,$formData['num'],6),6); } $order_price = round($order_price, 2); @@ -327,7 +329,7 @@ class OrderController extends Controller 'supplier_id' => $ap->product->supplier_id, 'product_id' => $ap->product->id, 'num' => $formData['num'], - 'price' => $ap->product->price * $formData['num'], + 'price' => $costPrice, 'agent_product_spec_id' => json_encode($agent_product_spec_ids), 'product_type' => $ap->product->type, 'product_spec_id' => json_encode($product_spec_ids),