Dashboard.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <?php
  2. namespace app\admin\controller\shopro\store;
  3. use app\common\controller\Backend;
  4. use think\Db;
  5. use think\exception\PDOException;
  6. use think\exception\ValidateException;
  7. use Exception;
  8. /**
  9. * 门店统计
  10. *
  11. * @icon fa fa-circle-o
  12. */
  13. class Dashboard extends Backend
  14. {
  15. protected $model = null;
  16. public function _initialize()
  17. {
  18. parent::_initialize();
  19. $this->model = new \app\admin\model\shopro\order\Order;
  20. }
  21. /**
  22. * 查看
  23. */
  24. public function index()
  25. {
  26. if ($this->request->isAjax()) {
  27. $params = $this->request->request();
  28. $datetimerange = $params['datetimerange'] ? explode(' - ', $params['datetimerange']) : [];
  29. $startTime = strtotime($datetimerange[0]);
  30. $endTime = strtotime($datetimerange[1]);
  31. $where = [
  32. 'createtime' => ['between', [$startTime, $endTime]]
  33. ];
  34. $store_id = isset($params['store_id']) ? $params['store_id'] : 0;
  35. $list = $this->buildSearch()
  36. ->with(['item' => function ($query) use ($store_id) {
  37. if ($store_id) {
  38. $query->where('store_id', $store_id);
  39. } else {
  40. $query->where('store_id', '<>', 0);
  41. }
  42. }])
  43. ->where($where)
  44. ->order('id')
  45. ->select();
  46. $data = $this->getTotalData($list);
  47. $this->success('数据中心', null, $data);
  48. }
  49. return $this->view->fetch();
  50. }
  51. private function getTotalData($list) {
  52. // 支付订单
  53. $data['payOrderNum'] = 0;
  54. $data['payOrderArr'] = [];
  55. //支付金额
  56. $data['payAmountNum'] = 0;
  57. $data['payAmountArr'] = [];
  58. // 代发货
  59. $data['noSentNum'] = 0;
  60. $data['noSentArr'] = [];
  61. //下单人数
  62. $data['orderNum'] = 0;
  63. $data['orderArr'] = [];
  64. //售后维权
  65. $data['aftersaleNum'] = 0;
  66. $data['aftersaleArr'] = [];
  67. //退款订单
  68. $data['refundNum'] = 0;
  69. $data['refundArr'] = [];
  70. // 待配送/待核销
  71. $data['offSentNum'] = 0;
  72. $data['offSentArr'] = [];
  73. foreach ($list as $key => $order) {
  74. // 下单人数
  75. $data['orderNum']++;
  76. $data['orderArr'][] = [
  77. 'counter' => 1,
  78. 'createtime' => $order['createtime'] * 1000,
  79. 'user_id' => $order['user_id']
  80. ];
  81. if ($order['status'] > 0) {
  82. // 支付订单
  83. $data['payOrderNum']++;
  84. $data['payOrderArr'][] = [
  85. 'counter' => 1,
  86. 'createtime' => $order['createtime'] * 1000,
  87. 'user_id' => $order['user_id']
  88. ];
  89. // 支付金额
  90. $data['payAmountNum'] = bcadd($data['payAmountNum'], $order['pay_fee'], 2);
  91. $data['payAmountArr'][] = [
  92. 'counter' => $order['pay_fee'],
  93. 'createtime' => $order['createtime'] * 1000
  94. ];
  95. $flagnoSent = false;
  96. $flagoffSent = false;
  97. $flagaftersale = false;
  98. $flagrefund = false;
  99. foreach ($order['item'] as $k => $item) {
  100. //待备货
  101. if (!$flagnoSent && $item['dispatch_status'] == 0 && $item['refund_status'] <= 0) {
  102. $data['noSentNum']++;
  103. $data['noSentArr'][] = [
  104. 'counter' => 1,
  105. 'createtime' => $item['createtime'] * 1000
  106. ];
  107. $flagnoSent = true;
  108. }
  109. //待配送/待核销
  110. if (!$flagoffSent && $item['dispatch_status'] == 1 && $item['refund_status'] <= 0) {
  111. $data['offSentNum']++;
  112. $data['offSentArr'][] = [
  113. 'counter' => 1,
  114. 'createtime' => $item['createtime'] * 1000
  115. ];
  116. $flagoffSent = true;
  117. }
  118. // 维权
  119. if ($flagaftersale && $item['aftersale_status'] > 0) {
  120. $data['aftersaleNum']++;
  121. $data['aftersaleArr'][] = [
  122. 'counter' => 1,
  123. 'createtime' => $item['createtime'] * 1000
  124. ];
  125. $flagaftersale = true;
  126. }
  127. // 退款
  128. if ($flagrefund && $item['refund_status'] > 0) {
  129. $data['refundNum']++;
  130. $data['refundArr'][] = [
  131. 'counter' => 1,
  132. 'createtime' => $item['createtime'] * 1000
  133. ];
  134. $flagrefund = true;
  135. }
  136. }
  137. }
  138. }
  139. return $data;
  140. }
  141. public function buildSearch()
  142. {
  143. $params = $this->request->request();
  144. $store_id = isset($params['store_id']) ? $params['store_id'] : 0;
  145. $name = $this->model->getQuery()->getTable();
  146. $tableName = $name . '.';
  147. $orders = $this->model->withTrashed();
  148. $orders = $orders->whereExists(function ($query) use ($store_id, $tableName) {
  149. $itemTableName = (new \app\admin\model\shopro\order\OrderItem())->getQuery()->getTable();
  150. $query = $query->table($itemTableName)->where($itemTableName . '.order_id=' . $tableName . 'id');
  151. if ($store_id) {
  152. $query = $query->where('store_id', $store_id);
  153. } else {
  154. $query = $query->where('store_id', '<>', 0);
  155. }
  156. return $query;
  157. });
  158. return $orders;
  159. }
  160. }