Ejemplo n.º 1
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
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
Ejemplo n.º 3
0
def third_transfer_profit():
    """
    :param os: 1为安卓,2为ios
    :param uid: 用户唯 一id
    :return:
    """
    yesterday_str = timestamp_to_strftime((int(time.time())),
                                          format='%Y-%m-%d')

    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',
                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', 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': yesterday_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:
                    continue
            if json_data:
                ips = json_data.get('ips', 0)
                if ips:
                    print(user_id, ips)
        except:
            pass
Ejemplo n.º 4
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)
Ejemplo n.º 5
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