Exemplo n.º 1
0
def hongbao():
    """
    定期统计用户发送口令, 获取红包的情况

    规则: 用户向派派发送口令, 获得红包
    :return:
    """
    from datetime import datetime
    from bson import ObjectId
    import re

    redis = _redis_client()

    # 获得已发红包的用户
    processed_users = set(json.loads(redis.get('viae/viae.provisional.hongbao/processed_users') or '[]'))

    # 获得红包处理进度的时间戳
    utc_tz = timezone('UTC')
    processed_since = redis.get('viae/viae.provisional.hongbao/processed_ts')
    logger.info('Processing from %s' % processed_since)
    processed_since = datetime.strptime(processed_since, '%Y-%m-%d %H:%M:%S').replace(tzinfo=utc_tz)

    dummy_id = ObjectId.from_datetime(processed_since)

    # 找到哪些用户发送过红包口令
    pattern = re.compile(u'(体验旅行派APP领现金红包|新用户口令|领新用户红包|从微信过来领红包|下单送北京大房免费住)', re.IGNORECASE)
    sender_list = mongo_hedy.Message.distinct('senderId',
                                              {'_id': {'$gt': dummy_id}, 'receiverId': 10000, 'contents': pattern})

    # 这些用户必须不在已发送红包的列表中, 并且为两天内注册的
    final_senders = {}
    user_dummy_id = ObjectId.from_datetime(processed_since - timedelta(days=7))
    for s in filter(lambda v: v not in processed_users, sender_list):
        u = mongo_yunkai.UserInfo.find_one({'userId': s, '_id': {'$gt': user_dummy_id}}, {'userId': 1, 'nickName': 1})
        if not u:
            continue
        final_senders[u['userId']] = u

    if final_senders:
        # 准备报表
        sections = []
        for uid, user in sorted(final_senders.items(), key=lambda v: v[0]):
            messages = mongo_hedy.Message.find({'senderId': uid, 'receiverId': 10000}, {'contents': 1})
            c = '\n'.join([tmp['contents'] for tmp in messages])
            sections.append(u'%d: %s\n%s\n\n' % (uid, user['nickName'], c))
            processed_users.add(uid)

        email_contents = ''.join(sections).strip()

        from viae.job import send_email_to_group, send_email

        logger.info('Sending hongbao stats')
        send_email_to_group(groups='MARKETPLACE', subject=u'红包申请统计', body=email_contents)

    # 默认7天过期
    expire = 7 * 24 * 3600
    redis.set('viae/viae.provisional.hongbao/processed_users', json.dumps(list(processed_users)), expire)
    redis.set('viae/viae.provisional.hongbao/processed_ts',
              (datetime.utcnow() - timedelta(minutes=20)).replace(tzinfo=utc_tz).strftime('%Y-%m-%d %H:%M:%S'), expire)
Exemplo n.º 2
0
def send_sms(self, targets, message):
    """
    发送短信
    :param targets: 目标手机号. 可以是表示手机号的字符串, 或多个这样的手机号, 表示同时发送给多个手机
    :param message: 需要发送的内容.
    :return: 如果发送成功, 返回短信网关的任务ID. 否则返回None.
    """
    logger.info('target: %s, message: %s' % (targets, message))
    logger.error('target: %s, message: %s' % (targets, message))
Exemplo n.º 3
0
def on_create_user(user_id, source=None, channel=None, promotionCode=None):
    logger.info(
            'User created: %d, source: %s, channel: %s, promotionCode: %s' % (user_id, source, channel, promotionCode))

    # 处理邀请码
    promotion_code = (promotionCode or '').strip()
    if promotion_code:
        process_promotion_code(user_id, promotion_code)

    # 将派派添加为好友
    url = urljoin(settings.API_SERVER_BASE_URL, '/app/users/%d/contacts' % user_id)
    requests.post(url, json={'userId': 10000})

    from datetime import datetime, timedelta
    import copy
    from viae.database import mongo_main

    # 添加优惠券
    coupon_template = {
        'className': 'com.lvxingpai.model.marketplace.misc.BasicCoupon',
        'threshold': 0,
        'userId': user_id,
        'title': '',
        'desc': '',
        'discount': 0,
        'expire': datetime.now() + timedelta(days=90),
        'available': True
    }
    c = copy.deepcopy(coupon_template)
    c['title'] = u'现金券'
    c['desc'] = u'全场通用'
    c['discount'] = 1000
    coupons = [c]

    if channel == 'baidu':
        discounts = [(300, 15), (600, 30), (1000, 50), (1500, 75), (3000, 160), (5000, 260), (8000, 400), (10000, 500),
                     (30000, 1500)]
    else:
        discounts = [(300, 15), (600, 30), (800, 40), (1000, 50), (1500, 75), (2000, 100)]

    for entry in discounts:
        c = copy.deepcopy(coupon_template)
        c['title'] = u'代金券'
        c['threshold'] = entry[0] * 100
        c['discount'] = entry[1] * 100
        coupons.append(c)

    db = mongo_main
    for c in coupons:
        db.Coupon.save(c)

    total = sum([c['discount'] for c in coupons]) / 100
    payload = {'title': u'嘘寒问暖,不如送你巨款!%d元现金已到账~点击去查看' % total}
    send_complex_message.__call__(10000, user_id, 21, json.dumps(payload))
Exemplo n.º 4
0
def process_promotion_code(user_id, promotion_code):
    """
    根据promotion_code信息, 统计有哪些人邀请了哪些人
    :param user_id: 被邀请用户的id
    :param promotion_code: 被邀请用户填写的邀请码
    :return:
    """
    from viae.database import mongo_yunkai

    # 找到referrer
    logger.info('Promotion code: %s' % promotion_code)
    r = mongo_yunkai.UserInfo.find_one({'promotionCode': promotion_code.upper()}, {'userId': 1})
    if not r:
        # 尝试通过用户名来查找referrer
        r = mongo_yunkai.UserInfo.find_one({'nickName': promotion_code}, {'userId': 1})

    if r:
        referrer_id = r['userId']
        logger.info('Invited by user: %d' % referrer_id)
        mongo_yunkai.UserInfo.update({'userId': user_id}, {'$set': {'referrer': referrer_id}})
Exemplo n.º 5
0
def on_user_login(user_id, source):
    logger.info('User %d logged in from %s' % (user_id, source))
    if source != 'braavos':
        send_plain_text_message.delay(10000, user_id, u'欢迎亲爱的来到旅行派~ 我是派派,你的贴心执事管家。'
                                                      u'亲爱的有什么问题都可以问派派,如果被商家欺负了也可以来找派派投诉,'
                                                      u'派派去踢坏蛋的屁股!')