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
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
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)
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