| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- <?php
- namespace common\logic\memberLabel;
- use addons\Agent\common\models\Agent;
- use common\enums\MemberLabelEnum;
- use common\enums\StatusEnum;
- use common\models\statistics\UserStatisticsTotal;
- use common\models\user\MemberLabel;
- use common\models\user\User;
- use common\models\user\UserExtra;
- use common\models\user\UserMemberLabel;
- use common\models\user\UserTeamStatistics;
- class MemberLabelLogic
- {
- public static function executeSync($params)
- {
- $user_id = $params['user_id'];
- $mall_id = $params['mall_id'];
- $cate_ids = $params['cate_ids'];
- $memberLabelArr = self::getMemberLabelArr($mall_id, $cate_ids);
- $keyMap = MemberLabelEnum::getKeyMap();
- $userStatisticsList = UserStatisticsTotal::lists(['where' => [['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']]);
- }
- }
- }
|