OrderService.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <?php
  2. namespace app\common\service\statistics;
  3. use app\common\library\helper;
  4. use app\common\model\order\Order as OrderModel;
  5. use app\common\model\order\OrderRefund as OrderRefundModel;
  6. use app\common\model\product\Product as ProductModel;
  7. use app\common\model\order\OrderProduct as OrderProductModel;
  8. /**
  9. * 订单数据概况
  10. */
  11. class OrderService
  12. {
  13. // 商户id
  14. private $shop_supplier_id;
  15. public function __construct($shop_supplier_id)
  16. {
  17. $this->shop_supplier_id = $shop_supplier_id;
  18. }
  19. /**
  20. * 获取数据概况
  21. */
  22. public function getData()
  23. {
  24. $today = date('Y-m-d');
  25. $yesterday = date('Y-m-d', strtotime('-1 day'));
  26. $data = [
  27. // 成交额(元)
  28. 'order_total_price' => [
  29. 'today' => helper::number2($this->getOrderData($today, null, 'order_total_price')),
  30. 'yesterday' => helper::number2($this->getOrderData($yesterday, null, 'order_total_price'))
  31. ],
  32. // 支付订单数
  33. 'order_total' => [
  34. 'today' => number_format($this->getOrderData($today, null, 'order_total')),
  35. 'yesterday' => number_format($this->getOrderData($yesterday, null, 'order_total'))
  36. ],
  37. // 下单用户数
  38. 'order_user_total' => [
  39. 'today' => number_format($this->getOrderData($today, null, 'order_user_total')),
  40. 'yesterday' => number_format($this->getOrderData($yesterday, null, 'order_user_total'))
  41. ],
  42. // 退款成功总金额
  43. 'order_refund_money' => [
  44. 'today' => $this->getOrderRefundData($today, null, 'order_refund_money'),
  45. 'yesterday' => $this->getOrderRefundData($yesterday, null, 'order_refund_money')
  46. ],
  47. // 退款成功订单数
  48. 'order_refund_total' => [
  49. 'today' => $this->getOrderRefundData($today, null, 'order_refund_total'),
  50. 'yesterday' => $this->getOrderRefundData($yesterday, null, 'order_refund_total')
  51. ],
  52. ];
  53. // 客单价
  54. $data['order_per_price'] = [
  55. 'today' => $data['order_user_total']['today'] == 0?0:helper::number2($data['order_total_price']['today']/$data['order_user_total']['today']),
  56. 'yesterday' => $data['order_user_total']['yesterday'] == 0?0:helper::number2($data['order_total_price']['yesterday']/$data['order_user_total']['yesterday'])
  57. ];
  58. return $data;
  59. }
  60. /**
  61. * 通过时间段查询订单数据
  62. */
  63. public function getDataByDate($days)
  64. {
  65. $data = [];
  66. foreach ($days as $day) {
  67. $data[] = [
  68. 'day' => $day,
  69. 'total_money' => $this->getOrderData($day, null, 'order_total_price'),
  70. 'total_num' => $this->getOrderData($day, null, 'order_total')
  71. ];
  72. }
  73. return $data;
  74. }
  75. /**
  76. * 通过时间段查询退款订单数据
  77. */
  78. public function getRefundByDate($days)
  79. {
  80. $data = [];
  81. foreach ($days as $day) {
  82. $data[] = [
  83. 'day' => $day,
  84. 'total_money' => $this->getOrderRefundData($day, null, 'order_refund_money'),
  85. 'total_num' => $this->getOrderRefundData($day, null, 'order_refund_total')
  86. ];
  87. }
  88. return $data;
  89. }
  90. /**
  91. * 获取订单数据
  92. */
  93. private function getOrderData($startDate = null, $endDate = null, $type)
  94. {
  95. return (new OrderModel)->getOrderData($startDate, $endDate, $type, $this->shop_supplier_id);
  96. }
  97. /**
  98. * 获取订单退款数据
  99. */
  100. private function getOrderRefundData($startDate = null, $endDate = null, $type)
  101. {
  102. return (new OrderRefundModel)->getOrderRefundData($startDate, $endDate, $type, $this->shop_supplier_id);
  103. }
  104. /**
  105. * 获取数据概况
  106. */
  107. public function getProductData()
  108. {
  109. $today = date('Y-m-d');
  110. $yesterday = date('Y-m-d', strtotime('-1 day'));
  111. $data = [
  112. // 在售商品
  113. 'sale' => [
  114. 'today' => number_format((new ProductModel)->getProductTotal(['product_status' => 10])),
  115. 'yesterday' => '--'
  116. ],
  117. // 未付款商品(件)
  118. 'no_pay' => [
  119. 'today' => number_format($this->getOrderProductData($today, null, 'no_pay')),
  120. 'yesterday' => number_format($this->getOrderProductData($yesterday, null, 'no_pay'))
  121. ],
  122. // 已付款商品(件)
  123. 'pay' => [
  124. 'today' => number_format($this->getOrderProductData($today, null, 'pay')),
  125. 'yesterday' => number_format($this->getOrderProductData($yesterday, null, 'pay'))
  126. ],
  127. ];
  128. return $data;
  129. }
  130. /**
  131. * 获取订单商品数据
  132. */
  133. private function getOrderProductData($startDate = null, $endDate = null, $type)
  134. {
  135. return (new OrderProductModel)->getProductData($startDate, $endDate, $type, $this->shop_supplier_id);
  136. }
  137. /**
  138. * 通过时间段查询商品订单数据
  139. */
  140. public function getProductDataByDate($days)
  141. {
  142. $data = [];
  143. foreach ($days as $day) {
  144. $data[] = [
  145. 'day' => $day,
  146. 'total_num' => $this->getOrderProductData($day, null, 'pay')
  147. ];
  148. }
  149. return $data;
  150. }
  151. }