コード例 #1
0
    def post(self):
        player_base = self.get_player_base()
        if player_base is None:
            return self.send_faild(error.ERROR_NO_USER)

        try:
            data = self.get_post_data()
            imei = data['imei']
        except Exception as e:
            print(e)
            return self.send_faild(error.ERROR_PARAM)

        devinfo = dev_v3.get_dev_info(imei)
        if devinfo == None:
            return self.send_faild(error.ERROR_DEV_NOY_CONNECT_YET)

        dev = Data.find('devices', [('imei', '=', imei)])
        if dev == None:
            return self.send_faild(error.ERROR_DEVICE_EXISTS)

        params = {
            'imei': imei,
            'ctime': int(time.time()),
            'user_id': '',
            'times': 0,
            'status': 0
        }

        Data.update('devices', [('imei', '=', imei)], params)

        dev_v3.send_bind_status(imei)
        reply = {'commit': 1}
        self.send_ok(reply)
        return
コード例 #2
0
def add_agent_reward(shop_id, service_id):
    distr_info = Data.find('distr_relation', [('user_id', '=', shop_id)])
    if distr_info is not None:
        distr_id = distr_info['upper_id']
        if distr_id != 0:
            shop_machines = Data.select('shop_machines',
                                        [('shop_id', '=', shop_id),
                                         ('distr_reward', '=', 0),
                                         ('status', '=', 0)],
                                        order=('add_time', ''))
            print(shop_machines)
            print(shop_machines[0])
            if shop_machines[0]:
                if shop_machines[0]['paid_pg'] != 0:
                    params = {
                        'user_id': distr_id,
                        'share': 50000,
                        'withdraw_status': config.withdraw_status_no,
                        'withdraw_type': config.distr_reward,
                        'buy_time': int(time.time()),
                        'withdraw_id': service_id,
                    }
                    Data.insert('withdraw_record', params)
                Data.update('shop_machines',
                            [('id', '=', shop_machines[0]['id'])], {
                                'status': 1,
                                'distr_reward': 1
                            })
コード例 #3
0
    def post(self):
        player_base = self.get_player_base()
        if player_base is None:
            return self.send_faild(error.ERROR_NO_USER)

        try:
            data = self.get_post_data()
            group_id = data['group_id']
            name = data['group_name']
            comment = data['group_desc']
        except Exception as e:
            print(e)
            return self.send_faild(error.ERROR_PARAM)

        group = Data.select('player_group', [('id', '=', group_id)])
        if group == None:
            return self.send_faild(error.ERROR_DATA_NOT_FOUND)
        Data.update('player_group', [('id', '=', group_id)], {
            'name': name,
            'comment': comment
        })

        reply = {'commit': 1}
        self.send_ok(reply)
        return
コード例 #4
0
    def post(self):
        print('update_auth_template')
        admin_base = self.get_admin_base()
        if admin_base is None:
            return self.send_faild(error.ERROR_NO_LOGIN)
        if self.is_god() is False:
            return self.send_faild(error.ERROR_AUTH_PERMISSION)

        try:
            data = self.get_post_data()
            temp_id = data['temp_id']
            name = data['name']
            auth = data['auth']
            comment = data['comment']
        except Exception as e:
            print(e)
            return self.send_faild(error.ERROR_PARAM)

        params = {}
        params['name'] = name
        params['auth'] = auth
        params['comment'] = comment
        params['utime'] = int(time.time())

        Data.update('admin_temp', [('id', '=', temp_id)], params)

        result = {'commit': 1}

        self.send_ok(result)

        write_admin_record(operate_id=admin_base['id'],
                           operate_desc='修改权限模板',
                           temp_id=data['temp_id'])
        return
コード例 #5
0
    def post(self):
        print('delete_auth_template')
        admin_base = self.get_admin_base()
        if admin_base is None:
            return self.send_faild(error.ERROR_NO_LOGIN)
        if self.is_god() is False:
            return self.send_faild(error.ERROR_AUTH_PERMISSION)

        try:
            data = self.get_post_data()
            temp_id = data['temp_id']
        except Exception as e:
            print(e)
            return self.send_faild(error.ERROR_PARAM)

        res = Data.find('admin_temp', [('id', '=', temp_id)])
        if res is None:
            return self.send_faild(error.ERROR_DATA_NOT_FOUND)

        Data.update('admin_temp', [('id', '=', temp_id)], {'status': 1})

        result = {'commit': 1}

        self.send_ok(result)

        write_admin_record(operate_id=admin_base['id'],
                           operate_desc='删除权限模板',
                           temp_id=data['temp_id'])
        return
コード例 #6
0
    def post(self):
        player_base = self.get_player_base()
        if player_base is None:
            return self.send_faild(error.ERROR_NO_USER)

        try:
            data = self.get_post_data()
            imei = data['imei']
        except Exception as e:
            print(e)
            return self.send_faild(error.ERROR_PARAM)

        devinfo = dev_v3.get_dev_info(imei)
        if devinfo == None:
            return self.send_faild(error.ERROR_DEV_NOY_CONNECT_YET)

        device = Data.find('devices', [('imei', '=', imei)])
        if device:
            if device['user_id'] == '':
                Data.update('devices', [('imei', '=', imei)],
                            {'user_id': player_base['id']})
            else:
                return self.send_faild(error.ERROR_DEVICE_EXISTS)

        dev_v3.send_bind_status(imei)
        reply = {'commit': 1}
        self.send_ok(reply)
        return
コード例 #7
0
    def post(self):
        print('del_adv')
        admin_base = self.get_admin_base()
        if admin_base is None:
            return self.send_faild(error.ERROR_NO_LOGIN)
        if not self.is_god():
            return self.send_faild(error.ERROR_AUTH_PERMISSION)

        try:
            data = self.get_post_data()
            adv_id = data['adv_id']
        except Exception as e:
            print(e)
            return self.send_faild(error.ERROR_PARAM)
        info = Data.find('adv', [('id', '=', adv_id)])
        if info is None:
            return self.send_faild(error.ERROR_DATA_NOT_FOUND)

        if info['status'] == 0:
            status = 1
        else:
            status = 0

        Data.update('adv', [('id', '=', adv_id)], {'status': status})
        result = {'commit': 1}
        self.send_ok(result)
        write_admin_record(operate_id=admin_base['id'],
                           operate_desc='启用/禁用广告',
                           adv_id=adv_id)

        return
コード例 #8
0
    def check_user(self,player_base):
        player_info = Data.find(Relay.player,[('open_id','=',player_base['open_id'])])
        if player_info != None:
            Data.update(Relay.player,[('id','=',player_info['id'])],player_base)
        else:
            Data.insert(Relay.player,player_base)

        player_info = Data.find(Relay.player,[('open_id','=',player_base['open_id'])])
        return player_info['id']
コード例 #9
0
    def get(self):
        admin_base = self.get_admin_base()
        if admin_base == None:
            self.send_faild(error.ERROR_NO_LOGIN)
            return

        admin_id = admin_base['id']
        if admin_id in Relay.admin_token_dict:
            Relay.admin_token_dict[admin_id] = ''
        Data.update('admin', [('id', '=', admin_id)], {'token', '=', ''})
        return
コード例 #10
0
ファイル: block_issue.py プロジェクト: xyzmyall/spff_public
    def post(self):
        data = self.get_post_data()
        user_base = self.get_user_base(Relay.admin)
        if user_base == None:
            self.send_faild(error.ERROR_ADMIN_NO_LOGIN)
            return

        Data.update('case_info', [('id', '=', data['case_id'])],
                    {'is_show': status_can_show})
        self.send_ok({})
        return
コード例 #11
0
ファイル: relay.py プロジェクト: campanulamediuml/http_frame
    def remove_time_out_token(user_dict, connect_table):
        now_time = int(time.time())
        pop_list = []
        for token in user_dict:
            if now_time - user_dict[token] > config.token_time_out:
                pop_list.append(token)

        for token in pop_list:
            user_dict.pop(token)
            Data.update(connect_table, [('token', '=', token)], {'token': ''})
        return
コード例 #12
0
    def post(self):
        print('update_admin_detail')

        admin_base = self.get_admin_base()
        if admin_base is None:
            return self.send_faild(error.ERROR_NO_LOGIN)
        if self.is_god() is False:
            return self.send_faild(error.ERROR_AUTH_PERMISSION)

        try:
            data = self.get_post_data()
            admin_id = data['admin_id']
            status = data['status']
            auth_temp = data['admin_temp_id']
            comment = data['comment']
        except Exception as e:
            print(e)
            return self.send_faild(error.ERROR_PARAM)

        if admin_id == 1:
            print('初始账号不能改信息')
            return self.send_faild(error.ERROR_AUTH_PERMISSION)

        admin_info = Data.find('admin_auth', [('admin_id', '=', admin_id)])
        if admin_info is None:
            return self.send_faild(error.ERROR_NO_USER)

        god_info = Data.find('admin', [('id', '=', admin_id)])
        if god_info is None:
            return self.send_faild(error.ERROR_NO_USER)

        # 更新模板
        Data.update('admin_auth', [('id', '=', admin_id)], {'auth_id': auth_temp})

        god_info = {
            'utime': common.time_to_str(int(time.time())),
            'status': status,
            'comment': comment
        }

        try:
            Data.update('admin', [('id', '=', admin_id)], god_info)
        except Exception as e:
            print(e)
            return self.send_faild(error.ERROR_TIMEOUT)

        result = {
            'commit': 1
        }
        self.send_ok(result)

        write_admin_record(operate_id=admin_base['id'], operate_desc='更新管理员详情', admin_id=admin_id)
        return
コード例 #13
0
    def post(self):
        print('send_advphoto')
        admin_base = self.get_admin_base()
        if admin_base is None:
            self.send_faild(error.ERROR_NO_LOGIN)
        if not self.is_god():
            return self.send_faild(error.ERROR_AUTH_PERMISSION)

        try:
            data = self.get_post_data()
            adv_id = data['adv_id']
            pic_body = data['title']
        except Exception as e:
            print(e)
            return self.send_faild(error.ERROR_PARAM)

        adv_info = Data.find('adv', [('id', '=', adv_id)])
        if adv_info is None:
            return self.send_faild(error.ERROR_NO_USER)

        adv_id = adv_info['id']

        img_data = pic_body.split(',')[1]

        img_data = base64.b64decode(img_data)
        path = 'pics/' + common.get_file_md5(img_data) + '_title' + '.jpg'

        open(path, 'wb').write(img_data)

        title_line = Data.find('adv_photo', [('adv_id', '=', adv_id),
                                             ('is_title', '=', 1)])

        if title_line is None:
            params = {
                'adv_id': adv_id,
                'photo_url': config.logical_url + '/' + path.split('/')[-1],
            }
            Data.insert('adv_photo', params)
        else:
            params = {
                'photo_url': config.logical_url + '/' + path.split('/')[-1],
            }
            Data.update('adv_photo', [('adv_id', '=', adv_id)], params)
            # 记录进数据库

        reply = {'pic_done': 0}
        self.send_ok(reply)
        write_admin_record(operate_id=admin_base['id'],
                           operate_desc='上传广告图片',
                           adv_id=adv_id)

        return
コード例 #14
0
def update_pg_status(pg_once, machine_info):
    if machine_info['init_paid_pg'] != 0:
        params = {
            'init_paid_pg': machine_info['init_paid_pg'] - pg_once,
            'init_return_pg': machine_info['init_return_pg'] + pg_once,
        }
    else:
        params = {
            'addition_paid_pg': machine_info['addition_paid_pg'] - pg_once,
            'addition_return_pg': machine_info['addition_return_pg'] + pg_once,
        }
    # 更新返还质保金的记录
    Data.update('shop_machines', [('id', '=', machine_info['id'])], params)
コード例 #15
0
def kill_md():
    all_info = Data.select('case_info', [('id', '!=', 0)])
    for line in all_info:
        res = common.decode_base64(line['title'])
        # print(res)
        case_title_list = res.split('.')
        if len(case_title_list) >= 2:
            if case_title_list[1] == 'md':
                print(case_title_list[0])
                new_title = common.get_base64(
                    case_title_list[0].encode('utf-8'))
                Data.update('case_info', [('id', '=', line['id'])],
                            {'title': new_title})
コード例 #16
0
    def post(self):
        player_base = self.get_player_base()
        if player_base is None:
            return self.send_faild(error.ERROR_NO_USER)

        player_id = player_base['id']
        Data.update('player', [('id', '=', player_id)], {'token': ''})
        if player_id in Relay.player_token_dict:
            Relay.player_token_dict[player_id] = ''

        reply = {
            'logout': 'done!',
        }
        self.send_ok(reply)
        return
コード例 #17
0
def write_my_share(service_pac_rec, share_line):
    shop_info = Data.find('openluat_user',
                          [('id', '=', service_pac_rec['buy_shop_id'])])

    shop_share_info = Data.find(
        'shop_distr', [('user_id', '=', service_pac_rec['buy_shop_id'])])

    if service_pac_rec['can_upgrade'] == 1:
        params = {'upgrade_times': shop_share_info['upgrade_times'] + 1}
        Data.update('shop_distr',
                    [('user_id', '=', service_pac_rec['buy_shop_id'])], params)

    # shop_share_info = Data.find('shop_distr', [('user_id', '=', service_pac_rec['buy_shop_id'])])

    if shop_share_info['upgrade_times'] >= shop_share_info['max_upgrade_times']:
        shop_share = shop_share_info['shop_share_max'] - share_line[
            'arrival_share']
    else:
        shop_share = shop_share_info['shop_share_min'] - share_line[
            'arrival_share']

    #
    # arrival_share = (10000 - share_line['arrival_share']) / 10000

    arrival_share = (share_line['arrival_share'] *
                     service_pac_rec['cost']) / 10000
    # 保存到店消费

    print('arrival_share', arrival_share)
    shop_share_raw = (shop_share * service_pac_rec['cost']) / 10000
    print('shop_share_raw', shop_share_raw)

    distr_agent_params = {
        'user_id': service_pac_rec['buy_shop_id'],
        'share': int(shop_share_raw),
        # 到店分润要处理
        'withdraw_status': config.withdraw_status_no,
        'withdraw_type': config.shop_share,
        # 分润类型,业务员还是店铺
        'buy_time': service_pac_rec['buy_time'],
        # 分润时间
        'withdraw_id': service_pac_rec['id'],
        # 对应的那条用户消费的id
    }

    Data.insert('withdraw_record', distr_agent_params)
    print('门店自己的分润', distr_agent_params['share'])
    write_arrival_share(service_pac_rec, shop_share_raw, arrival_share)
コード例 #18
0
 def create_token(self, user_id, table_name):
     '''
     创建token
     :param user_id:
     :param table_name:
     :return:
     '''
     nonce_string = common.create_rand_string(12) + str(time.time())
     token = get_md5(nonce_string)
     params = {'token': token}
     Data.update(table_name, [('id', '=', user_id)], params)
     if table_name == 'admin':
         Relay.admin_login(user_id, token)
     if table_name == 'player':
         Relay.player_login(user_id, token)
     return token
コード例 #19
0
ファイル: client.py プロジェクト: campanulamediuml/iot_server
 def update_device_info(self, imei):
     dev_info = Data.find('dev_main', [('imei', '=', imei)])
     if dev_info == None:
         params = {
             'imei': imei,
             'last_connect_time': int(time.time()),
             'ctime': int(time.time())
         }
         Data.insert('dev_main', params)
     else:
         params = {
             'last_connect_time': int(time.time()),
         }
         Data.update('dev_main', [('imei', '=', imei)], params)
     # self.update_heartbeat()
     self.last_connect_time = int(time.time())
     # 更新设备信息
     return
コード例 #20
0
def return_pg(shop_id, service_info):
    total_pg = 0
    if_return = Data.select('shop_machines', [('shop_id', '=', shop_id),
                                              ('paid_pg', '!=', 0),
                                              ('had_return_pg', '=', 0)])
    if if_return:
        for info in if_return:
            total_pg += info['paid_pg']

    machine_setting = Data.find('shop_machine_setting',
                                [('shop_id', '=', shop_id)])

    if total_pg != 0:
        params = {'bought_rt_times': machine_setting['bought_rt_times'] + 1}
        Data.update('shop_machine_setting', [('shop_id', '=', shop_id)],
                    params)
        machine_setting['bought_rt_times'] += 1
        # 保证金不等于的情况下才能统计次数

    # 获取当前可退质保金店铺的次数
    can_upgrade = Data.find('shop_distr',
                            [('user_id', '=', shop_id)])['return_pg_times']

    return_pg_rec = Data.select('withdraw_record',
                                [('user_id', '=', shop_id),
                                 ('withdraw_type', '=', config.pg_return)])
    if return_pg_rec is None:
        length = 0
    else:
        length = len(return_pg_rec)
    # 记录返还过几次保证金
    #
    can_return_times = int(machine_setting['bought_rt_times'] /
                           int(can_upgrade))

    if can_return_times > length:
        # can_return_pg = Data.select('shop_machines',
        #                             [('shop_id', '=', shop_id), ('paid_pg', '!=', 0), ('had_return_pg', '=', 0)])
        # if can_return_pg:
        Data.update('shop_machines', [('id', '=', int(if_return[0]['id']))],
                    {'had_return_pg': 1})
        insert_return_pg_rec(shop_id, if_return[0]['paid_pg'],
                             service_info['id'])
コード例 #21
0
    def update(self, table, conditions, params):
        if table in self.data_all:
            table_content = self.data_all[table]

            table_id_list = []
            tmp = []
            if conditions == []:
                for line in table_content:
                    table_id_list.append(line['id'])
                    tmp.append(line)

            else:
                for line in table_content:
                    if judge(line, conditions) == True:
                        table_id_list.append(line['id'])
                        tmp.append(line)

            Data.update(table, conditions, params)

            for line in tmp:
                self.data_all[table].remove(line)

            for i in table_id_list:
                res = Data.find(table, [('id', '=', i)])
                for line in table_content:
                    if line['id'] > res['id']:
                        line_index = table_content.index(line)
                        if line_index == 0:
                            tail = [res] + table_content
                        else:
                            tail = table_content[:line_index] + [
                                res
                            ] + table_content[line_index:]
                        break
                table_content = tail

            self.data_all[table] = table_content

        else:
            Data.update(table, conditions, params)
            self.data_all[table] = Data.select(table, [])

        return
コード例 #22
0
    def post(self):
        data = self.get_post_data()
        user_base = self.get_user_base(Relay.admin)
        if user_base == None:
            self.send_faild(error.ERROR_ADMIN_NO_LOGIN)
            return

        res = admin_tool.upload_case(data, user_base)
        data_id_old = data['case_id']
        # 上传信息,并且block旧的信息
        Data.update('case_info', [('id', '=', data_id_old)],
                    {'is_show': status_canot_show})
        if res != None:
            self.send_ok({})
            http_tools.write_event_post_item(data, res)
            print('download_done!')
            return
        else:
            self.send_faild(error.ERROR_FAIL)
            return
コード例 #23
0
    def update_devices_info(self):
        res = Data.find('CWS_APP.devices', [('imei', '=', self.imei)])
        if res == None:
            self.create_device()

        # 创建全新的设备信息
        report = {
            'imei': self.get_imei(),
            'lng': self.get_pos()[0],
            'lat': self.get_pos()[1],
            'time': common.time_to_str(int(time.time())),
            'status': 'heart',
        }
        resp = Data.find('CWS_APP.latestreport', [('imei', '=', self.imei)])
        if resp == None:
            Data.insert('CWS_APP.latestreport', report)
        else:
            Data.update('CWS_APP.latestreport', [('imei', '=', self.imei)],
                        report)
            print(self.get_imei(), '写入通讯表')
        return
コード例 #24
0
ファイル: change_pw.py プロジェクト: douer-7/spff_public
    def post(self):
        data = self.get_post_data()
        # character = data['character']
        character = 'admin'
        user_base = self.get_user_base(character)
        if user_base == None:
            self.send_faild(error.ERROR_ADMIN_NO_LOGIN)
            return

        if data['pw_1'] != data['pw_2']:
            self.send_faild(error.ERROR_PW_DIFF)
            return

        if common.get_md5(data['pw_old']) != user_base['pwhash']:
            self.send_faild(error.ERROR_PW_ERROR)
            return

        params = {'pwhash': common.get_md5(data['pw_1'])}
        Data.update(character, [('id', '=', user_base['id'])], params)
        self.send_ok({})
        return
コード例 #25
0
    def post(self):
        print('delete_admin')
        admin_base = self.get_admin_base()
        if admin_base is None:
            return self.send_faild(error.ERROR_NO_LOGIN)
        if self.is_god() is False:
            return self.send_faild(error.ERROR_AUTH_PERMISSION)

        try:
            data = self.get_post_data()
            admin_id = data['admin_id']
        except Exception as e:
            print(e)
            return self.send_faild(error.ERROR_PARAM)

        admin_info = Data.find('admin_auth', [('id', '=', admin_id)])
        if admin_info is None:
            return self.send_faild(error.ERROR_NO_USER)

        god_info = Data.find('admin', [('id', '=', admin_info['god_id'])])
        if god_info['status'] == 0:
            params = {
                'utime': common.time_to_str(int(time.time())),
                'status': 1,
            }
            Data.update('admin', [('id', '=', admin_info['god_id'])], params)
        else:
            params = {
                'utime': common.time_to_str(int(time.time())),
                'status': 0,
            }
            Data.update('admin', [('id', '=', admin_info['god_id'])], params)

        result = {
            'commit': 1
        }
        self.send_ok(result)

        write_admin_record(operate_id=admin_base['id'], operate_desc='禁用/启用管理员', admin_id=admin_id)
        return
コード例 #26
0
    def post(self):
        player_base = self.get_player_base()
        if player_base is None:
            return self.send_faild(error.ERROR_NO_USER)
        try:
            data = self.get_post_data()
            phone = data['phone']
        except Exception as e:
            print(e)
            return self.send_faild(error.ERROR_PARAM)

        player = Data.find('player',[('id','=',player_base['id'])])
        if player is None:
            return self.send_faild(error.ERROR_NO_USER)

        Data.update('player',[('id', '=', player_base['id'])],{'phone':phone})

        reply = {
            'commit':1
        }
        self.send_ok(reply)
        return
コード例 #27
0
ファイル: change_pw.py プロジェクト: xyzmyall/spff_public
    def post(self):
        data = self.get_post_data()
        # character = data['character']
        character='admin'
        user_base = self.get_user_base(character)
        if user_base == None:
            self.send_faild(error.ERROR_ADMIN_NO_LOGIN)
            return

        if data['pw_1'] != data['pw_2']:
            self.send_faild(error.ERROR_PW_DIFF)
            return

        if admin_tool.check_pw(user_base,data['pw_old']) is False:
            self.send_faild(error.ERROR_PW_ERROR)
            return

        params = {
            'pwhash':admin_tool.create_pw(data['pw_1'])
        }
        Data.update(character,[('id','=',user_base['id'])],params)
        self.send_ok({})
        return
コード例 #28
0
ファイル: check_case.py プロジェクト: xyzmyall/spff_public
    def post(self):
        admin_info = self.get_user_base(character=Relay.admin)
        if admin_info == None:
            self.send_faild(error.ERROR_ADMIN_NO_LOGIN)
            return
        data = self.get_post_data()
        case_id = data['case_id']
        # case_status = data['case_status']
        res = Data.find('case_info',[('id','=',case_id),('is_verified','=',status_unverify)])
        if res == None:
            self.send_faild(error.ERROR_NO_RESULT)
            return
        params = {
            'is_verified':status_verified,
            'verifyer':admin_info['id']
        }
        Data.update('case_info',[('id','=',case_id),('is_verified','=',status_unverify)],params)
        if Data.find('case_info',[('id','=',case_id),('is_verified','=',status_verified)]) == None:
            self.send_faild(error.ERROR_FAIL)
            return

        self.send_ok({})
        return
コード例 #29
0
    def post(self):
        print('update_adv')
        admin_base = self.get_admin_base()
        if admin_base is None:
            return self.send_faild(error.ERROR_NO_LOGIN)
        if not self.is_god():
            return self.send_faild(error.ERROR_AUTH_PERMISSION)

        try:
            data = self.get_post_data()
            adv_id = data['adv_id']
            adv_name = data['adv_name']
            postion = data['postion']
            url = data['url']
            comment = data['comment']
            status = data['status']
        except Exception as e:
            print(e)
            return self.send_faild(error.ERROR_PARAM)

        adv_info = {}
        adv_info['adv_name'] = adv_name
        adv_info['postion'] = postion

        adv_info['utime'] = int(time.time())
        adv_info['comment'] = comment
        adv_info['status'] = status

        Data.update('adv', [('id', '=', adv_id)], adv_info)
        result = {'commit': 1}
        self.send_ok(result)
        write_admin_record(operate_id=admin_base['id'],
                           operate_desc='修改广告',
                           adv_id=adv_id)

        return
コード例 #30
0
ファイル: relay.py プロジェクト: douer-7/spff_public
 def logout(user_id, character):
     user_dict = Relay.token_dict_collection[character]
     Relay.remove_token(user_dict, user_id)
     Data.update(character, [('id', '=', user_id)], {'token': ''})
     return