Stat.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\store\shopapi\controller;
  11. use addon\store\model\Settlement as SettlementModel;
  12. use app\model\order\OrderCommon as OrderCommonModel;
  13. use app\model\store\Stat as StatModel;
  14. use app\shopapi\controller\BaseApi;
  15. use Carbon\Carbon;
  16. /**
  17. * 门店结算控制器
  18. */
  19. class Stat extends BaseApi
  20. {
  21. public function __construct()
  22. {
  23. //执行父类构造函数
  24. parent::__construct();
  25. $token = $this->checkToken();
  26. if ($token[ 'code' ] < 0) {
  27. echo $this->response($token);
  28. exit;
  29. }
  30. }
  31. /**
  32. * 统计数据总和
  33. */
  34. public function getStatTotal()
  35. {
  36. $store_id = $this->params[ 'store_id' ] ?? 0;
  37. $start_time = $this->params[ 'start_time' ] ?? strtotime(date('Y-m-d', time()));
  38. $end_time = $this->params[ 'end_time' ] ?? time();
  39. if ($start_time > $end_time) {
  40. $start_time = $this->params[ 'end_time' ];
  41. $end_time = $this->params[ 'start_time' ];
  42. }
  43. $stat_model = new StatModel();
  44. $data = $stat_model->getShopStatSum($this->site_id, $start_time, $end_time, $store_id);
  45. return $this->response($data);
  46. }
  47. /**
  48. * 获取天统计趋势数据
  49. */
  50. public function getStatData()
  51. {
  52. $store_id = $this->params[ 'store_id' ] ?? 0;
  53. $start_time = $this->params[ 'start_time' ] ?? strtotime(date('Y-m-d', strtotime('-6 day')));
  54. $end_time = $this->params[ 'end_time' ] ?? time();
  55. if ($start_time > $end_time) {
  56. $start_time = $this->params[ 'end_time' ];
  57. $end_time = $this->params[ 'start_time' ];
  58. }
  59. $stat_model = new StatModel();
  60. $fields = $stat_model->getStatField();
  61. $fields[] = 'expected_earnings_total_money';
  62. $stat_list = $stat_model->getShopStatList($this->site_id, $start_time, $end_time, $store_id)[ 'data' ];
  63. $stat_list = array_map(function($item) {
  64. $item[ 'day_time' ] = date('Y-m-d', $item[ 'day_time' ]);
  65. return $item;
  66. }, $stat_list);
  67. $stat_list = array_column($stat_list, null, 'day_time');
  68. $day = ceil(( $end_time - $start_time ) / 86400);
  69. foreach ($fields as $field) {
  70. $value = [];
  71. $time = [];
  72. for ($i = 0; $i < $day; $i++) {
  73. $date = date('Y-m-d', $start_time + $i * 86400);
  74. $time[] = $date;
  75. $value[] = isset($stat_list[ $date ]) ? $stat_list[ $date ][ $field ] : 0;
  76. }
  77. $data[ $field ] = $value;
  78. $data[ 'time' ] = $time;
  79. }
  80. return $this->response($this->success($data));
  81. }
  82. /**
  83. * 获取小时统计趋势数据
  84. */
  85. public function getStatHourData()
  86. {
  87. $store_id = $this->params[ 'store_id' ] ?? 0;
  88. $time = $this->params[ 'start_time' ] ?? time();
  89. $carbon = Carbon::createFromTimestamp($time);
  90. $stat_model = new StatModel();
  91. $fields = $stat_model->getStatHourField();
  92. $fields[] = 'expected_earnings_total_money';
  93. $stat_list = $stat_model->getShopStatHourList($this->site_id, $carbon->year, $carbon->month, $carbon->day, $store_id)[ 'data' ];
  94. $data = [];
  95. $empty = array_map(function() { return 0; }, range(0, 23, 1));
  96. if (!empty($stat_list)) {
  97. $stat_list = array_column($stat_list, null, 'hour');
  98. foreach ($fields as $field) {
  99. $value = [];
  100. for ($i = 0; $i < 24; $i++) {
  101. $value[ $i ] = isset($stat_list[ $i ]) ? $stat_list[ $i ][ $field ] : 0;
  102. }
  103. $data[ $field ] = $value;
  104. }
  105. } else {
  106. foreach ($fields as $field) {
  107. $data[ $field ] = $empty;
  108. }
  109. }
  110. $data[ 'time' ] = array_map(function($value) { return $value . '时'; }, range(0, 23, 1));
  111. return $this->response($this->success($data));
  112. }
  113. }