ProductRankingService.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. namespace app\common\service\statistics;
  3. use app\common\model\order\OrderProduct as OrderProductModel;
  4. use app\common\enum\order\OrderStatusEnum;
  5. use app\common\enum\order\OrderPayStatusEnum;
  6. use app\common\model\product\Product as ProductModel;
  7. use app\common\model\order\OrderRefund as OrderRefundModel;
  8. /**
  9. * 数据统计-商品销售榜
  10. */
  11. class ProductRankingService
  12. {
  13. /**
  14. * 商品销售榜
  15. */
  16. public function getSaleRanking($shop_supplier_id = 0)
  17. {
  18. $model = new OrderProductModel();
  19. if($shop_supplier_id > 0){
  20. $model = $model->where('order.shop_supplier_id', '=', $shop_supplier_id);
  21. }
  22. return $model->alias('o_product')
  23. ->with(['image'])
  24. ->field([
  25. '*',
  26. 'SUM(total_pay_price) AS sales_volume',
  27. 'SUM(total_num) AS total_sales_num'
  28. ])->hidden(['content'])
  29. ->join('order', 'order.order_id = o_product.order_id')
  30. ->where('order.pay_status', '=', OrderPayStatusEnum::SUCCESS)
  31. ->where('order.order_status', '<>', OrderStatusEnum::CANCELLED)
  32. ->group('o_product.product_id')
  33. ->having('total_sales_num>0')
  34. ->order(['total_sales_num' => 'DESC'])
  35. ->limit(10)
  36. ->select();
  37. }
  38. /**
  39. * 商品浏览榜
  40. */
  41. public function getViewRanking($shop_supplier_id = 0)
  42. {
  43. $model = new ProductModel();
  44. if($shop_supplier_id > 0){
  45. $model = $model->where('shop_supplier_id', '=', $shop_supplier_id);
  46. }
  47. return $model->with(['image.file'])
  48. ->hidden(['content'])
  49. ->where('view_times', '>', 0)
  50. ->order(['view_times' => 'DESC'])
  51. ->limit(10)
  52. ->select();
  53. }
  54. /**
  55. * 商品退款榜
  56. */
  57. public function getRefundRanking($shop_supplier_id = 0)
  58. {
  59. $model = new OrderRefundModel();
  60. if($shop_supplier_id > 0){
  61. $model = $model->where('shop_supplier_id', '=', $shop_supplier_id);
  62. }
  63. return $model->alias('order_refund')
  64. ->with(['orderproduct.image'])
  65. ->field([
  66. '*',
  67. 'count(product_id) AS refund_count',
  68. ])->hidden(['content'])
  69. ->join('order_product', 'order_product.order_product_id = order_refund.order_product_id')
  70. ->group('order_product.product_id')
  71. ->having('refund_count>0')
  72. ->order(['refund_count' => 'DESC'])
  73. ->limit(10)
  74. ->select();
  75. }
  76. }