Пример #1
0
def withdraw_record_search():
    """
    重新尝试 微信提现 发红包
    :return:
    """
    operation_obj = operation.find_one()
    automatic_withdraw_cash = operation_obj.get('automatic_withdraw_cash')
    withdraw_record_cur = withdraw_record.find({
        'err_code': {
            '$ne': ''
        },
        'status': 0,
        'origin': u'微信提现',
        'value': {
            '$lt': automatic_withdraw_cash
        }
    })
    for withdraw_record_obj in withdraw_record_cur:
        red_envelopes_wechat(withdraw_record_obj)
        user_id = withdraw_record_obj.get('user_id', '')
        if withdraw_record.find_one({'user_id': user_id, 'status': 1}):
            withdraw_status = -1
        elif withdraw_record.find_one({'user_id': user_id, 'status': 0}):
            withdraw_status = 1
        elif withdraw_record.find_one({'user_id': user_id, 'status': -1}):
            withdraw_status = -2
        else:
            withdraw_status = 0
        user.update({'_id': ObjectId(user_id)},
                    {'$set': {
                        'withdraw_status': withdraw_status
                    }})
Пример #2
0
def withdraw_record_alipay():
    """
    重新尝试 支付宝提现转账
    :return:
    """
    operation_obj = operation.find_one()
    automatic_withdraw_cash = operation_obj.get('automatic_withdraw_cash')
    withdraw_record_cur = withdraw_record.find({
        'err_code': {
            '$ne': ''
        },
        'status': 0,
        'origin': u'支付宝提现',
        'value': {
            '$lt': automatic_withdraw_cash
        }
    })
    for withdraw_record_obj in withdraw_record_cur:
        start_transfer_alipay(withdraw_record_obj)
        user_id = withdraw_record_obj.get('user_id', '')
        if withdraw_record.find_one({'user_id': user_id, 'status': 1}):
            withdraw_status = -1
        elif withdraw_record.find_one({'user_id': user_id, 'status': 0}):
            withdraw_status = 1
        elif withdraw_record.find_one({'user_id': user_id, 'status': -1}):
            withdraw_status = -2
        else:
            withdraw_status = 0
        user.update({'_id': ObjectId(user_id)},
                    {'$set': {
                        'withdraw_status': withdraw_status
                    }})
Пример #3
0
def detail():
    access_status = judging_permissions('operation:get')
    if access_status.get('code') != 200:
        return jsonify(access_status)
    _obj = operation.find_one({})
    if not _obj:
        return jsonify({'code': 202, 'msg': u'不存在'})

    _obj['_id'] = str(_obj['_id'])
    return jsonify({'code': 200, 'data': _obj})
Пример #4
0
def initiate_withdrawal():
    """
    自动 提现 线程
    :return:
    """
    hour_str = datetime.now().strftime(format='%H')
    operation_obj = operation.find_one()
    automatic_withdraw_cash = operation_obj.get('automatic_withdraw_cash')

    while True:
        withdraw_task = withdraw_task_code.brpop('withdraw_notice', timeout=1)
        if not withdraw_task:
            new_hour_str = datetime.now().strftime(format='%H')
            if new_hour_str != hour_str:
                break
            continue
        try:
            withdraw_json = json.loads(withdraw_task[1])
            serial_number = withdraw_json.get('serial_number')
            withdraw_way(serial_number, automatic_withdraw_cash, is_back=False)
        except Exception as e:
            error_log.insert_one({
                'req_url':
                '',
                'req_data':
                '',
                'req_method':
                'initiate_withdrawal',
                'error_str':
                str(e),
                'today':
                datetime.now().strftime(format='%Y-%m-%d'),
                'time_stamp':
                int(time.time()),
                'req_time':
                datetime.now().strftime(format='%Y-%m-%d %H:%M:%S')
            })

        new_hour_str = datetime.now().strftime(format='%H')
        if new_hour_str != hour_str:
            break
Пример #5
0
def generate_integer_red():
    """
    生成整点红包
    :return:
    """

    operation_obj = operation.find_one()
    integer_red_number = int(operation_obj.get('integer_red_number', 100))
    red_hour_per_json = json.loads(operation_obj.get('red_hour_per_json'))

    dividend_config_obj = dividend_config.find({}).sort([('today_str', -1)])[0]
    integer_red_value = dividend_config_obj.get('integer_red_value',
                                                0) * 100 / 115

    if integer_red_value:
        for hour_int in range(24):
            hour_dict = red_hour_per_json.get(str(hour_int))
            # 红包所占资金比例
            per = hour_dict.get('per')
            # 此红包的总金额
            value = per * integer_red_value
            # 红包大概个数
            envelope_num = integer_red_number * per
            # 5到10块红包占比百分之二 所发红包数量为
            envelope_5_10_num = int(2 * envelope_num / 100)
            red_envelope_5_10_dict = interval_red_envelope(
                envelope_5_10_num, 500, 1100)
            # 5到10块红包所发红包金额为:
            total_5_10_value = red_envelope_5_10_dict.get('total_value')
            # 5到10块红包所发红包列表为
            red_5_10_list = red_envelope_5_10_dict.get('red_list')

            # 1到5块红包占比百分之三 所发红包数量为
            envelope_1_5_num = int(3 * envelope_num / 100)
            red_envelope_1_5_dict = interval_red_envelope(
                envelope_1_5_num, 100, 500)
            # 1到5块红包所发红包金额为:
            total_1_5_value = red_envelope_1_5_dict.get('total_value')
            # 5到10块红包所发红包列表为
            red_1_5_list = red_envelope_1_5_dict.get('red_list')

            # 其它金额的红包列表
            red_dict = reservation_hongbao(
                value - total_5_10_value - total_1_5_value, envelope_num, 10,
                5)
            red_list = red_dict.get('red_list')
            total_value = red_dict.get('total_value')
            today_str = timestamp_to_strftime(time.time() + 24 * 60 * 60,
                                              format='%Y-%m-%d')
            timeArray = time.strptime(
                '{0} {1}:00:00'.format(today_str, hour_int),
                "%Y-%m-%d %H:%M:%S")
            start_time = int(time.mktime(timeArray))
            integer_red_dict = {
                'today_str': today_str,
                'hour_int': hour_int,
                'value': total_value + total_5_10_value + total_1_5_value,
                'number':
                len(red_list) + len(red_5_10_list) + len(red_1_5_list),
                'status': 0,
                'start_time': start_time
            }
            integer_red.insert_one(integer_red_dict)
            integer_red_id = str(integer_red_dict.get('_id'))

            for i in range(len(red_list)):
                # 随机插入一个五到十块的红包
                if random.randint(0, 25) == 10:
                    if red_5_10_list:
                        integer_red_detail.insert_one({
                            'integer_red_id':
                            integer_red_id,
                            'value':
                            red_5_10_list.pop(),
                            'user_id':
                            '',
                            'optimum':
                            0
                        })
                else:
                    # 随机插入一个1到5块的红包
                    if random.randint(0, 17) == 10:
                        if red_1_5_list:
                            integer_red_detail.insert_one({
                                'integer_red_id':
                                integer_red_id,
                                'value':
                                red_1_5_list.pop(),
                                'user_id':
                                '',
                                'optimum':
                                0
                            })
                if random.randint(0, 1):
                    red_value = red_list.pop(0)
                else:
                    red_value = red_list.pop(-1)

                integer_red_detail.insert_one({
                    'integer_red_id': integer_red_id,
                    'value': red_value,
                    'user_id': '',
                    'optimum': 0
                })

            for red_value in red_5_10_list:
                integer_red_detail.insert_one({
                    'integer_red_id': integer_red_id,
                    'value': red_value,
                    'user_id': '',
                    'optimum': 0
                })
            for red_value in red_1_5_list:
                integer_red_detail.insert_one({
                    'integer_red_id': integer_red_id,
                    'value': red_value,
                    'user_id': '',
                    'optimum': 0
                })
            max_red_value = 0
            max_integer_red_id = ''
            integer_red_detail_cur = integer_red_detail.find(
                {'integer_red_id': integer_red_id})
            for integer_red_detail_obj in integer_red_detail_cur:
                if integer_red_detail_obj.get('value') > max_red_value:
                    max_red_value = integer_red_detail_obj.get('value')
                    max_integer_red_id = integer_red_detail_obj.get('_id')
                redis_admin.lpush('integer_red_id_' + integer_red_id,
                                  str(integer_red_detail_obj.get('_id')))
            integer_red_detail.update_one({'_id': max_integer_red_id},
                                          {'$set': {
                                              'optimum': 1
                                          }})
Пример #6
0
def system_dividend():
    """
    系统分红
    :return:
    """
    dividend_calorific_total = 0
    operation_obj = operation.find_one()
    dividend_of_calorific = int(
        operation_obj.get('dividend_of_calorific', 2000))
    dividend_deduct_calorific_per = int(
        operation_obj.get('dividend_deduct_calorific_per', 80))
    penny_calorific = operation_obj.get('penny_calorific', 5)

    dividend_config_obj = dividend_config.find({}).sort([('today_str', -1)])[0]
    # 将分红金额转换为分 同时扣除15的上级分润
    dividend_value = int(
        dividend_config_obj.get('dividend_value', 0) * 100 * 100 / 115)
    user_cur = user.find({
        'available_calorific': {
            '$gt': dividend_of_calorific
        },
        'status': 0
    })
    for user_obj in user_cur:
        user_id = str(user_obj.get('_id'))
        available_calorific = user_obj.get('available_calorific')
        if available_calorific > dividend_of_calorific:
            participate_dividend_calorific = int(
                available_calorific * dividend_deduct_calorific_per / 100)
            dividend_calorific_total += participate_dividend_calorific
            redis_admin.lpush(
                'system_dividend',
                json.dumps({
                    'participate_dividend_calorific':
                    participate_dividend_calorific,
                    'user_id': user_id
                }))

    while True:
        try:
            system_dividend_req = redis_admin.brpop('system_dividend',
                                                    timeout=2)
            if not system_dividend_req:
                break
            system_dividend_dict = json.loads(system_dividend_req[1])
            user_id = system_dividend_dict.get('user_id')
            participate_dividend_calorific = system_dividend_dict.get(
                'participate_dividend_calorific')

            try:
                user_obj = user.find_one({'_id': ObjectId(user_id)})
                if not user_obj:
                    continue
            except:
                continue

            value_total = int(participate_dividend_calorific / penny_calorific)
            user_dividend_value = int(value_total * 100 / 115)
            # user_dividend_value = int(dividend_value * participate_dividend_calorific / dividend_calorific_total)
            calorific_record.insert_one({
                'user_id':
                user_id,
                'today':
                datetime.now().strftime(format='%Y-%m-%d'),
                'symbol':
                -1,
                'type_num':
                11,
                'value':
                participate_dividend_calorific,
                'des':
                u'系统热量分红',
                'red_id':
                '',
                'created_time':
                datetime.now().strftime(format='%Y-%m-%d %H:%M:%S')
            })

            serial_number = '{0}{1}{2}{3}{4}{5}{6}'.format(
                datetime.now().strftime(format='%Y'), get_chars2(0, 1),
                datetime.now().strftime(format='%m'), get_chars2(0, 1),
                datetime.now().strftime(format='%d'), get_chars2(0, 1),
                datetime.now().strftime(format='%H%M%S'))

            commission_record.insert_one({
                'serial_number':
                serial_number,
                'planet_id':
                user_id,
                'origin':
                u'系统热量分红',
                'value':
                int(user_dividend_value),
                'consume_calorific':
                participate_dividend_calorific,
                'is_arrival':
                1,
                'balance':
                int(user_dividend_value + user_obj.get('balance')),
                'user_id':
                user_id,
                'user_name':
                user_obj.get('nickname'),
                'contributor_id':
                str(user_obj.get('_id')),
                'type_num':
                3,
                'user_img':
                user_obj.get('headimgurl'),
                'grade':
                1,
                'today':
                datetime.now().strftime(format='%Y-%m-%d'),
                'created_time':
                datetime.now().strftime(format='%Y-%m-%d %H:%M:%S')
            })
            user.update_one({'_id': user_obj.get('_id')}, {
                '$inc': {
                    'planet_commission_total': user_dividend_value,
                    'balance': user_dividend_value,
                    'available_calorific': -participate_dividend_calorific,
                    'consumption_calorific': participate_dividend_calorific
                }
            })
            calculate_planet(operation_obj, user_obj, user_dividend_value)
        except:
            pass
Пример #7
0
def generate_guess_red():
    """
    生成猜红包数据
    :return:
    """
    operation_obj = operation.find_one()
    today_str = timestamp_to_strftime(time.time() + 24 * 60 * 60,
                                      format='%Y-%m-%d')
    guess_red_invalid_time = int(operation_obj.get('guess_red_invalid_time',
                                                   5))
    red_hour_per_json = json.loads(operation_obj.get('red_hour_per_json'))
    dividend_config_obj = dividend_config.find({}).sort([('today_str', -1)])[0]
    guess_red_value = dividend_config_obj.get('guess_red_value', 0) * 100 / 115
    if guess_red_value:
        number_of_periods = int(
            timestamp_to_strftime(time.time() + 24 * 60 * 60,
                                  format='%Y%m%d')[2:]) * 1000
        for hour_int in range(24):
            hour_dict = red_hour_per_json.get(str(hour_int))
            per = hour_dict.get('per')
            # value = per * guess_red_value
            value = 24000
            while True:
                red_dict = reservation_hongbao(value, 12, 1000, 5)
                red_list = red_dict.get('red_list')
                if len(red_list) == 12:
                    break
            minute_int = 0
            for red_value in red_list:
                if red_value <= 1000:
                    red_value += random.randint(0, 1000)
                try:
                    timeArray = time.strptime(
                        '{0} {1}:{2}:00'.format(today_str, hour_int,
                                                minute_int),
                        "%Y-%m-%d %H:%M:%S")
                    start_time = int(time.mktime(timeArray))
                    invalid_time = start_time + guess_red_invalid_time * 60

                    guess_red.insert_one({
                        'today_str':
                        today_str,
                        'hour_int':
                        hour_int,
                        'minute_int':
                        minute_int,
                        'value':
                        red_value,
                        'invalid_time':
                        invalid_time,
                        'status':
                        0,
                        'number_of_periods':
                        number_of_periods + 1,
                        'start_time':
                        start_time,
                        'start_time_str':
                        timestamp_to_strftime(start_time,
                                              format='%Y-%m-%d %H:%M')
                    })
                    minute_int += 5
                    number_of_periods += 1
                except:
                    pass
Пример #8
0
def update():
    access_status = judging_permissions('operation:edit')
    if access_status.get('code') != 200:
        return jsonify(access_status)
    _update = {}
    data = {key: dict(request.form)[key][0] for key in dict(request.form)}
    if not data:
        data = request.get_json()
    _obj = operation.find_one()
    if not _obj:
        result = _insert(data)
        if result.get('status'):
            return jsonify({'code': 200, 'msg': u'成功'})
        return jsonify({'code': 200, 'msg': u'不存在'})

    try:
        red_hour_per_json = json.loads(data.get('red_hour_per_json'))
    except:
        return jsonify({'code': 201, 'msg': u'红包时间点分配比例json数据错误'})
    per_total = 0
    for hour_int in range(24):
        hour_dict = red_hour_per_json.get(str(hour_int))
        if not hour_dict:
            return jsonify({'code': 201, 'msg': u'红包时间点分配比例json数据错误'})
        per_total += hour_dict.get('per', 0)
    if per_total != 100:
        return jsonify({'code': 201, 'msg': u'红包时间点分配比例json数据错误'})
    red_hour_per_json_str = json.dumps(red_hour_per_json, ensure_ascii=False)
    data.update({'red_hour_per_json': red_hour_per_json_str})

    try:
        check_in_calorific_json = json.loads(
            data.get('check_in_calorific_json'))
    except:
        return jsonify({'code': 201, 'msg': u'参数错误'})
    check_in_calorific_json_str = json.dumps(check_in_calorific_json,
                                             ensure_ascii=False)
    data.update({'check_in_calorific_json': check_in_calorific_json_str})

    try:
        calorific_cash_json = json.loads(data.get('calorific_cash_json'))
    except:
        return jsonify({'code': 201, 'msg': u'参数错误'})
    calorific_cash_json_str = json.dumps(calorific_cash_json,
                                         ensure_ascii=False)
    data.update({'calorific_cash_json': calorific_cash_json_str})

    try:
        withdraw_cash_json = json.loads(data.get('withdraw_cash_json'))
    except:
        return jsonify({'code': 201, 'msg': u'参数错误'})
    withdraw_cash_json_str = json.dumps(withdraw_cash_json, ensure_ascii=False)
    data.update({'withdraw_cash_json': withdraw_cash_json_str})

    try:
        withdraw_cash_json_new = json.loads(data.get('withdraw_cash_json_new'))
    except:
        return jsonify({'code': 201, 'msg': u'参数错误'})
    withdraw_cash_json_new_str = json.dumps(withdraw_cash_json_new,
                                            ensure_ascii=False)
    data.update({'withdraw_cash_json_new': withdraw_cash_json_new_str})

    for key in default_values:

        if key in data:
            _values = data.get(key)
            # if isinstance(_values, str) or isinstance(_values, unicode):
            if isinstance(_values, str):
                _values = _values.strip()
            if key in int_key:
                try:
                    _values = int(_values)
                except:
                    return jsonify({'code': 201, 'msg': u'参数错误'})
            if key in float_key:
                try:
                    _values = float(_values)
                except:
                    return jsonify({'code': 201, 'msg': u'参数错误'})
            if _obj.get(key) != _values:
                _update.update({key: _values})

    if _update:
        try:
            operation.update_one({'_id': _obj.get('_id')}, {'$set': _update})
            return jsonify({'code': 200, 'msg': u'成功'})
        except:
            pass
    else:
        return jsonify({'code': 203, 'msg': u'无更新数据'})
    return jsonify({'code': 204, 'msg': u'失败'})
def third_transfer_profit():
    """
    统计第三方文章的有效阅读数
    :return:
    """
    today_str = timestamp_to_strftime(int(time.time()), format='%Y-%m-%d')
    operation_obj = operation.find_one()
    wechat_transfer_cash = int(operation_obj.get('wechat_transfer_cash', 20))
    wechat_transfer_per_deduction = int(operation_obj.get('wechat_transfer_per_deduction', 70))
    user_cur = user.find({'status': 0})
    for user_obj in user_cur:
        user_id = str(user_obj.get('_id'))
        third_transfer_art_token = user_obj.get('third_transfer_art_token')
        if third_transfer_art_token:
            redis_admin.lpush('third_transfer_profit_h',
                              json.dumps({'third_transfer_art_token': third_transfer_art_token,
                                          'user_id': user_id}))
    while True:
        try:
            third_transfer_profit_req = redis_admin.brpop('third_transfer_profit_h', timeout=2)
            if not third_transfer_profit_req:
                break
            third_transfer_profit_dict = json.loads(third_transfer_profit_req[1])
            user_id = third_transfer_profit_dict.get('user_id')
            third_transfer_art_token = third_transfer_profit_dict.get('third_transfer_art_token')
            json_data = {}
            for i in range(3):
                try:
                    ts = int(time.time() * 1000)
                    uuid_m = hashlib.md5(str(uuid.uuid4()).replace('-', ''))
                    opt = {'day': today_str, 'token': third_transfer_art_token,
                           'uuid': uuid_m.hexdigest(), 'ts': ts}
                    result = ''
                    key_az = sorted(opt.keys())
                    for k in key_az:
                        v = str(opt.get(k, '')).strip()
                        if not v:
                            continue
                        try:
                            v = v.encode('utf8')
                        except:
                            v = v.decode("ascii").encode('utf8')
                        result += v
                    result = result + '1234567890VGY&XDR%'
                    m = hashlib.md5(result)
                    md5_text = m.hexdigest()
                    resp = requests.post('https://api.5qx8.cn/api/open-fetch-user-data',
                                         headers={'sign': md5_text,
                                                  'Content-Type': 'multipart/form-data'}, params=opt)
                    req_json = resp.json()
                    if req_json.get('code') == 0 and req_json.get('data', {}):
                        json_data = req_json.get('data', {})
                        break
                except Exception as e:
                    print(e)
                    continue
            if json_data:
                ips = json_data.get('ips', 0)
                if ips:
                    real_ips = ips - int(wechat_transfer_per_deduction * ips / 100)
                    real_value = wechat_transfer_cash * real_ips
                    s_user_online_t.update_one({'today_str': today_str, 'user_id': user_id},
                                               {'$set': {'show_wechat_transfer_ips': real_ips,
                                                         'show_cash': real_value}})
        except:
            pass
Пример #10
0
def system_dividend():
    """
    系统分红
    :return:
    """
    dividend_calorific_total = 0
    operation_obj = operation.find_one()
    dividend_of_calorific = int(
        operation_obj.get('dividend_of_calorific', 2000))
    dividend_deduct_calorific_per = int(
        operation_obj.get('dividend_deduct_calorific_per', 80))
    penny_calorific = operation_obj.get('penny_calorific', 5)

    dividend_config_obj = dividend_config.find({}).sort([('today_str', -1)])[0]
    # 将分红金额转换为分 同时扣除15的上级分润
    dividend_value = int(
        dividend_config_obj.get('dividend_value', 0) * 100 * 100 / 115)
    user_cur = user.find({
        'available_calorific': {
            '$gt': dividend_of_calorific
        },
        'status': 0
    })
    for user_obj in user_cur:
        user_id = str(user_obj.get('_id'))
        available_calorific = user_obj.get('available_calorific')
        if available_calorific > dividend_of_calorific:
            participate_dividend_calorific = int(
                available_calorific * dividend_deduct_calorific_per / 100)
            dividend_calorific_total += participate_dividend_calorific
            redis_admin.lpush(
                'system_dividend',
                json.dumps({
                    'participate_dividend_calorific':
                    participate_dividend_calorific,
                    'user_id': user_id
                }))
    user_dividend_value_total = 0
    while True:
        try:
            system_dividend_req = redis_admin.brpop('system_dividend',
                                                    timeout=2)
            if not system_dividend_req:
                break
            system_dividend_dict = json.loads(system_dividend_req[1])
            user_id = system_dividend_dict.get('user_id')
            participate_dividend_calorific = system_dividend_dict.get(
                'participate_dividend_calorific')

            try:
                user_obj = user.find_one({'_id': ObjectId(user_id)})
                if not user_obj:
                    continue
            except:
                continue

            value_total = int(participate_dividend_calorific / penny_calorific)
            user_dividend_value = int(value_total * 100 / 115)
            user_dividend_value_total += user_dividend_value
            print(user_dividend_value, participate_dividend_calorific, user_id)
        except:
            pass
    print(user_dividend_value_total)
Пример #11
0
def invite_return_calorific():
    """
    正常邀请奖现金奖热量
    :return:
    """
    req_number = 0
    while True:
        try:
            req_invite = redis_invite_code.brpop('invite_json', timeout=2)
            if not req_invite:
                if req_number < 50:
                    req_number += 2
                    continue
                else:
                    break
            req_number += 1
            invite_json = json.loads(req_invite[1])
            invite_id = invite_json.get('invite_id', '')
            is_bind = invite_json.get('is_bind', 0)
            user_id = invite_json.get('user_id', '')
            operation_obj = operation.find_one()
            effective_invitation_num = operation_obj.get(
                'effective_invitation_num')
            calorific_number_people = operation_obj.get(
                'calorific_number_people')
            effective_invitation_calorific = operation_obj.get(
                'effective_invitation_calorific')
            effective_invitation_cash1 = operation_obj.get(
                'effective_invitation_cash1')
            effective_invitation_cash2 = operation_obj.get(
                'effective_invitation_cash2')
            # today_str = datetime.now().strftime(format='%Y-%m-%d')
            today_str = datetime.now().strftime('%Y-%m-%d')
            try:
                invite_user_obj = user.find_one({'_id': ObjectId(invite_id)})
            except:
                if is_bind == 1:
                    system.update_one({}, {
                        '$inc': {
                            'planet_commission_total':
                            effective_invitation_cash1
                        }
                    })
                if is_bind == 2:
                    system.update_one({}, {
                        '$inc': {
                            'planet_commission_total':
                            effective_invitation_cash2
                        }
                    })
                continue
            if is_bind == 10:
                # 第一笔分润通知
                grade = invite_json.get('grade')
                if commission_record.find({
                        'planet_id': invite_id,
                        'type_num': 0,
                        'grade': grade
                }).count() == 1:
                    openid = invite_user_obj.get('wx_uid')
                    if conf_ver == 'conf.ProductionConfig':
                        template_id = 'kLvKUoi6_y_rB4CN1MBt3956Gh54_AkfxzItmH6yQtA'
                    else:
                        template_id = 'CuRkLGY-RCH-CZfxHnuQXEmAqm7Q1tvcDXJSwWUV0NY'

                    if openid:
                        try:
                            push_template(
                                openid, template_id, '',
                                invite_json.get('value', ''),
                                u'您的{0}为您贡献了一笔分润,请进入热量星球APP查看我的收益。'.format(
                                    invite_json.get('nickname')),
                                datetime.now().strftime('%Y-%m-%d %H:%M'))
                        except:
                            pass
                continue

            try:
                user_obj = user.find_one({'_id': ObjectId(user_id)})
            except:
                user_obj = dict()

            # 当用户初次绑定邀请码 给邀请人奖励0.3元
            commission_record_num = commission_record.find({
                'user_id':
                invite_id,
                'today':
                today_str,
                'type_num':
                1,
                'origin':
                u'邀请用户首次注册'
            }).count()
            if is_bind == 1 and commission_record_num < int(
                    calorific_number_people):
                serial_number = '{0}{1}{2}{3}{4}{5}{6}'.format(
                    datetime.now().strftime(format='%Y'), get_chars2(0, 1),
                    datetime.now().strftime(format='%m'), get_chars2(0, 1),
                    datetime.now().strftime(format='%d'), get_chars2(0, 1),
                    datetime.now().strftime(format='%H%M%S'))
                commission_record.insert_one({
                    'serial_number':
                    serial_number,
                    'planet_id':
                    invite_id,
                    'origin':
                    u'邀请用户首次注册',
                    'is_arrival':
                    1,
                    'value':
                    int(effective_invitation_cash1),
                    'balance':
                    int(effective_invitation_cash1 +
                        invite_user_obj.get('balance')),
                    'user_id':
                    invite_id,
                    'user_name':
                    user_obj.get('nickname'),
                    'contributor_id':
                    str(user_obj.get('_id')),
                    'type_num':
                    1,
                    'user_img':
                    user_obj.get('headimgurl'),
                    'grade':
                    2,
                    'today':
                    today_str,
                    'created_time':
                    datetime.now().strftime(format='%Y-%m-%d %H:%M:%S')
                })
                user.update_one({'_id': invite_user_obj.get('_id')}, {
                    '$inc': {
                        'planet_commission_total': effective_invitation_cash1,
                        'balance': effective_invitation_cash1
                    }
                })

            # 当用户首次提现  给邀请人返热量
            commission_record_num = commission_record.find({
                'user_id':
                invite_id,
                'today':
                today_str,
                'type_num':
                1,
                'origin':
                u'邀请用户首次提现'
            }).count()
            if is_bind == 2 and commission_record_num < int(
                    calorific_number_people):
                serial_number = '{0}{1}{2}{3}{4}{5}{6}'.format(
                    datetime.now().strftime(format='%Y'), get_chars2(0, 1),
                    datetime.now().strftime(format='%m'), get_chars2(0, 1),
                    datetime.now().strftime(format='%d'), get_chars2(0, 1),
                    datetime.now().strftime(format='%H%M%S'))
                commission_record.insert_one({
                    'serial_number':
                    serial_number,
                    'planet_id':
                    invite_id,
                    'origin':
                    u'邀请用户首次提现',
                    'is_arrival':
                    1,
                    'value':
                    int(effective_invitation_cash2),
                    'balance':
                    int(effective_invitation_cash2 +
                        invite_user_obj.get('balance')),
                    'user_id':
                    invite_id,
                    'user_name':
                    user_obj.get('nickname'),
                    'contributor_id':
                    str(user_obj.get('_id')),
                    'type_num':
                    1,
                    'user_img':
                    user_obj.get('headimgurl'),
                    'grade':
                    2,
                    'today':
                    today_str,
                    'created_time':
                    datetime.now().strftime(format='%Y-%m-%d %H:%M:%S')
                })

                calorific_record_dict = {
                    'user_id':
                    invite_id,
                    'today':
                    today_str,
                    'symbol':
                    1,
                    'type_num':
                    7,
                    'value':
                    effective_invitation_calorific,
                    'des':
                    u'邀请用户首次提现',
                    'created_time':
                    datetime.now().strftime(format='%Y-%m-%d %H:%M:%S')
                }
                calorific_record.insert_one(calorific_record_dict)
                user.update_one({'_id': invite_user_obj.get('_id')}, {
                    '$inc': {
                        'planet_commission_total': effective_invitation_cash2,
                        'balance': effective_invitation_cash2,
                        'calorific_total': effective_invitation_calorific,
                        'available_calorific': effective_invitation_calorific
                    }
                })

            # 判断此邀请人数 看是否升级成了球主
            invite_user_obj = user.find_one({'_id': ObjectId(invite_id)})
            planet_id = invite_user_obj.get('planet_id', '')
            invite_user_num = user.find({
                'invite_id': invite_id,
                'new_value': -1
            }).count()
            if invite_user_num >= effective_invitation_num and not planet_id:
                user.update_one({'_id': ObjectId(invite_id)},
                                {'$set': {
                                    'planet_id': invite_id
                                }})
                # title = u'成为星主'
                # content = u'恭喜您达到系统要求的邀请人数,我们已经为您创建属于您自己的星球'
                # alert = {
                #     'title': title,
                #     'body': content
                # }
                # try:
                #     jp_notification(alert, title, 'id', '', type_num=1, jg_ids=[invite_user_obj.get('jg_id')])
                # except:
                #     pass
                # if conf_ver == 'conf.ProductionConfig':
                #     template_id = 'BicMMuwBiTojbCEGRocNevHJfYhibNYBHP_ieScf7KI'
                # else:
                #     template_id = '18IjSoLlT_ejZBhnpZrFq5tZeDMInBFCpG09qzw56Pc'
                # openid = invite_user_obj.get('wx_uid')
                # if openid:
                #     try:
                #         push_template(openid, template_id, '', invite_user_obj.get('name', ''),
                #                       invite_user_obj.get('phone', ''), '')
                #     except:
                #         pass
                # params_163 = '{}'
                # send_sms_163(invite_user_obj.get('phone'), params_163, '10858')

            # 如果邀请人成为球主 则同步其所有邀请人的球主信息
            invite_user_obj = user.find_one({'_id': ObjectId(invite_id)})
            planet_id = invite_user_obj.get('planet_id', '')
            if planet_id and invite_user_num < 30:
                # planet_commission_dict = commission_record.aggregate([
                #     {
                #         '$match': {'planet_id': planet_id, 'is_arrival': 0}
                #     },
                #     {
                #         '$group': {'_id': '', 'planet_commission': {'$sum': '$value'}}
                #     },
                #     {'$limit': 1}
                # ])
                # try:
                #     if isinstance(planet_commission_dict, dict):
                #
                #         _planet_commission_dict = planet_commission_dict.get('result')[0]
                #         planet_commission = int(_planet_commission_dict.get('planet_commission'))
                #     else:
                #         _planet_commission_dict = planet_commission_dict.next()
                #         planet_commission = int(_planet_commission_dict.get('planet_commission'))
                # except:
                #     planet_commission = 0
                # if planet_commission:
                #     user.update_one({'_id': ObjectId(planet_id)},
                #                     {'$inc': {'planet_commission_total': planet_commission,
                #                               'balance': planet_commission}})
                #     commission_record.update_many({'planet_id': planet_id, 'is_arrival': 0},
                #                                   {'$set': {'is_arrival': 1}})

                user.update_many({'invite_id': invite_id},
                                 {'$set': {
                                     'superior_planet_id': planet_id
                                 }})
                user.update_many({'superior_invite_id': invite_id},
                                 {'$set': {
                                     'upperlevel_planet_id': planet_id
                                 }})
        except Exception as e:
            error_log.insert_one({
                'fn_name':
                'invite_return_calorific_1',
                'invite_json':
                invite_json,
                'error_str':
                str(e),
                'today':
                datetime.now().strftime(format='%Y-%m-%d')
            })
Пример #12
0
def update_guess_red_detail():
    """
    排队处理猜中红包的用户
    :return:
    """
    hour_str = datetime.now().strftime(format='%H')
    operation_obj = operation.find_one()
    while True:
        guess_red_task = redis_admin.brpop('guess_red_id_list', timeout=1)
        if not guess_red_task:
            new_hour_str = datetime.now().strftime(format='%H')
            if new_hour_str != hour_str:
                break
            continue
        try:
            guess_red_id = guess_red_task[1]
            guess_red_detail_obj = guess_red_detail.find_one({'_id': ObjectId(guess_red_id)})
            if not guess_red_detail_obj:
                continue
            number_of_periods = guess_red_detail_obj.get('number_of_periods')
            guess_red_obj = guess_red.find_one({'number_of_periods': number_of_periods})
            if not guess_red_obj:
                continue
            user_id = guess_red_obj.get('user_id', '')
            # 第一个猜中 领取红包
            if not user_id:
                user_id = guess_red_detail_obj.get('user_id')
                user_obj = user.find_one({'_id': ObjectId(user_id)})
                planet_id = user_obj.get('planet_id', '')
                superior_planet_id = user_obj.get('superior_planet_id', '')
                upperlevel_planet_id = user_obj.get('upperlevel_planet_id', '')

                guess_red_detail.update_one({'_id': guess_red_detail_obj.get('_id')}, {'$set': {'status': 1}})
                real_value = guess_red_obj.get('value')
                hour_int = guess_red_obj.get('hour_int')
                # 计算星球分润与星球总红包
                try:
                    calculate_planet(operation_obj, user_obj, real_value)
                except:
                    pass
                # 红包记录
                serial_number = '{0}{1}{2}{3}{4}{5}{6}'.format(datetime.now().strftime(format='%Y'), get_chars2(0, 1),
                                                               datetime.now().strftime(format='%m'), get_chars2(0, 1),
                                                               datetime.now().strftime(format='%d'), get_chars2(0, 1),
                                                               datetime.now().strftime(format='%H%M%S'))
                if planet_id:
                    current_planet_id = planet_id
                elif superior_planet_id:
                    current_planet_id = superior_planet_id
                else:
                    current_planet_id = upperlevel_planet_id
                red_record_dict = {'serial_number': serial_number, 'origin': u'猜中红包', 'value': int(real_value),
                                   'balance': int(real_value + user_obj.get('balance')), 'user_id': user_id,
                                   'user_name': user_obj.get('nickname'), 'user_img': user_obj.get('headimgurl'),
                                   'today': guess_red_obj.get('today_str'), 'type_num': 2, 'hour_int': hour_int,
                                   'planet_id': planet_id, 'superior_planet_id': superior_planet_id, 'is_double': 0,
                                   'current_planet_id': current_planet_id, 'upperlevel_planet_id': upperlevel_planet_id,
                                   'red_returnp_calorific': 0,
                                   'created_time': datetime.now().strftime(format='%Y-%m-%d %H:%M:%S')}
                red_record.insert_one(red_record_dict)
                user.update_one({'_id': ObjectId(user_id)},
                                {'$inc': {'balance': int(real_value), 'red_total': int(real_value)}})
                guess_red.update_one({'number_of_periods': number_of_periods},
                                     {'$set': {'nickname': user_obj.get('nickname'), 'user_id': user_id,
                                               'headimgurl': user_obj.get('headimgurl', ''),
                                               'guess_time': guess_red_detail_obj.get('guess_time', ''),
                                               'millisecond': guess_red_detail_obj.get('millisecond', ''),
                                               'status': 1}})
            else:
                # 不是第一个猜中 返热量
                user_id = guess_red_detail_obj.get('user_id')
                consume_calorific = guess_red_detail_obj.get('consume_calorific')
                calorific_record.insert_one({'user_id': user_id, 'today': guess_red_obj.get('today_str'), 'symbol': 1,
                                             'type_num': 3, 'value': consume_calorific * 2,
                                             'des': u'猜中红包但晚了一步奖热量', 'red_id': number_of_periods,
                                             'created_time': datetime.now().strftime(format='%Y-%m-%d %H:%M:%S')})
                user.update_one({'_id': ObjectId(user_id)},
                                {'$inc': {'available_calorific': consume_calorific * 2,
                                          'calorific_total': consume_calorific * 2}})
                guess_red_detail.update_one({'_id': guess_red_detail_obj.get('_id')}, {'$set': {'status': 2}})
        except Exception as e:
            error_log.insert_one({'req_url': '', 'req_data': '', 'req_method': 'update_guess_red_detail',
                                  'error_str': str(e), 'today': datetime.now().strftime(format='%Y-%m-%d'),
                                  'time_stamp': int(time.time()),
                                  'req_time': datetime.now().strftime(format='%Y-%m-%d %H:%M:%S')})

        new_hour_str = datetime.now().strftime(format='%H')
        if new_hour_str != hour_str:
            break