consolidator
/
makeDump.py
117 строк · 7.1 Кб
1import glob
2import pandas as pd
3import oracledb as ora
4# from MyConfig import MyConfig
5
6def handler(row:pd.Series,cursor:ora.Cursor)->pd.Series:
7try:
8sql = "select nvl(max(m.scp_product_name),'нет') from scm_fact.product_map_sap_scp m where m.sap_product_code=:NOM"
9cursor.execute(sql,[row["ID в SAP ERP VMZ"]])
10record = cursor.fetchone()
11row["Продукт УП"]=str(record[0])
12print(f"{row['ID в SAP ERP VMZ']} -> {record[0]}")
13return row
14except Exception as exp:
15print(f"ora error: {exp}")
16row["Продукт УП"] = f"ora error: {exp}"
17return row
18
19if __name__=="__main__":
20connection:ora.Connection = None
21cursor:ora.Cursor = None
22path_pattern="D:\\work\\Укрупнение\\current\\pyExcelCons3\\msa\\*.xlsx"
23dump_path = "D:\\work\\Укрупнение\\current\\pyExcelCons3\\misc\\full_dump.xlsx"
24config = "D:\\work\\Укрупнение\\current\\pyExcelCons3\\config.json"
25try:
26# consCfg = MyConfig(config)
27columns = [
28"ID в SAP ERP VMZ",
29"Вид материала в SAP ERP",
30"Полное наименование материала",
31"Производство",
32"№ чертежа <Производство>",
33"Вакуумирование <Производство>",
34"Группа труб * <Производство>",
35"Диаметр ступицы, мм <Производство>",
36"Диаметр, мм <Производство>",
37"Длина листа, мм <Производство>",
38"Длина раската, мм <Производство>",
39"Длина раскроя, мм <Производство>",
40"Исходная заготовка <Производство>",
41"Категория <Производство>",
42"Класс прочности <Производство>",
43"Класс прочности <Корпоративный классификатор>",
44"Код СКМТР <Производство>",
45"Марка стали <Производство>",
46"Марка стали* <Корпоративный классификатор>",
47"Муфта с узлом уплотнения <Производство>",
48"Муфта специальная <Производство>",
49"Номер калибровки колеса <Производство>",
50"НТД внутреннего покрытия <Производство>",
51"НТД геометрии <Производство>",
52"НТД качества (трубы стальные) <Производство>",
53"НТД наружного покрытия <Производство>",
54"НТД Химического состава <Производство>",
55"Размер профиля 1, мм <Производство>",
56"Размер профиля 2, мм <Производство>",
57"Теоретический вес колеса после ТО, кг <Производство>",
58"Теоретический вес колеса, кг <Производство>",
59"Теоретический вес колесной заготовки, кг <Производство>",
60"Теоретический вес чернового колеса, кг <Производство>",
61"Термообработка <Производство>",
62"Тип покрытия муфты <Производство>",
63"Тип резьбы <Производство>",
64"Тип трубы <Производство>",
65"Типоразмер изложницы <Производство>",
66"Толщина материнского сляба, мм <Производство>",
67"Толщина, мм <Корпоративный классификатор>",
68"Толщина покрытия, мм <Производство>",
69"Толщина стенки заготовки, мм <Производство>",
70"Толщина, мм <Производство>",
71"Уровень исполнения * <Производство>",
72"Характер кромки <Производство>",
73"Ширина листа (штрипса), мм <Производство>",
74"Ширина материнского сляба, мм <Производство>",
75"Ширина сляба, мм <Корпоративный классификатор>",
76"Ширина рулона, мм <Производство>",
77"Ширина штрипса, мм <Производство>",
78"НТД наружного покрытия 2 <Производство>",
79"Тип покрытия 2 <Производство>",
80"Толщина раската, мм <Производство>",
81"Ширина раската, мм <Производство>",
82"Контракт, спецификация <Производство>",
83"НТД качества (колеса) <Производство>",
84"НТД качества (прокат) <Производство>",
85"НТД качества (слитки стальные) <Корпоративный классификатор>",
86"Покраска <Производство>",
87"Тип покрытия <Производство>",
88"Толщина стенки, мм <Производство>"
89]
90ora.init_oracle_client(lib_dir=".\\ora")
91connection = ora.connect(dsn="172.17.80.116/scpora",user="manage_dw",password="ufyjwhb")
92cursor:ora.Cursor = connection.cursor()
93print(f"connect to oracle: {connection.version}")
94
95files=[f for f in glob.glob(path_pattern)]
96dfs=[]
97for f in files:
98print(f"load file: {f}")
99xl = pd.ExcelFile(f)
100for sheet_name in xl.sheet_names:
101df=xl.parse(sheet_name=sheet_name)
102print(f"\tread sheet [{sheet_name}]")
103dfs.append(df)
104print("file done")
105dumpDf = pd.concat(dfs)
106dumpDf = dumpDf[columns]
107print("concated")
108dumpDf = dumpDf.apply(lambda row: handler(row,cursor), axis=1)
109print("df handled")
110dumpDf.to_excel(dump_path,index=False)
111print(f"dump '{dump_path}' saved")
112except Exception as exp:
113print(f"general error: {exp}")
114finally:
115if cursor is not None: cursor.close()
116if connection is not None: connection.close()
117print("oracle disconnected")