UserMemberLabelController.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. <?php
  2. namespace console\controllers;
  3. use addons\Agent\common\models\Agent;
  4. use common\enums\MemberLabelEnum;
  5. use common\enums\StatusEnum;
  6. use common\logic\memberLabel\MemberLabelLogic;
  7. use common\models\mall\Mall;
  8. use common\models\statistics\UserStatisticsTotal;
  9. use common\models\user\MemberLabel;
  10. use common\models\user\User;
  11. use common\models\user\UserExtra;
  12. use common\models\user\UserMemberLabel;
  13. use common\models\user\UserTeamStatistics;
  14. use common\models\user\UserWallet;
  15. use yii\console\Controller;
  16. class UserMemberLabelController extends Controller
  17. {
  18. public function actionMLabel()
  19. {
  20. $mallList = Mall::getEnableMallList();
  21. foreach ($mallList as $mall) {
  22. $memberLabelList = MemberLabel::lists(['where' => [['status' => 1],['mall_id'=>$mall['id']]]]);
  23. $memberLabelArr = [];
  24. foreach ($memberLabelList as &$val) {
  25. $val['condition'] = json_decode($val['condition'], true);
  26. if (!empty($val['condition']['num'])) {
  27. }
  28. $memberLabelArr[$val['cate_id']][] = $val;
  29. }
  30. $i = 1;
  31. $page_size = 1000;
  32. $keyMap = MemberLabelEnum::getKeyMap();
  33. while ($user_list = User::find()->where(['status' => StatusEnum::ENABLED])
  34. ->andWhere(['mall_id'=>$mall['id']])
  35. ->select('id,mall_id,level,created_at')
  36. ->orderBy('id asc')
  37. ->offset(($i - 1) * $page_size)->limit($page_size)->all()) {
  38. MemberLabelLogic::cateId2Or3($mall['id'], $user_list, $memberLabelArr[MemberLabelEnum::USER_LEVEL], MemberLabelEnum::USER_LEVEL);
  39. $userArr = array_column($user_list, 'created_at', 'id');
  40. $userIds = array_column($user_list, 'id');
  41. $userMallArr = array_column($user_list, 'mall_id', 'id');
  42. $userStatisticsList = UserStatisticsTotal::lists(['where' => [['user_id' => $userIds]], 'select' => 'mall_id,user_id,pay_money,pay_num,refund_order_num,share_nums,visit_nums']);
  43. MemberLabelLogic::cateIdCommon($mall['id'], $userStatisticsList, $userArr, $memberLabelArr[MemberLabelEnum::VALUE_LABEL], $keyMap[MemberLabelEnum::VALUE_LABEL], MemberLabelEnum::VALUE_LABEL);
  44. MemberLabelLogic::cateIdCommon($mall['id'], $userStatisticsList, $userArr, $memberLabelArr[MemberLabelEnum::REPURCHASE], $keyMap[MemberLabelEnum::REPURCHASE], MemberLabelEnum::REPURCHASE);
  45. MemberLabelLogic::cateIdCommon($mall['id'], $userStatisticsList, $userArr, $memberLabelArr[MemberLabelEnum::ACTIVE], $keyMap[MemberLabelEnum::ACTIVE], MemberLabelEnum::ACTIVE);
  46. MemberLabelLogic::cateIdCommon($mall['id'], $userStatisticsList, $userArr, $memberLabelArr[MemberLabelEnum::SHARE] ?? [], $keyMap[MemberLabelEnum::SHARE], MemberLabelEnum::SHARE);
  47. MemberLabelLogic::cateIdCommon($mall['id'], $userStatisticsList, $userArr, $memberLabelArr[MemberLabelEnum::REFUND], $keyMap[MemberLabelEnum::REFUND], MemberLabelEnum::REFUND);
  48. $userWallet = UserWallet::lists(['where' => [['user_id' => $userIds]], 'select' => 'mall_id,user_id,total_commission']);
  49. MemberLabelLogic::cateIdCommon($mall['id'], $userWallet, $userArr, $memberLabelArr[MemberLabelEnum::INCOME], $keyMap[MemberLabelEnum::INCOME], MemberLabelEnum::INCOME);
  50. $userExtra = UserExtra::lists(['where' => [['user_id' => $userIds]], 'select' => 'user_id,birthday']);
  51. MemberLabelLogic::cateId11($mall['id'], $userExtra, $memberLabelArr[MemberLabelEnum::USER_AGE], $userMallArr, $userArr, MemberLabelEnum::USER_AGE);
  52. $userTeamStatistics = UserTeamStatistics::lists(['where' => [['user_id' => $userIds]], 'select' => 'mall_id,user_id,user_direct_total,user_team_total']);
  53. MemberLabelLogic::cateIdCommon($mall['id'], $userTeamStatistics, $userArr, $memberLabelArr[MemberLabelEnum::POPULARIZE], $keyMap[MemberLabelEnum::POPULARIZE], MemberLabelEnum::POPULARIZE);
  54. MemberLabelLogic::cateIdCommon($mall['id'], $userTeamStatistics, $userArr, $memberLabelArr[MemberLabelEnum::LEAD], $keyMap[MemberLabelEnum::LEAD], MemberLabelEnum::LEAD);
  55. $i++;
  56. }
  57. $i = 1;
  58. $page_size = 1000;
  59. while ($user_list = Agent::find()->where(['status' => StatusEnum::ENABLED])
  60. ->andWhere(['mall_id'=>$mall['id']])
  61. ->select('id,mall_id,level')
  62. ->offset(($i - 1) * $page_size)->limit($page_size)->all()) {
  63. MemberLabelLogic::cateId2Or3($mall['id'], $user_list, $memberLabelArr[MemberLabelEnum::AGENT_LEVEL], MemberLabelEnum::USER_LEVEL);
  64. $i++;
  65. }
  66. }
  67. }
  68. public function actionValueLabel()
  69. {
  70. $mallList = Mall::getEnableMallList();
  71. foreach ($mallList as $mall) {
  72. $memberLabelList = MemberLabel::lists(['where' => [['status' => 1],['mall_id'=>$mall['id']]]]);
  73. $memberLabelArr = [];
  74. foreach ($memberLabelList as &$val) {
  75. $val['condition'] = json_decode($val['condition'], true);
  76. if (!empty($val['condition']['num'])) {
  77. }
  78. $memberLabelArr[$val['cate_id']][] = $val;
  79. }
  80. $i = 1;
  81. $page_size = 1000;
  82. $keyMap = MemberLabelEnum::getKeyMap();
  83. while ($user_list = User::find()->where(['status' => StatusEnum::ENABLED])
  84. ->andWhere(['mall_id'=>$mall['id']])
  85. ->select('id,mall_id,level,created_at')
  86. ->orderBy('id asc')
  87. ->offset(($i - 1) * $page_size)->limit($page_size)->all()) {
  88. $userArr = array_column($user_list, 'created_at', 'id');
  89. $userIds = array_column($user_list, 'id');
  90. $userStatisticsList = UserStatisticsTotal::lists(['where' => [['user_id' => $userIds]], 'select' => 'mall_id,user_id,pay_money,pay_num,refund_order_num,share_nums,visit_nums']);
  91. MemberLabelLogic::cateIdCommon($mall['id'], $userStatisticsList, $userArr, $memberLabelArr[MemberLabelEnum::VALUE_LABEL], $keyMap[MemberLabelEnum::VALUE_LABEL], MemberLabelEnum::VALUE_LABEL);
  92. $i++;
  93. }
  94. }
  95. }
  96. /**
  97. * 维护会员等级标签对应的用户数量,当会员登记标签用户数量对不上时可以通过此方法重新计算
  98. * @Author:lun
  99. * @Date:2024-05-25 16:30
  100. * @Copyright:copyright(c)2024 广东七件事集团
  101. * @return void
  102. */
  103. public function actionUserLevel()
  104. {
  105. $mallList = Mall::getEnableMallList();
  106. foreach ($mallList as $mall) {
  107. $memberLabelList = MemberLabel::lists(['where' => [['status' => 1],['mall_id'=>$mall['id']]]]);
  108. $memberLabelArr = [];
  109. foreach ($memberLabelList as &$val) {
  110. $val['condition'] = json_decode($val['condition'], true);
  111. if (!empty($val['condition']['num'])) {
  112. }
  113. $memberLabelArr[$val['cate_id']][] = $val;
  114. }
  115. $i = 1;
  116. $page_size = 1000;
  117. while ($user_list = User::find()->where(['status' => StatusEnum::ENABLED])
  118. ->andWhere(['mall_id'=>$mall['id']])
  119. ->select('id,mall_id,level,created_at')
  120. ->orderBy('id asc')
  121. ->offset(($i - 1) * $page_size)->limit($page_size)->all()) {
  122. MemberLabelLogic::cateId2Or3($mall['id'], $user_list, $memberLabelArr[MemberLabelEnum::USER_LEVEL], MemberLabelEnum::USER_LEVEL);
  123. $i++;
  124. }
  125. }
  126. }
  127. public function actionAgentLevel()
  128. {
  129. $mallList = Mall::getEnableMallList();
  130. foreach ($mallList as $mall) {
  131. $memberLabelList = MemberLabel::lists(['where' => [['status' => 1],['mall_id'=>$mall['id']]]]);
  132. $memberLabelArr = [];
  133. foreach ($memberLabelList as &$val) {
  134. $val['condition'] = json_decode($val['condition'], true);
  135. if (!empty($val['condition']['num'])) {
  136. }
  137. $memberLabelArr[$val['cate_id']][] = $val;
  138. }
  139. $i = 1;
  140. $page_size = 1000;
  141. while ($user_list = Agent::find()->where(['status' => StatusEnum::ENABLED])
  142. ->andWhere(['mall_id'=>$mall['id']])
  143. ->select('id,mall_id,level')
  144. ->offset(($i - 1) * $page_size)->limit($page_size)->all()) {
  145. MemberLabelLogic::cateId2Or3($mall['id'], $user_list, $memberLabelArr[MemberLabelEnum::AGENT_LEVEL], MemberLabelEnum::AGENT_LEVEL);
  146. $i++;
  147. }
  148. }
  149. }
  150. public function actionUserAge()
  151. {
  152. $mallList = Mall::getEnableMallList();
  153. foreach ($mallList as $mall) {
  154. $i = 1;
  155. $page_size = 1000;
  156. $memberLabelArr = MemberLabelLogic::getMemberLabelArr($mall['id'], MemberLabelEnum::USER_AGE);
  157. while ($userExtra = UserExtra::find()
  158. ->where(['<>', 'birthday', ''])
  159. ->select('user_id,birthday')
  160. ->orderBy('id asc')
  161. ->asArray()
  162. ->offset(($i - 1) * $page_size)->limit($page_size)->all()) {
  163. $userIds = array_column($userExtra, 'user_id');
  164. $user_list = User::lists(['where' => [['id' => $userIds]], 'select' => 'id,mall_id,created_at']);
  165. $userMallArr = array_column($user_list, 'mall_id', 'id');
  166. $userArr = array_column($user_list, 'created_at', 'id');
  167. if(!isset($memberLabelArr[MemberLabelEnum::AGENT_LEVEL])) continue;
  168. MemberLabelLogic::cateId11($mall['id'], $userExtra, $memberLabelArr[MemberLabelEnum::USER_AGE], $userMallArr, $userArr, MemberLabelEnum::USER_AGE);
  169. $i++;
  170. }
  171. }
  172. }
  173. public function actionLead()
  174. {
  175. $mallList = Mall::getEnableMallList();
  176. foreach ($mallList as $mall) {
  177. $memberLabelList = MemberLabel::lists(['where' => [['status' => 1],['mall_id'=>$mall['id']]]]);
  178. $memberLabelArr = [];
  179. foreach ($memberLabelList as &$val) {
  180. $val['condition'] = json_decode($val['condition'], true);
  181. if (!empty($val['condition']['num'])) {
  182. }
  183. $memberLabelArr[$val['cate_id']][] = $val;
  184. }
  185. $i = 1;
  186. $page_size = 1000;
  187. $keyMap = MemberLabelEnum::getKeyMap();
  188. while ($user_list = User::find()
  189. ->where(['status' => StatusEnum::ENABLED])
  190. ->andWhere(['mall_id'=>$mall['id']])
  191. ->select('id,mall_id,level,created_at')
  192. ->orderBy('id asc')
  193. ->offset(($i - 1) * $page_size)->limit($page_size)->all()) {
  194. $userArr = array_column($user_list, 'created_at', 'id');
  195. $userIds = array_column($user_list, 'id');
  196. $userTeamStatistics = UserTeamStatistics::lists(['where' => [['user_id' => $userIds]], 'select' => 'mall_id,user_id,user_direct_total,user_team_total']);
  197. MemberLabelLogic::cateIdCommon($mall['id'], $userTeamStatistics, $userArr, $memberLabelArr[MemberLabelEnum::LEAD], $keyMap[MemberLabelEnum::LEAD], MemberLabelEnum::LEAD);
  198. $i++;
  199. }
  200. }
  201. }
  202. public function actionUserDir()
  203. {
  204. $mallList = Mall::getEnableMallList();
  205. foreach ($mallList as $mall) {
  206. $memberLabelList = MemberLabel::lists(['where' => [['status' => 1],['mall_id'=>$mall['id']]]]);
  207. $memberLabelArr = [];
  208. foreach ($memberLabelList as &$val) {
  209. $val['condition'] = json_decode($val['condition'], true);
  210. if (!empty($val['condition']['num'])) {
  211. }
  212. $memberLabelArr[$val['cate_id']][] = $val;
  213. }
  214. $i = 1;
  215. $page_size = 1000;
  216. $keyMap = MemberLabelEnum::getKeyMap();
  217. while ($user_list = User::find()->where(['status' => StatusEnum::ENABLED])
  218. ->andWhere(['mall_id'=>$mall['id']])
  219. ->select('id,mall_id,level,created_at')
  220. ->orderBy('id asc')
  221. ->offset(($i - 1) * $page_size)->limit($page_size)->all()) {
  222. $userArr = array_column($user_list, 'created_at', 'id');
  223. $userIds = array_column($user_list, 'id');
  224. $userTeamStatistics = UserTeamStatistics::lists(['where' => [['user_id' => $userIds]], 'select' => 'mall_id,user_id,user_direct_total,user_team_total']);
  225. MemberLabelLogic::cateIdCommon($mall['id'], $userTeamStatistics, $userArr, $memberLabelArr[MemberLabelEnum::POPULARIZE], $keyMap[MemberLabelEnum::POPULARIZE], MemberLabelEnum::POPULARIZE);
  226. $i++;
  227. }
  228. }
  229. }
  230. public function actionTidy()
  231. {
  232. MemberLabelLogic::changeUserNum(5, 2);
  233. $list = MemberLabel::find()->where(['status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]])->all();
  234. foreach ($list as $item) {
  235. if ($item['cate_id'] == 12) continue;
  236. $count = UserMemberLabel::find()->where(
  237. [
  238. 'mall_id' => $item['mall_id'],
  239. 'cate_id' . $item['cate_id'] => $item['id'],
  240. 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]
  241. ]
  242. )->count();
  243. $item->user_num = $count ?? 0;
  244. $res = $item->save();
  245. var_dump($res);
  246. }
  247. }
  248. }