DataController.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <?php
  2. namespace backend\modules\mall\controllers;
  3. use backend\controllers\MallController;
  4. use backend\modules\mall\services\CleanService;
  5. use common\models\common\Region;
  6. use common\enums\StatusEnum;
  7. use common\models\mall\MallAddons;
  8. use common\models\user\UserLevel;
  9. use common\models\statistics\GlobalStatistics;
  10. use common\models\statistics\RegionStatistics;
  11. use common\helpers\TaskHelper;
  12. use common\enums\RedisKeyEnum;
  13. use common\enums\RabbitMqEnum;
  14. use common\models\backend\Admin;
  15. use Yii;
  16. class DataController extends MallController
  17. {
  18. public $enableCsrfValidation = false;
  19. public function actionIndex() {
  20. if (Yii::$app->request->isAjax) {
  21. if (\Yii::$app->request->isGet) {
  22. $list = Yii::$app->services->setting->mall->get($this->mall_id, 'index_data');
  23. $levels = UserLevel::getListIndexByLevelColumn($this->mall_id);
  24. if (empty($list)) {
  25. //没有数据设置默认值
  26. $list = GlobalStatistics::getDefaultStatistics($levels);
  27. $temp = [];
  28. foreach ($list as $key => $val) {
  29. if ($key == 'upgrade_level') {
  30. foreach ($val as $level => $num) {
  31. $temp['today_upgrade_level'][] = ['level' => $level, 'name' => $levels[$level], 'num' => $num];
  32. $temp['yesterday_upgrade_level'][] = ['level' => $level, 'name' => $levels[$level], 'num' => $num];
  33. }
  34. } else {
  35. $temp['today_' . $key] = $val;
  36. $temp['yesterday_' . $key] = $val;
  37. }
  38. }
  39. $list = $temp;
  40. $list['today_money'] = $list['total_money'] = $list['user_num'] = $list['order_num'] = $list['pay_num'] = $list['total_browse_num'] = $list['total_visitor_num'] = $list['total_follow_num'] = $list['today_register_num'] = 0;
  41. $list['region_data'] = [];
  42. } else {
  43. //处理生成缓存后新增或删除等级
  44. $list['today_upgrade_level'] = GlobalStatistics::removeLevel(json_decode($list['today_upgrade_level'], true), $levels);
  45. $list['yesterday_upgrade_level'] = GlobalStatistics::removeLevel(json_decode($list['yesterday_upgrade_level'], true), $levels);
  46. $today_upgrade_level = [];
  47. $yesterday_upgrade_level = [];
  48. foreach ($levels as $level => $name) {
  49. if (isset($list['today_upgrade_level'][$level])) {
  50. $today_upgrade_level[] = ['num' => $list['today_upgrade_level'][$level], 'level' => $level, 'name' => $name];
  51. }
  52. if (isset($list['yesterday_upgrade_level'][$level])) {
  53. $yesterday_upgrade_level[] = ['num' => $list['yesterday_upgrade_level'][$level], 'level' => $level, 'name' => $name];
  54. }
  55. }
  56. $list['today_upgrade_level'] = $today_upgrade_level;
  57. $list['yesterday_upgrade_level'] = $yesterday_upgrade_level;
  58. RegionStatistics::getDefaultRegion($this->mall_id);
  59. $list['region_data'] = $list['region_data'] ? RegionStatistics::setProvinceName(json_decode($list['region_data'], true)) : [];
  60. }
  61. if(isset($list['goods_list'])){
  62. $list['goods_list'] = json_decode($list['goods_list'],true);
  63. $list['goods_ids'] = json_decode($list['goods_ids'],true);
  64. }else{
  65. $list['goods_list'] = [];
  66. $list['goods_ids'] = [];
  67. }
  68. $list['province_data'] = [];
  69. return $this->success('操作成功', $list);
  70. } else {
  71. $post = \Yii::$app->request->post();
  72. $res = Yii::$app->services->validate->validate($post, [
  73. [['status', 'total_money', 'today_money', 'today_register_num', 'user_num', 'today_visitor_num',
  74. 'yesterday_visitor_num', 'today_browse_num', 'yesterday_browse_num', 'order_num',
  75. 'pay_num', 'total_browse_num', 'total_visitor_num', 'total_follow_num'], 'required'],
  76. [['status', 'total_money', 'today_money', 'today_register_num', 'user_num', 'today_visitor_num','yesterday_visitor_num',
  77. 'today_browse_num', 'yesterday_browse_num', 'order_num', 'pay_num', 'total_browse_num', 'total_visitor_num', 'total_follow_num'
  78. ], 'integer'],
  79. [['region_data', 'today_upgrade_level', 'yesterday_upgrade_level', 'id','goods_list','goods_ids'
  80. ], 'safe']
  81. ]);
  82. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  83. $yesterday_upgrade_level = [];
  84. if (!isset($post['yesterday_upgrade_level'])) $post['yesterday_upgrade_level'] = [];
  85. foreach ($post['yesterday_upgrade_level'] as $yesterday_level) {
  86. $yesterday_upgrade_level[$yesterday_level['level']] = $yesterday_level['num'];
  87. }
  88. $post['yesterday_upgrade_level'] = json_encode($yesterday_upgrade_level);
  89. $today_upgrade_level = [];
  90. if (!isset($post['today_upgrade_level'])) $post['today_upgrade_level'] = [];
  91. foreach ($post['today_upgrade_level'] as $today_level) {
  92. $today_upgrade_level[$today_level['level']] = $today_level['num'];
  93. }
  94. $post['today_upgrade_level'] = json_encode($today_upgrade_level);
  95. RegionStatistics::getDefaultRegion($this->mall_id);
  96. $defaultProvince = array_column(RegionStatistics::$provinceStatistics, null, 'province_id');
  97. if (isset($post['region_data']) && !empty($post['region_data'])) {
  98. $region_data = array_column($post['region_data'], null, 'province_id');
  99. foreach ($defaultProvince as $province_id => &$val) {
  100. if (isset($region_data[$province_id])) {
  101. $val['pay_money'] = $region_data[$province_id]['pay_money'];
  102. }
  103. }
  104. }
  105. $post['region_data'] = json_encode(array_values($defaultProvince));
  106. Yii::$app->services->setting->mall->set($this->mall_id, ['index_data' => $post]);
  107. return $this->success('操作成功');
  108. }
  109. }
  110. return $this->render('index');
  111. }
  112. /**
  113. * 获取省份
  114. */
  115. public function actionGetProvince() {
  116. $regionList = Region::find()->where(['level' => 1])->select(['name', 'id'])->asArray()->all();
  117. return $this->success('操作成功', $regionList);
  118. }
  119. public function actionClean()
  120. {
  121. $request = Yii::$app->request;
  122. if ($request->isAjax) {
  123. if ($request->isPost) {
  124. $post = $request->post();
  125. $res = Yii::$app->services->validate->validate($post, [
  126. [['clean_data','clean_addons','clean_type','mobile','verify_code'], 'integer'],
  127. [['addons_name'], 'safe'],
  128. ]);
  129. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  130. if (empty($this->mall_id)) return $this->error('指定商城ID不能为空');
  131. $skip_verify_code = Yii::$app->params['skip_verify_code'];
  132. if (empty($skip_verify_code)) {
  133. $verify_code = \Yii::$app->cache->get($post['mobile'] . '_haveVerifyCode');
  134. if ($post['verify_code'] != $verify_code) {
  135. return $this->error('手机号验证码错误');
  136. }
  137. }
  138. $cache_key = 'clear_data_'.$this->mall_id;
  139. $cache = \Yii::$app->cache;
  140. $cache_data = $cache->get($cache_key);
  141. if ($cache_data == 1) return $this->error('正在清除中,请勿重复提交');
  142. // print_r(['clean_data' => $post['clean_data'], 'mall_id' => $this->mall_id, 'clean_addons' => $post['clean_addons'], 'clean_type' => $post['clean_type'], 'addons_name' => $post['addons_name']]);exit;
  143. $task_id = TaskHelper::pushTaskQueue(
  144. RabbitMqEnum::EXCHANGE_LONG_DURATION,
  145. RabbitMqEnum::LONG_DURATION_QUEUE,
  146. ['clean_data' => $post['clean_data'], 'mall_id' => $this->mall_id, 'clean_addons' => $post['clean_addons'], 'clean_type' => $post['clean_type'], 'addons_name' => $post['addons_name']],
  147. CleanService::class,
  148. 'batchHandle'
  149. );
  150. if (!$task_id) return $this->error('提交队列失败');
  151. return $this->success('已提交队列进行数据清除,请耐心等候');
  152. } else {
  153. //获取缓存
  154. $cache_key = 'clear_data_'.$this->mall_id;
  155. $cache = \Yii::$app->cache;
  156. $cache_data = $cache->get($cache_key);
  157. if (empty($cache_data)) $cache_data = 0;
  158. if ($cache_data == 2) {
  159. $cache->set($cache_key, 0);
  160. }
  161. $where = [['mall_id' => $this->mall_id], ['addons_status' => 2]];
  162. $with = ['addons' => function($query) {
  163. $query->select('name,title');
  164. }];
  165. $mall_addons = MallAddons::getMallAddons($where, $with, true, 'addons_name');
  166. $addons = [];
  167. foreach ($mall_addons as $item) {
  168. $addons[] = [
  169. 'name' => $item['addons_name'],
  170. 'title' => $item['addons']['title'] ?? '',
  171. ];
  172. }
  173. $admin = Admin::getOne([
  174. ['mall_id' => $this->mall_id],
  175. ['admin_type' => 3],
  176. ['is_default' => 1],
  177. ], true);
  178. $admin_mobile = $admin['mobile'] ? $admin['mobile'] : $admin['username'];
  179. return $this->success('获取成功', compact('addons', 'cache_data', 'admin_mobile'));
  180. }
  181. }
  182. return $this->render($this->action->id);
  183. }
  184. }