UserMemberLabelController.php 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <?php
  2. namespace backend\modules\mall\controllers;
  3. use backend\controllers\MallController;
  4. use common\enums\DownloadEnum;
  5. use common\enums\MemberLabelEnum;
  6. use common\enums\StatusEnum;
  7. use common\helpers\csv\CsvExportHelper;
  8. use common\models\user\MemberLabel;
  9. use common\models\user\User;
  10. use common\models\user\UserMemberLabel;
  11. use Yii;
  12. class UserMemberLabelController extends MallController
  13. {
  14. public function actionMemberLabelList()
  15. {
  16. $request = Yii::$app->request;
  17. if ($request->isAjax) {
  18. if ($request->isGet) {
  19. $memberLabelCategoryList = MemberLabelEnum::getMap();
  20. $cateIds = array_keys($memberLabelCategoryList);
  21. $memberLabelList = MemberLabel::lists([
  22. 'where' => [['cate_id' => $cateIds], ['mall_id' => $this->mall_id], ['status' => StatusEnum::ENABLED]],
  23. 'select' => 'id,cate_id,name,condition'
  24. ]);
  25. $list = [];
  26. $memberLabelArr = [];
  27. $mapContent = MemberLabelEnum::getMapContent();
  28. foreach ($memberLabelList as &$val) {
  29. $content = $mapContent[$val['cate_id']];
  30. $val['condition'] = json_decode($val['condition'], true);
  31. if (empty($val['condition']['num'])) $val['condition']['num'] = '';
  32. $content = str_replace('{data}', $val['condition']['num'], $content);
  33. $val['content'] = $content;
  34. $memberLabelArr[$val['cate_id']][] = $val;
  35. }
  36. foreach ($memberLabelCategoryList as $id => $name) {
  37. $list[] = [
  38. 'id' => $id,
  39. 'key' => 'key' . $id,
  40. 'name' => $name,
  41. 'list' => $memberLabelArr[$id] ?? []
  42. ];
  43. }
  44. return $this->success('操作成功', $list);
  45. }
  46. }
  47. }
  48. public function actionIndex()
  49. {
  50. $request = Yii::$app->request;
  51. if ($request->isAjax) {
  52. if ($request->isGet) {
  53. $params = Yii::$app->request->get();
  54. $query = UserMemberLabel::find()->where(['mall_id' => $this->mall_id])->andWhere(['status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]]);
  55. $where[] = ['=', 'mall_id', $this->mall_id];
  56. $where[] = ['in', 'status', [StatusEnum::DISABLED, StatusEnum::ENABLED]];
  57. if (!empty($params['start'])) {
  58. $temp = ['>=', 'register_time', strtotime($params['start'])];
  59. $where[] = $temp;
  60. $query->andWhere($temp);
  61. }
  62. if (!empty($params['end'])) {
  63. $temp = ['<=', 'register_time', strtotime($params['end'])];
  64. $where[] = $temp;
  65. $query->andWhere($temp);
  66. }
  67. if (!empty($params['nickname'])) {
  68. $userList = User::lists([
  69. 'where' => [
  70. ['mall_id' => $this->mall_id],
  71. ['like', 'nickname', $params['nickname']],
  72. ['status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]]
  73. ],
  74. 'select' => 'id',
  75. ]);
  76. $userIds = array_column($userList, 'id');
  77. $temp = ['user_id' => $userIds];
  78. $where[] = $temp;
  79. $query->andWhere($temp);
  80. }
  81. if (!empty($params['user_id'])) {
  82. $temp = ['=', 'user_id', $params['user_id']];
  83. $where[] = $temp;
  84. $query->andWhere($temp);
  85. }
  86. if (!empty($params['memberLabelIds']) && !empty($params['cate_id'])) {
  87. $cate_id = str_replace('key', '', $params['cate_id']);
  88. $temp = ['cate_id' . $cate_id => $params['memberLabelIds']];
  89. $where[] = $temp;
  90. $query->andWhere($temp);
  91. }
  92. if (!empty($params['memberLabelIds'])) {
  93. $cateIdArr = [];
  94. foreach ($params['memberLabelIds'] as $val) {
  95. $temp_arr = explode('_', $val);
  96. $cateIdArr[$temp_arr[0]][] = $temp_arr[1];
  97. }
  98. foreach ($cateIdArr as $cate_id => $memberLabelIds) {
  99. $temp = ['cate_id' . $cate_id => $memberLabelIds];
  100. $where[] = $temp;
  101. $query->andWhere($temp);
  102. }
  103. }
  104. $order = 'user_id desc';
  105. $params['where'] = $where;
  106. $params['order'] = $order;
  107. $params['limit'] = !empty($params['limit']) ? $params['limit'] : 10;
  108. $page_data = UserMemberLabel::listPage($params, false, true);
  109. $total = $query->count();
  110. if (!empty($page_data['list'])) {
  111. $userIds = array_column($page_data['list'], 'user_id');
  112. $cate_map = MemberLabelEnum::getMap();
  113. $mapIds = array_keys($cate_map);
  114. $member_label_id_arr = [];
  115. foreach ($mapIds as $cate_id) {
  116. $member_label_ids = array_column($page_data['list'], 'cate_id' . $cate_id);
  117. $member_label_id_arr = array_merge($member_label_id_arr, $member_label_ids);
  118. }
  119. $member_label_id_arr = array_unique($member_label_id_arr);
  120. $member_label_list = MemberLabel::lists(['where' => [['id' => $member_label_id_arr]], 'index' => 'id']);
  121. $userArr = User::lists(['where' => [['id' => $userIds]], 'index' => 'id', 'select' => 'id,nickname,mobile,avatar_url']);
  122. $mapContent = MemberLabelEnum::getMapContent();
  123. foreach ($page_data['list'] as &$item) {
  124. $item['nickname'] = '';
  125. $item['mobile'] = '';
  126. $item['avatar_url'] = '';
  127. if (isset($userArr[$item['user_id']])) {
  128. $item['nickname'] = $userArr[$item['user_id']]['nickname'];
  129. $item['mobile'] = $userArr[$item['user_id']]['mobile'];
  130. $item['avatar_url'] = $userArr[$item['user_id']]['avatar_url'];
  131. }
  132. $userMemberLabelList = [];
  133. foreach ($mapIds as $cate_id) {
  134. $temp_cate_id = $item['cate_id' . $cate_id];
  135. if (isset($member_label_list[$temp_cate_id])) {
  136. $content = $mapContent[$cate_id];
  137. if (!is_array($member_label_list[$temp_cate_id]['condition'])) {
  138. $member_label_list[$temp_cate_id]['condition'] = json_decode($member_label_list[$temp_cate_id]['condition'], true);
  139. }
  140. if (empty($member_label_list[$temp_cate_id]['condition']['num'])) $member_label_list[$temp_cate_id]['condition']['num'] = '';
  141. $content = str_replace('{data}', $member_label_list[$temp_cate_id]['condition']['num'], $content);
  142. $member_label_list[$temp_cate_id]['content'] = $content;
  143. $userMemberLabelList[] = $member_label_list[$temp_cate_id];
  144. }
  145. }
  146. $item['userMemberLabelList'] = $userMemberLabelList;
  147. }
  148. }
  149. $page_data['total'] = "共 {$total} 条";
  150. return $this->success('操作成功', $page_data);
  151. }
  152. }
  153. return $this->render($this->action->id);
  154. }
  155. public function actionExport()
  156. {
  157. if (\Yii::$app->request->isPost) {
  158. $post = \Yii::$app->request->post();
  159. $type_arr = DownloadEnum::getTypeMap();
  160. $post['mall_id'] = $this->mall_id;
  161. $post['type'] = DownloadEnum::TYPE_MEMBER;
  162. $post['status'] = DownloadEnum::STATUS_DOWNING;
  163. $post['name'] = $type_arr[DownloadEnum::TYPE_MEMBER] . '列表' . date('YmdHis');
  164. $filename = '会员分析-' . date('YmdHis') . '_' . rand(10000, 99999);
  165. $res = CsvExportHelper::exportDownLoadCenter($this->mall_id, $filename, DownloadEnum::TYPE_MEMBER, UserMemberLabel::class, 'exportHandle', $post);
  166. if ($res === false) return $this->error('加入导出任务失败' . CsvExportHelper::getStaticError());
  167. return $this->success('添加导出任务成功,任务完成后请在下载中心进行下载!');
  168. }
  169. }
  170. }