# coding=utf-8 from __future__ import unicode_literals import random import datetime from gm_rpcd.all import bind from talos.rpc import bind_context from talos.services import get_user_from_context from talos.decorators import cache_page from talos.cache.base import high_quality_user_cache from social.models import SocialInfo from talos.services.user import UserService from talos.models.diary import Diary from talos.models.topic import TopicReply, Problem from talos.models import ReplyCollect from utils.rpc import get_current_user from gm_rpcd.all import bind @bind_context('diary/high_quality_users') def get_high_quality_users(ctx): # 获取八个优质用户 current_user = get_user_from_context() if not high_quality_user_cache.get('high_quality_user'): return [] _all_user_ids = [int(i) for i in high_quality_user_cache.get('high_quality_user').split(',')] if len(_all_user_ids) < 20: user_ids = _all_user_ids else: user_ids = random.sample(_all_user_ids, 20) result = [] followings = {} if current_user and current_user.id: social_info = SocialInfo(uid=current_user.id) followings = social_info.is_following_users(user_ids) user_id_list = [] for user_id in user_ids: # 排除关注用户 if followings.get(user_id): continue if len(user_id_list) >= 8: break else: user_id_list.append(user_id) user_infos = UserService.get_users_by_user_ids(user_ids=user_id_list) for user_id in user_id_list: user_info = user_infos[user_id] r_social = SocialInfo(uid=user_id) result.append({ 'user_id': user_info.id, 'nick_name': user_info.nickname, 'portrait': user_info.portrait, 'membership_level': user_info.membership_level, 'fans_count': r_social.fans_count if r_social else 0, }) return result @bind('diary/get_users_by_diary_ids') @cache_page(60 * 60) def get_users_by_diary_ids(diary_ids): result = {} if not diary_ids: return result user_id_list = Diary.objects.filter(id__in=diary_ids).values("user_id", "id") diary_user_ids = {item["user_id"]: item["id"] for item in user_id_list} if not diary_user_ids: return result user_infos = UserService.get_users_by_user_ids(user_ids=list(diary_user_ids.keys())) for user_id, diary_id in diary_user_ids.items(): user_info = user_infos[user_id] result[str(diary_id)] ={ 'user_id': user_info.id, 'nick_name': user_info.nickname, 'portrait': user_info.portrait, 'membership_level': user_info.membership_level, } return result @bind('topic/task/add_fake_fans') def get_topic_diary_info_to_add_fake_fans(start_time, end_time, q_type): ''' gaia 定时任务调取,根据不同条件 :param start_time: 时间区间-起始时间 :param end_time: 时间区间-结束时间 :param q_type: 查询类型:diary,topicreply :return: ''' re_data = [] if not start_time or not end_time or not q_type: return re_data if q_type == 'diary': diarys = Diary.objects.filter(audit_time__range=[start_time, end_time]).values('user_id', 'content_level') re_data = list(diarys) elif q_type == 'topicreply': topic_reply = TopicReply.objects.filter(reply_date__range=[start_time, end_time]).values('diary', 'problem').distinct() final_set = set() for replys in topic_reply: if replys['problem']: user_id = Problem.objects.get(id=replys['problem']).user_id final_set.add(user_id) elif replys['diary']: user_id = Diary.objects.get(id=replys['diary']).user_id final_set.add(user_id) re_data = list(final_set) return re_data