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