Stat.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
  9. * 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
  10. * =========================================================
  11. */
  12. namespace addon\cashier\storeapi\controller;
  13. use app\storeapi\controller\BaseStoreApi;
  14. use app\model\store\Stat as StatModel;
  15. use Carbon\Carbon;
  16. /**
  17. * 数据统计
  18. * Class Stat
  19. * @package addon\shop\siteapi\controller
  20. */
  21. class Stat extends BaseStoreApi
  22. {
  23. /**
  24. * 统计数据总和
  25. */
  26. public function statTotal()
  27. {
  28. $start_time = $this->params['start_time'] ?? strtotime(date('Y-m-d', time()));
  29. $end_time = $this->params['end_time'] ?? time();
  30. if ($start_time > $end_time) {
  31. $start_time = $this->params['end_time'];
  32. $end_time = $this->params['start_time'];
  33. }
  34. $stat_model = new StatModel();
  35. $data = $stat_model->getShopStatSum($this->site_id, $start_time, $end_time, $this->store_id);
  36. return $this->response($data);
  37. }
  38. /**
  39. * 获取天统计趋势数据
  40. */
  41. public function dayStatData()
  42. {
  43. $start_time = $this->params['start_time'] ?? strtotime(date('Y-m-d', strtotime('-6 day')));
  44. $end_time = $this->params['end_time'] ?? time();
  45. if ($start_time > $end_time) {
  46. $start_time = $this->params['end_time'];
  47. $end_time = $this->params['start_time'];
  48. }
  49. $stat_model = new StatModel();
  50. $fields = $stat_model->getStatField();
  51. $fields[] = 'expected_earnings_total_money';
  52. $stat_list = $stat_model->getShopStatList($this->site_id, $start_time, $end_time, $this->store_id)[ 'data' ];
  53. $stat_list = array_map(function($item) {
  54. $item[ 'day_time' ] = date('Y-m-d', $item[ 'day_time' ]);
  55. return $item;
  56. }, $stat_list);
  57. $stat_list = array_column($stat_list, null, 'day_time');
  58. $day = ceil(( $end_time - $start_time ) / 86400);
  59. foreach ($fields as $field) {
  60. $value = [];
  61. $time = [];
  62. for ($i = 0; $i < $day; $i++) {
  63. $date = date('Y-m-d', $start_time + $i * 86400);
  64. $time[] = $date;
  65. $value[] = isset($stat_list[ $date ]) ? $stat_list[ $date ][ $field ] : 0;
  66. }
  67. $data[ $field ] = $value;
  68. $data[ 'time' ] = $time;
  69. }
  70. return $this->response($this->success($data));
  71. }
  72. /**
  73. * 获取小时统计趋势数据
  74. */
  75. public function hourStatData()
  76. {
  77. $time = $this->params['start_time'] ?? time();
  78. $carbon = Carbon::createFromTimestamp($time);
  79. $stat_model = new StatModel();
  80. $fields = $stat_model->getStatHourField();
  81. $fields[] = 'expected_earnings_total_money';
  82. $stat_list = $stat_model->getShopStatHourList($this->site_id, $carbon->year, $carbon->month, $carbon->day, $this->store_id)[ 'data' ];
  83. $data = [];
  84. $empty = array_map(function() { return 0; }, range(0, 23, 1));
  85. if (!empty($stat_list)) {
  86. $stat_list = array_column($stat_list, null, 'hour');
  87. foreach ($fields as $field) {
  88. $value = [];
  89. for ($i = 0; $i < 24; $i++) {
  90. $value[ $i ] = isset($stat_list[ $i ]) ? $stat_list[ $i ][ $field ] : 0;
  91. }
  92. $data[ $field ] = $value;
  93. }
  94. } else {
  95. foreach ($fields as $field) {
  96. $data[ $field ] = $empty;
  97. }
  98. }
  99. $data[ 'time' ] = array_map(function($value) { return $value . '时'; }, range(0, 23, 1));
  100. return $this->response($this->success($data));
  101. }
  102. }