currentUser($request); $store = $this->ensureStoreBound($user); $data = StatementModel::query() ->where('store_id', $store->id) ->orderBy('id', 'desc') ->paginate((int) $request->input('pageSize', 10)) ->toArray(); return $this->success($data); } /** 生成对账单:快照当前回款周期,settlement_date = period_end + cycle 天 */ #[PostRoute('/statement/generate', authorize: true)] public function generate(Request $request): JsonResponse { $data = $request->validate([ 'period_start' => 'required|date_format:Y-m-d', 'period_end' => 'required|date_format:Y-m-d|after_or_equal:period_start', ], [ 'period_start.required' => '请选择对账周期开始日期', 'period_start.date_format' => '开始日期格式为 Y-m-d', 'period_end.required' => '请选择对账周期结束日期', 'period_end.date_format' => '结束日期格式为 Y-m-d', 'period_end.after_or_equal' => '结束日期不能早于开始日期', ]); $user = $this->currentUser($request); $store = $this->ensureStoreBound($user); $statement = app(StatementGenerateService::class)->generate( $store, $data['period_start'], $data['period_end'], ); return $this->success([ 'id' => $statement->id, 'statement_no' => $statement->statement_no, 'total_amount' => $statement->total_amount, 'settlement_date' => $statement->settlement_date?->toDateString(), ], '对账单已生成'); } /** 对账单详情(校验归属,含单品对账状态标识) */ #[GetRoute('/statement/{id}', authorize: true, where: ['id' => '[0-9]+'])] public function detail(int $id, Request $request): JsonResponse { $user = $this->currentUser($request); $store = $this->ensureStoreBound($user); $statement = StatementModel::with('items') ->where('store_id', $store->id) ->find($id); if ($statement === null) { throw new RepositoryException('对账单不存在'); } return $this->success($statement->toArray()); } }