Home.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2024 https://www.yiovo.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
  8. // +----------------------------------------------------------------------
  9. // | Author: 萤火科技 <admin@yiovo.com>
  10. // +----------------------------------------------------------------------
  11. declare (strict_types=1);
  12. namespace app\store\service;
  13. use app\common\library\helper;
  14. use app\common\service\BaseService;
  15. use app\store\model\User as UserModel;
  16. use app\store\model\Goods as GoodsModel;
  17. use app\store\model\Order as OrderModel;
  18. use app\store\model\OrderRefund as OrderRefundModel;
  19. /**
  20. * 商户数据服务类
  21. * Class Store
  22. * @package app\store\service
  23. */
  24. class Home extends BaseService
  25. {
  26. /* @var GoodsModel $GoodsModel */
  27. private GoodsModel $GoodsModel;
  28. /* @var OrderModel $GoodsModel */
  29. private OrderModel $OrderModel;
  30. /* @var UserModel $GoodsModel */
  31. private UserModel $UserModel;
  32. /**
  33. * 构造方法
  34. */
  35. public function __construct()
  36. {
  37. parent::__construct();
  38. /* 初始化模型 */
  39. $this->GoodsModel = new GoodsModel;
  40. $this->OrderModel = new OrderModel;
  41. $this->UserModel = new UserModel;
  42. }
  43. /**
  44. * 后台首页数据
  45. * @return array
  46. */
  47. public function getData(): array
  48. {
  49. // 今天的日期
  50. $today = date('Y-m-d');
  51. // 昨天的日期
  52. $yesterday = date('Y-m-d', strtotime('-1 day'));
  53. // 最近七天日期
  54. $lately7days = $this->getLately7days();
  55. $data = [
  56. // 实时概况
  57. 'overview' => [
  58. // 销售额(元)
  59. 'orderTotalPrice' => [
  60. 'tday' => $this->getOrderTotalPrice($today),
  61. 'ytd' => $this->getOrderTotalPrice($yesterday)
  62. ],
  63. // 支付订单数
  64. 'orderTotal' => [
  65. 'tday' => $this->getPayOrderTotal($today),
  66. 'ytd' => $this->getPayOrderTotal($yesterday)
  67. ],
  68. // 新增会员数
  69. 'newUserTotal' => [
  70. 'tday' => $this->getUserTotal($today),
  71. 'ytd' => $this->getUserTotal($yesterday)
  72. ],
  73. // 付款会员数
  74. 'consumeUserTotal' => [
  75. 'tday' => $this->getPayOrderUserTotal($today),
  76. 'ytd' => $this->getPayOrderUserTotal($yesterday)
  77. ]
  78. ],
  79. // 数据统计
  80. 'statistics' => [
  81. // 商品总数量
  82. 'goodsTotal' => $this->getGoodsTotal(),
  83. // 会员总人数
  84. 'userTotal' => $this->getUserTotal(),
  85. // 付款订单总量
  86. 'orderTotal' => $this->getPayOrderTotal(),
  87. // 消费总人数
  88. 'consumeUserTotal' => $this->getUserTotal(null, true)
  89. ],
  90. // 待办事项
  91. 'pending' => [
  92. // 待发货订单
  93. 'deliverOrderTotal' => $this->getNotDeliveredOrderTotal(),
  94. // 待处理售后单
  95. 'refundTotal' => $this->getRefundTotal(),
  96. // 待付款订单(笔)
  97. 'paidOrderTotal' => $this->getNotPayOrderTotal(),
  98. // 已售罄商品数量
  99. 'soldoutGoodsTotal' => $this->getSoldoutGoodsTotal()
  100. ],
  101. // 交易走势
  102. 'tradeTrend' => [
  103. // 最近七天日期
  104. 'date' => $lately7days,
  105. 'orderTotal' => $this->getOrderTotalByDate($lately7days),
  106. 'orderTotalPrice' => $this->getOrderTotalPriceByDate($lately7days)
  107. ]
  108. ];
  109. return $data;
  110. }
  111. /**
  112. * 最近七天日期
  113. */
  114. private function getLately7days(): array
  115. {
  116. // 获取当前周几
  117. $date = [];
  118. for ($i = 0; $i < 7; $i++) {
  119. $date[] = date('Y-m-d', strtotime('-' . $i . ' days'));
  120. }
  121. return array_reverse($date);
  122. }
  123. /**
  124. * 获取商品总量
  125. * @return string
  126. */
  127. private function getGoodsTotal(): string
  128. {
  129. return number_format($this->GoodsModel->getGoodsTotal());
  130. }
  131. /**
  132. * 会员总人数
  133. * @param string|null $date 注册日期
  134. * @param null $isConsume 是否已消费
  135. * @return string
  136. */
  137. private function getUserTotal(string $date = null, $isConsume = null): string
  138. {
  139. return number_format($this->UserModel->getUserTotal(compact('date', 'isConsume')));
  140. }
  141. /**
  142. * 获取已付款订单总量 (批量)
  143. * @param array $days
  144. * @return array
  145. */
  146. private function getOrderTotalByDate(array $days): array
  147. {
  148. $data = [];
  149. foreach ($days as $day) {
  150. $data[] = $this->getPayOrderTotal($day);
  151. }
  152. return $data;
  153. }
  154. /**
  155. * 获取订单总金额(指定日期)
  156. * @param string|null $day
  157. * @return string
  158. */
  159. private function getOrderTotalPrice(string $day = null): string
  160. {
  161. return helper::number2($this->OrderModel->getOrderTotalPrice($day, $day));
  162. }
  163. /**
  164. * 获取订单总金额 (批量)
  165. * @param array $days
  166. * @return array
  167. */
  168. private function getOrderTotalPriceByDate(array $days): array
  169. {
  170. $data = [];
  171. foreach ($days as $day) {
  172. $data[] = $this->getOrderTotalPrice($day);
  173. }
  174. return $data;
  175. }
  176. /**
  177. * 获取某天的下单用户数
  178. * @param string $day
  179. * @return string
  180. */
  181. private function getPayOrderUserTotal(string $day)
  182. {
  183. return number_format($this->OrderModel->getPayOrderUserTotal($day));
  184. }
  185. /**
  186. * 获取订单总量
  187. * @param string|null $day
  188. * @return string
  189. */
  190. private function getPayOrderTotal(string $day = null): string
  191. {
  192. return number_format($this->OrderModel->getPayOrderTotal($day, $day));
  193. }
  194. // 获取未发货订单数量
  195. private function getNotDeliveredOrderTotal(): string
  196. {
  197. return number_format($this->OrderModel->getNotDeliveredOrderTotal());
  198. }
  199. // 获取未付款订单数量
  200. private function getNotPayOrderTotal(): string
  201. {
  202. return number_format($this->OrderModel->getNotPayOrderTotal());
  203. }
  204. // 获取已售罄的商品
  205. private function getSoldoutGoodsTotal(): string
  206. {
  207. return number_format($this->GoodsModel->getSoldoutGoodsTotal());
  208. }
  209. // 获取待处理售后单数量
  210. private function getRefundTotal(): string
  211. {
  212. $model = new OrderRefundModel;
  213. return number_format($model->getRefundTotal());
  214. }
  215. }