Beispiel #1
0
def get_finance_car_series_county_info(city_id=None, car_series_id=None):
    """
        根据城市ID和车系ID返回销售对应车系的经销商所在的
        每个县区的经销商数量和信息

        参数
        ----
        city_id : int
            城市ID
        car_series_id : int
            车系ID

        返回值
        ------
        result_dict : dict
            返回每个县区的经销商数量和信息,还有所有符合条件的经销商总数
    """
    city_id = common_utils.to_int(city_id)
    car_series_id = common_utils.to_int(car_series_id)

    dealer_id_list = dealer_utils.get_dealer_id_list(
        city_id=city_id, car_series_id=car_series_id)
    if not dealer_id_list:
        return None
    price_sql_template = '''
        SELECT 
            b.county_id AS county_id, b.county_name, 
            count(a.id) AS dealer_count
        FROM 
            t_base_dealer AS a,
            t_base_county AS b
        WHERE 
            a.id in ({{dealer_id_list}})
            AND a.county_id=b.county_id
            AND a.is_enable=1
            AND a.is_frozen=0
            AND b.is_enable=1
            AND b.is_show=1
        GROUP BY
            a.county_id
        ORDER BY
            a.county_id
    '''
    price_param = {
        'dealer_id_list': common_utils.int_list_to_str(dealer_id_list),
    }
    price_sql = Template(price_sql_template).render(price_param)
    cursor = connection().cursor()
    cursor.execute(price_sql, price_param)
    county_list = dictfetchall(cursor)
    if not county_list:
        return None
    result_dict = {
        'county_list': county_list,
    }
    county_count = 0
    for county in county_list:
        county_count += county['dealer_count']
    result_dict['county_count'] = county_count
    return result_dict
Beispiel #2
0
def get_car_type_price_property(city_id=None, car_type_id=None):
    """
        根据城市ID和车型ID获取基本数据、报价和全部参数

        参数
        ----
        city_id : int
            城市ID
        car_type_id : int
            车型ID

        返回值
        ------
        result_list : list
            返回车型基本数据、报价和全部参数
    """
    city_id = common_utils.to_int(city_id)
    car_type_id = common_utils.to_int(car_type_id)
    car_type = car_type_utils.get_cartype_by_id(car_type_id=car_type_id)
    if not car_type:
        return None

    offer_price = offer_price_utils.get_offerprice(city_id=city_id,
                                                   car_type_id=car_type_id)
    car_type['offer_price'] = offer_price
    car_type['property'] = get_car_type_all_property(car_type_id)
    return car_type
Beispiel #3
0
def get_dealer_id_list_by_car(car_brand_id=None,
                              car_series_id=None):
    """
        根据县区ID查找
    """
    car_brand_id = common_utils.to_int(car_brand_id)
    car_series_id = common_utils.to_int(car_series_id)
    dealer_sql_template = '''
        SELECT 
            id
        FROM 
            t_base_dealer
        WHERE 
            is_enable=1
            AND is_frozen=0
            {% if car_series_id %} 
                AND car_series_ids like '%,{{car_series_id}},%'
            {% elif car_brand_id %} 
                AND cbb_car_brand_code like '%,{{car_brand_id}},%'
            {% endif %}
    '''
    param = {
        'car_brand_id': car_brand_id,
        'car_series_id': car_series_id,
    }
    dealer_sql = Template(dealer_sql_template).render(param)
    cursor = connection().cursor()
    cursor.execute(dealer_sql)
    dealer_list = dictfetchall(cursor)
    if not dealer_list:
        return None
    dealer_id_list = []
    for tmp_dealer in dealer_list:
        dealer_id_list.append(tmp_dealer['id'])
    return dealer_id_list
Beispiel #4
0
def get_dealer_city_activity(city_id=None, activity_type=1, count=6):
    """
        通过城市ID和活动类型返回同城经销商活动

        参数
        ----
        city_id : int
            城市ID
        activity_type : {1, 2}
            1促销活动,2店头活动
        count : int
            获取活动的数量

        返回值
        ------
        result_list : list
            返回排好序的活动数组
    """
    city_id = common_utils.to_int(city_id)
    activity_type = common_utils.to_int(activity_type)
    count = common_utils.max_int(count)
    activity_ids = list_objs(model=ModelName.T_BASE_MEDIA_ACTIVITY,
                             is_enable=1,
                             orderby=['-created_date'],
                             count=count,
                             activity_type=activity_type,
                             city_id=city_id)
    activity_ids = activity_ids.values_list('id', flat=True)
    activity_list = []
    for activity_id in activity_ids:
        tmp_activity = activity_utils.get_activity_by_id(
            activity_id=activity_id)
        activity_list.append(tmp_activity)
    return activity_list
Beispiel #5
0
def get_finance_car_series_list(dealer_id=None):
    """
        通过经销商ID获取经销商当前在售车系

        参数
        ----
        dealer_id : int
            经销商ID

        返回值
        ------
        result_list : list
            返回在售车系数组
    """
    dealer_id = common_utils.to_int(dealer_id)
    dealer = dealer_utils.get_dealer_by_id(dealer_id=dealer_id)
    car_series_id_list = dealer['car_series_ids']
    if not car_series_id_list:
        return None
    result_list = []
    for car_series_id in car_series_id_list:
        car_series = car_series_utils.get_carseries_by_id(
            car_series_id=car_series_id)
        if not car_series:
            continue
        result_list.append(car_series)
    if result_list:
        result_list = sorted(
            result_list,
            key=lambda tmp_car_series:
            (common_utils.to_int(tmp_car_series['start_guideprice']), ))
    return result_list
Beispiel #6
0
def get_offerprice_by_model(offer_price=None):
    discount = common_utils.to_positive(offer_price.discount)
    offer_price_dict = {
        'id': offer_price.id,
        'dealer_id': offer_price.dealer_id,
        'car_type_id': offer_price.car_type_id,
        'car_series_id': offer_price.car_series_id,
        'car_brand_id': offer_price.car_brand_id,
        'public_offer_price': offer_price.public_offer_price,
        'purchase_tax': offer_price.purchase_tax,
        'comercial_insurance': offer_price.comercial_insurance,
        'compulsory_insurance': offer_price.compulsory_insurance,
        'insurance_off': offer_price.insurance_off,
        'travel_tax': offer_price.travel_tax,
        'lisence_cost': offer_price.lisence_cost,
        'other_cost': offer_price.other_cost,
        'province_id': common_utils.to_int(offer_price.province_id),
        'city_id': common_utils.to_int(offer_price.city_id),
        'county_id': common_utils.to_int(offer_price.county_id),
        'discount': discount,
        'price': offer_price.public_offer_price,
        'guide_price': (offer_price.public_offer_price + discount),
    }
    if offer_price.car_type_id:
        tmp_car_type = car_type_utils.get_cartype_by_id(
            car_type_id=offer_price.car_type_id)
        if tmp_car_type:
            offer_price_dict['guide_price'] = tmp_car_type['guide_price']
    return offer_price_dict
Beispiel #7
0
def get_finance_county_brand_dealer(county_id=None,
                                    car_brand_id=None,
                                    per_page=10,
                                    page=1):
    """
        根据县区ID和品牌ID返回经销商信息
        先按VIP排序再按评分排序

        参数
        ----
        county_id : int
            县区ID
        car_brand_id : int
            品牌ID
        per_page : int
            当前页返回的数据数量
        page : int
            页码

        返回值
        ------
        result_list : list
            返回经销商数组
    """
    (offset, count) = common_utils.offset_count(per_page=per_page, page=page)
    county_id = common_utils.to_int(county_id)
    car_brand_id = common_utils.to_int(car_brand_id)

    dealer_id_list = dealer_utils.get_dealer_id_list(county_id=county_id,
                                                     car_brand_id=car_brand_id)
    if not dealer_id_list:
        return None
    dealer_sql_template = '''
        SELECT 
            id, (pre_sales_score+after_sales_score)/2 as sales_score 
        FROM 
            t_base_dealer
        WHERE 
            is_enable=1
            AND is_frozen=0
            AND id in ({{dealer_id_list}})
        ORDER BY 
            is_vip desc, sales_score desc
        LIMIT 
            %(offset)s, %(count)s
    '''
    param = {
        'dealer_id_list': common_utils.int_list_to_str(dealer_id_list),
        'offset': offset,
        'count': count,
    }
    dealer_sql = Template(dealer_sql_template).render(param)
    cursor = connection().cursor()
    cursor.execute(dealer_sql, param)
    dealers = dictfetchall(cursor)
    result_list = []
    for dealer in dealers:
        dealer = dealer_utils.get_dealer_by_id(dealer_id=dealer['id'])
        result_list.append(dealer)
    return result_list
Beispiel #8
0
def get_offerprice(city_id=None,
                   dealer_id=None,
                   dealer_id_list=None,
                   car_series_id=None,
                   car_type_id=None):
    """
        根据城市ID或者经销商ID或者车系ID或者车型ID返回最低报价,
        车系ID和车型ID必选一个

        参数
        ----
        city_id : int, 可选
            城市ID
        dealer_id : int, 可选
            经销商ID
        dealer_id_list : list, 可选
            经销商ID数组
        car_series_id : int, 可选
            车系ID
        car_type_id : int, 可选
            车型ID

        返回值
        ------
        result_dict : dict
            返回最低报价
    """
    city_id = common_utils.to_int(city_id)
    dealer_id = common_utils.to_int(dealer_id)
    dealer_id_list = str2array(dealer_id_list)
    car_series_id = common_utils.to_int(car_series_id)
    car_type_id = common_utils.to_int(car_type_id)
    if car_type_id:
        if dealer_id:
            return get_offerprice_by_type_dealer(car_type_id=car_type_id,
                                                 dealer_id=dealer_id)
        elif dealer_id_list:
            return get_offerprice_by_type_dealer_list(
                car_type_id=car_type_id, dealer_id_list=dealer_id_list)
        elif city_id:
            return get_offerprice_by_type_city(car_type_id=car_type_id,
                                               city_id=city_id)
        else:
            return get_offerprice_by_type(car_type_id=car_type_id)
    elif car_series_id:
        if dealer_id:
            return get_offerprice_by_series_dealer(car_series_id=car_series_id,
                                                   dealer_id=dealer_id)
        elif dealer_id_list:
            return get_offerprice_by_series_dealer_list(
                car_series_id=car_series_id, dealer_id_list=dealer_id_list)
        elif city_id:
            return get_offerprice_by_series_city(car_series_id=car_series_id,
                                                 city_id=city_id)
        else:
            return get_offerprice_by_series(car_series_id=car_series_id)

    else:
        return get_offerprice_none()
Beispiel #9
0
def get_city_car_type_dealer_count(city_id=None, car_type_id=None):
    """
        PC端车型页面
        返回对应城市ID和车型ID在各个县区的经销商的数量

        参数
        ----
        city_id : int
            城市ID
        car_type_id : int
            车型ID

        返回值
        ------
        result_list : list
            返回县区的ID,名字和各个县区的经销商数量
    """
    city_id = common_utils.to_int(city_id)
    car_type_id = common_utils.to_int(car_type_id)

    car_type = car_type_utils.get_cartype_by_id(car_type_id=car_type_id)
    if not car_type:
        return None

    dealer_id_list = dealer_utils.get_dealer_id_list(
        city_id=city_id, car_series_id=car_type['car_series_id'])
    if not dealer_id_list:
        return None

    price_sql_template = '''
        SELECT 
            b.county_id AS county_id, b.county_name, 
            count(a.id) AS dealer_count
        FROM 
            t_base_dealer AS a,
            t_base_county AS b
        WHERE 
            a.county_id=b.county_id
            AND a.is_enable=1
            AND a.is_frozen=0
            AND b.is_enable=1
            AND b.is_show=1
            AND a.id in ({{dealer_id_list}})
        GROUP BY
            a.county_id
    '''
    price_param = {
        'dealer_id_list': common_utils.int_list_to_str(dealer_id_list),
    }
    price_sql = Template(price_sql_template).render(price_param)
    cursor = connection().cursor()
    cursor.execute(price_sql, price_param)
    price_list = dictfetchall(cursor)
    if not price_list:
        return None

    return price_list
Beispiel #10
0
def get_dealer_activity_series_car_types(dealer_id=None, car_series_id=None):
    """
        WAP端经销商活动页面
        根据经销商ID和车系ID获取所有车型和报价,还有车系的经销商最低价最高价

        参数
        ----
        dealer_id : int
            经销商ID
        car_series_id : int
            车系ID

        返回值
        ------
        result_dict : dict
            返回所有车型和报价,还有车系的经销商最低价最高价
    """
    dealer_id = common_utils.to_int(dealer_id)
    car_series_id = common_utils.to_int(car_series_id)
    car_types = list_objs(model=ModelName.T_BASE_CAR_TYPE,
                          orderby=['guide_price'],
                          is_enable=1,
                          is_show=1,
                          car_series_id=car_series_id)
    if not car_types:
        return None
    car_type_list = []
    car_type_price_min = 99999999
    car_type_price_max = 0
    for car_type in car_types:
        tmp_car_type = car_type_utils.get_cartype_by_id(
            car_type_id=car_type.id)
        if not tmp_car_type:
            continue
        tmp_offer_price = offer_price_utils.get_offerprice(
            dealer_id=dealer_id, car_type_id=car_type.id)
        tmp_car_type['offer_price'] = tmp_offer_price
        car_type_list.append(tmp_car_type)
        # car type price
        if tmp_car_type['offer_price']['price'] < car_type_price_min:
            car_type_price_min = tmp_car_type['offer_price']['price']
        if tmp_car_type['offer_price']['price'] > car_type_price_max:
            car_type_price_max = tmp_car_type['offer_price']['price']
    result_dict = {
        'series':
        car_series_utils.get_carseries_by_id(car_series_id=car_series_id),
        'car_type_list': car_type_list
    }
    activity_list = activity_utils.get_activity_list_by_dealer_series(
        dealer_id=dealer_id, car_series_id=car_series_id)
    result_dict['series']['activity_list'] = activity_list
    result_dict['series']['car_type_price_min'] = car_type_price_min
    result_dict['series']['car_type_price_max'] = car_type_price_max
    return result_dict
Beispiel #11
0
def get_offerprice_by_type_dealer(car_type_id=None, dealer_id=None):
    car_type_id = common_utils.to_int(car_type_id)
    dealer_id = common_utils.to_int(dealer_id)
    try:
        offer_price = list_objs(
            model=ModelName.T_BASE_OFFER_PRICE,
            orderby=['public_offer_price', '-created_date'],
            is_enable=1,
            car_type_id=car_type_id,
            dealer_id=dealer_id)[0]
    except IndexError:
        return get_offerprice_none_type(car_type_id=car_type_id)
    offer_price_dict = get_offerprice_by_model(offer_price=offer_price)
    return offer_price_dict
Beispiel #12
0
def get_activity_list_by_dealer(dealer_id=None, activity_type=2):
    dealer_id = common_utils.to_int(dealer_id)
    activity_type = common_utils.to_int(activity_type)
    activity_ids = list_objs(model=ModelName.T_BASE_MEDIA_ACTIVITY,
                             is_enable=1,
                             orderby=['-created_date'],
                             count=MAX_ACTIVITY_COUNT,
                             activity_type=activity_type,
                             dealer_id=dealer_id)
    activity_ids = activity_ids.values_list('id', flat=True)
    activity_list = []
    for activity_id in activity_ids:
        tmp_activity = get_activity_by_id(activity_id=activity_id)
        activity_list.append(tmp_activity)
    return activity_list
Beispiel #13
0
def get_dealer_id_list_by_multy_city(city_id=None,
                                     car_brand_id=None,
                                     car_series_id=None):
    """
        查找 sale_city_ids 为多个城市 '4,123,456,'
    """
    city_id = common_utils.to_int(city_id)
    car_brand_id = common_utils.to_int(car_brand_id)
    car_series_id = common_utils.to_int(car_series_id)
    dealer_sql_template = '''
        SELECT 
            id
        FROM 
            t_base_dealer
        WHERE 
            is_enable=1
            AND is_frozen=0
            {% if city_id %} 
                AND sale_city_ids like '4%,{{city_id}},%'
            {% endif %}
            {% if car_series_id %} 
                AND car_series_ids like '%,{{car_series_id}},%'
            {% elif car_brand_id %} 
                AND cbb_car_brand_code like '%,{{car_brand_id}},%'
            {% endif %}
    '''
    param = {
        'city_id': city_id,
        'car_brand_id': car_brand_id,
        'car_series_id': car_series_id,
    }
    dealer_sql = Template(dealer_sql_template).render(param)
    cursor = connection().cursor()
    cursor.execute(dealer_sql)
    dealer_list = dictfetchall(cursor)
    if not dealer_list:
        # 查找 sale_city_ids 售全省 '2,123'
        city_info = place_utils.get_city_by_id(city_id=city_id)
        if not city_info:
            return None
        province_id = city_info['province_id']
        return get_dealer_id_list_by_sale_province(province_id=province_id,
                                                   car_brand_id=car_brand_id,
                                                   car_series_id=car_series_id)
    dealer_id_list = []
    for tmp_dealer in dealer_list:
        dealer_id_list.append(tmp_dealer['id'])
    return dealer_id_list
Beispiel #14
0
def get_cartype_tax_insurance(car_type_id=0):
    # 获取排量
    displacement = 1600
    sql = """
        SELECT property_value
        FROM e4sdb_data.t_base_car_type_property
        where property_id in
            (SELECT id FROM e4sdb_data.t_base_car_type_property_template
            where property_key in ('pailiang_cc'))
            and car_type_id = %(car_type_id)s;
    """

    params = {}
    params['car_type_id'] = car_type_id
    item = db.fetchone(sql, params)
    if item and item['property_value']:
        displacement = to_int(item['property_value'])

    rtn = {'travel_tax': 0, 'travel_insurance': 950, 'busi_insurance': 2065}

    if displacement in range(1, 1001):
        rtn['travel_tax'] = 180
    elif displacement in range(1001, 1601):
        rtn['travel_tax'] = 360
    elif displacement in range(1601, 2001):
        rtn['travel_tax'] = 420
    elif displacement in range(2001, 2501):
        rtn['travel_tax'] = 720
    elif displacement in range(3001, 4001):
        rtn['travel_tax'] = 3000
    elif displacement > 4000:
        rtn['travel_tax'] = 4500

    return rtn
Beispiel #15
0
def get_dealer_promotion_activity(dealer_id=None, count=5):
    """
        通过经销商ID获取经销商促销活动,按创建时间排序

        参数
        ----
        dealer_id : int
            经销商ID
        count : int
            获取促销活动的数量

        返回值
        ------
        result_list : list
            返回排好序的促销活动数组
    """
    dealer_id = common_utils.to_int(dealer_id)
    count = common_utils.max_int(count)
    activity_ids = list_objs(model=ModelName.T_BASE_MEDIA_ACTIVITY,
                             is_enable=1,
                             orderby=['-created_date'],
                             count=count,
                             activity_type=1,
                             dealer_id=dealer_id)
    activity_ids = activity_ids.values_list('id', flat=True)
    activity_list = []
    for activity_id in activity_ids:
        tmp_activity = activity_utils.get_activity_by_id(
            activity_id=activity_id)
        activity_list.append(tmp_activity)
    return activity_list
Beispiel #16
0
def get_car_types_by_car_series_id(car_series_id=None):
    """
        通过车系ID返回对应的车型数据

        参数
        ----
        car_series_id : int
            车系ID

        返回值
        ------
        result_list : list
            返回对应车系的而所有车型的基本数据
    """
    car_series_id = common_utils.to_int(car_series_id)
    car_types = list_objs(model=ModelName.T_BASE_CAR_TYPE,
                          orderby=['guide_price'],
                          is_enable=1,
                          is_show=1,
                          car_series_id=car_series_id)
    if not car_types:
        return []
    result_list = []
    for car_type in car_types:
        tmp_car_type = car_type_utils.get_cartype_by_id(
            car_type_id=car_type.id)
        result_list.append(tmp_car_type)

    return result_list
Beispiel #17
0
def get_activity_list_by_city_series(city_id=None, car_series_id=None):
    city_id = common_utils.to_int(city_id)
    car_series_id = common_utils.to_int(car_series_id)
    activity_ids = list_objs(model=ModelName.T_BASE_MEDIA_ACTIVITY,
                             is_enable=1,
                             orderby=['-created_date'],
                             count=MAX_ACTIVITY_COUNT,
                             activity_type=1,
                             city_id=city_id,
                             car_series_id=car_series_id)
    activity_ids = activity_ids.values_list('id', flat=True)
    activity_list = []
    for activity_id in activity_ids:
        tmp_activity = get_activity_by_id(activity_id=activity_id)
        activity_list.append(tmp_activity)
    return activity_list
Beispiel #18
0
def get_finance_all_city(province_id=None):
    """
        通过省ID获取城市的数据

        参数
        ----
        province_id : int
            省ID

        返回值
        ------
        result_list : list
            所有城市的数据的数组
    """
    province_id = common_utils.to_int(province_id)
    city_list = list_objs(model=ModelName.T_BASE_CITY,
                          is_enable=1,
                          is_show=1,
                          province_id=province_id)
    if not city_list:
        return None
    result_list = []
    for city in city_list:
        city_info = place_utils.get_city_by_id(city_id=city.city_id)
        if city_info:
            result_list.append(city_info)
    return result_list
Beispiel #19
0
def get_group_series_car_types(car_series_id=None, property_key=None):
    """
        PC端车系页面、车型页面
        WAP端车型页面
        用在更换车型的列表
        根据车系ID获取所有车型,然后根据property_key属性进行分组排序

        参数
        ----
        car_series_id : int
            车系ID
        property_key : str
            车系下的车型按什么属性分组,例如'pailiang'按排量分组

        返回值
        ------
        result_list : list
            返回车系下所有车型,然后根据property_key属性进行分组
    """
    car_series_id = common_utils.to_int(car_series_id)
    car_types = list_objs(model=ModelName.T_BASE_CAR_TYPE,
                          is_enable=1,
                          is_show=1,
                          car_series_id=car_series_id)
    if not car_types:
        return None
    car_ids = list(car_types.values_list('id', flat=True))
    car_type_prop = get_object(
        model=ModelName.T_BASE_CAR_TYPE_PROPERTY_TEMPLATE,
        is_enable=1,
        property_key=property_key)
    if not car_type_prop:
        return None
    car_props = list_objs(model=ModelName.T_BASE_CAR_TYPE_PROPERTY,
                          orderby=['property_value'],
                          is_enable=1,
                          property_id=car_type_prop.id,
                          car_type_id__in=car_ids)
    if not car_props:
        return None
    car_type_dict = {}
    for car_type in car_types:
        tmp_car_type = car_type_utils.get_cartype_by_id(
            car_type_id=car_type.id)
        car_type_dict[car_type.id] = tmp_car_type
    car_dict = {}
    for car_prop in car_props:
        key = car_prop.property_value
        if key in car_dict:
            car_dict[key].append(car_type_dict[car_prop.car_type_id])
        else:
            car_dict[key] = []
            car_dict[key].append(car_type_dict[car_prop.car_type_id])
    dict_keys = car_dict.keys()
    sorted_dict_keys = sorted(dict_keys)
    data_list = []
    for key in sorted_dict_keys:
        data_dict = {'value': key, 'car_type_list': car_dict[key]}
        data_list.append(data_dict)
    return data_list
Beispiel #20
0
def get_cartype_id_list_by_series(car_series_id=None):
    """
        根据车系ID返回对应的所有车型的ID数组
    """
    car_series_id = common_utils.to_int(car_series_id)
    car_type_sql = '''
        SELECT 
            id
        FROM 
            t_base_car_type
        WHERE 
            is_enable=1
            AND is_show=1
            AND car_series_id=%(car_series_id)s
    '''
    param = {
        'car_series_id': car_series_id,
    }
    cursor = connection().cursor()
    cursor.execute(car_type_sql, param)
    car_type_list = dictfetchall(cursor)
    if not car_type_list:
        return None
    car_type_id_list = []
    for tmp_car_type in car_type_list:
        car_type_id_list.append(tmp_car_type['id'])
    return car_type_id_list
Beispiel #21
0
def get_finance_all_county(city_id=None):
    """
        通过城市ID获取县区的数据

        参数
        ----
        city_id : int
            城市ID

        返回值
        ------
        result_list : list
            所有县区的数据的数组
    """
    city_id = common_utils.to_int(city_id)
    county_list = list_objs(model=ModelName.T_BASE_COUNTY,
                            is_enable=1,
                            is_show=1,
                            city_id=city_id)
    if not county_list:
        return None
    result_list = []
    for county in county_list:
        county_info = place_utils.get_county_by_id(county_id=county.county_id)
        if county_info:
            result_list.append(county_info)
    return result_list
Beispiel #22
0
def get_dealer_on_sale_car_types_count(dealer_id=None):
    """
        找好店 PC端店铺页|WAP端商家详情页
        经销商在售车型总数

        参数
        ----
        dealer_id : int
            经销商ID

        返回值
        ------
        count : int
            返回经销商在售车型总数
    """
    dealer_id = common_utils.to_int(dealer_id)
    dealer = dealer_utils.get_dealer_by_id(dealer_id)
    if not dealer:
        return None
    sale_series_id_list = dealer['car_series_ids']
    car_type_count = 0
    for car_series_id in sale_series_id_list:
        car_type_id_list = car_type_utils.get_cartype_id_list_by_series(
            car_series_id=car_series_id)
        if car_type_id_list:
            car_type_count += len(car_type_id_list)
    return car_type_count
Beispiel #23
0
def get_car_series_property(car_series_id=None, prop_keys=None):
    """
        车系页面,PC和WAP通用
        获取车系下所有车型的多个属性

        参数
        ----
        car_series_id : int
            车系ID
        prop_keys : list of str
            属性对应的字符串数组,例如['pailiang', 'chang']

        返回值
        ------
        result_dict : dict
            每个属性的KEY对应的是一个数组,
            对应的是所有车型的不同的值
    """
    if not prop_keys:
        return None
    car_series_id = common_utils.to_int(car_series_id)

    prop_keys = str2array(prop_keys)

    cursor = connection().cursor()
    car_series_sql = """
        SELECT 
            a.order_no, a.property_key, a.name, b.property_value 
        FROM 
            t_base_car_type_property_template AS a, 
            t_base_car_type_property AS b, 
            t_base_car_type AS c 
        WHERE 
            a.id=b.property_id 
            AND b.car_type_id=c.id 
            AND c.car_series_id=%s 
            AND a.property_key in %s
            AND a.is_enable=1
            AND b.is_enable=1
            AND c.is_enable=1
            AND c.is_show=1
    """
    cursor.execute(car_series_sql, [car_series_id, prop_keys])
    rows = dictfetchall(cursor)
    prop_dict = {}
    for row in rows:
        key = row['property_key']
        if key not in prop_dict:
            prop_dict[key] = []
            prop_dict[key].append(row)
        else:
            is_contained = False
            for prop in prop_dict[key]:
                if prop['property_value'] == row['property_value']:
                    is_contained = True
                    break
            if not is_contained:
                prop_dict[key].append(row)
    return prop_dict
Beispiel #24
0
def get_car_series_data(city_id=None, car_series_id=None):
    """
        车系页面,PC和WAP通用。
        根据城市ID,车系ID获取车系对应的基本数据,活动,报价

        参数
        ----
        city_id : int
            城市ID
        car_series_id : int
            车系ID

        返回值
        ------
        result_dict : dict
            报价是当前城市的最低经销商报价,
            如果当前城市ID和车系ID没有经销商报价,
            price用车系的厂家最低价start_guideprice代替
    """
    city_id = common_utils.to_int(city_id)
    car_series_id = common_utils.to_int(car_series_id)
    car_series = car_series_utils.get_carseries_by_id(
        car_series_id=car_series_id)
    if not car_series:
        return None
    car_brand = car_brand_utils.get_carbrand_by_id(car_series['car_brand_id'])
    if not car_brand:
        return None
    activity_list = activity_utils.get_activity_list_by_city_series(
        city_id=city_id, car_series_id=car_series_id)
    for activity in activity_list:
        activity['dealer'] = dealer_utils.get_dealer_by_id(
            dealer_id=activity['dealer_id'])
    result_dict = {
        'brand': car_brand,
        'series': car_series,
        'activity_list': activity_list,
    }

    offer_price = offer_price_utils.get_offerprice(
        city_id=city_id,
        car_series_id=car_series_id,
    )
    result_dict['series']['offer_price'] = offer_price

    return result_dict
Beispiel #25
0
def get_finance_car_series_car_type(city_id=None,
                                    car_series_id=None,
                                    car_type_id=None):
    """
        PC端任性贷金融产品列表页
        根据城市ID和车系ID返回对应的车型,car_series_id和car_type_id最少传一个

        参数
        ----
        city_id : int
            城市ID
        car_series_id : int, 可选
            车系ID
        car_type_id : int, 可选
            车型ID

        返回值
        ------
        result_list : list
            返回车系的所有车型的基本数据
    """
    city_id = common_utils.to_int(city_id)
    car_series_id = common_utils.to_int(car_series_id)
    car_type_id = common_utils.to_int(car_type_id)
    if not car_series_id:
        if car_type_id:
            car_type = car_type_utils.get_cartype_by_id(
                car_type_id=car_type_id)
            car_series_id = car_type['car_series_id']

    car_type_id_list = car_type_utils.get_cartype_id_list_by_series(
        car_series_id=car_series_id)
    if not car_type_id_list:
        return None
    result_list = []
    for tmp_car_type_id in car_type_id_list:
        tmp_car_type = car_type_utils.get_cartype_by_id(
            car_type_id=tmp_car_type_id)
        if not tmp_car_type:
            continue
        result_list.append(tmp_car_type)
    if result_list:
        result_list = sorted(result_list,
                             key=lambda tmp_car_type_info:
                             (tmp_car_type_info['name']))
    return result_list
Beispiel #26
0
def get_dealer_offical_car_info(dealer_id=None):
    """
        找好店 PC端店铺页|WAP端商家详情页,
        根据经销商ID查询在售车系信息,以官网车型级别分类

        参数
        ----
        dealer_id : int
            经销商ID

        返回值
        ------
        result_dict : dict
            返回当前经销商的在售车系,以官网车型级别分类,
            1是三厢车,2是两厢车,3是SUV,4是原装进口
    """
    dealer_id = common_utils.to_int(dealer_id)

    dealer = dealer_utils.get_dealer_by_id(dealer_id)
    if not dealer:
        return None
    sale_series_id_list = dealer['car_series_ids']
    official_car_level_group_info = get_object(
        model=ModelName.T_BASE_DATA_DICT_GROUP,
        is_enable=1,
        is_show=1,
        dictgroup_name='officialCarLevel')
    if not official_car_level_group_info:
        return None
    official_car_level_list = list_objs(
        model=ModelName.T_BASE_DATA_DICT,
        orderby=['sort_order'],
        is_enable=1,
        is_show=1,
        dictgroup_id=official_car_level_group_info.id)
    if not official_car_level_list:
        return None
    result_dict = {}
    official_info_list = []
    for official_cl in official_car_level_list:
        car_series_list = list_objs(model=ModelName.T_BASE_CAR_SERIES,
                                    orderby=['order_no'],
                                    is_enable=1,
                                    is_show=1,
                                    id__in=sale_series_id_list,
                                    official_car_level=official_cl.dict_key)
        if not car_series_list:
            continue
        tmp_info_dict = {
            'official_level_id': official_cl.dict_key,
            'official_level_name': official_cl.dict_value,
            'official_level_sort_order': official_cl.sort_order,
            'car_series_count': car_series_list.count(),
        }
        official_info_list.append(tmp_info_dict)
    result_dict['official_info_list'] = official_info_list
    result_dict['official_info_count'] = len(official_info_list)
    return result_dict
Beispiel #27
0
def get_car_type_all_property_back(car_type_id=None):
    """
        车型页面,PC和WAP通用
        获取车型所有属性

        参数
        ----
        car_type_id : int
            车型ID

        返回值
        ------
        result_list : list
            返回车型所有属性数组
    """
    car_type_id = common_utils.to_int(car_type_id)
    cursor = connection().cursor()
    cursor.execute("""
            SELECT 
                id, property_key, name, order_no
            FROM
                t_base_car_type_property_template
            WHERE
                parent_id=0
                AND is_enable=1
            ORDER BY
                order_no, id
        """)
    templates = dictfetchall(cursor)
    if not templates:
        return None
    property_list = []
    for template in templates:
        cursor.execute(
            """
                SELECT 
                    a.order_no, a.property_key, a.name, b.property_value
                FROM
                    t_base_car_type_property_template AS a,
                    t_base_car_type_property AS b
                WHERE
                    a.parent_id=%s
                    AND a.id=b.property_id
                    AND b.car_type_id=%s
                    AND a.is_enable=1
                    AND b.is_enable=1
                ORDER BY
                    a.order_no, a.id
            """, [template['id'], car_type_id])
        propertys = dictfetchall(cursor)
        if not propertys:
            continue
        prop_dict = {
            'group_name': template['name'],
            'property_list': propertys
        }
        property_list.append(prop_dict)
    return property_list
Beispiel #28
0
def get_activity_by_id(activity_id=None):
    """
        根据活动ID返回活动实例
    """
    activity_id = common_utils.to_int(activity_id)
    tmp_activity = get_object(model=ModelName.T_BASE_MEDIA_ACTIVITY,
                              is_enable=1,
                              id=activity_id)
    if not tmp_activity:
        return None
    activity_dict = {
        'id':
        tmp_activity.id,
        'url':
        activity_url(tmp_activity.activity_type, tmp_activity.created_date,
                     tmp_activity.id),
        'activity_title':
        tmp_activity.activity_title,
        'page_url':
        tmp_activity.page_url,
        'activity_content':
        tmp_activity.activity_content,
        'activity_begin_date':
        tmp_activity.activity_begin_date,
        'activity_end_date':
        tmp_activity.activity_end_date,
        'activity_type':
        tmp_activity.activity_type,
        'activity_type_name':
        activity_type_name(tmp_activity.activity_type),
        'dealer_id':
        tmp_activity.dealer_id,
        'car_type_id':
        tmp_activity.car_type_id,
        'car_series_id':
        tmp_activity.car_series_id,
        'car_brand_id':
        tmp_activity.car_brand_id,
        'city_id':
        tmp_activity.city_id,
        'county_id':
        tmp_activity.county_id,
        'created_date':
        tmp_activity.created_date,
        'updated_date':
        tmp_activity.updated_date,
    }

    activity_dict['series'] = {}
    if tmp_activity.car_series_id:
        tmp_car_series = car_series_utils.get_carseries_by_id(
            car_series_id=tmp_activity.car_series_id)
        if tmp_car_series:
            activity_dict['series'] = tmp_car_series

    return activity_dict
Beispiel #29
0
def get_dealer_id_list(province_id=None, city_id=None, county_id=None,
                       car_brand_id=None, car_series_id=None):
    """
        根据省ID或者城市ID或者县区ID或者品牌ID或者车系ID返回经销商ID数组

        参数
        ----
        province_id : int, 可选
            省ID
        city_id : int, 可选
            城市ID
        county_id : int, 可选
            县区ID
        car_brand_id : int, 可选
            品牌ID
        car_series_id : int, 可选
            车系ID

        返回值
        ------
        result_list : list
            经销商ID数组
    """
    province_id = common_utils.to_int(province_id)
    city_id = common_utils.to_int(city_id)
    county_id = common_utils.to_int(county_id)
    car_brand_id = common_utils.to_int(car_brand_id)
    car_series_id = common_utils.to_int(car_series_id)
    if county_id:
        return get_dealer_id_list_by_county(county_id=county_id,
                                            car_brand_id=car_brand_id,
                                            car_series_id=car_series_id)
    elif city_id:
        return get_dealer_id_list_by_city(city_id=city_id,
                                          car_brand_id=car_brand_id,
                                          car_series_id=car_series_id)
    elif province_id:
        return get_dealer_id_list_by_province(province_id=province_id,
                                              car_brand_id=car_brand_id,
                                              car_series_id=car_series_id)
    else:
        return get_dealer_id_list_by_car(car_brand_id=car_brand_id,
                                         car_series_id=car_series_id)
Beispiel #30
0
def get_dealer_id_list_by_province(province_id=None,
                                   car_brand_id=None,
                                   car_series_id=None):
    """
        根据省ID
    """
    province_id = common_utils.to_int(province_id)
    car_brand_id = common_utils.to_int(car_brand_id)
    car_series_id = common_utils.to_int(car_series_id)
    dealer_sql_template = '''
        SELECT 
            id
        FROM 
            t_base_dealer
        WHERE 
            is_enable=1
            AND is_frozen=0
            {% if province_id %} 
                AND province_id={{province_id}}
            {% endif %}
            {% if car_series_id %} 
                AND car_series_ids like '%,{{car_series_id}},%'
            {% elif car_brand_id %} 
                AND cbb_car_brand_code like '%,{{car_brand_id}},%'
            {% endif %}
    '''
    param = {
        'province_id': province_id,
        'car_brand_id': car_brand_id,
        'car_series_id': car_series_id,
    }
    dealer_sql = Template(dealer_sql_template).render(param)
    cursor = connection().cursor()
    cursor.execute(dealer_sql)
    dealer_list = dictfetchall(cursor)
    if not dealer_list:
        # 查找 sale_city_ids 售全国 '1'
        return get_dealer_id_list_by_nation(car_brand_id=car_brand_id,
                                            car_series_id=car_series_id)
    dealer_id_list = []
    for tmp_dealer in dealer_list:
        dealer_id_list.append(tmp_dealer['id'])
    return dealer_id_list