DefaultController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <?php
  2. namespace addons\Mch\backend\controllers;
  3. use addons\Mch\common\enums\MchEnum;
  4. use addons\Mch\common\models\Mch;
  5. use addons\Mch\common\models\MchCommission;
  6. use addons\Mch\common\models\MchGoodsRanking;
  7. use addons\Mch\common\models\MchWithdrawLog;
  8. use common\enums\RedisKeyEnum;
  9. use common\enums\StatusEnum;
  10. use common\helpers\ArrayHelper;
  11. use common\helpers\DateHelper;
  12. use common\models\common\Region;
  13. /**
  14. * 默认控制器
  15. *
  16. * Class DefaultController
  17. * @package addons\Store\backend\controllers
  18. */
  19. class DefaultController extends BaseController
  20. {
  21. /**
  22. * 首页
  23. *
  24. * @return string
  25. */
  26. public function actionIndex()
  27. {
  28. if (!\Yii::$app->request->isAjax) {
  29. return $this->render('index');
  30. }
  31. if (\Yii::$app->request->isGet) {
  32. $cache = \Yii::$app->cache;
  33. $cache_key = RedisKeyEnum::BACKEND_CENSUS_KEY . 'mall_id:' . $this->mall_id;
  34. $data = $cache->get($cache_key);
  35. if (!empty($data)) {
  36. return $this->success('success', $data);
  37. }
  38. /* 顶部统计 ---- start ---- */
  39. $time_nodes = DateHelper::yesterDay();
  40. $query_com = MchCommission::find()
  41. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]);
  42. // 实际支付金额(实收金额)、待结算佣金、已结算佣金、支付人数、支付订单数量
  43. $real_pay_amounts = $not_settle_amounts = $settle_amounts = $pay_people_numbers = $pay_order_numbers = 0;
  44. $yesterday_real_pay_amounts = $yesterday_not_settle_amounts = $yesterday_settle_amounts = $yesterday_pay_people_numbers = $yesterday_pay_order_numbers = 0;
  45. $user_ids = $yesterday_user_ids = [];
  46. foreach ($query_com->each(100) as $commission) {
  47. $real_pay_amounts += $commission->pay_money;
  48. if ($commission->is_settlement == 1) {
  49. $settle_amounts += $commission->amount_received;
  50. } else {
  51. $not_settle_amounts += $commission->amount_received;
  52. }
  53. $pay_order_numbers += 1;
  54. $user_ids[] = $commission->user_id;
  55. if ($commission->created_at >= $time_nodes['start'] && $commission->created_at <= $time_nodes['start']) {
  56. $yesterday_real_pay_amounts += $commission->pay_money;
  57. if ($commission->is_settlement == 1) {
  58. $yesterday_settle_amounts += $commission->amount_received;
  59. } else {
  60. $yesterday_not_settle_amounts += $commission->amount_received;
  61. }
  62. $yesterday_pay_order_numbers += 1;
  63. $yesterday_user_ids[] = $commission->user_id;
  64. }
  65. }
  66. $pay_people_numbers = count(array_flip(array_flip($user_ids)));
  67. $real_pay_amounts = round($real_pay_amounts, 2);
  68. $not_settle_amounts = round($not_settle_amounts, 2);
  69. $settle_amounts = round($settle_amounts, 2);
  70. $yesterday_pay_people_numbers = count(array_flip(array_flip($yesterday_user_ids)));
  71. $yesterday_real_pay_amounts = round($yesterday_real_pay_amounts, 2);
  72. $yesterday_not_settle_amounts = round($yesterday_not_settle_amounts, 2);
  73. $yesterday_settle_amounts = round($yesterday_settle_amounts, 2);
  74. // 待审核提现、待贷款提现
  75. $waiting_audit_withdraw_amounts = $waiting_pay_withdraw_amounts = 0;
  76. $yesterday_waiting_audit_withdraw_amounts = $yesterday_waiting_pay_withdraw_amounts = 0;
  77. $query_withdraw = MchWithdrawLog::find()
  78. ->select('withdraw_status,actual_num')
  79. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'withdraw_status' => [0, 1]]);
  80. foreach ($query_withdraw->each(100) as $withdraw) {
  81. if ($withdraw->withdraw_status == 0) {
  82. $waiting_audit_withdraw_amounts += $withdraw->actual_num;
  83. } else {
  84. $waiting_pay_withdraw_amounts += $withdraw->actual_num;
  85. }
  86. if ($commission->created_at >= $time_nodes['start'] && $commission->created_at <= $time_nodes['start']) {
  87. if ($withdraw->withdraw_status == 0) {
  88. $yesterday_waiting_audit_withdraw_amounts += $withdraw->actual_num;
  89. } else {
  90. $yesterday_waiting_pay_withdraw_amounts += $withdraw->actual_num;
  91. }
  92. }
  93. }
  94. $waiting_audit_withdraw_amounts = round($waiting_audit_withdraw_amounts, 2);
  95. $waiting_pay_withdraw_amounts = round($waiting_pay_withdraw_amounts, 2);
  96. $yesterday_waiting_audit_withdraw_amounts = round($yesterday_waiting_audit_withdraw_amounts, 2);
  97. $yesterday_waiting_pay_withdraw_amounts = round($yesterday_waiting_pay_withdraw_amounts, 2);
  98. // 待审核门店数量
  99. $waiting_audit_store_numbers = $yesterday_waiting_audit_store_numbers = 0;
  100. $query_store = Mch::find()
  101. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]);
  102. foreach ($query_store->andWhere(['check_status' => MchEnum::CHECK_WAITING])->each(200) as $store) {
  103. $waiting_audit_store_numbers += 1;
  104. if ($store->created_at >= $time_nodes['start'] && $store->created_at <= $time_nodes['start']) {
  105. $yesterday_waiting_audit_store_numbers += 1;
  106. }
  107. }
  108. /* 顶部统计 ---- end ---- */
  109. /* 门店销售排名 ---- start ---- */
  110. $store_good_ranking_list = MchGoodsRanking::find()
  111. ->select('store_id,sales_money')
  112. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED])
  113. ->orderBy('sales_money desc')
  114. ->limit(10)
  115. ->asArray()
  116. ->all();
  117. if (empty($store_good_ranking_list)) {
  118. $store_good_ranking_list = [
  119. 1 => ['store_id' => 1, 'sales_money' => 1234],
  120. 2 => ['store_id' => 2, 'sales_money' => 222],
  121. 3 => ['store_id' => 3, 'sales_money' => 2342],
  122. ];
  123. }
  124. if (!empty($store_good_ranking_list)) {
  125. $store_ids = array_column($store_good_ranking_list, 'store_id');
  126. $stores = Mch::find()
  127. ->select('id,store_name,logo_img')
  128. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => $store_ids])
  129. ->asArray()
  130. ->indexBy('id')
  131. ->all();
  132. foreach ($store_good_ranking_list as &$list) {
  133. $store = $stores[$list['store_id']] ?? [];
  134. $list['store_name'] = $store['store_name'] ?? '';
  135. $list['logo_img'] = $store['logo_img'] ?? '';
  136. }
  137. }
  138. /* 门店销售排名 ---- end ---- */
  139. /* 省级地区销售排名 ---- start ---- */
  140. $store_datas = [];
  141. $regions = Region::find()->select('id,name')->where(['level' => 1])->asArray()->indexBy('id')->all();
  142. $query_store = Mch::find()
  143. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED])
  144. ->andWhere(['check_status' => 1]);
  145. foreach ($query_store->each(200) as $store) {
  146. $store_datas[$store->province_id]['region_name'] = $regions[$store->province_id]['name'] ?? '';
  147. if (!isset($store_datas[$store->province_id]['store_numbers'])) {
  148. $store_datas[$store->province_id]['store_numbers'] = 0;
  149. }
  150. $store_datas[$store->province_id]['store_numbers'] += 1;
  151. if (!isset($store_datas[$store->province_id]['sale_amounts'])) {
  152. $store_datas[$store->province_id]['sale_amounts'] = 0;
  153. }
  154. $store_datas[$store->province_id]['sale_amounts'] += $store->total_order_money;
  155. }
  156. $store_datas = array_values($store_datas);
  157. $store_datas = ArrayHelper::arraySort($store_datas, 'sale_amounts', 'asc');
  158. // $store_datas = ArrayHelper::multisort(array_values($store_datas), 'sale_amounts', 'asc');
  159. // 门店总数
  160. $all_store_numbers = array_sum(array_column($store_datas, 'store_numbers'));
  161. $all_sale_amounts = array_sum(array_column($store_datas, 'sale_amounts'));
  162. /* 省级地区销售排名 ---- end ---- */
  163. $data = [
  164. 'currTime' => date('Y-m-d H:i:s'),
  165. 'statistics' => [
  166. 'pay_people_numbers' => $pay_people_numbers,
  167. 'real_pay_amounts' => $real_pay_amounts,
  168. 'not_settle_amounts' => $not_settle_amounts,
  169. 'settle_amounts' => $settle_amounts,
  170. 'pay_order_numbers' => $pay_order_numbers,
  171. 'yesterday_pay_order_numbers' => $yesterday_pay_order_numbers,
  172. 'waiting_audit_withdraw_amounts' => $waiting_audit_withdraw_amounts,
  173. 'waiting_pay_withdraw_amounts' => $waiting_pay_withdraw_amounts,
  174. 'waiting_audit_store_numbers' => $waiting_audit_store_numbers,
  175. 'yesterday_pay_people_numbers' => $yesterday_pay_people_numbers,
  176. 'yesterday_real_pay_amounts' => $yesterday_real_pay_amounts,
  177. 'yesterday_not_settle_amounts' => $yesterday_not_settle_amounts,
  178. 'yesterday_settle_amounts' => $yesterday_settle_amounts,
  179. 'yesterday_waiting_audit_withdraw_amounts' => $yesterday_waiting_audit_withdraw_amounts,
  180. 'yesterday_waiting_pay_withdraw_amounts' => $yesterday_waiting_pay_withdraw_amounts,
  181. 'yesterday_waiting_audit_store_numbers' => $yesterday_waiting_audit_store_numbers,
  182. ],
  183. 'store_good_ranking_list' => $store_good_ranking_list,
  184. 'region_ranking_list' => $store_datas,
  185. 'map' => [
  186. $all_store_numbers, $all_sale_amounts
  187. ],
  188. 'total_store_numbers' => $all_store_numbers,
  189. 'total_sale_amounts' => $all_sale_amounts,
  190. ];
  191. // 统计结果缓存半个小时
  192. $cache->set($data, $cache_key, 1800);
  193. return $this->success('success', $data);
  194. }
  195. }
  196. }