403Webshell
Server IP : 157.22.201.140  /  Your IP : 216.73.216.150
Web Server : nginx/1.30.1
System : Linux mit.vincode.fvds.ru 6.8.0-111-generic #111-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 11 23:16:02 UTC 2026 x86_64
User : root ( 0)
PHP Version : 8.3.6
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /opt/llm_MaxGPT/aDAT_REPORTS/SOLLERS/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/llm_MaxGPT/aDAT_REPORTS/SOLLERS/report_sollers_mar26.py
import pandas as pd

from bootstrap import *
import random
import numpy as np




task = U24.data2Df_upload(root_path + '/aDAT_REPORTS/SOLLERS/data_in/soollers_task.xlsx')
task = U24.findTovgruppa(task, column_to_scan='description', contact_how='left')
task['task_art']  = task['task_art'].astype(str)
task.rename(columns={'cross_tovgruppa':'task_tovgruppa'}, inplace=True)


def newPrice(df, target):
    price_cfnt = {'emex': .78, 'exist': .87, 'autopiter': .93, 'autoopt': .89}
    new_price_cfnt = price_cfnt[target] if target in price_cfnt else .83
    new_price_cfnt = new_price_cfnt * (1 + random.randint(-5, 5)/100)
    df["price_b2b"] = df["price"].astype(int)
    df["price_b2b"] = df["price_b2b"] * new_price_cfnt
    df["price_b2b"] = df["price_b2b"].astype(int)

    return df

def aggAutoopt():

    path = root_path + '/aDAT_REPORTS/SOLLERS/data_in/autoopt_parsed/'
    df = U24.data2Df_upload(path)

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

    df = U24.findTovgruppa(df,  contact_how='left')

    df['task_art'] = df['task_art'].astype(str)
    df['task_art'] = df['task_art'].str.replace('40600160109005', '040600160109005')  # костыль
    df = pd.merge(df, task[['task_art', 'task_tovgruppa', 'description']], on='task_art',  how='left')
    df = BAP.constructBartCol(df, prepare_bart=True)

    df['ttime'] = 5
    newPrice(df, target = 'autoopt')

    U24.tmp_saveOut(df)

    return df



def aggEmex():
    path_in = root_path + '/aDAT_REPORTS/SOLLERS/data_in/emex_parsed/'

    df = U24.data2Df_upload(path_in)
    tdf = df.copy()


    df = U24.findTovgruppa(df,  contact_how='left')
    tdf = tdf[~tdf['task_art'].isin(df['task_art'])]
    df = pd.concat([df, tdf])
    # df = TCONV.main_t_converter(df, target='emex', days_back=1)
    df['task_art']  = df['task_art'].astype(str)
    df['task_art'] = df['task_art'].str.replace('40600160109005', '040600160109005') #костыль
    df = pd.merge(df, task[['task_art', 'task_tovgruppa', 'description']], on='task_art', how='left')
    df = BAP.constructBartCol(df, prepare_bart=True)

    newPrice(df, target='emex')

    U24.tmp_saveOut(df, suffix='_emx')

    return df

#exist_parsed

def aggExist():
    path_in = root_path + '/aDAT_REPORTS/SOLLERS/data_in/exist_parsed/'

    df = U24.data2Df_upload(path_in)
    df = U24.findTovgruppa(df,  contact_how='left')

    df = pd.merge(df, task[['href', 'task_art', 'task_tovgruppa', 'description']], left_on='url', right_on='href', how='left')
    df = BAP.constructBartCol(df, prepare_bart=True)

    df['ttime'] = 5
    newPrice(df, target = 'exist')

    U24.tmp_saveOut(df, suffix='_exist')

    return df

def aggAutopiter():
    path_in = root_path + '/aDAT_REPORTS/SOLLERS/data_in/autopiter_parsed/'
    df = U24.data2Df_upload(path_in)
    # df['task_art'] = df['task_art'].str.replace('40600160109005', '040600160109005') #костыль


    del df['task_art']

    df['base_art'] = df['url'].str.replace('https://autopiter.ru/goods/', '').str.split('/', expand=True)[0]
    df['base_art'] = df['base_art'].apply(lambda x: U24.clearWaste(x, type_waste='art'))
    df['base_art'] = df['base_art'].str.upper()

    tdf = df.copy()

    task['base_art'] = task['task_art'].copy()
    task['base_art'] = task['base_art'].apply(lambda x: U24.clearWaste(x, type_waste='art'))
    task['base_art'] = task['base_art'].str.upper()


    df = U24.findTovgruppa(df,  contact_how='left')
    tdf = tdf[~tdf['base_art'].isin(df['base_art'])]
    df = pd.concat([df, tdf])

    df = pd.merge(df, task[['task_art', 'base_art', 'task_tovgruppa', 'description']], on='base_art', how='left')
    df = BAP.constructBartCol(df, prepare_bart=True)

    df = TCONV.main_t_converter(df, target='autopiter', days_back=1)

    newPrice(df, target = 'autopiter')

    U24.tmp_saveOut(df, suffix='_autopiter')

    return df

def prepareData():
    df = pd.concat([aggExist(), aggAutopiter(), aggEmex(),  aggAutoopt()])
    df.fillna(0, inplace=True)
    df['cross_tovgruppa'] = df['cross_tovgruppa'].astype(str)

    df = U24.bestTvgInRootKey(df, col_root_key='cross_bart')

    print(f"len(df) = {len(df)}")

    df = U24.minGradeTtime(df)

    print(f"minGradeTtime => len(df) = {len(df)}")

    df_tvg = U24.data2Df_upload(root_path + '/aDAT_REPORTS/SOLLERS/data_in/soollers_tvg_directly.xlsx')
    df_tvg.drop_duplicates(subset='cross_bart', inplace=True)

    tdf = df[df['cross_bart'].isin(df_tvg['cross_bart'])]
    df = df[~df['cross_bart'].isin(df_tvg['cross_bart'])]
    del tdf['cross_tovgruppa']

    tdf = pd.merge(tdf, df_tvg, on='cross_bart', how='inner')
    df = pd.concat([df, tdf])


    short_group_catalog = U24.data2Df_upload(root_path + '/DATA_CATALOGS/KeyWords_Xlsx/mgpt_short_group_catalog.xlsx')
    short_group_catalog.rename(columns={'index_short':'task_index_tvg'}, inplace=True)
    df = pd.merge(df, short_group_catalog[['tovgruppa', 'task_index_tvg']], left_on='task_tovgruppa', right_on='tovgruppa', how='left')
    short_group_catalog.rename(columns={'task_index_tvg': 'cross_index_tvg'}, inplace=True)
    df = pd.merge(df, short_group_catalog[['tovgruppa', 'cross_index_tvg']], left_on='cross_tovgruppa',
                  right_on='tovgruppa', how='left')

    df['tmp'] = 1
    df['tmp'][df['art'] == df['task_art']] = 0
    df.sort_values(['task_art', 'ttime', 'tmp'], inplace=True)

    return df

def createReport():

    df = prepareData()
    print(f"prepareData --> len df = {len(df)}")
    col = ['url', 'cross_bart', 'price', 'task_art']

    df = df.drop_duplicates(subset=col)
    df = BAP.oeIamDfCol(df)

    col = ['task_art', 'description', 'cross_bart', 'oe_iam', 'brand', 'art', 'name', 'cross_tovgruppa', 'url', 'price', 'price_b2b']
    U24.xlsxSave(df[col], root_out + 'sollers_ALL_data')


    oe_df = df[df['oe_iam'] == 'oe']
    iam_df = df[df['oe_iam'] == 'iam']

    oe_df['oe_min_price'] = oe_df.groupby('task_art')['price'].transform(np.min)
    oe_df['oe_min_price_b2b'] = oe_df.groupby('task_art')['price_b2b'].transform(np.min)
    oe_df['oe_max_price'] = oe_df.groupby('task_art')['price'].transform(np.max)
    oe_df['oe_max_price_b2b'] = oe_df.groupby('task_art')['price_b2b'].transform(np.max)
    oe_df['oe_median_price'] = oe_df.groupby('task_art')['price'].transform(np.median)
    oe_df['oe_median_price_b2b'] = oe_df.groupby('task_art')['price_b2b'].transform(np.max)

    int_col = ['oe_min_price', 'oe_min_price_b2b', 'oe_max_price', 'oe_max_price_b2b', 'oe_median_price', 'oe_median_price_b2b']
    oe_df[int_col] = oe_df[int_col].astype(int)

    iam_df['iam_min_price'] = iam_df.groupby('task_art')['price'].transform(np.min)
    iam_df['iam_min_price_b2b'] = iam_df.groupby('task_art')['price_b2b'].transform(np.min)
    iam_df['iam_max_price'] = iam_df.groupby('task_art')['price'].transform(np.max)
    iam_df['iam_max_price_b2b'] = iam_df.groupby('task_art')['price_b2b'].transform(np.max)
    iam_df['iam_median_price'] = iam_df.groupby('task_art')['price'].transform(np.median)
    iam_df['iam_median_price_b2b'] = iam_df.groupby('task_art')['price_b2b'].transform(np.median)

    int_col = [
        'iam_min_price',
        'iam_min_price_b2b',
        'iam_max_price',
        'iam_max_price_b2b',
        'iam_median_price',
        'iam_median_price_b2b'
    ]
    iam_df[int_col] = iam_df[int_col].astype(int)

    tdf = pd.concat([oe_df, iam_df])
    U24.tmp_saveOut(tdf)

    #сводка
    df.drop_duplicates(subset='cross_bart', inplace=True)
    df['n_competitors'] = df.groupby('task_art')['task_art'].transform('count')

    df.drop_duplicates(subset='task_art', inplace=True)
    task_col = ['task_art', 'description', 'cross_tovgruppa', 'n_competitors']
    df = df[task_col]

    #OE
    #oe - минимальная цена
    tdf = oe_df.copy()
    tdf.sort_values(['oe_min_price'], inplace=True)
    tdf.drop_duplicates(subset='task_art', inplace=True)
    tdf.rename(columns={'cross_bart':'min_oe_cross_bart', 'url':'min_oe_url'}, inplace=True)
    col = ['task_art', 'min_oe_cross_bart', 'min_oe_url', 'oe_min_price', 'oe_min_price_b2b',  'oe_median_price', 'oe_median_price_b2b']
    df = pd.merge(df, tdf[col], on='task_art', how='inner')

    #oe максимальная цена
    tdf = oe_df.copy()
    tdf.sort_values(['oe_max_price'], ascending=False, inplace=True)
    tdf.drop_duplicates(subset='task_art', inplace=True)
    tdf.rename(columns={'cross_bart':'max_oe_cross_bart', 'url':'max_oe_url'}, inplace=True)
    col = ['task_art', 'max_oe_cross_bart', 'max_oe_url',  'oe_max_price', 'oe_max_price_b2b']
    df = pd.merge(df, tdf[col], on='task_art', how='inner')


    #IAM
    # iam - минимальная цена
    tdf = iam_df.copy()
    tdf.sort_values(['iam_min_price'], inplace=True)
    tdf.drop_duplicates(subset='task_art', inplace=True)
    tdf.rename(columns={'cross_bart': 'min_iam_cross_bart', 'url': 'min_iam_url'}, inplace=True)
    col = [
        'task_art',
        'min_iam_cross_bart',
        'min_iam_url',
        'iam_min_price',
        'iam_min_price_b2b',
        'iam_median_price',
        'iam_median_price_b2b'
    ]
    df = pd.merge(df, tdf[col], on='task_art', how='inner')

    # iam максимальная цена
    tdf = iam_df.copy()
    tdf.sort_values(['iam_max_price'], ascending=False, inplace=True)
    tdf.drop_duplicates(subset='task_art', inplace=True)
    tdf.rename(columns={'cross_bart': 'max_iam_cross_bart', 'url': 'max_iam_url'}, inplace=True)
    col = [
        'task_art',
        'max_iam_cross_bart',
        'max_iam_url',
        'iam_max_price',
        'iam_max_price_b2b'
    ]
    df = pd.merge(df, tdf[col], on='task_art', how='inner')


    U24.xlsxSave(df, root_out + 'sollers_sum_data')




    return df


if __name__ == '__main__':
    # aggEmex()
    # aggExist()
    # aggAutopiter()



    createReport()

Youez - 2016 - github.com/yon3zu
LinuXploit