Exemple #1
0
def delete_all_mails():
    all_info = UserMail.hgetall(uid)
    #for mail_id, mail_info in all_info.items()[:-3]:# 注意 这里不是去全删
    for mail_id, mail_info in all_info.items():
        print mail_id, mail_info
        umobj = UserMail.hget(uid, mail_id)
        umobj.delete()
Exemple #2
0
def receive(rk_user, params):
    '''
    领取邮件中的内容
    '''
    mails_id = str(params['mails_id'])
    all_info = UserMail.hgetall(rk_user.uid)
    return_info = {}
    for m in all_info:
        mid = all_info[m]['mail_info']['mid']
        if mid == mails_id:
            can_get = all_info[m]['mail_info'].get('can_get', False)
            if can_get is False:
                break
            awards = all_info[m]['mail_info']['awards']
            where = 'mail_' + all_info[m]['mail_info']['title']
            return_info = tools.add_things(rk_user, [{
                "_id": goods,
                "num": awards[goods]
            } for goods in awards if goods], where)

            umobj = UserMail.hget(rk_user.uid, m)
            umobj.mail_info['can_get'] = False
            umobj.mail_info['open_time'] = utils.datetime_toString(
                datetime.datetime.now())
            umobj.hput()
            break

    return 0, {'receive': return_info}
Exemple #3
0
def show_mails(rk_user, params):
    """
    获取邮件列表
    'type': 'system': 系统邮件
    'type': 'pvp'   : pvp邮件 
    Returns:
        {'show_mails': 
            {1: {'awards': [
                    {'equipSoul': {'equip_type': u'1', 'good_id': u'53003_equip', 'num': 1}},                
                    {'mat': {'good_id': u'3_mat', 'num': 2}},
                    {'gold': {'good_id': u'gold', 'num': 10}},
                    {'props': {'good_id': u'1_props', 'num': 1}},
                    {'equip': {'color': u'green', 'good_id': u'13001_equip', 'num': 3}},
                    {'cardSoul': {'good_id': u'5_card', 'num': 1}},
                    {'fight_soul': {'good_id': u'fight_soul', 'num': 100}},
                    {'card': {'good_id': u'5_card', 'num': 1}},
                    {'honor': {'good_id': u'honor', 'num': 100}},
                    {'equipSoul': {'good_id': u'12002_equip', 'num': 1}}
                ],
                'can_get': True,
                'content': u'5345',
                'create_time': u'2014-11-04 11:32:56',
                'mid': u'201411041132562390414',
                'type': u'system'},
            2:  ......
    """
    data = {}
    all_info = UserMail.hgetall(rk_user.uid)
    expire_days = game_config.mail_config.get('expire_days', 2)
    clear_date = (datetime.datetime.now() - datetime.timedelta(days=expire_days)).strftime('%Y-%m-%d %H:%M:%S')
    # 根据创建时间排序
    key_create_time_list = [(m, all_info[m]['mail_info'].get('create_time', ''), 
                            all_info[m]['mail_info'].get('open_time')) for m in all_info]

    key_create_time_list = sorted(key_create_time_list , key=lambda key_time: key_time[1], reverse=True)
    for index, key_create_time in enumerate(key_create_time_list):
        key, create_time, open_time = key_create_time
        mail_info = all_info[key]['mail_info']
        can_get = mail_info.get('can_get', False)
        print 'create time:', create_time,  'open time:',open_time,  ' can get:', can_get
        if can_get is False and clear_date > open_time:
        #if can_get is False:
            umobj = UserMail.hget(rk_user.uid, key)
            umobj.delete()
            continue

        this_data = {
            'type': mail_info['type'],
            'title': mail_info['title'],
            'content': mail_info['content'],
            'can_get': mail_info['can_get'],
            'awards': [tools.pack_good(good, num) for good, num in mail_info['awards'].items()],
            'create_time': mail_info['create_time'],
            #'mid': mail_info['mid'],
            'mid': key,
        }
        data[index + 1] = this_data
    #print data
    return {'show_mails': data}
Exemple #4
0
def delete(rk_user, params):
    '''一键删除不带奖励的邮件'''
    mails = UserMail.hgetall(rk_user.uid)
    for mail_id in mails:
        if not mails[mail_id]['mail_info'].get('awards'):
            mail = UserMail.hget(rk_user.uid, mail_id)
            mail.delete()
    return 0, {}
Exemple #5
0
def delete(rk_user, params):
    '''一键删除不带奖励的邮件'''
    mails = UserMail.hgetall(rk_user.uid)
    for mail_id in mails:
        if not mails[mail_id]['mail_info'].get('awards'):
            mail = UserMail.hget(rk_user.uid, mail_id)
            mail.delete()
    return 0, {}
Exemple #6
0
def modify_one_mail():
    all_mail = UserMail.hgetall(uid)
    #print all_mail
    for key in all_mail:
    
        if key == 'system_201411111104385687940':
            all_mail[key]['open_time'] = '1234'
            this_mail = UserMail.hget(uid, key)
            this_mail.hput()
            print this_mail
    key == 'system_201411111104385687940'
    this_mail = UserMail.hget(uid, key)
    print this_mail.mail_info
    this_mail.mail_info['read_time']= '123'
    this_mail.hput()
Exemple #7
0
def send_op_mail(rk_user):
    '''
    发运营邮件
    判断运营是否有新配邮件,这里邮件特指mail_config['mail_list']里的邮件,需要一些实时性,非一些登陆奖励类邮件
    '''
    # 过一定时间再检查是否有新配邮件,而不是每次都检查
    #now_stamp = int(time.time())
    #last_check_stamp = rk_user.user_base.baseinfo.setdefault('last_check_stamp', 1420041600)
    #if now_stamp - last_check_stamp < 300:
    #    return
    #rk_user.baseinfo['last_check_stamp'] = now_stamp
    #rk_user.put()

    mail_conf = game_config.mail_config.get('mail_list', {})
    for mail_info in mail_conf:
        mid = mail_info['mail_id']
        received_mails = rk_user.baseinfo['received_mails']
        # 没收过这封邮件,并且邮件在时间段内,发邮件
        if mid not in received_mails:
            if _is_between_times(mail_info):
                sid = 'system_%s' % (utils.create_gen_id())
                mailtype = 'system_qa'
                title = mail_info['title']
                content = mail_info['content']
                award = mail_info['award']
                user_mail_obj = UserMail.hget(rk_user.uid, sid)
                user_mail_obj.set_mail(mailtype=mailtype, title=title, content=content, award=award)

                received_mails.append(mid)
                # 去掉时间太久的不必要的邮件
                if len(received_mails) > 30:
                    received_mails.pop(0)
                rk_user.put()
Exemple #8
0
def send_op_mail(rk_user):
    '''
    发运营邮件
    判断运营是否有新配邮件,这里邮件特指mail_config['mail_list']里的邮件,需要一些实时性,非一些登陆奖励类邮件
    '''
    mail_list = game_config.mail_config.get('mail_list')
    if not mail_list:
        return
    for mail in mail_list:
        mid = mail['mail_id']
        if not rk_user.baseinfo.get('received_mails'):
            rk_user.baseinfo['received_mails'] = []
            rk_user.put()
        received_mails = rk_user.baseinfo['received_mails']
        # 没收过这封邮件,并且邮件在时间段内,发邮件
        if mid not in received_mails:
            if _is_between_times(mail):
                sid = 'system_%s' % (utils.create_gen_id())
                mailtype = 'system_qa'
                title = mail['title']
                content = mail['content']
                award = mail['award']
                user_mail_obj = UserMail.hget(rk_user.uid, sid)
                user_mail_obj.set_mail(mailtype=mailtype, title=title, content=content, award=award)

                received_mails.append(mid)
                # 去掉时间太久的不必要的邮件
                if len(received_mails) > 30:
                    received_mails.pop(0)
                rk_user.put()
Exemple #9
0
def send_mails(data):
    if True:
        if 'honor_award' in data:
            content = data['honor_award']['content']
            award = data['honor_award']['award']
            sid = 'system_%s' % (utils.create_gen_id())
            user_mail = UserMail.hget(uid, sid)
            user_mail.set_awards_description(award)
            user_mail.set_mail(mailtype='system', content=content, award=award)
Exemple #10
0
def send_a_mail():
    sid = 'system_%s' % (utils.create_gen_id())
    user_mail_obj = UserMail.hget(uid, sid)

    #awards = {'coin': 50, 'gold': 50, 'honor':500}
    awards = {}
    #user_mail_obj.set_awards_description(awards)
    user_mail_obj.set_mail(mailtype='system', title='eee', content='人工e邮件',award=awards)
    #user_mail_obj.set_mail(type='system',content='mail pvp')
    user_mail_obj.hput()
Exemple #11
0
 def send_mails(self, awards):
     """将奖励于邮件形式发送"""
     for award_type, award_info in awards.items():
         title = award_info.get('title', '')
         if not title:
             continue
         content = award_info.get('content', '')
         award = award_info.get('award', {})
         sid = 'system_%s' % (utils.create_gen_id())
         user_mail = UserMail.hget(self.uid, sid)
         user_mail.set_mail(mailtype=award_type, title=title, content=content, award=award)
Exemple #12
0
def _get_pvprank_record(uid):
    pvprank_record_list = []
    all_info = UserMail.hgetall(uid)
    for mid in all_info:
        type = all_info[mid]['mail_info'].get('type', '')
        can_get = all_info[mid]['mail_info'].get('can_get', False)
        if type == 'pvp':
            pvprank_record = all_info[mid]['mail_info'].get('pvprank_record', {})
            for r in pvprank_record:
                pvprank_record_list.append((r, pvprank_record[r]))
    if pvprank_record_list:
        pvprank_record_list = [ (i[0][:13], i[1]) for i in sorted(pvprank_record_list, key=lambda d:d[0],reverse=False)]
    return pvprank_record_list
Exemple #13
0
 def send_mails(self, awards):
     """将奖励于邮件形式发送"""
     for award_type, award_info in awards.items():
         title = award_info.get('title', '')
         if not title:
             continue
         content = award_info.get('content', '')
         award = award_info.get('award', {})
         sid = 'system_%s' % (utils.create_gen_id())
         user_mail = UserMail.hget(self.uid, sid)
         user_mail.set_mail(mailtype=award_type,
                            title=title,
                            content=content,
                            award=award)
Exemple #14
0
def receive(rk_user, params):
    '''
    领取邮件中的内容
    '''
    mails_id = str(params['mails_id'])
    all_info = UserMail.hgetall(rk_user.uid)
    return_info = {}
    for m in all_info:
        mid = all_info[m]['mail_info']['mid']
        if mid == mails_id:
            can_get = all_info[m]['mail_info'].get('can_get', False)
            if can_get is False:
                break
            awards = all_info[m]['mail_info']['awards']
            where = 'mail_' + all_info[m]['mail_info']['title']
            return_info = tools.add_things(rk_user, [{"_id": goods, "num": awards[goods]} for goods in awards if goods], where)

            umobj = UserMail.hget(rk_user.uid, m)
            umobj.mail_info['can_get'] = False
            umobj.mail_info['open_time'] = utils.datetime_toString(datetime.datetime.now())
            umobj.hput()
            break

    return 0, {'receive': return_info}
Exemple #15
0
def _get_pvprank_record(uid):
    pvprank_record_list = []
    all_info = UserMail.hgetall(uid)
    for mid in all_info:
        type = all_info[mid]['mail_info'].get('type', '')
        can_get = all_info[mid]['mail_info'].get('can_get', False)
        if type == 'pvp':
            pvprank_record = all_info[mid]['mail_info'].get(
                'pvprank_record', {})
            for r in pvprank_record:
                pvprank_record_list.append((r, pvprank_record[r]))
    if pvprank_record_list:
        pvprank_record_list = [(i[0][:13], i[1]) for i in sorted(
            pvprank_record_list, key=lambda d: d[0], reverse=False)]
    return pvprank_record_list
Exemple #16
0
 def __send_yesterday_mail(self):
     '''
     昨天没领的每日任务宝箱奖励以邮件形式补发
     '''
     my_points = self.daily_info['points']
     for box_type in ['copper', 'silver', 'gold']:
         box_conf = game_config.task_config['daily_task_box'][box_type]
         if my_points >= box_conf['need_point']:
             if self.daily_info['has_got'][box_type] == False:
                 sid = 'system_%s' % (utils.create_gen_id())
                 mailtype = 'system'
                 title = box_conf['mail_title']
                 content = box_conf['mail_content']
                 award = box_conf['award']
                 user_mail_obj = UserMail.hget(self.user_base.uid, sid)
                 user_mail_obj.set_mail(mailtype=mailtype, title=title, content=content, award=award)
            
         else: # 铜宝箱都不能领的话,其他不用看了
             break
Exemple #17
0
def __give_charge_award(rk_user, coin):
    """运营活动)充值奖励
    """
    if rk_user.client_type in settings.ANDROID_CLIENT_TYPE and 'charge_award' in game_config.android_config:
        charge_award = rk_user.game_config.android_config['charge_award']
    else:
        charge_award = rk_user.game_config.operat_config.get('charge_award',{})
    if not charge_award:
        return
    charge_award_info = rk_user.user_property.charge_award_info

    for gift_id in charge_award:
        gift_conf = charge_award[gift_id]
        start_time = gift_conf.get('start_time')
        end_time = gift_conf.get('end_time','2111-11-11 11:11:11')
        now_str = datetime_toString(datetime.datetime.now())
        # 未开放或已过期的礼包
        if now_str > end_time or now_str < start_time:
            continue
        
        if gift_id not in charge_award_info:
            charge_award_info[gift_id] = {'charge_coin': coin}
        else:
            # 已经领取过的礼包
            if charge_award_info[gift_id].get('has_got', False):
                continue
            charge_award_info[gift_id]['charge_coin'] += coin
        # 金额未达到
        if charge_award_info[gift_id]['charge_coin'] < gift_conf.get('charge_coin',0):
            continue
        # 满足条件,发奖励
        charge_award_info[gift_id]['has_got'] = True
        msg = get_msg('charge', 'charge_award') % gift_conf.get('charge_coin',0)
        sid = 'system_%s' % (utils.create_gen_id())
        mail_title = msg
        mail_content = gift_conf.get('desc', '')
        user_mail_obj = UserMail.hget(rk_user.uid, sid)
        user_mail_obj.set_mail(mailtype='system', title=mail_title, content=mail_content, award=gift_conf['award'])

    rk_user.user_property.put()
Exemple #18
0
    def __send_yesterday_mail(self):
        '''
        昨天没领的每日任务宝箱奖励以邮件形式补发
        '''
        my_points = self.daily_info['points']
        for box_type in ['copper', 'silver', 'gold']:
            box_conf = game_config.task_config['daily_task_box'][box_type]
            if my_points >= box_conf['need_point']:
                if self.daily_info['has_got'][box_type] == False:
                    sid = 'system_%s' % (utils.create_gen_id())
                    mailtype = 'system'
                    title = box_conf['mail_title']
                    content = box_conf['mail_content']
                    award = box_conf['award']
                    user_mail_obj = UserMail.hget(self.user_base.uid, sid)
                    user_mail_obj.set_mail(mailtype=mailtype,
                                           title=title,
                                           content=content,
                                           award=award)

            else:  # 铜宝箱都不能领的话,其他不用看了
                break
Exemple #19
0
def send_op_mail(rk_user):
    '''
    发运营邮件
    判断运营是否有新配邮件,这里邮件特指mail_config['mail_list']里的邮件,需要一些实时性,非一些登陆奖励类邮件
    '''
    # 过一定时间再检查是否有新配邮件,而不是每次都检查
    #now_stamp = int(time.time())
    #last_check_stamp = rk_user.user_base.baseinfo.setdefault('last_check_stamp', 1420041600)
    #if now_stamp - last_check_stamp < 300:
    #    return
    #rk_user.baseinfo['last_check_stamp'] = now_stamp
    #rk_user.put()

    mail_conf = game_config.mail_config.get('mail_list', {})
    for mail_info in mail_conf:
        mid = mail_info['mail_id']
        received_mails = rk_user.baseinfo['received_mails']
        # 没收过这封邮件,并且邮件在时间段内,发邮件
        if mid not in received_mails:
            if _is_between_times(mail_info):
                sid = 'system_%s' % (utils.create_gen_id())
                mailtype = 'system_qa'
                title = mail_info['title']
                content = mail_info['content']
                award = mail_info['award']
                user_mail_obj = UserMail.hget(rk_user.uid, sid)
                user_mail_obj.set_mail(mailtype=mailtype,
                                       title=title,
                                       content=content,
                                       award=award)

                received_mails.append(mid)
                # 去掉时间太久的不必要的邮件
                if len(received_mails) > 30:
                    received_mails.pop(0)
                rk_user.put()
Exemple #20
0
    def wrapper_info(self):
        """每次返回前端api请求都会附带的信息
        """
        data = {
            'pid': self.pid,
            'platform': self.baseinfo.get('platform'),
            'username': self.username,
            'sex': self.sex,
            'max_stamina': self.user_property.max_stamina,
            'vip_cur_level': self.user_property.vip_cur_level,
            'vip_next_level': self.user_property.vip_next_level,
            'vip_charge_money': self.user_property.charge_sumcoin,
            'vip_next_lv_need_money': self.user_property.next_lv_need_coin,
            'uid': self.uid,
            'signature': self.baseinfo.get('signature', ''),
            # 'max_friend_num': self.user_property.max_friend_num,
        }

        data.update(self.user_property.property_info)
        if 'get_card' in data:
            data.pop('get_card')
        if 'invite_info' in data:
            data.pop('invite_info')
        if 'bind_award' in data:
            data.pop('bind_award')
        if 'tapjoy' in data:
            data.pop('tapjoy')
        if 'bind_award' in data:
            data.pop('bind_award')
        if 'charge_sumcoin' in data:
            data.pop('charge_sumcoin')
        if 'update_award' in data:
            data.pop('update_award')
        if 'charge_sum_money' in data:
            data.pop('charge_sum_money')

        #data['cost'] = self.user_property.cost
        data['this_lv_now_exp'] = self.user_property.this_lv_now_exp
        data['next_lv_need_exp'] = self.user_property.next_lv_need_exp
        data['invite_code'] = self.user_property.invite_code
        #也许Friend不存在
        from apps.models.friend import Friend
        objFriend = Friend.get_instance(self.uid)
        data["friend_request_num"] = len(objFriend.get_request_ids())
        data['friend_gift_num'] = objFriend.get_gift_num()

        # 实时pvp相关
        data['real_pvp_title'] = self.user_real_pvp.pvp_title
        data['honor'] = self.user_real_pvp.honor

        #新礼包数
        # from apps.models.user_gift import UserGift
        # user_gift_obj = UserGift.get(self.uid)
        # data['new_gift_num'] = user_gift_obj.get_new_gift_num(self.user_property)

        #首冲标志
        data['first_charge'] = self.user_property.double_charge or self.user_property.first_charge

        #倒计时求将时间
        data['next_free_gacha_time'] = UserGacha.get_instance(self.uid).next_free_gacha_time

        #跑马灯信息,每隔10分钟返回一次
        data['marquee_info'] = self.marquee_info()
        # 新邮件数量
        data['new_mail_num'] = UserMail.new_mail_num(self.uid)
        #推送信息
        data['push_info'] = utils.get_push_info(self)
        data['push_open'] = self.game_config.system_config.get('push_open',False)

        # 援军槽数
        data['yuanjun_slot_num'] = self.user_cards.slot_num
        # 能否添加援军
        data['can_add_yuanjun'] = self.user_cards.can_add_yuanjun()
        # 能否签到
        data['today_can_sign'] = self.user_gift.today_can_sign()
        # 能否领开服礼包
        data['openserver_can_get'] = self.user_gift.openserver_can_get()
        # 发运营邮件
        from apps.logics.mails import send_op_mail
        send_op_mail(self)

        # 有可以领取的每日任务宝箱
        data['task_box_can_get'] = self.user_task.today_can_get()
        # 检查主线任务
        self.user_task.check_main_tasks()
        # 是否有能领取的主线任务奖励
        data['can_get_maintask_award'] = self.user_task.can_get_award()

        # 珠子伤害
        data['zhuzi_damage'] = self.user_character.zhuzi_damage()
        return data
Exemple #21
0
def show_mails(rk_user, params):
    """
    获取邮件列表
    'type': 'system': 系统邮件
    'type': 'pvp'   : pvp邮件 
    Returns:
        {'show_mails': 
            {1: {'awards': [
                    {'equipSoul': {'equip_type': u'1', 'good_id': u'53003_equip', 'num': 1}},                
                    {'mat': {'good_id': u'3_mat', 'num': 2}},
                    {'gold': {'good_id': u'gold', 'num': 10}},
                    {'props': {'good_id': u'1_props', 'num': 1}},
                    {'equip': {'color': u'green', 'good_id': u'13001_equip', 'num': 3}},
                    {'cardSoul': {'good_id': u'5_card', 'num': 1}},
                    {'fight_soul': {'good_id': u'fight_soul', 'num': 100}},
                    {'card': {'good_id': u'5_card', 'num': 1}},
                    {'honor': {'good_id': u'honor', 'num': 100}},
                    {'equipSoul': {'good_id': u'12002_equip', 'num': 1}}
                ],
                'can_get': True,
                'content': u'5345',
                'create_time': u'2014-11-04 11:32:56',
                'mid': u'201411041132562390414',
                'type': u'system'},
            2:  ......
    """
    data = {}
    all_info = UserMail.hgetall(rk_user.uid)
    expire_days = game_config.mail_config.get('expire_days', 2)
    clear_date = (
        datetime.datetime.now() -
        datetime.timedelta(days=expire_days)).strftime('%Y-%m-%d %H:%M:%S')
    # 根据创建时间排序
    key_create_time_list = [
        (m, all_info[m]['mail_info'].get('create_time', ''),
         all_info[m]['mail_info'].get('open_time', '9999-99-99 99:99:99'))
        for m in all_info
    ]

    key_create_time_list = sorted(key_create_time_list,
                                  key=lambda key_time: key_time[1],
                                  reverse=True)
    for index, key_create_time in enumerate(key_create_time_list):
        key, create_time, open_time = key_create_time
        mail_info = all_info[key]['mail_info']
        can_get = mail_info.get('can_get', False)

        if can_get is False and clear_date > open_time:
            #if can_get is False:
            umobj = UserMail.hget(rk_user.uid, key)
            umobj.delete()
            continue

        this_data = {
            'type':
            mail_info['type'],
            'title':
            mail_info['title'],
            'content':
            mail_info['content'],
            'can_get':
            mail_info['can_get'],
            'awards': [
                tools.pack_good(good, num)
                for good, num in mail_info['awards'].items()
            ],
            'create_time':
            mail_info['create_time'],
            'mid':
            mail_info['mid'],
        }
        data[index + 1] = this_data
    return {'show_mails': data}
Exemple #22
0
def show_all_mails():
    all_mail = UserMail.hgetall(uid)
    #for mail_id, mail_info in all_info.items():
    #    print mail_id, '------', mail_info

    pprint(all_mail)   
Exemple #23
0
from apps.models.user_login import UserLogin
# from apps.models.friend import Friend
from apps.models import pvp_redis
from apps.oclib import app
from apps.models.user_mail import UserMail
from apps.realtime_pvp import readying_player_redis
from apps.config.game_config import game_config
from apps.models.pvp_redis import get_pvp_redis
from apps.models.user_property import UserProperty
from apps.models.user_mail import UserMail
from apps.models.user_gift import UserGift
from apps.common import tools
game_config.subareas_conf()
game_config.set_subarea('1')
sid = 'system_%s' % (utils.create_gen_id())
user_mail = UserMail.hget(uid, sid)
rk_user = UserBase.get(uid)


def show_all_mails():
    all_mail = UserMail.hgetall(uid)
    #for mail_id, mail_info in all_info.items():
    #    print mail_id, '------', mail_info

    pprint(all_mail)   
#show_all_mails()


def modify_one_mail():
    all_mail = UserMail.hgetall(uid)
    #print all_mail
Exemple #24
0
def edit_user(request):
    """
    编辑用户页
    """
    uid = request.GET.get('uid', '').strip()
    if not uid:
        pid = request.GET.get('pid', '').strip()
        if not pid:
            username = request.GET.get('username', '')
            if not username:
                return HttpResponseRedirect('/admin/user/?status=1')
            try:
                uid = ocapp.mongo_store.mongo.db['username'].find(
                    {'name': username})[0]['uid']
            except:
                return HttpResponseRedirect('/admin/user/?status=1')
        else:
            account = AccountMapping.get(pid)
            if not account:
                return HttpResponseRedirect('/admin/user/?status=1')
            uid = account.uid

    user = UserBase.get(uid)
    if not user or not user.account:
        return HttpResponseRedirect('/admin/user/?status=1')

    user_equips_obj = UserEquips.get_instance(uid)
    user_pack_obj = UserPack.get_instance(uid)
    user_property_obj = UserProperty.get(uid)
    user_card_obj = UserCards.get(user.uid)
    user_real_pvp_obj = user.user_real_pvp
    game_config.set_subarea(user.subarea)

    data = {
        'deck_cards': [],
        'other_cards': [],
    }
    if not user.client_type:
        data['client_type'] = 'appstore_ios'
    else:
        data['client_type'] = user.client_type
    all_cards = []

    all_cids = game_config.card_config.keys()

    all_cids_cp = copy.deepcopy(game_config.card_config)
    for k, v in all_cids_cp.iteritems():
        all_cids_cp[k]['no'] = int(k.split('_')[0])
    all_cids.sort(key=lambda x: (all_cids_cp[x]['no']))
    for cid in all_cids:
        all_cards.append(Card.get(cid))
    data['all_cards'] = all_cards
    #用户当前战场信息
    user_dungeon_obj = UserDungeon.get_instance(user.uid)

    #充值信息
    data['charge_sum_money'] = user_property_obj.charge_sum_money
    data['last_charge_record'] = ChargeRecord.find(
        {'uid': uid})[-1] if ChargeRecord.find({'uid': uid}) else {}

    ######神秘商店   代码往前方 因为此操作会改变玩家武将,物品等信息##############
    #   刷新  物品列表
    if request.POST.get('refresh_mystery_store', ''):
        store_type = request.POST.get('store_type')
        params = {}
        mystery_store.refresh_store_by_self(user, params)
    #   购买  物品
    if request.POST.get('buy_mystery_store_goods', ''):
        store_type = request.POST.get('store_type')
        goods_index = int(request.POST.get('goods_index'))
        params = {
            'store_type': store_type,
            'goods_index': goods_index,
        }
        mystery_store.buy_store_goods(user, params)
######Pk商店   ##
#   刷新  物品列表
    if request.POST.get('refresh_pk_store', ''):
        pk_store.refresh_store_by_self(user, {})
    #   购买  物品
    if request.POST.get('buy_pk_store_goods', ''):
        goods_index = int(request.POST.get('goods_index'))
        params = {
            'goods_index': goods_index,
        }
        pk_store.buy_store_goods(user, params)


####################

    moderator = auth.get_moderator_by_request(request)
    qa_edit = 'qa edited by ' + str(moderator.username)

    #提交状态
    if request.method == "POST":
        state = int(request.POST.get("state", "0"))
        state = bool(state)
        #冻结
        if state != user.in_frozen:
            if state:
                user.froze()
            #解冻
            else:
                user.unfroze()
        #删除账号
        if request.POST.get('del_user', ''):
            if not user.account:
                return HttpResponseRedirect('/admin/user/?status=1')
            user.account.delete()
        if request.POST.get('add_gold', ''):
            add_gold = int(request.POST.get('add_gold'))
            if add_gold > 0:
                user_property_obj.add_gold(add_gold, where=qa_edit)
            else:
                user_property_obj.minus_gold(add_gold)
        #增加元宝
        if request.POST.get('add_coin', ''):
            add_coin = int(request.POST.get('add_coin'))
            if add_coin > 0:
                user_property_obj.add_coin(add_coin, where=qa_edit)
            else:
                user_property_obj.minus_coin(add_coin, where=qa_edit)
        #增加 经验点
        if request.POST.get('add_card_point', ''):
            add_card_point = int(request.POST.get('add_card_point'))
            if add_card_point > 0:
                user_property_obj.add_card_exp_point(add_card_point, qa_edit)
            else:
                user_property_obj.minus_card_exp_point(add_card_point, qa_edit)
        #增加经验
        if request.POST.get('add_exp', ''):
            add_exp = int(request.POST.get('add_exp'))
            user_property_obj.add_exp(add_exp, where=qa_edit)
        #更改等级
        if request.POST.get('modify_lv', ''):
            lv = request.POST.get('modify_lv')
            lv_exp = game_config.user_level_config[lv]['exp']
            now_exp = user_property_obj.property_info['exp']
            user_property_obj.add_exp(lv_exp - now_exp, where=qa_edit)
        # 增加pk 积分
        if request.POST.get('add_pk_pt', 0):
            pvp_pt = int(request.POST.get('add_pk_pt'))
            user_real_pvp_obj.add_pt(pvp_pt)
        # 加功勋
        if request.POST.get('add_honor', ''):
            honor = int(request.POST.get('add_honor'))
            urp = UserRealPvp.get(user.uid)
            urp.add_honor(honor, where=qa_edit)
        # 加战魂
        if request.POST.get('add_fight_soul', ''):
            fight_soul_num = int(request.POST.get('add_fight_soul'))
            user_property_obj.add_fight_soul(fight_soul_num, where=qa_edit)
        #发邮件
        if request.POST.get('mail_title') or request.POST.get('mail_goods'):
            from apps.models.user_mail import UserMail
            from apps.common import utils
            sid = 'system_%s' % (utils.create_gen_id())
            mail_title = request.POST.get('mail_title', '')
            mail_content = request.POST.get('mail_content', '')
            goods_str = request.POST.get('mail_goods', '').strip()
            award = {}
            for goods_info in goods_str.split(";"):
                goods_info = goods_info.strip()
                print "debug guochen email", goods_info
                if not goods_info:
                    continue

                goods_id, num = goods_info.strip().split(":")
                award.setdefault(goods_id, 0)
                award[goods_id] += int(num)

            mailtype = 'system_qa'
            user_mail_obj = UserMail.hget(uid, sid)
            user_mail_obj.set_mail(mailtype=mailtype,
                                   title=mail_title,
                                   content=mail_content,
                                   award=award)

        # 修改vip等级
        if request.POST.get('modify_vip_lv'):
            vip_lv = request.POST.get('modify_vip_lv')
            vip_conf = game_config.user_vip_config.get(str(vip_lv))
            if vip_conf:
                coin = vip_conf['coin']
                user_property_obj.property_info["charge_coins"] = coin
                user_property_obj.put()

        #补武将
        if request.POST.get("add_card_ex", ""):
            user_card_obj = UserCards.get(user.uid)
            strCardInfo = request.POST.get("add_card_ex")
            lstCardInfo = strCardInfo.strip().split(";")
            for strAddCard in lstCardInfo:
                cid = strAddCard.split(":")[0]
                cid = cid.strip() + '_card'
                num = int(strAddCard.split(":")[1])
                for i in range(num):
                    clv = 1
                    user_card_obj.add_card(cid, clv, where=qa_edit)
        #增加武将
        if request.POST.getlist('add_card'):
            add_cids = request.POST.getlist('add_card')
            user_card_obj = UserCards.get(user.uid)
            for add_cid in add_cids:
                if add_cid in game_config.card_config:
                    clv = 1
                    user_card_obj.add_card(add_cid, clv, where=qa_edit)
        #增加武将经验
        if request.POST.get('add_card_exp', ''):
            add_exp = int(request.POST.get('add_card_exp'))
            ucid = request.POST.get('ucid')
            user_card_obj.add_card_exp(ucid, add_exp)

        #增加武将技能级别
        if request.POST.get('add_card_sk_lv', ''):
            ucid = request.POST.get('ucid')
            user_card_obj.add_card_sk_lv(ucid)
        #卖掉卡片
        if request.POST.get('sell_card', ''):
            ucid = request.POST.get('ucid')
            #this_card = Card.get(user_card_obj.cards[ucid]['cid'],user_card_obj.cards[ucid]['lv'])
            user_card_obj.del_card_info([ucid])
            #user.user_property.add_gold(this_card.sell_gold,where=qa_edit)
        #踢出队伍
        if request.POST.get('kick_deck', ''):
            kick_index = int(request.POST.get('deck_index'))
            if user_card_obj.deck[kick_index].get(
                    'ucid', '') != user_card_obj.get_leader(
                        user_card_obj.cur_deck_index):
                user_card_obj.deck[kick_index] = {}
                user_card_obj.put()
        #设置主将
        if request.POST.get('set_deck_main', ''):
            ucid = request.POST.get('ucid')
            find_fg = False
            for card in user_card_obj.deck:
                if card.get('leader', 0):
                    card['ucid'] = ucid
                    user_card_obj.put()
                    find_fg = True
                    break
            if not find_fg:
                user_card_obj.deck[0] = {'ucid': ucid, 'leader': 1}
                user_card_obj.put()

        #设置副将
        if request.POST.get('set_deck_sub', ''):
            ucid = request.POST.get('ucid')
            for card in user_card_obj.deck:
                if not card:
                    card['ucid'] = ucid
                    user_card_obj.put()
                    break

        #一键送所有武将碎片
        if request.POST.get('give_all_card_soul', ''):
            for cid in game_config.card_config:
                user_card_obj.add_card(cid, 1, where=qa_edit)
            user_card_obj.put()

        #一键送所有武将
        if request.POST.get('give_all_card', ''):
            #一键送所有武将
            for cid in all_cids:
                ucid = user_card_obj.add_card(cid, 1, where=qa_edit)[2]
        # if request.POST.get('give_all_card',''):
        #     user_card_obj.cards = {}
        #     user_card_obj.cards_info = {
        #                     "decks":[[{}] * 5] * 10,
        #                     "cur_deck_index":0,
        #                 }
        #     for eid in user_equips_obj.equips:
        #         if user_equips_obj.equips[eid].get("used_by"):
        #             user_equips_obj.equips[eid]['used_by'] = ''
        #     user_equips_obj.put()
        #     card_index = 0
        #     for cid in all_cids:
        #         clv = 1
        #         ucid = user_card_obj.add_card(cid,clv,where=qa_edit)[2]
        #         if card_index < 5:
        #             user_card_obj.deck[card_index]['ucid'] = ucid
        #         card_index += 1

        #一键删除军队外的所有武将
        if request.POST.get('del_other_card', ''):
            decks = []
            for deck in user_card_obj.decks:
                decks.extend(
                    [card['ucid'] for card in deck if card.get('ucid', '')])
            del_cids = filter(lambda x: x not in decks,
                              user_card_obj.cards.keys())
            user_card_obj.del_card_info(del_cids)
            for eid in user_equips_obj.equips:
                if user_equips_obj.equips[eid].get("used_by"):
                    user_equips_obj.equips[eid]['used_by'] = ''
            user_equips_obj.put()
        #开放战场
        if request.POST.get('open_dungeon', ''):
            open_dungeon = request.POST.get('open_dungeon')
            floor_id = open_dungeon.split('-')[0]
            room_id = open_dungeon.split('-')[1]
            user_dungeon_obj.dungeon_info['normal_current'][
                'floor_id'] = floor_id
            user_dungeon_obj.dungeon_info['normal_current'][
                'room_id'] = room_id
            user_dungeon_obj.dungeon_info['normal_current']['status'] = 0
            user_dungeon_obj.put()
        #回复体力
        if request.POST.get('add_stamina', ''):
            add_stamina = int(request.POST.get('add_stamina'))
            user_property_obj.add_stamina(add_stamina)
        #equip
        if request.POST.get("add_equips", ""):
            user_equips_obj = UserEquips.get(uid)
            strEquipsInfo = request.POST.get("add_equips")
            lstEquipsInfo = strEquipsInfo.strip().split(";")
            for strAddEquip in lstEquipsInfo:
                eid = strAddEquip.split(":")[0]
                eid = eid.strip() + '_equip'
                num = int(strAddEquip.split(":")[1])
                for i in range(num):
                    user_equips_obj.add_equip(eid, where=qa_edit)
        #材料
        if request.POST.get("add_mats", ""):
            strItemsInfo = request.POST.get("add_mats")
            lstItemsInfo = strItemsInfo.strip().split(";")
            for strAddItem in lstItemsInfo:
                mid = strAddItem.split(":")[0]
                mid = mid.strip() + '_mat'
                num = int(strAddItem.split(":")[1])
                user_pack_obj.add_material(mid, num, where=qa_edit)

        #道具
        if request.POST.get("add_props", ""):
            strPropsInfo = request.POST.get("add_props")
            lstPropsInfo = strPropsInfo.strip().split(";")
            for strAddProps in lstPropsInfo:
                pid = strAddProps.split(":")[0]
                pid = pid.strip() + '_props'
                num = int(strAddProps.split(":")[1])
                user_pack_obj.add_props(pid, num, where=qa_edit)

        if request.POST.get("add_materials_num", 0):
            mid = request.POST.get("mid")
            user_pack_obj.add_material(
                mid,
                int(request.POST.get("add_materials_num", 0)),
                where=qa_edit)

        if request.POST.get("add_props_num", 0):
            pid = request.POST["prop"]
            user_pack_obj.add_props(pid,
                                    int(request.POST.get("add_props_num", 0)),
                                    where=qa_edit)

        if request.POST.get('give_all_props'):
            num = int(request.POST.get('all_props_num')) if request.POST.get(
                'all_props_num') else 99
            for iid in game_config.props_config:
                user_pack_obj.add_props(iid, num, where=qa_edit)

        if request.POST.get('del_all_props'):
            user_pack_obj.props = {}
            user_pack_obj.put()

        if request.POST.get('give_all_equips'):
            user_equips = UserEquips.get(uid)
            for eid in game_config.equip_config:
                user_equips.add_equip(eid, where=qa_edit)

        #一键送所有的装备碎片
        if request.POST.get('give_all_equip_soul'):
            user_souls_obj = UserSouls.get(uid)
            for eid in game_config.equip_config:
                if game_config.equip_config[eid].get('need_soul_types_num', 0):
                    parts = game_config.equip_config[eid].get(
                        'need_soul_types_num', 0)
                    for i in xrange(1, parts + 1):
                        user_souls_obj.add_equip_soul(eid + '_' + str(i),
                                                      100,
                                                      where=qa_edit)
                else:
                    user_souls_obj.add_equip_soul(eid, 1, where=qa_edit)

        #一键删除所有的装备碎片
        if request.POST.get('del_all_equip_soul'):
            user_souls_obj = UserSouls.get(uid)
            user_souls_obj.equip_souls_info = {}
            user_souls_obj.put()

        #添加单个装备碎片
        if request.POST.get('add_single_equip_soul'):
            sid = request.POST.get('sid')
            num = int(request.POST.get('add_single_equip_soul'))
            user_souls_obj = UserSouls.get_instance(uid)
            user_souls_obj.add_equip_soul(sid, num, where=qa_edit)
            user_souls_obj.put()

        if request.POST.get('del_other_equips'):
            user_equips = UserEquips.get(uid)
            ueids = [
                ueid for ueid in user_equips.equips
                if not user_equips.is_used(ueid)
            ]
            user_equips.delete_equip(ueids)
        if request.POST.get('give_all_materials'):
            num = int(request.POST.get('all_materials_num')
                      ) if request.POST.get('all_materials_num') else 99
            user_pack_obj = UserPack.get_instance(uid)
            for mid in game_config.material_config:
                user_pack_obj.add_material(mid, num, where=qa_edit)
        if request.POST.get('del_all_materials'):
            user_pack_obj = UserPack.get_instance(uid)
            user_pack_obj.materials = {}
            user_pack_obj.put()
        #一键过新手引导
        if request.POST.get('newbie_pass', '') and user.user_property.newbie:
            newbie_steps_num = int(
                user.game_config.system_config.get('newbie_steps', 6))
            user.user_property.property_info['newbie_steps'] = (
                1 << newbie_steps_num) - 1
            user.user_property.set_newbie()
            user.user_property.do_put()

        data['status'] = 1

    data['current_dungeon'] = user_dungeon_obj.dungeon_info['normal_current']
    #配置中的所有战场
    data['all_dungeon'] = []
    floor_ids = sorted(
        map(lambda x: int(x), game_config.normal_dungeon_config.keys()))
    for floor_id in floor_ids:
        for room_id in sorted(game_config.normal_dungeon_config[str(floor_id)]
                              ['rooms'].keys()):
            data['all_dungeon'].append('%d-%s' % (floor_id, room_id))
    #用户已经达到最深层时
    if '%s-%s' % (data['current_dungeon']['floor_id'], data['current_dungeon']
                  ['room_id']) == data['all_dungeon'][-1]:
        data['max_dungeon'] = True
    else:
        data['max_dungeon'] = False
        now_index = data['all_dungeon'].index(
            '%s-%s' % (data['current_dungeon']['floor_id'],
                       data['current_dungeon']['room_id']))
        data['all_dungeon'] = data['all_dungeon'][now_index + 1:]

    #装备
    equips = user_equips_obj.equips
    eqids_dict = [user_equips_obj.get_equip_dict(ueid) for ueid in equips]
    data['user_equips'] = [
        game_config.equip_config.get(eid_dict['eid'])
        for eid_dict in eqids_dict
    ]
    all_equips_tag = sorted(
        [int(i.split('_')[0]) for i in game_config.equip_config.keys()])
    data['all_equips'] = [(i, game_config.equip_config.get(str(i) + '_equip'))
                          for i in all_equips_tag]

    #mat
    data['user_materials'] = {
        mid: {
            'name': game_config.material_config.get(mid, {}).get('name', ''),
            'num': user_pack_obj.materials[mid]
        }
        for mid in user_pack_obj.materials
    }
    all_materials_tag = sorted(
        [int(i.split('_')[0]) for i in game_config.material_config.keys()])

    data['all_materials'] = [(i,
                              game_config.material_config.get(str(i) + '_mat'))
                             for i in all_materials_tag]

    #props
    data['user_props'] = {
        pid: {
            'name': game_config.props_config.get(pid, {}).get('name'),
            'num': user_pack_obj.props[pid]
        }
        for pid in user_pack_obj.props
    }
    all_props_tag = sorted(
        [int(i.split('_')[0]) for i in game_config.props_config.keys()])
    data['all_props'] = [(i, game_config.props_config.get(str(i) + '_props'))
                         for i in all_props_tag]

    ######将魂系统   代码要在其他逻辑偏后 以保证是最新的信息##############
    user_souls_obj = UserSouls.get_instance(uid)
    #   添加  普通将魂
    if request.POST.get('add_normal_soul', ''):
        add_normal_soul_num = int(request.POST.get('add_normal_soul'))
        sid = request.POST.get('sid')
        user_souls_obj.add_normal_soul(sid, add_normal_soul_num, where=qa_edit)
    #   批量添加  普通将魂
    if request.POST.get('dump_normal_soul'):
        dump_normal_soul_str = request.POST.get('dump_normal_soul').strip()
        for item in dump_normal_soul_str.split(';'):
            sid, num = item.split(':')
            user_souls_obj.add_normal_soul(sid + '_card',
                                           int(num),
                                           where=qa_edit)
    #   批量添加  装备碎片
    if request.POST.get('add_equip_soul'):
        add_equip_soul_str = request.POST.get('add_equip_soul').strip()
        for equip_info in add_equip_soul_str.split(';'):
            eid, num = equip_info.split(':')
            user_souls_obj.add_equip_soul(eid, int(num), where=qa_edit)

    #   添加  英雄将魂
    if request.POST.get('add_super_soul', ''):
        add_super_soul_num = int(request.POST.get('add_super_soul'))
        if add_super_soul_num >= 0:
            user_souls_obj.add_super_soul(add_super_soul_num, where=qa_edit)
        else:
            user_souls_obj.minus_card_soul('super_soul',
                                           -add_super_soul_num,
                                           where=qa_edit)

    # 武将碎片兑换武将
    if request.POST.get('soul_exchange_card'):
        sid = request.POST.get('sid')
        params = {'cid': sid}
        user['uid'] = uid
        soul.exchange_card(user, params)
    # 删除将魂
    if request.POST.get('delete_card_soul'):
        sid = request.POST.get('sid')
        num = int(request.POST.get('num'))
        user_souls_obj = UserSouls.get_instance(uid)
        user_souls_obj.minus_card_soul(sid, num, where=qa_edit)
        user_souls_obj.put()
    data.update(copy.deepcopy(soul.get_all(user, None)[1]))

    #武将碎片的显示
    for sid, soul_conf in data['normal_souls'].items():
        soul_conf['name'] = game_config.card_config[sid].get(
            'star', '') + u'星 ' + game_config.card_config[sid].get('name',
                                                                   '') + u' 碎片'
    #装备碎片的显示
    for sid, soul_conf in data['equip_souls_info'].items():
        all_parts = sid.split('_')
        if len(all_parts) == 2:
            soul_conf['name'] = str(game_config.equip_config[sid].get(
                'star', '')) + u'星 ' + game_config.equip_config[sid].get(
                    'name', '') + u' 碎片'
        else:
            sid = '%s_%s' % (all_parts[0], all_parts[1])
            soul_conf['name'] = str(game_config.equip_config[sid].get(
                'star', '')) + u'星 ' + game_config.equip_config[sid].get(
                    'name', '') + u' 碎片第%s部分' % all_parts[2]

    #  获取玩家武将信息  代码往后放 以保证是最新的信息
    deck_num = 0
    for card in user_card_obj.deck:
        if card:
            ucid = card['ucid']
            card_info = user_card_obj.cards[ucid]
            this_card = Card.get_from_dict(card_info)
            this_card.ucid = ucid
            this_card.is_leader = card.get('leader', 0)
            eid = ''  #user_card_obj.get_eid(ucid)
            if eid:
                this_card.equip = game_config.equip_config[eid]['name']
            else:
                this_card.equip = ''
            this_card.now_exp = card_info['exp']
            data['deck_cards'].append(this_card)
            deck_num += 1
        else:
            data['deck_cards'].append(None)
    data['deck_num'] = deck_num
    other_ucids = user_card_obj.cards.keys()
    for card in user_card_obj.deck:
        ucid = card.get('ucid')
        if ucid and ucid in other_ucids:
            other_ucids.remove(ucid)
    for ucid in other_ucids:
        card_info = user_card_obj.cards[ucid]
        this_card = Card.get_from_dict(card_info)
        this_card.ucid = ucid
        this_card.now_exp = card_info['exp']
        eid = ''  #user_card_obj.get_eid(ucid)
        if eid:
            this_card.equip = game_config.equip_config[eid]['name']
        else:
            this_card.equip = ''
        data['other_cards'].append(this_card)
    #重新整理 下编队
    user_card_obj.decks

    # 邮件
    show_mails = mails.show_mails(user, {})['show_mails']
    temp_mails = show_mails.values()

    # 整理awards内容,就显示good_id和num
    for mail in temp_mails:
        for award in mail['awards'][:]:
            if not 'good_id' in award.values()[0]:
                continue
            mail['awards'].append({
                award.values()[0]['good_id']:
                award.values()[0].get('num', 0)
            })
            mail['awards'].pop(0)

    data.update({
        'mails':
        sorted(temp_mails,
               key=operator.itemgetter('can_get', 'create_time'),
               reverse=True),
        'user_property_obj':
        user_property_obj,
        'user':
        user,
        'add_time':
        timestamp_toString(user.add_time),
        'last_login_time':
        timestamp_toString(user.user_property.login_time),
        'login_record':
        UserLogin.get(uid).login_info['login_record'],
        'user_real_pvp_obj':
        user_real_pvp_obj.pvp_detail,
        'mystery_store':
        mystery_store.get_store_info(user, {}),
        'pk_store':
        pk_store.get_store_info(user, {}),
    })

    return 'user/edit.html', data
Exemple #25
0
def edit_user(request):
    """
    编辑用户页
    """
    uid = request.GET.get('uid','').strip()
    if not uid:
        pid = request.GET.get('pid','').strip()
        if not pid:
            username = request.GET.get('username','')
            if not username:
                return HttpResponseRedirect('/admin/user/?status=1')
            try:
                uid=ocapp.mongo_store.mongo.db['username'].find({'name':username})[0]['uid']
            except:
                return HttpResponseRedirect('/admin/user/?status=1')
        else:
            account = AccountMapping.get(pid)
            if not account:
                return HttpResponseRedirect('/admin/user/?status=1')
            uid = account.uid


    user = UserBase.get(uid)
    if not user or not user.account:
        return HttpResponseRedirect('/admin/user/?status=1')

    user_equips_obj = UserEquips.get_instance(uid)
    user_pack_obj = UserPack.get_instance(uid)
    user_property_obj = UserProperty.get(uid)
    user_card_obj = UserCards.get(user.uid)
    user_real_pvp_obj = user.user_real_pvp
    game_config.set_subarea(user.subarea)

    data = {
        'deck_cards':[],
        'other_cards':[],
    }
    if not user.client_type:
        data['client_type'] = 'appstore_ios'
    else:
        data['client_type'] = user.client_type
    all_cards = []

    all_cids = game_config.card_config.keys()

    all_cids_cp = copy.deepcopy(game_config.card_config)
    for k,v in all_cids_cp.iteritems():
        all_cids_cp[k]['no'] = int(k.split('_')[0])
    all_cids.sort(key = lambda x :(all_cids_cp[x]['no']))
    for cid in all_cids:
        all_cards.append(Card.get(cid))
    data['all_cards'] = all_cards
    #用户当前战场信息
    user_dungeon_obj = UserDungeon.get_instance(user.uid)

    #充值信息
    data['charge_sum_money'] = user_property_obj.charge_sum_money
    data['last_charge_record'] = ChargeRecord.find({'uid':uid})[-1] if ChargeRecord.find({'uid':uid}) else {}

######神秘商店   代码往前方 因为此操作会改变玩家武将,物品等信息##############
    #   刷新  物品列表
    if request.POST.get('refresh_mystery_store',''):
        store_type = request.POST.get('store_type')
        params = {
        }
        mystery_store.refresh_store_by_self(user, params)
    #   购买  物品
    if request.POST.get('buy_mystery_store_goods',''):
        store_type = request.POST.get('store_type')
        goods_index = int(request.POST.get('goods_index'))
        params = {
            'store_type': store_type,
            'goods_index': goods_index,
        }
        mystery_store.buy_store_goods(user, params)
######Pk商店   ##
    #   刷新  物品列表
    if request.POST.get('refresh_pk_store', ''):
        pk_store.refresh_store_by_self(user, {})
    #   购买  物品
    if request.POST.get('buy_pk_store_goods',''):
        goods_index = int(request.POST.get('goods_index'))
        params = {
            'goods_index': goods_index,
        }
        pk_store.buy_store_goods(user, params)
####################

    moderator = auth.get_moderator_by_request(request)
    qa_edit = 'qa edited by '+str(moderator.username)

    #提交状态
    if request.method == "POST":
        state = int(request.POST.get("state","0"))
        state = bool(state)
        #冻结
        if state != user.in_frozen:
            if state:
                user.froze()
            #解冻
            else:
                user.unfroze()
        #删除账号
        if request.POST.get('del_user',''):
            if not user.account:
                return HttpResponseRedirect('/admin/user/?status=1')
            user.account.delete()
        if request.POST.get('add_gold',''):
            add_gold = int(request.POST.get('add_gold'))
            if add_gold>0:
                user_property_obj.add_gold(add_gold,where=qa_edit)
            else:
                user_property_obj.minus_gold(add_gold)
        #增加元宝
        if request.POST.get('add_coin',''):
            add_coin = int(request.POST.get('add_coin'))
            if add_coin>0:
                user_property_obj.add_coin(add_coin, where=qa_edit)
            else:
                user_property_obj.minus_coin(add_coin, where=qa_edit)
        #增加 经验点
        if request.POST.get('add_card_point',''):
            add_card_point = int(request.POST.get('add_card_point'))
            if add_card_point>0:
                user_property_obj.add_card_exp_point(add_card_point, qa_edit)
            else:
                user_property_obj.minus_card_exp_point(add_card_point, qa_edit)
        #增加经验
        if request.POST.get('add_exp',''):
            add_exp = int(request.POST.get('add_exp'))
            user_property_obj.add_exp(add_exp,where=qa_edit)
        #更改等级
        if request.POST.get('modify_lv',''):
            lv = request.POST.get('modify_lv')
            lv_exp = game_config.user_level_config[lv]['exp']
            now_exp = user_property_obj.property_info['exp']
            user_property_obj.add_exp(lv_exp-now_exp,where=qa_edit)
        # 增加pk 积分
        if request.POST.get('add_pk_pt', 0):
            pvp_pt = int(request.POST.get('add_pk_pt'))
            user_real_pvp_obj.add_pt(pvp_pt)
        # 加功勋
        if request.POST.get('add_honor',''):
            honor = int(request.POST.get('add_honor'))
            urp = UserRealPvp.get(user.uid)
            urp.add_honor(honor, where=qa_edit)
        # 加战魂
        if request.POST.get('add_fight_soul',''):
            fight_soul_num = int(request.POST.get('add_fight_soul'))
            user_property_obj.add_fight_soul(fight_soul_num, where=qa_edit)
        #发邮件
        if request.POST.get('mail_title') or request.POST.get('mail_goods'):
            from apps.models.user_mail import UserMail
            from apps.common import utils
            sid = 'system_%s' % (utils.create_gen_id())
            mail_title = request.POST.get('mail_title', '')
            mail_content = request.POST.get('mail_content', '')
            goods_str = request.POST.get('mail_goods', '').strip()
            award = {}
            for goods_info in goods_str.split(";"):
                goods_info = goods_info.strip()
                print "debug guochen email", goods_info
                if not goods_info:
                    continue

                goods_id, num = goods_info.strip().split(":")
                award.setdefault(goods_id, 0)
                award[goods_id] += int(num)

            mailtype = 'system_qa'
            user_mail_obj = UserMail.hget(uid, sid)
            user_mail_obj.set_mail(mailtype=mailtype, title=mail_title, content=mail_content, award=award)

        # 修改vip等级
        if request.POST.get('modify_vip_lv'):
            vip_lv = request.POST.get('modify_vip_lv')
            vip_conf = game_config.user_vip_config.get(str(vip_lv))
            if vip_conf:
                coin = vip_conf['coin']
                user_property_obj.property_info["charge_coins"] = coin
                user_property_obj.put()

        #补武将
        if request.POST.get("add_card_ex", ""):
            user_card_obj = UserCards.get(user.uid)
            strCardInfo = request.POST.get("add_card_ex")
            lstCardInfo = strCardInfo.strip().split(";")
            for strAddCard in lstCardInfo:
                cid = strAddCard.split(":")[0]
                cid = cid.strip() + '_card'
                num = int(strAddCard.split(":")[1])
                for i in range(num):
                    clv = 1
                    user_card_obj.add_card(cid,clv,where=qa_edit)
        #增加武将
        if request.POST.getlist('add_card'):
            add_cids = request.POST.getlist('add_card')
            user_card_obj = UserCards.get(user.uid)
            for add_cid in add_cids:
                if add_cid in game_config.card_config:
                    clv = 1
                    user_card_obj.add_card(add_cid,clv,where=qa_edit)
        #增加武将经验
        if request.POST.get('add_card_exp',''):
            add_exp = int(request.POST.get('add_card_exp'))
            ucid = request.POST.get('ucid')
            user_card_obj.add_card_exp(ucid,add_exp)

        #增加武将技能级别
        if request.POST.get('add_card_sk_lv',''):
            ucid = request.POST.get('ucid')
            user_card_obj.add_card_sk_lv(ucid)
        #卖掉卡片
        if request.POST.get('sell_card',''):
            ucid = request.POST.get('ucid')
            #this_card = Card.get(user_card_obj.cards[ucid]['cid'],user_card_obj.cards[ucid]['lv'])
            user_card_obj.del_card_info([ucid])
            #user.user_property.add_gold(this_card.sell_gold,where=qa_edit)
        #踢出队伍
        if request.POST.get('kick_deck',''):
            kick_index = int(request.POST.get('deck_index'))
            if user_card_obj.deck[kick_index].get('ucid','') != user_card_obj.get_leader(user_card_obj.cur_deck_index):
                user_card_obj.deck[kick_index] = {}
                user_card_obj.put()
        #设置主将
        if request.POST.get('set_deck_main',''):
            ucid = request.POST.get('ucid')
            find_fg = False
            for card in user_card_obj.deck:
                if card.get('leader',0):
                    card['ucid'] = ucid
                    user_card_obj.put()
                    find_fg = True
                    break
            if not find_fg:
                user_card_obj.deck[0] = {'ucid':ucid,'leader':1}
                user_card_obj.put()

        #设置副将
        if request.POST.get('set_deck_sub',''):
            ucid = request.POST.get('ucid')
            for card in user_card_obj.deck:
                if not card:
                    card['ucid'] = ucid
                    user_card_obj.put()
                    break

        #一键送所有武将碎片
        if request.POST.get('give_all_card_soul',''):
            for cid in game_config.card_config:
                user_card_obj.add_card(cid,1,where=qa_edit)
            user_card_obj.put()
            
        #一键送所有武将
        if request.POST.get('give_all_card',''):
            #一键送所有武将
            for cid in all_cids:
                ucid = user_card_obj.add_card(cid, 1, where=qa_edit)[2]
        # if request.POST.get('give_all_card',''):
        #     user_card_obj.cards = {}
        #     user_card_obj.cards_info = {
        #                     "decks":[[{}] * 5] * 10,
        #                     "cur_deck_index":0,
        #                 }
        #     for eid in user_equips_obj.equips:
        #         if user_equips_obj.equips[eid].get("used_by"):
        #             user_equips_obj.equips[eid]['used_by'] = ''
        #     user_equips_obj.put()     
        #     card_index = 0
        #     for cid in all_cids:
        #         clv = 1
        #         ucid = user_card_obj.add_card(cid,clv,where=qa_edit)[2]
        #         if card_index < 5:
        #             user_card_obj.deck[card_index]['ucid'] = ucid
        #         card_index += 1

        #一键删除军队外的所有武将
        if request.POST.get('del_other_card',''):
            decks = []
            for deck in user_card_obj.decks:
                decks.extend([card['ucid'] for card in deck if card.get('ucid','')])
            del_cids = filter(lambda x:x not in decks,user_card_obj.cards.keys())
            user_card_obj.del_card_info(del_cids)
            for eid in user_equips_obj.equips:
                if user_equips_obj.equips[eid].get("used_by"):
                    user_equips_obj.equips[eid]['used_by'] = ''
            user_equips_obj.put()
        #开放战场
        if request.POST.get('open_dungeon',''):
            open_dungeon = request.POST.get('open_dungeon')
            floor_id = open_dungeon.split('-')[0]
            room_id = open_dungeon.split('-')[1]
            user_dungeon_obj.dungeon_info['normal_current']['floor_id'] = floor_id
            user_dungeon_obj.dungeon_info['normal_current']['room_id'] = room_id
            user_dungeon_obj.dungeon_info['normal_current']['status'] = 0
            user_dungeon_obj.put()
        #回复体力
        if request.POST.get('add_stamina', ''):
            add_stamina = int(request.POST.get('add_stamina'))
            user_property_obj.add_stamina(add_stamina)
        #equip
        if request.POST.get("add_equips", ""):
            user_equips_obj = UserEquips.get(uid)
            strEquipsInfo = request.POST.get("add_equips")
            lstEquipsInfo = strEquipsInfo.strip().split(";")
            for strAddEquip in lstEquipsInfo:
                eid = strAddEquip.split(":")[0]
                eid = eid.strip() + '_equip'
                num = int(strAddEquip.split(":")[1])
                for i in range(num):
                    user_equips_obj.add_equip(eid,where=qa_edit)
        #材料
        if request.POST.get("add_mats", ""):
            strItemsInfo = request.POST.get("add_mats")
            lstItemsInfo = strItemsInfo.strip().split(";")
            for strAddItem in lstItemsInfo:
                mid = strAddItem.split(":")[0]
                mid = mid.strip() + '_mat'
                num = int(strAddItem.split(":")[1])
                user_pack_obj.add_material(mid,num,where=qa_edit)
                
        #道具
        if request.POST.get("add_props", ""):
            strPropsInfo = request.POST.get("add_props")
            lstPropsInfo = strPropsInfo.strip().split(";")
            for strAddProps in lstPropsInfo:
                pid = strAddProps.split(":")[0]
                pid = pid.strip() + '_props'
                num = int(strAddProps.split(":")[1])
                user_pack_obj.add_props(pid,num,where=qa_edit)

        if request.POST.get("add_materials_num", 0):
            mid = request.POST.get("mid")
            user_pack_obj.add_material(mid,int(request.POST.get("add_materials_num", 0)),where=qa_edit)


        if  request.POST.get("add_props_num", 0):
            pid = request.POST["prop"]
            user_pack_obj.add_props(pid, int(request.POST.get("add_props_num", 0)),where=qa_edit)

        if request.POST.get('give_all_props'):
            num = int(request.POST.get('all_props_num'))if request.POST.get('all_props_num') else 99
            for iid in game_config.props_config:
                user_pack_obj.add_props(iid,num,where=qa_edit)

        
        if request.POST.get('del_all_props'):
            user_pack_obj.props = {}
            user_pack_obj.put()


        if request.POST.get('give_all_equips'):
            user_equips = UserEquips.get(uid)
            for eid in game_config.equip_config:
                user_equips.add_equip(eid,where=qa_edit)

        #一键送所有的装备碎片
        if request.POST.get('give_all_equip_soul'):
            user_souls_obj = UserSouls.get(uid)
            for eid in game_config.equip_config:
                if game_config.equip_config[eid].get('need_soul_types_num',0):
                    parts = game_config.equip_config[eid].get('need_soul_types_num',0)
                    for i in xrange(1,parts+1):
                        user_souls_obj.add_equip_soul(eid+'_'+str(i),100,where=qa_edit)
                else:
                    user_souls_obj.add_equip_soul(eid,1,where=qa_edit)

        #一键删除所有的装备碎片
        if request.POST.get('del_all_equip_soul'):
            user_souls_obj = UserSouls.get(uid)
            user_souls_obj.equip_souls_info = {}
            user_souls_obj.put()

        #添加单个装备碎片
        if request.POST.get('add_single_equip_soul'):
            sid = request.POST.get('sid')
            num = int(request.POST.get('add_single_equip_soul'))
            user_souls_obj = UserSouls.get_instance(uid)
            user_souls_obj.add_equip_soul(sid, num,where=qa_edit)
            user_souls_obj.put()
        
        if request.POST.get('del_other_equips'):
            user_equips = UserEquips.get(uid)
            ueids = [ ueid for ueid in user_equips.equips if not user_equips.is_used(ueid)]
            user_equips.delete_equip(ueids)
        if request.POST.get('give_all_materials'):
            num = int(request.POST.get('all_materials_num'))if request.POST.get('all_materials_num') else 99
            user_pack_obj = UserPack.get_instance(uid)
            for mid in game_config.material_config:
                user_pack_obj.add_material(mid,num,where=qa_edit)
        if request.POST.get('del_all_materials'):
            user_pack_obj = UserPack.get_instance(uid)
            user_pack_obj.materials = {}
            user_pack_obj.put()
        #一键过新手引导
        if request.POST.get('newbie_pass','') and user.user_property.newbie:
            newbie_steps_num = int(user.game_config.system_config.get('newbie_steps', 6))
            user.user_property.property_info['newbie_steps'] = (1 << newbie_steps_num) - 1
            user.user_property.set_newbie()
            user.user_property.do_put()

        data['status'] = 1

    data['current_dungeon'] = user_dungeon_obj.dungeon_info['normal_current']
    #配置中的所有战场
    data['all_dungeon'] = []
    floor_ids = sorted(map(lambda x:int(x),game_config.normal_dungeon_config.keys()))
    for floor_id in floor_ids:
        for room_id in sorted(game_config.normal_dungeon_config[str(floor_id)]['rooms'].keys()):
            data['all_dungeon'].append('%d-%s' % (floor_id,room_id))
    #用户已经达到最深层时
    if '%s-%s' % (data['current_dungeon']['floor_id'],data['current_dungeon']['room_id']) == data['all_dungeon'][-1]:
        data['max_dungeon'] = True
    else:
        data['max_dungeon'] = False
        now_index = data['all_dungeon'].index('%s-%s' % (data['current_dungeon']['floor_id'],data['current_dungeon']['room_id']))
        data['all_dungeon'] = data['all_dungeon'][now_index + 1:]

    #装备
    equips = user_equips_obj.equips
    eqids_dict = [user_equips_obj.get_equip_dict(ueid) for ueid in equips ]
    data['user_equips'] = [game_config.equip_config.get(eid_dict['eid'])  for eid_dict in eqids_dict]
    all_equips_tag = sorted([int(i.split('_')[0]) for i in game_config.equip_config.keys()])
    data['all_equips'] = [(i,game_config.equip_config.get(str(i)+'_equip')) for i in all_equips_tag]

    #mat
    data['user_materials'] = {mid :{'name':game_config.material_config.get(mid, {}).get('name', ''),'num':user_pack_obj.materials[mid]} for mid in user_pack_obj.materials }
    all_materials_tag = sorted([int(i.split('_')[0]) for i in game_config.material_config.keys()])

    data['all_materials'] = [(i,game_config.material_config.get(str(i)+'_mat')) for i in all_materials_tag]

    #props
    data['user_props'] = {pid :{'name':game_config.props_config.get(pid, {}).get('name'),'num':user_pack_obj.props[pid]} for pid in user_pack_obj.props }
    all_props_tag = sorted([int(i.split('_')[0]) for i in game_config.props_config.keys()])
    data['all_props'] = [(i,game_config.props_config.get(str(i)+'_props')) for i in all_props_tag]

######将魂系统   代码要在其他逻辑偏后 以保证是最新的信息##############
    user_souls_obj = UserSouls.get_instance(uid)
    #   添加  普通将魂
    if request.POST.get('add_normal_soul',''):
        add_normal_soul_num = int(request.POST.get('add_normal_soul'))
        sid = request.POST.get('sid')
        user_souls_obj.add_normal_soul(sid, add_normal_soul_num, where=qa_edit)
    #   批量添加  普通将魂
    if request.POST.get('dump_normal_soul'):
        dump_normal_soul_str = request.POST.get('dump_normal_soul').strip()
        for item in dump_normal_soul_str.split(';'):
            sid, num = item.split(':')
            user_souls_obj.add_normal_soul(sid + '_card', int(num), where=qa_edit)
    #   批量添加  装备碎片
    if request.POST.get('add_equip_soul'):
        add_equip_soul_str = request.POST.get('add_equip_soul').strip()
        for equip_info in add_equip_soul_str.split(';'):
            eid, num = equip_info.split(':')
            user_souls_obj.add_equip_soul(eid, int(num), where=qa_edit)

    #   添加  英雄将魂
    if request.POST.get('add_super_soul',''):
        add_super_soul_num = int(request.POST.get('add_super_soul'))
        if add_super_soul_num >= 0:
            user_souls_obj.add_super_soul(add_super_soul_num, where=qa_edit)
        else:
            user_souls_obj.minus_card_soul('super_soul', -add_super_soul_num, where=qa_edit)

    # 武将碎片兑换武将
    if request.POST.get('soul_exchange_card'):
        sid = request.POST.get('sid')
        params = {'cid':sid}
        user['uid'] = uid
        soul.exchange_card(user, params)
    # 删除将魂
    if request.POST.get('delete_card_soul'):
        sid = request.POST.get('sid')
        num = int(request.POST.get('num'))
        user_souls_obj = UserSouls.get_instance(uid)
        user_souls_obj.minus_card_soul(sid, num,where=qa_edit)
        user_souls_obj.put()
    data.update(copy.deepcopy(soul.get_all(user, None)[1]))

    #武将碎片的显示
    for sid, soul_conf in data['normal_souls'].items():
        soul_conf['name'] = game_config.card_config[sid].get('star','') + u'星 ' + game_config.card_config[sid].get('name','') + u' 碎片'
    #装备碎片的显示
    for sid, soul_conf in data['equip_souls_info'].items():
        all_parts = sid.split('_')
        if len(all_parts) == 2:
            soul_conf['name'] = str(game_config.equip_config[sid].get('star','')) + u'星 ' + game_config.equip_config[sid].get('name','') + u' 碎片'
        else:
            sid = '%s_%s'%(all_parts[0],all_parts[1])
            soul_conf['name'] = str(game_config.equip_config[sid].get('star','')) + u'星 ' + game_config.equip_config[sid].get('name','') + u' 碎片第%s部分'%all_parts[2]

    #  获取玩家武将信息  代码往后放 以保证是最新的信息
    deck_num = 0
    for card in user_card_obj.deck:
        if card:
            ucid = card['ucid']
            card_info = user_card_obj.cards[ucid]
            this_card = Card.get_from_dict(card_info)
            this_card.ucid = ucid
            this_card.is_leader = card.get('leader',0)
            eid = ''#user_card_obj.get_eid(ucid)
            if eid:
                this_card.equip = game_config.equip_config[eid]['name']
            else:
                this_card.equip = ''
            this_card.now_exp = card_info['exp']
            data['deck_cards'].append(this_card)
            deck_num += 1
        else:
            data['deck_cards'].append(None)
    data['deck_num'] = deck_num
    other_ucids = user_card_obj.cards.keys()
    for card in user_card_obj.deck:
        ucid = card.get('ucid')
        if ucid and ucid in other_ucids:
            other_ucids.remove(ucid)
    for ucid in other_ucids:
        card_info = user_card_obj.cards[ucid]
        this_card = Card.get_from_dict(card_info)
        this_card.ucid = ucid
        this_card.now_exp = card_info['exp']
        eid = ''#user_card_obj.get_eid(ucid)
        if eid:
            this_card.equip = game_config.equip_config[eid]['name']
        else:
            this_card.equip = ''
        data['other_cards'].append(this_card)
    #重新整理 下编队
    user_card_obj.decks

    # 邮件
    show_mails = mails.show_mails(user, {})['show_mails']
    temp_mails =  show_mails.values()

    # 整理awards内容,就显示good_id和num
    for mail in temp_mails:
        for award in mail['awards'][:]:
            if not 'good_id' in award.values()[0]:
                continue
            mail['awards'].append({award.values()[0]['good_id']: award.values()[0].get('num', 0)})
            mail['awards'].pop(0)


    data.update({
        'mails': sorted(temp_mails, key=operator.itemgetter('can_get', 'create_time'), reverse=True),
        'user_property_obj':user_property_obj,
        'user':user,
        'add_time':timestamp_toString(user.add_time),
        'last_login_time':timestamp_toString(user.user_property.login_time),
        'login_record':UserLogin.get(uid).login_info['login_record'],
        'user_real_pvp_obj': user_real_pvp_obj.pvp_detail,
        'mystery_store': mystery_store.get_store_info(user, {}),
        'pk_store': pk_store.get_store_info(user, {}),
    })

    return 'user/edit.html', data