MemberLabelLogic.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. <?php
  2. namespace common\logic\memberLabel;
  3. use addons\Agent\common\models\Agent;
  4. use common\enums\MemberLabelEnum;
  5. use common\enums\StatusEnum;
  6. use common\models\statistics\UserStatisticsTotal;
  7. use common\models\user\MemberLabel;
  8. use common\models\user\User;
  9. use common\models\user\UserExtra;
  10. use common\models\user\UserMemberLabel;
  11. use common\models\user\UserTeamStatistics;
  12. class MemberLabelLogic
  13. {
  14. public static function executeSync($params)
  15. {
  16. $user_id = $params['user_id'];
  17. $mall_id = $params['mall_id'];
  18. $cate_ids = $params['cate_ids'];
  19. $memberLabelArr = self::getMemberLabelArr($mall_id, $cate_ids);
  20. $keyMap = MemberLabelEnum::getKeyMap();
  21. $userStatisticsList = UserStatisticsTotal::lists(['where' => [['user_id' => $user_id]], 'select' => 'mall_id,user_id,pay_money,pay_num,refund_order_num,share_nums,visit_nums']);
  22. $user_list = User::lists(['where' => [['id' => $user_id]], 'select' => 'id,created_at']);
  23. $userArr = array_column($user_list, 'created_at', 'id');
  24. foreach ($cate_ids as $cate_id) {
  25. MemberLabelLogic::cateIdCommon($mall_id, $userStatisticsList, $userArr, $memberLabelArr[$cate_id] ?? [], $keyMap[$cate_id] ?? '', $cate_id);
  26. }
  27. }
  28. public static function executeSyncCateId2Or3($params)
  29. {
  30. $user_id = $params['user_id'];
  31. $mall_id = $params['mall_id'];
  32. $cate_ids = $params['cate_ids'];
  33. $memberLabelArr = self::getMemberLabelArr($mall_id, $cate_ids);
  34. foreach ($cate_ids as $cate_id) {
  35. switch ($cate_id) {
  36. case MemberLabelEnum::USER_LEVEL:
  37. $user_list = User::lists(['where' => [['id' => $user_id]], 'select' => 'id,mall_id,level,created_at']);
  38. break;
  39. case MemberLabelEnum::AGENT_LEVEL:
  40. $user_list = Agent::lists(['where' => [['user_id' => $user_id], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]], 'select' => 'user_id as id,mall_id,level,created_at']);
  41. break;
  42. }
  43. if (!empty($user_list)) {
  44. MemberLabelLogic::cateId2Or3($mall_id, $user_list, $memberLabelArr[$cate_id] ?? [], $cate_id);
  45. }
  46. }
  47. }
  48. public static function executeSyncCateId11($params)
  49. {
  50. $user_id = $params['user_id'];
  51. $mall_id = $params['mall_id'];
  52. $cate_ids = $params['cate_ids'];
  53. $memberLabelArr = self::getMemberLabelArr($mall_id, $cate_ids);
  54. $userExtra = UserExtra::lists(['where' => [['user_id' => $user_id]], 'select' => 'user_id,birthday']);
  55. $user_list = User::lists(['where' => [['id' => $user_id]], 'select' => 'id,mall_id,created_at']);
  56. $userMallArr = array_column($user_list, 'mall_id', 'id');
  57. $userArr = array_column($user_list, 'created_at', 'id');
  58. if(isset($memberLabelArr[MemberLabelEnum::USER_AGE])){
  59. MemberLabelLogic::cateId11($mall_id, $userExtra, $memberLabelArr[MemberLabelEnum::USER_AGE], $userMallArr, $userArr, MemberLabelEnum::USER_AGE);
  60. }
  61. }
  62. public static function executeSyncCateId5Or6($params)
  63. {
  64. $user_id = $params['user_id'];
  65. $mall_id = $params['mall_id'];
  66. $cate_ids = $params['cate_ids'];
  67. $memberLabelArr = self::getMemberLabelArr($mall_id, $cate_ids);
  68. $userTeamStatistics = UserTeamStatistics::lists(['where' => [['user_id' => $user_id]], 'select' => 'mall_id,user_id,user_direct_total,user_team_total']);
  69. $user_list = User::lists(['where' => [['id' => $user_id]], 'select' => 'id,created_at']);
  70. $userArr = array_column($user_list, 'created_at', 'id');
  71. $keyMap = MemberLabelEnum::getKeyMap();
  72. foreach ($cate_ids as $cate_id) {
  73. if(isset($memberLabelArr[$cate_id])){
  74. MemberLabelLogic::cateIdCommon($mall_id, $userTeamStatistics, $userArr, $memberLabelArr[$cate_id], $keyMap[$cate_id], $cate_id);
  75. }
  76. }
  77. }
  78. public static function getMemberLabelArr($mall_id, $cate_ids)
  79. {
  80. $memberLabelList = MemberLabel::lists(['where' => [['mall_id' => $mall_id], ['cate_id' => $cate_ids], ['status' => StatusEnum::ENABLED]]]);
  81. $memberLabelArr = [];
  82. foreach ($memberLabelList as &$val) {
  83. $val['condition'] = json_decode($val['condition'], true);
  84. $memberLabelArr[$val['cate_id']][] = $val;
  85. }
  86. return $memberLabelArr;
  87. }
  88. //会员等级or团队等级
  89. public static function cateId2Or3($mall_id, $userList, $memberLabelArr, $cate_id)
  90. {
  91. $arr = [];
  92. foreach ($memberLabelArr as $val) {
  93. $arr[$val['condition']['num']] = $val['id'];
  94. }
  95. foreach ($userList as $user) {
  96. $mallId = $user['mall_id'];
  97. $userId = $user['id'];
  98. $level = $user['level'];
  99. if (!isset($arr[$level])) {
  100. continue;
  101. }
  102. $memberLabelId = $arr[$level];
  103. $addData = [
  104. 'mall_id' => $mallId,
  105. 'user_id' => $userId,
  106. 'cate_id' . $cate_id => $memberLabelId,
  107. 'register_time' => $user['created_at'] ?? 0,
  108. 'status' => StatusEnum::ENABLED,
  109. ];
  110. UserMemberLabel::setData($addData);
  111. }
  112. self::changeUserNum($mall_id, $cate_id);
  113. }
  114. public static function cateIdCommon($mall_id, $userList, $userArr, $memberLabelArr, $key, $cate_id = null)
  115. {
  116. if (empty($memberLabelArr)) return false;
  117. $arr = [];
  118. $arrNum = [];
  119. $keyArr = self::getKeyArr($memberLabelArr, $arrNum, $arr);
  120. rsort($arrNum);
  121. foreach ($userList as $user) {
  122. $mallId = $user['mall_id'];
  123. $userId = $user['user_id'];
  124. $nums = $user[$key] ?? 0;
  125. //复购的话,要减先减1
  126. if ($cate_id == MemberLabelEnum::REPURCHASE && $nums > 0) $nums--;
  127. $memberLabelId = self::getMemberLabelId($arrNum, $keyArr, $arr, $nums);
  128. if (empty($memberLabelId)) $memberLabelId = 0;
  129. $addData = [
  130. 'mall_id' => $mallId,
  131. 'user_id' => $userId,
  132. 'cate_id' . $cate_id => $memberLabelId,
  133. 'register_time' => $userArr[$user['user_id']] ?? 0,
  134. 'status' => StatusEnum::ENABLED,
  135. ];
  136. UserMemberLabel::setData($addData);
  137. }
  138. self::changeUserNum($mall_id, $cate_id);
  139. }
  140. //年龄标签
  141. public static function cateId11($mallId, $userExtra, $memberLabelArr, $userMallArr, $userArr, $cateId)
  142. {
  143. $arr = [];
  144. $arrNum = [];
  145. $keyArr = self::getKeyArr($memberLabelArr, $arrNum, $arr);
  146. rsort($arrNum);
  147. foreach ($userExtra as $user) {
  148. $userId = $user['user_id'];
  149. $mallId = $userMallArr[$userId] ?? 0;
  150. $birthdayArr = explode('-', $user['birthday']);
  151. $year = 0;
  152. if(!empty($birthdayArr[0])){
  153. $year = $birthdayArr[0];
  154. }
  155. $memberLabelId = self::getMemberLabelId($arrNum, $keyArr, $arr, $year);
  156. if (empty($memberLabelId)) continue;
  157. $addData = [
  158. 'mall_id' => $mallId,
  159. 'user_id' => $userId,
  160. 'cate_id' . $cateId => $memberLabelId,
  161. 'register_time' => $userArr[$user['user_id']] ?? 0,
  162. 'status' => StatusEnum::ENABLED,
  163. ];
  164. UserMemberLabel::setData($addData);
  165. }
  166. self::changeUserNum($mallId, $cateId);
  167. }
  168. protected static function getMemberLabelId($arrNum, $keyArr, $arr, $nums)
  169. {
  170. $memberLabelId = null;
  171. foreach ($arrNum as $num) {
  172. if (!isset($keyArr[$num])) continue;
  173. $temp_key_arr = $keyArr[$num];
  174. if ($temp_key_arr['type'] == 1) {
  175. if ($nums <= $temp_key_arr['max'] && $nums >= $temp_key_arr['min']) {
  176. $memberLabelId = $arr[$temp_key_arr['key']];
  177. break;
  178. }
  179. } elseif ($temp_key_arr['type'] == 2) {
  180. if ($nums >= $temp_key_arr['max']) {
  181. $memberLabelId = $arr[$temp_key_arr['key']];
  182. break;
  183. }
  184. }
  185. }
  186. return $memberLabelId;
  187. }
  188. protected static function getKeyArr($memberLabelArr, &$arrNum, &$arr)
  189. {
  190. $keyArr = [];
  191. foreach ($memberLabelArr as $val) {
  192. $temp_num = explode('-', $val['condition']['num']);
  193. if (isset($temp_num[0]) && isset($temp_num[1])) {
  194. if ($temp_num[1] > $temp_num[0]) {
  195. $max = $temp_num[1];
  196. $min = $temp_num[0];
  197. } else {
  198. $max = $temp_num[0];
  199. $min = $temp_num[1];
  200. }
  201. $arrNum[] = $max;
  202. $keyArr[$max] = [
  203. 'key' => $val['condition']['num'],
  204. 'max' => $max,
  205. 'min' => $min,
  206. 'type' => 1,
  207. ];
  208. } elseif (isset($temp_num[0])) {
  209. $max = $temp_num[0];
  210. $arrNum[] = $max;
  211. $keyArr[$max] = [
  212. 'key' => $val['condition']['num'],
  213. 'max' => $max,
  214. 'type' => 2,
  215. ];
  216. }
  217. $arr[$val['condition']['num']] = $val['id'];
  218. }
  219. return $keyArr;
  220. }
  221. public static function changeUserNum($mall_id, $cate_id)
  222. {
  223. if ($cate_id == 12) return false;
  224. $cid = 'cate_id' . $cate_id;
  225. $list = UserMemberLabel::lists([
  226. 'where' => [
  227. ['mall_id' => $mall_id],
  228. ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]],
  229. ['>', $cid, 0]
  230. ],
  231. 'group' => $cid,
  232. 'select' => "{$cid} as memberLabelId,count(*) as counts"
  233. ]);
  234. MemberLabel::updateAll(['user_num' => 0], ['mall_id' => $mall_id, 'cate_id' => $cate_id]);
  235. foreach ($list as $item) {
  236. $res = MemberLabel::updateAll(['user_num' => $item['counts']], ['mall_id' => $mall_id, 'id' => $item['memberLabelId']]);
  237. }
  238. }
  239. }