def do_task(worker, job): from wanx.base.log import print_log from wanx.base import const, util, jpush from wanx.models.user import User from wanx.models.game import Game from wanx.models.live import Live_Activity from wanx.models.activity import ActivityConfig from wanx.models.game import GameActivity from wanx.models.task import BEGIN_LIVE, UserTask from wanx.base.xredis import Redis from wanx.base.xmysql import MYDB from wanx.platforms.xmatch import Xmatch data = job.data # 记录日志 print_log('create_live_activity', data) data = json.loads(data) # 记录日志 print_log('create_live_activity', '%s ==========================> Start' % (data['event_id'])) user = User.get_one(data['user_id'], check_online=False) if not user: return '' # 主播上线push推送 push_content = u"您关注的主播 {0} 正在直播,点击围观".format(user.nickname) message_content = u"您关注的主播 {0} 正在直播,速速去围观吧!".format(user.nickname) an_link = "playsdk://video_live/{0}/".format(data['event_id']) ios_link = "playsdk://live/{0}".format(data['event_id']) jpush.jpush_schedule_create(data['event_id'], user, push_content, message_content, an_link, ios_link) # 赛事预约直播上线推送 battle = Xmatch.getbattle(user._id, data['name']) if battle: battle = battle['data']['battle'] push_title = u'您预约的比赛正在进行' push_content = u"{0} vs {1}正在直播,点击围观".format(battle['team_1'], battle['team_2']) message_content = u"您预约的比赛{0} vs {1}正在直播!".format( battle['team_1'], battle['team_2']) if battle.get('players', '') != "": push_content = message_content = battle['live_name'] an_link = "playsdk://video_live/{0}/".format(data['event_id']) ios_link = "playsdk://live/{0}".format(data['event_id']) jpush.jpush_withtitle_create(data['event_id'], battle['_id'], push_title, push_content, message_content, an_link, ios_link) game = Game.get_one(data['game_id'], check_online=False) if not game: return '' aid = None aids = ActivityConfig.get_by_type(const.FROM_LIVE) for a in ActivityConfig.get_list(aids): gids = GameActivity.game_activity_ids(a['_id']) if gids and data['game_id'] not in gids: continue aid = a['_id'] break if not aid: return '' print_log('create_live_activity', '%s ==========================> activity_id' % (aid)) activity_live = Live_Activity.get_activity_live(str(user._id), aid) if not activity_live: key = 'lock:activity:live:%s:%s' % (str(user._id), aid) with util.Lockit(Redis, key) as locked: if locked: return '' activity_live = Live_Activity.init() activity_live.author = ObjectId(data['user_id']) activity_live.game = ObjectId(data['game_id']) activity_live.event_id = data['event_id'] activity_live.activity_id = ObjectId(aid) activity_live.create_model() # 如果没有活动任务则创建 UserTask.create_and_init_user_tasks(str(user._id)) if not MYDB.is_closed(): MYDB.close() try: UserTask.check_user_tasks(user._id, BEGIN_LIVE, 1, data['game_id'], aid) except Exception as e: print_log('create_live_activity', '%s ========' % e) if not MYDB.is_closed(): MYDB.close() # 记录日志 print_log('create_live_activity', '%s ==========================> Finished' % (data['event_id'])) return ''
def send_gift(): """赠送礼物 (GET|POST&LOGIN) :uri: /gifts/send_gift :param user_id: 主播ID :param gift_id: 礼物ID :param num: 礼物数量 :param gift_from: 礼物来源(1:直播, 2:录播) :param from_id:来源ID(直播ID或者录播视频ID) :return: {'ret: bool} :if money need cs(充值来源),SDKVersion,dId """ user = request.authed_user gift_id = int(request.values.get('gift_id')) to_user_id = request.values.get('user_id') num = int(request.values.get('num', 1)) gift_from = int(request.values.get('gift_from')) from_id = request.values.get('from_id') user_ip = request.remote_addr device = request.values.get('device', None) if not gift_id or not to_user_id or num < 1 or not gift_from: return error.InvalidArguments if to_user_id == str(user._id): return error.GiftError('不能给自己赠送礼物哦') to_user = User.get_one(to_user_id, check_online=False) if not to_user: return error.UserNotExist('该视频没有主播') available_num = _gift_num() if num not in available_num: return error.GiftError('礼物数量不符合规则') gift = Gift.get_gift(gift_id) if not gift: return error.GiftError('该礼物不能赠送') money_data = {} transactionId = '' if gift.credit_type == const.MONEY: # today_times = UserGiftLog.user_today_gift_id_times(user._id,gift_id,num) gift_data = gift.format() # max_times = gift_data['per_piece_limit'].get(num) # if max_times <= today_times: # return error.GiftError('该档礼物今天的次数已用完') from wanx.platforms.migu import PayByMg consumeCode = gift_data['per_piece_id'].get(num) cs = 6 SDKVersion = request.values.get('SDKVersion') dId = request.values.get('dId', 'null') goodsname = gift_data['product_name'] + '_' + str(num) pay_mg_data = PayByMg.get_payurl(user, cs, SDKVersion, dId, consumeCode, 1, goodsname=goodsname) if isinstance(pay_mg_data, error.ApiError): return pay_mg_data # 创建订单 pay_order_obj = PayOrder.init() # [set(pay_order_obj,attr,value) for attr,value in pay_mg_data.items()] pay_order_obj.pay_mg_data = pay_mg_data transactionId = pay_mg_data['resultData']['transactionId'] pay_order_obj.transactionId = transactionId pay_order_obj.phone = user.phone pay_order_obj.nickname = user.nickname pay_order_obj.credit_value = gift.credit_value pay_order_obj.total_value = gift.credit_value * num pay_order_obj.gift_num = num pay_order_obj.finished = 0 pay_order_obj.product_name = gift_data['product_name'] pay_order_obj.check_pay_data = {} pay_order_obj.pay_info = {"from_user_id": user._id, 'to_user_id': to_user_id, "num": num, 'gift_id': gift_id, \ 'gift_from': gift_from, "from_id": from_id} pay_order_obj.create_model() money_data = { 'is_money': True, "pay_data": pay_mg_data.get("resultData", {}) } ret = False key = 'lock:send_gift:%s' % (str(user._id)) with util.Lockit(Redis, key) as locked: if locked: return error.GiftError('赠送礼物失败') ret = gift.send_to_user(str(user._id), to_user_id, num, gift_from, from_id, transactionId=transactionId) if isinstance(ret, error.ApiError): return ret if money_data: return money_data # 录播发送消息到中心消息 if ret and gift_from == const.FROM_RECORD: video = Video.get_one(from_id, check_online=False) if video: Message.send_gift_msg(str(user._id), from_id, 'gift') video.update_model({'$inc': {'gift_count': 1, 'gift_num': num}}) # 直播发送广播信息 if ret and gift_from == const.FROM_LIVE: total = Xlive.get_user_send_gift_count(from_id, str(user._id), gift_id, num) data = dict(user_id=str(user._id), username=user.nickname or user.name, userphoto=user.get_photo(), gift_name=gift.format()['product_name'], gift_image=gift.format()['product_image'], gift_num=num, event_id=from_id, total=total) Xlive.send_live_msg(data) # 营销数据入库经分 打赏活动 from wanx.models.activity import ActivityConfig, ActivityVideo from wanx.platforms.migu import Marketing activity_config = None if gift_from == const.FROM_RECORD: activity_video = ActivityVideo.get_activity_video_by_vid(from_id) if activity_video: activity_config = ActivityConfig.get_one( activity_video['activity_id']) else: aids = ActivityConfig.get_by_type(const.FROM_LIVE) for a in ActivityConfig.get_list(aids): activity_config = a break if activity_config: data_dict = dict(cmd="deliver_gift", opt="{0}/{1}".format(gift.gold_price, to_user_id), deviceid=request.values.get('device', ''), mobile=user.phone, source=request.values.get('source', 'activity'), activityid=str(activity_config['_id']), activityname=activity_config['name']) Marketing.jf_report(data_dict) # 1118 task1 # Marketing.trigger_report(user.partner_migu['id'], user.phone, 'send_gift') return {'ret': ret}