execute(function () use ($request, $service) { $data = $request->validate([ 'page' => ['nullable', 'integer', 'min:1'], 'limit' => ['nullable', 'integer', 'min:1', 'max:100'], 'start_month' => ['nullable', 'date_format:Y-m'], 'end_month' => ['nullable', 'date_format:Y-m', 'after_or_equal:start_month'], ]); return $service->paginate($data, true); }); } public function create(Request $request, CompanyMonthlyReportService $service) { return $this->execute(function () use ($request, $service) { $data = $request->validate([ 'month' => ['required', 'date_format:Y-m'], 'file' => self::fileRule(), ], self::messages()); return $service->create($data['month'], $request->file('file'), (int) request()->user->id); }); } public function update(Request $request, CompanyMonthlyReportService $service) { return $this->execute(function () use ($request, $service) { $data = $request->validate(['id' => ['required', 'integer', 'min:1'], 'file' => self::fileRule()], self::messages()); return $service->replace((int) $data['id'], $request->file('file'), (int) request()->user->id); }); } public function download(Request $request, CompanyMonthlyReportService $service) { return $this->executeFile(function () use ($request, $service) { $data = $request->validate(['id' => ['required', 'integer', 'min:1']]); return $service->download((int) $data['id']); }); } public static function fileRule(): array { return ['required', 'file', 'extensions:' . implode(',', CompanyMonthlyReportService::EXTENSIONS), 'max:' . CompanyMonthlyReportService::MAX_KB]; } public static function messages(): array { return [ 'month.required' => '请选择月份', 'month.date_format' => '月份格式为 YYYY-MM', 'file.required' => '请上传报表文件', 'file.file' => '请上传报表文件', 'file.extensions' => '请上传 Excel 文件(.xlsx 或 .xls)', 'file.max' => '报表文件不能超过 20MB', ]; } }