[['user_id' => $user_id]], 'select' => 'mall_id,user_id,pay_money,pay_num,refund_order_num,share_nums,visit_nums']); $user_list = User::lists(['where' => [['id' => $user_id]], 'select' => 'id,created_at']); $userArr = array_column($user_list, 'created_at', 'id'); foreach ($cate_ids as $cate_id) { MemberLabelLogic::cateIdCommon($mall_id, $userStatisticsList, $userArr, $memberLabelArr[$cate_id] ?? [], $keyMap[$cate_id] ?? '', $cate_id); } } public static function executeSyncCateId2Or3($params) { $user_id = $params['user_id']; $mall_id = $params['mall_id']; $cate_ids = $params['cate_ids']; $memberLabelArr = self::getMemberLabelArr($mall_id, $cate_ids); foreach ($cate_ids as $cate_id) { switch ($cate_id) { case MemberLabelEnum::USER_LEVEL: $user_list = User::lists(['where' => [['id' => $user_id]], 'select' => 'id,mall_id,level,created_at']); break; case MemberLabelEnum::AGENT_LEVEL: $user_list = Agent::lists(['where' => [['user_id' => $user_id], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]], 'select' => 'user_id as id,mall_id,level,created_at']); break; } if (!empty($user_list)) { MemberLabelLogic::cateId2Or3($mall_id, $user_list, $memberLabelArr[$cate_id] ?? [], $cate_id); } } } public static function executeSyncCateId11($params) { $user_id = $params['user_id']; $mall_id = $params['mall_id']; $cate_ids = $params['cate_ids']; $memberLabelArr = self::getMemberLabelArr($mall_id, $cate_ids); $userExtra = UserExtra::lists(['where' => [['user_id' => $user_id]], 'select' => 'user_id,birthday']); $user_list = User::lists(['where' => [['id' => $user_id]], 'select' => 'id,mall_id,created_at']); $userMallArr = array_column($user_list, 'mall_id', 'id'); $userArr = array_column($user_list, 'created_at', 'id'); if(isset($memberLabelArr[MemberLabelEnum::USER_AGE])){ MemberLabelLogic::cateId11($mall_id, $userExtra, $memberLabelArr[MemberLabelEnum::USER_AGE], $userMallArr, $userArr, MemberLabelEnum::USER_AGE); } } public static function executeSyncCateId5Or6($params) { $user_id = $params['user_id']; $mall_id = $params['mall_id']; $cate_ids = $params['cate_ids']; $memberLabelArr = self::getMemberLabelArr($mall_id, $cate_ids); $userTeamStatistics = UserTeamStatistics::lists(['where' => [['user_id' => $user_id]], 'select' => 'mall_id,user_id,user_direct_total,user_team_total']); $user_list = User::lists(['where' => [['id' => $user_id]], 'select' => 'id,created_at']); $userArr = array_column($user_list, 'created_at', 'id'); $keyMap = MemberLabelEnum::getKeyMap(); foreach ($cate_ids as $cate_id) { if(isset($memberLabelArr[$cate_id])){ MemberLabelLogic::cateIdCommon($mall_id, $userTeamStatistics, $userArr, $memberLabelArr[$cate_id], $keyMap[$cate_id], $cate_id); } } } public static function getMemberLabelArr($mall_id, $cate_ids) { $memberLabelList = MemberLabel::lists(['where' => [['mall_id' => $mall_id], ['cate_id' => $cate_ids], ['status' => StatusEnum::ENABLED]]]); $memberLabelArr = []; foreach ($memberLabelList as &$val) { $val['condition'] = json_decode($val['condition'], true); $memberLabelArr[$val['cate_id']][] = $val; } return $memberLabelArr; } //会员等级or团队等级 public static function cateId2Or3($mall_id, $userList, $memberLabelArr, $cate_id) { $arr = []; foreach ($memberLabelArr as $val) { $arr[$val['condition']['num']] = $val['id']; } foreach ($userList as $user) { $mallId = $user['mall_id']; $userId = $user['id']; $level = $user['level']; if (!isset($arr[$level])) { continue; } $memberLabelId = $arr[$level]; $addData = [ 'mall_id' => $mallId, 'user_id' => $userId, 'cate_id' . $cate_id => $memberLabelId, 'register_time' => $user['created_at'] ?? 0, 'status' => StatusEnum::ENABLED, ]; UserMemberLabel::setData($addData); } self::changeUserNum($mall_id, $cate_id); } public static function cateIdCommon($mall_id, $userList, $userArr, $memberLabelArr, $key, $cate_id = null) { if (empty($memberLabelArr)) return false; $arr = []; $arrNum = []; $keyArr = self::getKeyArr($memberLabelArr, $arrNum, $arr); rsort($arrNum); foreach ($userList as $user) { $mallId = $user['mall_id']; $userId = $user['user_id']; $nums = $user[$key] ?? 0; //复购的话,要减先减1 if ($cate_id == MemberLabelEnum::REPURCHASE && $nums > 0) $nums--; $memberLabelId = self::getMemberLabelId($arrNum, $keyArr, $arr, $nums); if (empty($memberLabelId)) $memberLabelId = 0; $addData = [ 'mall_id' => $mallId, 'user_id' => $userId, 'cate_id' . $cate_id => $memberLabelId, 'register_time' => $userArr[$user['user_id']] ?? 0, 'status' => StatusEnum::ENABLED, ]; UserMemberLabel::setData($addData); } self::changeUserNum($mall_id, $cate_id); } //年龄标签 public static function cateId11($mallId, $userExtra, $memberLabelArr, $userMallArr, $userArr, $cateId) { $arr = []; $arrNum = []; $keyArr = self::getKeyArr($memberLabelArr, $arrNum, $arr); rsort($arrNum); foreach ($userExtra as $user) { $userId = $user['user_id']; $mallId = $userMallArr[$userId] ?? 0; $birthdayArr = explode('-', $user['birthday']); $year = 0; if(!empty($birthdayArr[0])){ $year = $birthdayArr[0]; } $memberLabelId = self::getMemberLabelId($arrNum, $keyArr, $arr, $year); if (empty($memberLabelId)) continue; $addData = [ 'mall_id' => $mallId, 'user_id' => $userId, 'cate_id' . $cateId => $memberLabelId, 'register_time' => $userArr[$user['user_id']] ?? 0, 'status' => StatusEnum::ENABLED, ]; UserMemberLabel::setData($addData); } self::changeUserNum($mallId, $cateId); } protected static function getMemberLabelId($arrNum, $keyArr, $arr, $nums) { $memberLabelId = null; foreach ($arrNum as $num) { if (!isset($keyArr[$num])) continue; $temp_key_arr = $keyArr[$num]; if ($temp_key_arr['type'] == 1) { if ($nums <= $temp_key_arr['max'] && $nums >= $temp_key_arr['min']) { $memberLabelId = $arr[$temp_key_arr['key']]; break; } } elseif ($temp_key_arr['type'] == 2) { if ($nums >= $temp_key_arr['max']) { $memberLabelId = $arr[$temp_key_arr['key']]; break; } } } return $memberLabelId; } protected static function getKeyArr($memberLabelArr, &$arrNum, &$arr) { $keyArr = []; foreach ($memberLabelArr as $val) { $temp_num = explode('-', $val['condition']['num']); if (isset($temp_num[0]) && isset($temp_num[1])) { if ($temp_num[1] > $temp_num[0]) { $max = $temp_num[1]; $min = $temp_num[0]; } else { $max = $temp_num[0]; $min = $temp_num[1]; } $arrNum[] = $max; $keyArr[$max] = [ 'key' => $val['condition']['num'], 'max' => $max, 'min' => $min, 'type' => 1, ]; } elseif (isset($temp_num[0])) { $max = $temp_num[0]; $arrNum[] = $max; $keyArr[$max] = [ 'key' => $val['condition']['num'], 'max' => $max, 'type' => 2, ]; } $arr[$val['condition']['num']] = $val['id']; } return $keyArr; } public static function changeUserNum($mall_id, $cate_id) { if ($cate_id == 12) return false; $cid = 'cate_id' . $cate_id; $list = UserMemberLabel::lists([ 'where' => [ ['mall_id' => $mall_id], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]], ['>', $cid, 0] ], 'group' => $cid, 'select' => "{$cid} as memberLabelId,count(*) as counts" ]); MemberLabel::updateAll(['user_num' => 0], ['mall_id' => $mall_id, 'cate_id' => $cate_id]); foreach ($list as $item) { $res = MemberLabel::updateAll(['user_num' => $item['counts']], ['mall_id' => $mall_id, 'id' => $item['memberLabelId']]); } } }