Esempio n. 1
0
def set_bd_restaurant_director(user_id, rst_ids, notice_enabled=True, in_charge=True):
    old_rst_dir = rst_dir_base.query_restaurant_director(director_ids=[user_id], offset=0, limit=1000)
    new_rst_dir = rst_dir_base.query_restaurant_director(restaurant_ids=rst_ids, offset=0, limit=1000)

    old_rst_ids = [rst_dir.restaurant_id for rst_dir in old_rst_dir]
    new_rst_ids = [rst_dir.restaurant_id for rst_dir in new_rst_dir]
    rm_rst_ids = _diff(old_rst_ids, new_rst_ids)
    add_rst_ids = _diff(new_rst_ids, old_rst_ids)

    rst_dir_base.rm_restaurant_director(user_id, rm_rst_ids)
    rst_dir_base.set_restaurant_director(user_id, add_rst_ids, notice_enabled, in_charge)
Esempio n. 2
0
def change_director_region(user_id, old_region, new_region):
    city_diff = _diff(old_region.city_ids, new_region.city_ids)
    region_group_diff = _diff(old_region.region_group_ids, new_region.region_group_ids)
    region_diff = _diff(old_region.region_ids, new_region.region_ids)

    query_dict = {}
    if city_diff:
        query_dict["city_ids"] = city_diff
    if region_group_diff:
        query_dict["region_group_ids"] = region_group_diff
    if region_diff:
        query_dict["region_ids"] = region_diff

    if not query_dict:
        return

    dir_records = rst_dir_base.query_restaurant_director(director_ids=[user_id], offset=0, limit=1000)
    dir_rst_ids = [d.restaurant_id for d in dir_records]
    query_dict["restaurant_ids"] = dir_rst_ids
    query_dict["offset"] = 0
    query_dict["limit"] = 1000

    restaurants = rst_dir_base.search_restaurants(**query_dict)
    rst_ids = [r["id"] for r in restaurants[0]]
    rst_dir_base.rm_restaurant_director(user_id, rst_ids)
Esempio n. 3
0
def change_director_region(user_id, old_region, new_region):
    city_diff = _diff(old_region.city_ids, new_region.city_ids)
    region_group_diff = _diff(old_region.region_group_ids,
                              new_region.region_group_ids)
    region_diff = _diff(old_region.region_ids, new_region.region_ids)

    query_dict = {}
    if city_diff:
        query_dict['city_ids'] = city_diff
    if region_group_diff:
        query_dict['region_group_ids'] = region_group_diff
    if region_diff:
        query_dict['region_ids'] = region_diff

    if not query_dict:
        return

    dir_records = rst_dir_base.query_restaurant_director(
        director_ids=[user_id], offset=0, limit=1000)
    dir_rst_ids = [d.restaurant_id for d in dir_records]
    query_dict['restaurant_ids'] = dir_rst_ids
    query_dict['offset'] = 0
    query_dict['limit'] = 1000

    restaurants = rst_dir_base.search_restaurants(**query_dict)
    rst_ids = [r['id'] for r in restaurants[0]]
    rst_dir_base.rm_restaurant_director(user_id, rst_ids)
Esempio n. 4
0
def get_notifications(args):
    city_ids, region_group_ids, region_ids = get_direct_struct()

    if city_ids == [] and region_ids == [] and region_ids == []:
        return [], 0

    rst_id = args.pop('restaurant_id', None)
    if rst_id is not None:
        args['restaurant_ids'] = [rst_id]

    page_no, page_size = get_paging_params()
    restaurants, total_num = director_base.search_restaurants(
        city_ids=city_ids, region_group_ids=region_group_ids,
        region_ids=region_ids, offset=(page_no - 1) * page_size,
        limit=page_size, **args)

    if not restaurants:
        return [], 0

    restaurant_ids = [r['id'] for r in restaurants]
    city_ids = list(set([r['city_id'] for r in restaurants]))
    notifications = director_base.query_restaurant_director(
        restaurant_ids, [current_user.id, ])
    notification_map = {n.restaurant_id: [n.notice_enabled, n.in_charge]
                        for n in notifications}

    result = []
    city_map = city_base.mget(city_ids, return_map=True)
    for restaurant in restaurants:
        if city_map.get(restaurant['city_id'], None) is None:
            continue

        with thrift_client('ers') as ers:
            try:
                region = ers.get_region_by_restaurant(restaurant['id'])
                region_name = region.name
            except Exception as e:
                region_name = ''
                region_group_name = ''
            else:
                try:
                    region_group_name = ers.get_region_group_by_region(
                        region.id).name
                except Exception as e:
                    region_group_name = ''

        result.append({
            'restaurant_id': restaurant['id'],
            'restaurant_name': restaurant['name'],
            'city_id': restaurant['city_id'],
            'city_name': city_map[restaurant['city_id']].name,
            'region_group_name': region_group_name,
            'region_name': region_name,
            'notice_enabled': notification_map.get(restaurant['id'], [0])[0],
            'in_charge': notification_map.get(restaurant['id'], [None, 0])[1]
        })

    return result, total_num
Esempio n. 5
0
def get_director_rst_map():
    rv = defaultdict(list)
    offset = 0
    limit = thirdparty_svc.ers.MAX_LIST_SIZE
    while True:
        records = rst_dir_base.query_restaurant_director(offset=offset,
                                                         limit=limit)
        for record in records:
            rv[record.director_id].append(record.restaurant_id)

        if len(records) < limit:
            break
        offset += limit

    return rv
Esempio n. 6
0
def get_director_rst_map():
    rv = defaultdict(list)
    offset = 0
    limit = thirdparty_svc.ers.MAX_LIST_SIZE
    while True:
        records = rst_dir_base.query_restaurant_director(
            offset=offset,
            limit=limit
        )
        for record in records:
            rv[record.director_id].append(record.restaurant_id)

        if len(records) < limit:
            break
        offset += limit

    return rv
Esempio n. 7
0
def get_notifications(args):
    city_ids, region_group_ids, region_ids = get_direct_struct()

    if city_ids == [] and region_ids == [] and region_ids == []:
        return [], 0

    rst_id = args.pop('restaurant_id', None)
    if rst_id is not None:
        args['restaurant_ids'] = [rst_id]

    page_no, page_size = get_paging_params()
    restaurants, total_num = director_base.search_restaurants(
        city_ids=city_ids,
        region_group_ids=region_group_ids,
        region_ids=region_ids,
        offset=(page_no - 1) * page_size,
        limit=page_size,
        **args)

    if not restaurants:
        return [], 0

    restaurant_ids = [r['id'] for r in restaurants]
    city_ids = list(set([r['city_id'] for r in restaurants]))
    notifications = director_base.query_restaurant_director(
        restaurant_ids, [
            current_user.id,
        ])
    notification_map = {
        n.restaurant_id: [n.notice_enabled, n.in_charge]
        for n in notifications
    }

    result = []
    city_map = city_base.mget(city_ids, return_map=True)
    for restaurant in restaurants:
        if city_map.get(restaurant['city_id'], None) is None:
            continue

        with thrift_client('ers') as ers:
            try:
                region = ers.get_region_by_restaurant(restaurant['id'])
                region_name = region.name
            except Exception as e:
                region_name = ''
                region_group_name = ''
            else:
                try:
                    region_group_name = ers.get_region_group_by_region(
                        region.id).name
                except Exception as e:
                    region_group_name = ''

        result.append({
            'restaurant_id':
            restaurant['id'],
            'restaurant_name':
            restaurant['name'],
            'city_id':
            restaurant['city_id'],
            'city_name':
            city_map[restaurant['city_id']].name,
            'region_group_name':
            region_group_name,
            'region_name':
            region_name,
            'notice_enabled':
            notification_map.get(restaurant['id'], [0])[0],
            'in_charge':
            notification_map.get(restaurant['id'], [None, 0])[1]
        })

    return result, total_num
Esempio n. 8
0
def get_restaurant_director_ids(restaurant_id):
    records = rst_dir_base.query_restaurant_director(restaurant_ids=[restaurant_id])

    return [r.director_id for r in records if r.in_charge == 1]
Esempio n. 9
0
def get_restaurant_director_ids(restaurant_id):
    records = rst_dir_base.query_restaurant_director(
        restaurant_ids=[restaurant_id])

    return [r.director_id for r in records if r.in_charge == 1]