Exemplo n.º 1
0
def get_sessions(request):
    response = JsonResponse()
    response.code = 200
    response.data = JsonResponse()
    response.data.items = []

    mpuser = get_system_user_binded_mpuser(request.user)
    if mpuser is None:
        return response.get_response()

    #获取当前页数
    cur_page = int(request.GET.get('page', '1'))
    #获取每页个数
    count = int(request.GET.get('count', COUNT_PER_PAGE))

    is_debug = (request.GET.get('dbg', '0') == '1')
    #收藏记录
    is_collected = request.GET.get('is_collected', '0')

    start_time = request.GET.get('start_time', '').strip()
    end_time = request.GET.get('end_time', '').strip()
    search_content = request.GET.get('search_content', '').strip()
    if is_debug:
        sessions = Session.objects.select_related().filter(mpuser=mpuser)
    else:
        sessions = Session.objects.select_related().filter(mpuser=mpuser,
                                                           is_show=True)

    if start_time and end_time:
        start_time = '%s 0:0:0' % start_time
        end_time = '%s 23:59:59' % end_time
        sessions = sessions.filter(latest_contact_created_at__gte=start_time,
                                   latest_contact_created_at__lte=end_time)

    pageinfo, sessions = paginate(sessions,
                                  cur_page,
                                  count,
                                  query_string=request.META['QUERY_STRING'])

    #清空未读消息数量
    RealTimeInfo.objects.filter(mpuser=mpuser).update(unread_count=0)

    webapp_id = request.user_profile.webapp_id
    weixin_user_usernames = [s.weixin_user_id for s in sessions]
    weixin_users = WeixinUser.objects.filter(
        username__in=weixin_user_usernames)
    username2weixin_user = dict([(u.username, u) for u in weixin_users])

    # session2member = dict([(member_has_social_account.account.openid, member_has_social_account.member) for member_has_social_account \
    # 	in MemberHasSocialAccount.objects.filter()])

    for session in sessions:
        weixin_user = username2weixin_user[session.weixin_user_id]
        one_session = JsonResponse()
        one_session.id = session.id
        one_session.session_id = session.id
        one_session.sender_fake_id = weixin_user.fake_id
        one_session.sender_username = weixin_user.username
        one_session.sender_name = weixin_user.nickname_for_html
        if weixin_user.weixin_user_icon:
            one_session.weixin_user_icon = weixin_user.weixin_user_icon if len(
                weixin_user.weixin_user_icon.strip()) > 0 else DEFAULT_ICON
        else:
            one_session.weixin_user_icon = DEFAULT_ICON
        one_session.content = emotion.change_emotion_to_img(
            session.latest_contact_content)
        one_session.created_at = __format_datetime(
            session.latest_contact_created_at)
        one_session.unread_count = session.unread_count
        one_session.message_id = session.message_id
        one_session.is_collected = CollectMessage.is_collected(
            session.message_id)
        one_session.for_collected = False
        one_session.hidden_a = False
        try:
            if session.message_id != 0:
                message = Message.objects.get(id=session.message_id)
                one_session.message_type = message.message_type
                one_session.pic_url = message.pic_url
                one_session.audio_url = message.audio_url
            else:
                one_session.message_type = 'text'
                one_session.pic_url = ''
                one_session.audio_url = ''
        except:
            one_session.message_type = 'text'
            one_session.pic_url = ''
            one_session.audio_url = ''

        one_session.is_subscribed = is_subscribed(weixin_user)
        one_session.is_active = True if datetime.now(
        ) < session.latest_contact_created_at + timedelta(
            hours=EXPIRED_TIME) and datetime.now(
            ) > session.latest_contact_created_at else False
        try:
            account = SocialAccount.objects.get(webapp_id=webapp_id,
                                                openid=weixin_user.username)
            member = MemberHasSocialAccount.objects.filter(
                account=account)[0].member
            #member = session2member[session.weixin_user_id]
            if member:
                one_session.member_id = member.id
                one_session.member_remarks_name = member.remarks_name
                if member.user_icon and len(member.user_icon.strip()) > 0:
                    one_session.weixin_user_icon = member.user_icon
                if member.username_for_html:
                    one_session.sender_name = member.username_for_html
        except:
            notify_message = u"设置会话信息失败, weixin_user_openid:{}, webapp_id:{},cause:\n{}".format(
                session.weixin_user_id, webapp_id, unicode_full_stack())
            watchdog_notice(notify_message)
            continue

        response.data.items.append(one_session)
        response.data.page_info = __package_pageinfo(pageinfo)
    return response.get_response()
Exemplo n.º 2
0
def get_messages(request):
    response = JsonResponse()
    response.code = 200
    response.data = JsonResponse()
    response.data.items = []

    mpuser = get_system_user_binded_mpuser(request.user)
    if mpuser is None:
        return response.get_response()

    #获取当前页数
    cur_page = int(request.GET.get('page', '1'))
    #获取每页个数
    count = int(request.GET.get('count', COUNT_PER_PAGE))

    is_debug = (request.GET.get('dbg', '0') == '1')

    is_collected = request.GET.get('is_collected', '')

    search_content = request.GET.get('search_content', '')

    if is_collected:
        collected_message_ids = CollectMessage.get_message_ids(request.user)
        ordering = 'FIELD(`id`, %s)' % ','.join(
            str(id) for id in collected_message_ids)
        messages = Message.objects.filter(id__in=collected_message_ids).extra(
            select={'ordering': ordering}, order_by=('ordering', ))
    elif search_content:
        data_before_tow_days = dateutil.get_previous_date('today', 2)
        messages = Message.objects.belong_to(request.user_profile.webapp_id,
                                             mpuser, search_content)
    else:
        messages = []
    pageinfo, messages = paginate(messages,
                                  cur_page,
                                  count,
                                  query_string=request.META['QUERY_STRING'])
    webapp_id = request.user_profile.webapp_id
    for message in messages:
        weixin_user = message.session.weixin_user
        one_session = JsonResponse()
        one_session.id = message.id
        one_session.session_id = message.session.id
        one_session.sender_fake_id = weixin_user.fake_id
        one_session.sender_username = weixin_user.username
        one_session.sender_name = weixin_user.nickname_for_html
        if weixin_user.weixin_user_icon:
            one_session.weixin_user_icon = weixin_user.weixin_user_icon if len(
                weixin_user.weixin_user_icon.strip()) > 0 else DEFAULT_ICON
        else:
            one_session.weixin_user_icon = DEFAULT_ICON

        one_session.content = emotion.change_emotion_to_img(message.content)
        one_session.is_active = True if datetime.now(
        ) < message.created_at + timedelta(
            hours=EXPIRED_TIME) and datetime.now(
            ) > message.created_at else False
        if is_collected:
            one_session.is_active = False
            try:
                collect_message = CollectMessage.objects.get(
                    message_id=message.id)
                one_session.created_at = __format_datetime(
                    collect_message.created_at)
            except:
                one_session.created_at = __format_datetime(message.created_at)
        else:
            one_session.created_at = __format_datetime(message.created_at)
        one_session.message_id = message.id
        one_session.is_collected = CollectMessage.is_collected(message.id)
        one_session.message_type = message.message_type
        one_session.pic_url = message.pic_url
        one_session.audio_url = message.audio_url
        one_session.for_collected = is_collected
        one_session.hidden_a = True

        if message.message_type == IMAGE:
            one_session.content = message.pic_url

        if message.message_type == VOICE:
            one_session.content = message.audio_url

        one_session.is_subscribed = is_subscribed(weixin_user)

        try:
            account = SocialAccount.objects.get(webapp_id=webapp_id,
                                                openid=weixin_user.username)
            member = MemberHasSocialAccount.objects.filter(
                account=account)[0].member
            #member = session2member[session.weixin_user_id]
            if member:
                one_session.member_id = member.id
                one_session.member_remarks_name = member.remarks_name
                if member.user_icon and len(member.user_icon.strip()) > 0:
                    one_session.weixin_user_icon = member.user_icon
                if member.username_for_html:
                    one_session.sender_name = member.username_for_html
        except:
            notify_message = u"设置会话信息失败, weixin_user_openid:{}, cause:\n{}".format(
                session.weixin_user_id, unicode_full_stack())
            watchdog_notice(notify_message)

            continue

        response.data.items.append(one_session)
        response.data.page_info = __package_pageinfo(pageinfo)

    return response.get_response()
Exemplo n.º 3
0
def get_session_histories(request):
    session_id = request.GET['session_id']
    messages = Message.objects.filter(session=session_id).order_by('-id')
    sender_usernames = [m.from_weixin_user_username for m in messages]
    recevier_usernames = [m.to_weixin_user_username for m in messages]
    weixin_user_usernames = set(sender_usernames + recevier_usernames)
    weixin_users = WeixinUser.objects.filter(
        username__in=weixin_user_usernames)
    username2weixin_user = dict([u.username, u] for u in weixin_users)

    mpuser = get_system_user_binded_mpuser(request.user)

    try:
        mpuser_preview_info = MpuserPreviewInfo.objects.get(mpuser=mpuser)
    except:
        response = create_response(500)
        response.errMsg = u'获取公众号预览信息失败'
        return response.get_response()

    response = create_response(200)
    response.data.items = []
    session = Session.objects.get(id=session_id)
    webapp_id = request.user_profile.webapp_id
    is_active = True if datetime.now(
    ) < session.latest_contact_created_at + timedelta(
        hours=EXPIRED_TIME) and datetime.now(
        ) > session.latest_contact_created_at else False
    response.data.is_active = is_active
    for message in messages:
        sender = username2weixin_user[message.from_weixin_user_username]
        one_message = JsonResponse()
        one_message.id = message.id
        one_message.weixin_message_id = message.weixin_message_id
        one_message.is_reply = message.is_reply
        one_message.content = emotion.change_emotion_to_img(message.content)
        if one_message.content == None:
            one_message.content = ''
        one_message.weixin_created_at = __format_datetime(
            message.weixin_created_at)
        one_message.is_collected = CollectMessage.is_collected(message.id)
        one_message.message_type = message.message_type
        one_message.pic_url = message.pic_url
        one_message.audio_url = message.audio_url

        if message.message_type == IMAGE:
            one_message.content = message.pic_url

        if message.message_type == VOICE:
            one_message.content = message.audio_url
        if message.is_reply:
            one_message.sender_icon = mpuser_preview_info.image_path  #sender.weixin_user_icon
            one_message.sender_name = mpuser_preview_info.name
        else:
            account = SocialAccount.objects.get(webapp_id=webapp_id,
                                                openid=sender.username)
            member = MemberHasSocialAccount.objects.filter(
                account=account)[0].member
            if member:
                if member.user_icon:
                    one_message.sender_icon = member.user_icon if len(
                        member.user_icon.strip()) > 0 else DEFAULT_ICON
                else:
                    one_message.sender_icon = DEFAULT_ICON
                one_message.sender_name = member.username_for_html
                one_message.member_id = member.id
                if one_message.sender_icon != sender.weixin_user_icon:
                    sender.weixin_user_icon = member.user_icon
            else:
                if sender.weixin_user_icon:
                    one_message.sender_icon = sender.weixin_user_icon if len(
                        sender.weixin_user_icon.strip()) > 0 else DEFAULT_ICON
                one_message.sender_name = sender.weixin_user_nick_name
        response.data.items.append(one_message)

    return response.get_response()
Exemplo n.º 4
0
def mui_get_additional_histories(request):
    end_id = request.GET['end_id']
    session_id = request.GET['s_id']
    current_page = 1
    count = int(request.GET.get('count', 10))
    isManager = request.GET.get('isManager', 'false')
    isSystemMenager = request.GET.get('isSystemMenager', 'false')
    # user_id = request.GET['user_id']
    session = Session.objects.get(id=session_id)
    messages = Message.objects.filter(session=session_id).order_by('-id')
    #进行分页
    pageinfo, messages = paginator.paginate(messages, current_page, count)

    sender_usernames = [m.from_weixin_user_username for m in messages]
    recevier_usernames = [m.to_weixin_user_username for m in messages]
    weixin_user_usernames = set(sender_usernames + recevier_usernames)
    weixin_users = WeixinUser.objects.filter(
        username__in=weixin_user_usernames)
    username2weixin_user = dict([u.username, u] for u in weixin_users)

    mpuser = get_system_user_binded_mpuser(request.user)

    try:
        mpuser_preview_info = MpuserPreviewInfo.objects.get(mpuser=mpuser)
    except:
        response = create_response(500)
        response.errMsg = u'获取公众号预览信息失败'
        return response.get_jsonp_response(request)
    if isManager == "false" and isSystemMenager == "false":
        #清空未读消息
        Session.objects.filter(mpuser=mpuser,
                               id=session_id).update(unread_count=0)
    sender_name_response = ""
    messages_list_json = []
    is_active = True if datetime.now(
    ) < session.latest_contact_created_at + timedelta(
        hours=EXPIRED_TIME) and datetime.now(
        ) > session.latest_contact_created_at else False

    r_messages = []

    for message in messages:
        if message.id == end_id:
            break
        else:
            r_messages.append(message)

    if not r_messages:
        response = create_response(500)
        return response.get_jsonp_response(request)

    for message in reversed(r_messages):
        sender = username2weixin_user[message.from_weixin_user_username]
        one_message = JsonResponse()
        one_message.id = message.id
        one_message.weixin_message_id = message.weixin_message_id
        one_message.is_reply = message.is_reply
        one_message.message_type = message.message_type
        one_message.pic_url = message.pic_url
        one_message.audio_url = message.audio_url
        one_message.content = emotion.mui_change_emotion_to_img(
            message.content)
        one_message.weixin_created_at = __format_datetime(
            message.weixin_created_at)

        if message.is_reply:
            one_message.sender_icon = mpuser_preview_info.image_path
            one_message.sender_name = mpuser_preview_info.name
        else:
            member = Member.get_member_by_weixin_user_id(sender.id)
            if member:
                one_message.sender_icon = member.user_icon if len(
                    member.user_icon.strip()) > 0 else DEFAULT_ICON
                one_message.sender_name = member.username_for_html
                sender_name_response = one_message.sender_name
                if one_message.sender_icon != sender.weixin_user_icon:
                    sender.weixin_user_icon = member.user_icon
            else:
                one_message.sender_icon = sender.weixin_user_icon if len(
                    sender.weixin_user_icon.strip()) > 0 else DEFAULT_ICON
                one_message.sender_name = sender.weixin_user_nick_name
        messages_list_json.append(one_message)

    response = create_response(200)
    response.data = messages_list_json
    response.is_login = True
    response.is_active = is_active
    response.session_id = session_id
    response.weixin_user_id = session.weixin_user_id
    response.pressed_link = 'message'
    response.send_user_name = sender_name_response if sender_name_response != "" else session.weixin_user.weixin_user_nick_name
    response.page_info = __package_pageinfo(pageinfo)
    response.r_messages_count = len(r_messages)
    return response.get_jsonp_response(request)
Exemplo n.º 5
0
def list_messages(request):
    page = request.GET.get('page', 1)
    count = int(request.GET.get('count', 10))
    mpuser = get_system_user_binded_mpuser(request.user)
    isManager = request.GET.get('isManager', 'false')
    isSystemMenager = request.GET.get('isSystemMenager', 'false')
    if mpuser is None:
        response = create_response(500)
        response.errMsg = u'没有该用户的消息'
        return response.get_jsonp_response(request)

    sessions = Session.objects.select_related().filter(mpuser=mpuser,
                                                       is_show=True)

    #分页信息
    pageinfo, sessions = paginate(sessions,
                                  page,
                                  count,
                                  query_string=request.META['QUERY_STRING'])
    webapp_id = request.user_profile.webapp_id

    if isManager == "false" and isSystemMenager == "false":
        #清空未读消息数量
        RealTimeInfo.objects.filter(mpuser=mpuser).update(unread_count=0)

    weixin_user_usernames = [s.weixin_user_id for s in sessions]
    weixin_users = WeixinUser.objects.filter(
        username__in=weixin_user_usernames)
    username2weixin_user = dict([(u.username, u) for u in weixin_users])
    sessions_list_json = []
    for session in sessions:
        weixin_user = username2weixin_user[session.weixin_user_id]
        content = session.latest_contact_content
        one_session = JsonResponse()
        one_session.id = session.id
        one_session.sender_fake_id = weixin_user.fake_id
        one_session.sender_username = weixin_user.username
        one_session.sender_name = weixin_user.nickname_for_html
        one_session.weixin_user_icon = weixin_user.weixin_user_icon if len(
            weixin_user.weixin_user_icon.strip()) > 0 else DEFAULT_ICON
        messages = Message.objects.filter(
            session=session.id).order_by('-created_at')
        message_st_type = messages[0].message_type
        if message_st_type == 'text':
            if len(content) > 10:
                content = content[0:10] + '...'
            elif len(content.strip()) <= 0:  #如果类型为text但是内容为空,则视为voice,有问题?
                content = '[语音]'
        elif message_st_type == 'image':
            content = '[图片]'
        elif message_st_type == 'voice':
            content = '[语音]'
        elif message_st_type == 'video':
            content = '[视频]'
        one_session.content = content
        one_session.created_at = __format_datetime(
            session.latest_contact_created_at)
        one_session.unread_count = session.unread_count
        one_session.is_subscribed = is_subscribed(weixin_user)
        one_session.is_active = True if datetime.now(
        ) < session.latest_contact_created_at + timedelta(
            hours=EXPIRED_TIME) and datetime.now(
            ) > session.latest_contact_created_at else False

        try:
            account = SocialAccount.objects.get(webapp_id=webapp_id,
                                                openid=weixin_user.username)
            member = MemberHasSocialAccount.objects.filter(
                account=account)[0].member
            # member = Member.get_member_by_weixin_user_id(weixin_user.id)
            if member:
                one_session.member_id = member.id
                one_session.member_remarks_name = member.remarks_name
                if len(member.user_icon.strip()) > 0:
                    one_session.weixin_user_icon = member.user_icon
                if member.username_for_html:
                    one_session.sender_name = member.username_for_html
        except:
            # notify_message = u"设置会话信息失败, weixin_user_openid:{}, cause:\n{}".format(
            # 	session.weixin_user_id, unicode_full_stack())
            # watchdog_notice(notify_message)
            continue
            #raise
        sessions_list_json.append(one_session)
    response = create_response(200)
    response.data.iterms = sessions_list_json
    response.data.pressed_link = 'message'
    response.data.page_info = __package_pageinfo(pageinfo)
    return response.get_jsonp_response(request)
Exemplo n.º 6
0
    sender_name_response = ""
    messages_list_json = []
    is_active = True if datetime.now(
    ) < session.latest_contact_created_at + timedelta(
        hours=EXPIRED_TIME) and datetime.now(
        ) > session.latest_contact_created_at else False
    for message in reversed(messages):
        sender = username2weixin_user[message.from_weixin_user_username]
        one_message = JsonResponse()
        one_message.id = message.id
        one_message.weixin_message_id = message.weixin_message_id
        one_message.is_reply = message.is_reply
        one_message.message_type = message.message_type
        one_message.pic_url = message.pic_url
        one_message.audio_url = message.audio_url
        one_message.content = emotion.mui_change_emotion_to_img(
            message.content)
        one_message.weixin_created_at = __format_datetime(
            message.weixin_created_at)

        if message.is_reply:
            one_message.sender_icon = mpuser_preview_info.image_path
            one_message.sender_name = mpuser_preview_info.name
        else:
            member = Member.get_member_by_weixin_user_id(sender.id)
            if member:
                one_message.sender_icon = member.user_icon if len(
                    member.user_icon.strip()) > 0 else DEFAULT_ICON
                one_message.sender_name = member.username_for_html
                sender_name_response = one_message.sender_name
                if one_message.sender_icon != sender.weixin_user_icon:
                    sender.weixin_user_icon = member.user_icon