CompanyReport.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. namespace App\Http\Controllers\admin;
  3. use App\Http\Controllers\AgentApiController;
  4. use App\Services\CompanyMonthlyReportService;
  5. use Illuminate\Http\Request;
  6. /** 总后台「公司营业报表」:按月上传 Excel,列表、新增(上个月及以前未上传的月份)、编辑(重新上传)、下载。 */
  7. class CompanyReport extends AgentApiController
  8. {
  9. public function index(Request $request, CompanyMonthlyReportService $service)
  10. {
  11. return $this->execute(function () use ($request, $service) {
  12. $data = $request->validate([
  13. 'page' => ['nullable', 'integer', 'min:1'], 'limit' => ['nullable', 'integer', 'min:1', 'max:100'],
  14. 'start_month' => ['nullable', 'date_format:Y-m'], 'end_month' => ['nullable', 'date_format:Y-m', 'after_or_equal:start_month'],
  15. ]);
  16. return $service->paginate($data, true);
  17. });
  18. }
  19. public function create(Request $request, CompanyMonthlyReportService $service)
  20. {
  21. return $this->execute(function () use ($request, $service) {
  22. $data = $request->validate([
  23. 'month' => ['required', 'date_format:Y-m'],
  24. 'file' => self::fileRule(),
  25. ], self::messages());
  26. return $service->create($data['month'], $request->file('file'), (int) request()->user->id);
  27. });
  28. }
  29. public function update(Request $request, CompanyMonthlyReportService $service)
  30. {
  31. return $this->execute(function () use ($request, $service) {
  32. $data = $request->validate(['id' => ['required', 'integer', 'min:1'], 'file' => self::fileRule()], self::messages());
  33. return $service->replace((int) $data['id'], $request->file('file'), (int) request()->user->id);
  34. });
  35. }
  36. public function download(Request $request, CompanyMonthlyReportService $service)
  37. {
  38. return $this->executeFile(function () use ($request, $service) {
  39. $data = $request->validate(['id' => ['required', 'integer', 'min:1']]);
  40. return $service->download((int) $data['id']);
  41. });
  42. }
  43. public static function fileRule(): array
  44. {
  45. return ['required', 'file', 'extensions:' . implode(',', CompanyMonthlyReportService::EXTENSIONS), 'max:' . CompanyMonthlyReportService::MAX_KB];
  46. }
  47. public static function messages(): array
  48. {
  49. return [
  50. 'month.required' => '请选择月份', 'month.date_format' => '月份格式为 YYYY-MM',
  51. 'file.required' => '请上传报表文件', 'file.file' => '请上传报表文件',
  52. 'file.extensions' => '请上传 Excel 文件(.xlsx 或 .xls)', 'file.max' => '报表文件不能超过 20MB',
  53. ];
  54. }
  55. }