From c4c098c3857fe26d11ff5763a21689b65bda9ec9 Mon Sep 17 00:00:00 2001 From: panliang <1163816051@qq.com> Date: Sun, 28 Jun 2026 22:19:47 +0800 Subject: [PATCH] OfflineOrderItem.coupon_discount_amount --- .../Controllers/OfflineOrderController.php | 2 + .../OfflineOrderItemStatisticController.php | 37 +++++++++---------- app/Models/OfflineOrderItem.php | 1 + app/Services/OfflineOrderService.php | 19 ++++++++-- .../zh_CN/offline-order-item-statistic.php | 1 + 5 files changed, 38 insertions(+), 22 deletions(-) diff --git a/app/Admin/Controllers/OfflineOrderController.php b/app/Admin/Controllers/OfflineOrderController.php index d960e4da..ca5416bb 100644 --- a/app/Admin/Controllers/OfflineOrderController.php +++ b/app/Admin/Controllers/OfflineOrderController.php @@ -214,6 +214,8 @@ class OfflineOrderController extends AdminController ->display(fn ($v) => bcdiv($v, 100, 2))->prepend('¥'); $grid->column('points_deduction_amount', '积分抵扣') ->display(fn ($v) => bcdiv($v, 100, 2))->prepend('¥'); + $grid->column('coupon_discount_amount', '优惠券') + ->display(fn ($v) => bcdiv($v, 100, 2))->prepend('¥'); $grid->column('payment_amount', '实付金额') ->display(fn ($v) => bcdiv($v, 100, 2))->prepend('¥'); $grid->disableActions(); diff --git a/app/Admin/Controllers/OfflineOrderItemStatisticController.php b/app/Admin/Controllers/OfflineOrderItemStatisticController.php index a49f9078..4020d5ce 100644 --- a/app/Admin/Controllers/OfflineOrderItemStatisticController.php +++ b/app/Admin/Controllers/OfflineOrderItemStatisticController.php @@ -34,6 +34,9 @@ class OfflineOrderItemStatisticController extends AdminController "{$ordersTable}.store_id", DB::raw("SUM({$orderItemsTable}.points_deduction_amount) AS points_deduction_amount"), DB::raw("SUM({$orderItemsTable}.payment_amount) AS payment_amount"), + DB::raw("SUM({$orderItemsTable}.products_total_amount) AS products_total_amount"), + DB::raw("SUM({$orderItemsTable}.discount_reduction_amount) AS discount_reduction_amount"), + DB::raw("SUM({$orderItemsTable}.coupon_discount_amount) AS coupon_discount_amount"), ]) ->join("{$ordersTable}", "{$orderItemsTable}.order_id", '=', "{$ordersTable}.id") ->where("{$ordersTable}.status", OfflineOrderStatus::Paid) @@ -57,7 +60,9 @@ class OfflineOrderItemStatisticController extends AdminController $grid->column('product_category_id')->display(fn ($v) => $productCategories->get($v) ?: '其它'); $grid->column('store_id')->display(fn ($v) => $stores->get($v) ?: '其它'); - $grid->column('products_total_amount')->display(fn ($v) => bcdiv($this->points_deduction_amount + $this->payment_amount, 100, 2)); + $grid->column('products_total_amount')->display(fn ($v) => bcdiv($v, 100, 2)); + $grid->column('discount_reduction_amount')->display(fn ($v) => bcdiv($v, 100, 2)); + $grid->column('coupon_discount_amount')->display(fn ($v) => bcdiv($v, 100, 2)); $grid->column('points_deduction_amount')->display(fn ($v) => bcdiv($v, 100, 2)); $grid->column('payment_amount')->display(fn ($v) => bcdiv($v, 100, 2)); @@ -65,21 +70,10 @@ class OfflineOrderItemStatisticController extends AdminController $grid->disableFilterButton(); $grid->disableActions(); - $grid->footer(function ($collection) use ($grid, $start, $end, $ordersTable, $orderItemsTable) { - $query = OfflineOrderItem::select([ - DB::raw("SUM({$orderItemsTable}.points_deduction_amount) AS points_deduction_amount"), - DB::raw("SUM({$orderItemsTable}.payment_amount) AS payment_amount"), - ]) - ->join("{$ordersTable}", "{$orderItemsTable}.order_id", '=', "{$ordersTable}.id") - ->where("{$ordersTable}.status", OfflineOrderStatus::Paid) - ->when($start || $end, function ($builder) use ($start, $end, $ordersTable) { - if ($start && $end) { - return $builder->whereBetween("{$ordersTable}.payment_time", [$start, $end]); - } - return $builder->when($start, fn ($builder) => $builder->where("{$ordersTable}.payment_time", '>=', $start)) - ->when($end, fn ($builder) => $builder->where("{$ordersTable}.payment_time", '<=', $end)); - }); + $grid->footer(function ($collection) use ($grid, $builder) { + $query = $builder; + // 拿到表格筛选 where 条件数组进行遍历 $grid->model()->getQueries()->unique()->each(function ($value) use (&$query) { if (in_array($value['method'], ['paginate', 'get', 'orderBy', 'orderByDesc'], true)) { return; @@ -88,12 +82,15 @@ class OfflineOrderItemStatisticController extends AdminController $query = call_user_func_array([$query, $value['method']], $value['arguments'] ?? []); }); - $results = $query->first(); + // 查出统计数据 + $data = $builder->get(); // $onlineOrdersCount = $results['orders_count'] ?? 0; - $pointsDeductionAmount = bcdiv($results['points_deduction_amount'] ?? 0, 100, 2); - $paymentAmount = bcdiv($results['payment_amount'] ?? 0, 100, 2); - $totalAmount = bcadd($pointsDeductionAmount, $paymentAmount, 2); + $totalAmount = bcdiv($data->sum("products_total_amount"), 100, 2); + $discountAmount = bcdiv($data->sum("discount_reduction_amount"), 100, 2); + $couponAmount = bcdiv($data->sum("coupon_discount_amount"), 100, 2); + $pointsDeductionAmount = bcdiv($data->sum("points_deduction_amount"), 100, 2); + $paymentAmount = bcdiv($data->sum("payment_amount"), 100, 2); return << @@ -101,6 +98,8 @@ class OfflineOrderItemStatisticController extends AdminController