小程序接口
This commit is contained in:
@@ -128,24 +128,81 @@ class OrderController extends BaseMiniController
|
||||
], '下单成功');
|
||||
}
|
||||
|
||||
/** 历史订单:当前门店强制过滤,?status=&page=&pageSize= */
|
||||
/**
|
||||
* 历史订单:当前门店强制过滤
|
||||
* ?status= 状态筛选;?start_date=&end_date= 订货日期区间(配合 /order/summary 周期下钻);
|
||||
* ?page=&pageSize= 分页(pageSize 上限 50)
|
||||
* 行数据附带 status_name / can_cancel / 商品预览(前 3 条明细)/ item_count,完整明细走详情接口
|
||||
*/
|
||||
#[GetRoute('/order', authorize: true)]
|
||||
public function index(Request $request): JsonResponse
|
||||
{
|
||||
$params = $request->validate([
|
||||
'status' => 'nullable|integer|in:0,1,2,3,4,9',
|
||||
'start_date' => 'nullable|date_format:Y-m-d',
|
||||
'end_date' => 'nullable|date_format:Y-m-d|after_or_equal:start_date',
|
||||
'page' => 'nullable|integer|min:1',
|
||||
'pageSize' => 'nullable|integer|min:1|max:50',
|
||||
], [
|
||||
'status.in' => '订单状态不正确',
|
||||
'start_date.date_format' => '开始日期格式为 Y-m-d',
|
||||
'end_date.date_format' => '结束日期格式为 Y-m-d',
|
||||
'end_date.after_or_equal' => '结束日期不能早于开始日期',
|
||||
'pageSize.max' => '每页数量最大 50',
|
||||
]);
|
||||
|
||||
$user = $this->currentUser($request);
|
||||
$store = $this->ensureStoreBound($user);
|
||||
|
||||
$query = StoreOrderModel::query()->where('store_id', $store->id);
|
||||
if ($request->filled('status')) {
|
||||
$query->where('status', (int) $request->input('status'));
|
||||
$query = StoreOrderModel::query()
|
||||
->where('store_id', $store->id)
|
||||
->select([
|
||||
'id', 'order_no', 'order_date', 'total_quantity', 'total_weight',
|
||||
'total_amount', 'status', 'remark', 'purchase_id', 'bill_id', 'created_at',
|
||||
])
|
||||
->with(['items' => static fn ($itemsQuery) => $itemsQuery
|
||||
->select(['id', 'order_id', 'product_name', 'quantity', 'unit'])
|
||||
->orderBy('id')]);
|
||||
if (isset($params['status'])) {
|
||||
$query->where('status', (int) $params['status']);
|
||||
}
|
||||
if (! empty($params['start_date'])) {
|
||||
$query->whereDate('order_date', '>=', $params['start_date']);
|
||||
}
|
||||
if (! empty($params['end_date'])) {
|
||||
$query->whereDate('order_date', '<=', $params['end_date']);
|
||||
}
|
||||
|
||||
$data = $query->orderBy('order_date', 'desc')
|
||||
$paginator = $query->orderBy('order_date', 'desc')
|
||||
->orderBy('id', 'desc')
|
||||
->paginate((int) $request->input('pageSize', 10))
|
||||
->toArray();
|
||||
->paginate((int) ($params['pageSize'] ?? 10));
|
||||
|
||||
return $this->success($data);
|
||||
$paginator->getCollection()->transform(
|
||||
static fn (StoreOrderModel $order): array => [
|
||||
'id' => $order->id,
|
||||
'order_no' => $order->order_no,
|
||||
'order_date' => $order->order_date->toDateString(),
|
||||
'status' => $order->status,
|
||||
'status_name' => StoreOrderModel::STATUS_NAMES[$order->status] ?? '',
|
||||
'can_cancel' => $order->status === StoreOrderModel::STATUS_PENDING,
|
||||
'total_quantity' => $order->total_quantity,
|
||||
'total_weight' => $order->total_weight,
|
||||
'total_amount' => $order->total_amount,
|
||||
'remark' => $order->remark,
|
||||
'purchase_id' => $order->purchase_id,
|
||||
'bill_id' => $order->bill_id,
|
||||
'created_at' => $order->created_at?->toDateTimeString(),
|
||||
'item_count' => $order->items->count(),
|
||||
'items' => $order->items->take(3)
|
||||
->map(static fn (StoreOrderItemModel $item): array => [
|
||||
'product_name' => $item->product_name,
|
||||
'quantity' => $item->quantity,
|
||||
'unit' => $item->unit,
|
||||
])->values()->all(),
|
||||
]
|
||||
);
|
||||
|
||||
return $this->success($paginator->toArray());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user