IndexController.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?php
  2. namespace addons\Store\client\controllers;
  3. use addons\Store\common\models\Store;
  4. use addons\Store\common\models\StoreCensus;
  5. use addons\Store\common\models\StoreGoods;
  6. use addons\Store\common\models\StoreGoodsRanking;
  7. use addons\Store\common\models\StoreOrder;
  8. use addons\Store\common\models\StoreUser;
  9. use common\enums\RefundStatusEnum;
  10. use common\models\order\OrderRefund;
  11. use common\models\user\User;
  12. use Yii;
  13. use common\enums\StatusEnum;
  14. class IndexController extends BaseController
  15. {
  16. /**
  17. * 门店首页(概况)
  18. * @Author bing
  19. * @DateTime 2022-04-26 18:06:27
  20. * @return void
  21. * @copyright: Copyright (c) 2022 广东七件事集团
  22. */
  23. public function actionIndex()
  24. {
  25. if (Yii::$app->request->isAjax) {
  26. $goods_ranking_list = StoreGoodsRanking::lists([
  27. 'where' => [
  28. ['store_id' => $this->store_id],
  29. ],
  30. 'order' => 'sales_money desc',
  31. 'select' => 'id,goods_id,sales_money',
  32. 'limit' => 5
  33. ]);
  34. $goods_ids = array_column($goods_ranking_list, 'goods_id');
  35. $store_goods_list = StoreGoods::lists(['where' => [['id' => $goods_ids]], 'index' => 'id', 'select' => 'id,goods_name,cover_pic']);
  36. foreach ($goods_ranking_list as &$item) {
  37. $item['goods_name'] = $item['cover_pic'] = '';
  38. if (isset($store_goods_list[$item['goods_id']])) {
  39. $item['goods_name'] = $store_goods_list[$item['goods_id']]['goods_name'];
  40. $item['cover_pic'] = $store_goods_list[$item['goods_id']]['cover_pic'];
  41. }
  42. }
  43. $user_ranking_list = StoreUser::lists([
  44. 'where' => [
  45. ['store_id' => $this->store_id],
  46. ],
  47. 'order' => 'pay_money desc',
  48. 'select' => 'id,user_id,pay_money',
  49. 'limit' => 5
  50. ]);
  51. $user_ids = array_column($user_ranking_list, 'user_id');
  52. $user_list = User::lists(['where' => [['id' => $user_ids]], 'index' => 'id', 'select' => 'id,nickname,avatar_url']);
  53. foreach ($user_ranking_list as &$item) {
  54. $item['nickname'] = $item['avatar_url'] = '';
  55. if (isset($user_list[$item['user_id']])) {
  56. $item['nickname'] = $user_list[$item['user_id']]['nickname'];
  57. $item['avatar_url'] = $user_list[$item['user_id']]['avatar_url'];
  58. }
  59. }
  60. $time = time();
  61. $today = date('Y-m-d', $time);
  62. $yesterday = date("Y-m-d", strtotime("-1 day"));
  63. $date_time_arr = [$today, $yesterday];
  64. for ($i = 2; $i <= 4; $i++) {
  65. $date_time_arr[] = date("Y-m-d", strtotime("-{$i} day"));
  66. }
  67. $today_data = $yesterday_data = [
  68. 'add_user_nums'=>'--',
  69. 'order_nums'=>'--',
  70. 'settlement_commission'=>'--',
  71. 'sales_money'=>'--',
  72. 'cashier_sales_money'=>'--',
  73. ];
  74. $store_census_list = StoreCensus::lists(['where' => [['store_id' => $this->store_id], ['date_time' => $date_time_arr]], 'order' => 'created_at asc']);
  75. $table_list = [];
  76. if ($store_census_list) {
  77. foreach ($store_census_list as $val) {
  78. $table_list[] = [
  79. 'created_at' => $val['date_time'],
  80. 'sales_money' => $val['sales_money'] ?? 0,
  81. 'cashier_sales_money' => $val['cashier_sales_money'] ?? 0,
  82. ];
  83. switch ($val['date_time']) {
  84. case $today:
  85. $today_data = $val;
  86. break;
  87. case $yesterday:
  88. $yesterday_data = $val;
  89. break;
  90. }
  91. }
  92. }
  93. $store = Store::getOne([['id' => $this->store_id]], true, [], false, 'id,shop_owner,store_name,logo_img,expire_time,business_time_start,business_time_end');
  94. $store['business_status'] = '营业中';
  95. if ($time < $store['business_time_start'] || $time > $store['business_time_end']) {
  96. $store['business_status'] = '休息中';
  97. }
  98. $no_pay_counts = StoreOrder::find()->where(['store_id' => $this->store_id, 'order_status' => 0])->count();//待付款
  99. $no_delivery_counts = StoreOrder::find()->where(['store_id' => $this->store_id, 'order_status' => 1])->andWhere(['!=','order_source','Reserve'])->count();//待发货,除了服务订单
  100. $no_delivery_reserve_counts = StoreOrder::find()->where(['store_id' => $this->store_id, 'order_status' => 2])->andWhere(['=','order_source','Reserve'])->count();//待服务,服务订单额外统计
  101. $after_sale_counts = OrderRefund::find()->where(['store_id' => $this->store_id])->andWhere(['in', 'refund_status', [RefundStatusEnum::APPLY, RefundStatusEnum::HANDEL, RefundStatusEnum::RETURN_GOODS, RefundStatusEnum::EXCHANGE_GOODS]])->count();//售后
  102. $sell_out_counts = StoreGoods::find()->where(['store_id' => $this->store_id, 'stock' => 0, 'status' => StatusEnum::ENABLED])->count();//售罄
  103. $store['no_pay_counts'] = $no_pay_counts ?? 0;
  104. $store['no_delivery_counts'] = $no_delivery_counts + $no_delivery_reserve_counts ?? 0;
  105. $store['after_sale_counts'] = $after_sale_counts ?? 0;
  106. $store['sell_out_counts'] = $sell_out_counts ?? 0;
  107. $store['is_alert'] = false;
  108. if ($store['expire_time'] > 0) {
  109. if ($store['expire_time'] - (7 * 86400) < time()) {
  110. $store['is_alert'] = true;
  111. }
  112. }
  113. return $this->success('操作成功', compact('goods_ranking_list', 'user_ranking_list', 'today_data', 'yesterday_data', 'table_list', 'store'));
  114. }
  115. return $this->render($this->action->id);
  116. }
  117. //不用验证权限
  118. public function actionToPay()
  119. {
  120. if (Yii::$app->request->isAjax) {
  121. $params = Yii::$app->request->post();
  122. $limit = 1;
  123. switch ($params['activeDay']) {
  124. case "one":
  125. $limit = 1;
  126. break;
  127. case "seven":
  128. $limit = 6;
  129. break;
  130. case "thirty":
  131. $limit = 29;
  132. break;
  133. }
  134. $time = time();
  135. $today = date('Y-m-d', $time);
  136. $date_time_arr = [$today];
  137. for ($i = 1; $i <= $limit; $i++) {
  138. $date_time_arr[] = date("Y-m-d", strtotime("-{$i} day"));
  139. }
  140. $today_data = ['add_user_nums' => 0, 'order_nums' => 0, 'settlement_commission' => 0, 'sales_money' => 0, 'cashier_sales_money' => 0];
  141. $store_census_list = StoreCensus::lists(['where' => [['store_id' => $this->store_id], ['date_time' => $date_time_arr]], 'order' => 'created_at asc']);
  142. if ($store_census_list) {
  143. foreach ($store_census_list as $val) {
  144. $today_data['add_user_nums'] += $val['add_user_nums'];
  145. $today_data['order_nums'] += $val['order_nums'];
  146. $today_data['settlement_commission'] += $val['settlement_commission'];
  147. $today_data['sales_money'] += $val['sales_money'];
  148. $today_data['cashier_sales_money'] += $val['cashier_sales_money'];
  149. }
  150. }
  151. return $this->success('操作成功', compact('today_data'));
  152. }
  153. return $this->render($this->action->id);
  154. }
  155. public
  156. function actionHeader()
  157. {
  158. $admin = Yii::$app->store_user->identity;
  159. $user = array(
  160. 'id' => $admin->id,
  161. 'store_id' => $admin->store_id,
  162. 'username' => $admin->username,
  163. 'admin_type' => $admin->admin_type,
  164. );
  165. $mall = array(
  166. 'id' => $this->mall['id'],
  167. 'name' => $this->mall['name'],
  168. );
  169. $services = Yii::$app->services->setting->platform->get('system');
  170. $update_password_status = Yii::$app->services->setting->mall->get('basic.update_password_status');
  171. $navs = [];
  172. return $this->success('操作成功', compact('user', 'mall', 'services', 'update_password_status', 'navs'));
  173. }
  174. }