RankingController.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. namespace App\Http\Controllers\Admin\Dwbs;
  3. use App\Http\Controllers\Controller;
  4. use App\Repositories\Enums\ResponseCodeEnum;
  5. use App\Repositories\Models\Dwbs\Good;
  6. use App\Repositories\Models\Dwbs\OrderGood;
  7. use App\Services\Dwbs\RankingService;
  8. use Carbon\Carbon;
  9. use Illuminate\Http\Request;
  10. /**
  11. * 排行榜
  12. */
  13. class RankingController extends Controller
  14. {
  15. /**
  16. * @var RankingService
  17. */
  18. private $service;
  19. /**
  20. * RankingController constructor.
  21. *
  22. * @param RankingService $rankingService
  23. */
  24. public function __construct(RankingService $service)
  25. {
  26. parent::__construct();
  27. $this->middleware('checkUserPermission');
  28. $this->service = $service;
  29. }
  30. /**
  31. * 列表
  32. * @param Request $request
  33. *
  34. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  35. * @throws \Prettus\Repository\Exceptions\RepositoryException
  36. */
  37. public function index(Request $request)
  38. {
  39. $lists = $this->service->handleList($request);
  40. return $this->response->success($lists);
  41. }
  42. /**
  43. * 获取商品数量对比统计
  44. * @param Request $request
  45. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  46. * @throws \Illuminate\Validation\ValidationException
  47. */
  48. public function goodNumsStatistics(Request $request)
  49. {
  50. $data = $this->validateData($request, [
  51. 'start_date' => 'nullable|date',
  52. 'end_date' => 'nullable|date',
  53. 'good_ids' => 'nullable|array'
  54. ], [
  55. 'start_date' => '开始日期',
  56. 'end_date' => '结束日期',
  57. 'good_ids' => '产品'
  58. ]);
  59. if (empty($data['start_date'])) {
  60. $start_date = Carbon::now()->addMonths(-1);
  61. } else {
  62. $start_date = Carbon::parse($data['start_date']);
  63. }
  64. if (empty($data['end_date'])) {
  65. $end_date = Carbon::now();
  66. } else {
  67. $end_date = Carbon::parse($data['end_date']);
  68. }
  69. $good_ids = false;
  70. if (!empty($data['good_ids'])) $good_ids = $data['good_ids'];
  71. $oldGoods = Good::getNames();
  72. $goods = [];
  73. foreach ($oldGoods as $good) {
  74. if ($good_ids && !in_array($good['id'], $good_ids)) continue;
  75. $goods[] = $good;
  76. }
  77. $days = $start_date->diffInDays($end_date, false);
  78. if (!$days) {
  79. abort(ResponseCodeEnum::SERVICE_OPERATION_ERROR, '起止时间不合法');
  80. return;
  81. }
  82. $statistics = [];
  83. for ($i = 0; $i < $days; $i++) {
  84. $day = $end_date->clone()->subDays($i)->toDateString();
  85. $dayGoodNums = [];
  86. foreach ($goods as $good) {
  87. $dayNums = OrderGood::adminBbyDayGetGoodNums($day, $good['id']);
  88. $dayGoodNums[$good->id] = $dayNums['nums'] ?? 0;
  89. }
  90. $statistics[] = [
  91. 'day' => $day,
  92. 'nums' => $dayGoodNums
  93. ];
  94. }
  95. return $this->response->success(compact('statistics', 'goods'));
  96. }
  97. }