ShopService.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. <?php
  2. namespace app\shop\service;
  3. use app\shop\model\order\OrderRefund;
  4. use app\shop\model\product\Product;
  5. use app\shop\model\order\Order;
  6. use app\shop\model\user\User;
  7. use app\shop\model\product\Comment;
  8. use app\shop\model\plus\agent\Cash as CashModel;
  9. /**
  10. * 商城模型
  11. */
  12. class ShopService
  13. {
  14. // 商品模型
  15. private $ProductModel;
  16. // 订单模型
  17. private $OrderModel;
  18. // 用户模型
  19. private $UserModel;
  20. // 订单退款模型
  21. private $OrderRefund;
  22. /**
  23. * 构造方法
  24. */
  25. public function __construct()
  26. {
  27. /* 初始化模型 */
  28. $this->ProductModel = new Product();
  29. $this->OrderModel = new Order();
  30. $this->UserModel = new User();
  31. $this->OrderRefund = new OrderRefund();
  32. }
  33. /**
  34. * 后台首页数据
  35. */
  36. public function getHomeData()
  37. {
  38. $today = date('Y-m-d');
  39. $yesterday = date('Y-m-d', strtotime('-1 day'));
  40. // 最近七天日期
  41. $lately7days = $this->getLately7days();
  42. return [
  43. 'widget_card' => [
  44. // 商品总量
  45. 'product_total' => $this->getProductTotal(),
  46. // 用户总量
  47. 'user_total' => $this->getUserTotal(),
  48. // 订单总量
  49. 'order_total' => $this->getOrderTotal(),
  50. // 评价总量
  51. 'comment_total' => $this->getCommentTotal()
  52. ],
  53. 'widget_outline' => [
  54. // 销售额(元)
  55. 'order_total_price' => [
  56. 'tday' => $this->getOrderTotalPrice($today),
  57. 'ytd' => $this->getOrderTotalPrice($yesterday)
  58. ],
  59. // 支付订单数
  60. 'order_total' => [
  61. 'tday' => $this->getOrderTotal($today),
  62. 'ytd' => $this->getOrderTotal($yesterday)
  63. ],
  64. // 新增用户数
  65. 'new_user_total' => [
  66. 'tday' => $this->getUserTotal($today),
  67. 'ytd' => $this->getUserTotal($yesterday)
  68. ],
  69. // 下单用户数
  70. 'order_user_total' => [
  71. 'tday' => $this->getPayOrderUserTotal($today),
  72. 'ytd' => $this->getPayOrderUserTotal($yesterday)
  73. ]
  74. ],
  75. 'widget_echarts' => [
  76. // 最近七天日期
  77. 'date' => json_encode($lately7days),
  78. 'order_total' => json_encode($this->getOrderTotalByDate($lately7days)),
  79. 'order_total_price' => json_encode($this->getOrderTotalPriceByDate($lately7days))
  80. ],
  81. 'right_away' => [
  82. //订单
  83. 'order' => [
  84. 'disposal' => $this->getReviewOrderTotal(),
  85. 'refund' => $this->getRefundOrderTotal(),
  86. ],
  87. //提现
  88. 'cash' => [
  89. 'percentage' => $this->getAgentOrderTotal(),
  90. ],
  91. //审核
  92. 'review' => [
  93. 'percentage' => $this->getAgentApplyTotal(),
  94. 'comment' => $this->getReviewCommentTotal(),
  95. ],
  96. //库存
  97. 'stock' => [
  98. 'product' => $this->getProductStockTotal(),
  99. ],
  100. ]
  101. ];
  102. }
  103. /**
  104. * 最近七天日期
  105. */
  106. private function getLately7days()
  107. {
  108. // 获取当前周几
  109. $date = [];
  110. for ($i = 0; $i < 7; $i++) {
  111. $date[] = date('Y-m-d', strtotime('-' . $i . ' days'));
  112. }
  113. return array_reverse($date);
  114. }
  115. /**
  116. * 获取商品总量
  117. */
  118. private function getProductTotal()
  119. {
  120. return number_format($this->ProductModel->getProductTotal());
  121. }
  122. /**
  123. * 获取商品库存告急总量
  124. */
  125. private function getProductStockTotal()
  126. {
  127. return number_format($this->ProductModel->getProductStockTotal());
  128. }
  129. /**
  130. * 获取提现总数量
  131. */
  132. private function getAgentOrderTotal()
  133. {
  134. $model = new CashModel;
  135. return number_format($model->getAgentCashTotal());
  136. }
  137. /**
  138. * 获取待审核提现总数量
  139. */
  140. private function getAgentApplyTotal()
  141. {
  142. $model = new CashModel;
  143. return number_format($model->getAgentApplyTotal());
  144. }
  145. /**
  146. * 获取用户总量
  147. */
  148. private function getUserTotal($day = null)
  149. {
  150. return number_format($this->UserModel->getUserTotal($day));
  151. }
  152. /**
  153. * 获取订单总量
  154. */
  155. private function getOrderTotal($day = null)
  156. {
  157. return number_format($this->OrderModel->getOrderData($day, null, 'order_total'));
  158. }
  159. /**
  160. * 获取待处理订单总量
  161. */
  162. private function getReviewOrderTotal()
  163. {
  164. return number_format($this->OrderModel->getReviewOrderTotal());
  165. }
  166. /**
  167. * 获取售后订单总量
  168. */
  169. private function getRefundOrderTotal()
  170. {
  171. return number_format($this->OrderRefund->getRefundOrderTotal());
  172. }
  173. /**
  174. * 获取订单总量 (指定日期)
  175. */
  176. private function getOrderTotalByDate($days)
  177. {
  178. $data = [];
  179. foreach ($days as $day) {
  180. $data[] = $this->getOrderTotal($day);
  181. }
  182. return $data;
  183. }
  184. /**
  185. * 获取评价总量
  186. */
  187. private function getCommentTotal()
  188. {
  189. $model = new Comment;
  190. return number_format($model->getCommentTotal());
  191. }
  192. /**
  193. * 获取待审核评价总量
  194. */
  195. private function getReviewCommentTotal()
  196. {
  197. $model = new Comment;
  198. return number_format($model->getReviewCommentTotal());
  199. }
  200. /**
  201. * 获取某天的总销售额
  202. */
  203. private function getOrderTotalPrice($day)
  204. {
  205. return sprintf('%.2f', $this->OrderModel->getOrderTotalPrice($day));
  206. }
  207. /**
  208. * 获取订单总量 (指定日期)
  209. */
  210. private function getOrderTotalPriceByDate($days)
  211. {
  212. $data = [];
  213. foreach ($days as $day) {
  214. $data[] = $this->getOrderTotalPrice($day);
  215. }
  216. return $data;
  217. }
  218. /**
  219. * 获取某天的下单用户数
  220. */
  221. private function getPayOrderUserTotal($day)
  222. {
  223. return number_format($this->OrderModel->getPayOrderUserTotal($day));
  224. }
  225. }