GoodsRanking.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. <?php
  2. namespace app\store\service\statistics\data;
  3. use app\common\service\Basics as BasicsService;
  4. use app\store\model\OrderGoods as OrderGoodsModel;
  5. use app\common\enum\order\Status as OrderStatusEnum;
  6. use app\common\enum\order\PayStatus as OrderPayStatusEnum;
  7. /**
  8. * 数据统计-商品销售榜
  9. * Class GoodsRanking
  10. * @package app\store\service\statistics\data
  11. */
  12. class GoodsRanking extends BasicsService
  13. {
  14. /**
  15. * 商品销售榜
  16. * @throws \think\db\exception\DataNotFoundException
  17. * @throws \think\db\exception\ModelNotFoundException
  18. * @throws \think\exception\DbException
  19. */
  20. public function getGoodsRanking()
  21. {
  22. return (new OrderGoodsModel)->alias('o_goods')
  23. ->field([
  24. 'goods_id',
  25. 'goods_name',
  26. 'SUM(total_pay_price) AS sales_volume',
  27. 'SUM(total_num) AS total_sales_num'
  28. ])
  29. ->join('order', 'order.order_id = o_goods.order_id')
  30. ->where('order.pay_status', '=', OrderPayStatusEnum::SUCCESS)
  31. ->where('order.order_status', '<>', OrderStatusEnum::CANCELLED)
  32. ->group('goods_id, goods_name')
  33. // order:此处按总销售额排序,如需按销量改为total_sales_num
  34. ->order(['sales_volume' => 'DESC'])
  35. ->limit(10)
  36. ->select();
  37. }
  38. }