File size: 6,593 Bytes
83c6339 4a62aa3 28e8901 98611d4 4908c13 98611d4 9789147 4908c13 ff5b642 01fef3e 8e17b0f ff5b642 f2a6995 ff5b642 98611d4 01fef3e 5430f8d 9789147 0c2e0c5 4908c13 0c2e0c5 e03eb4a 4a62aa3 0c2e0c5 f2a6995 0c2e0c5 01fef3e 553bf87 4a62aa3 0c2e0c5 4a62aa3 0c2e0c5 8e17b0f 0c2e0c5 01fef3e 4a62aa3 0c2e0c5 4a62aa3 83c6339 8e17b0f 01fef3e 83c6339 8e17b0f 01fef3e 0c2e0c5 01fef3e 83c6339 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | import pandas as pd
import gradio as gr
from datetime import datetime
# ์์
๋ฐ์ดํฐ ์ฒ๋ฆฌ ํจ์
def process_excel_files(member_file, order_file, ์์ฑ์ผ์):
try:
# ํ์์ ๋ณด ๋ฐ ์ฃผ๋ฌธ๋ด์ญ ํ์ผ ์ฝ๊ธฐ
member_df = pd.read_excel(member_file)
order_df = pd.read_excel(order_file)
# ์ด ์ด๋ฆ ๋งคํ
order_df.rename(
columns={
'์ฃผ๋ฌธ์ID': '์์ด๋',
'์ด ๊ฒฐ์ ๊ธ์ก': '์ด ๊ฒฐ์ ๊ธ์ก',
'์์น๊ธ(์ต์ข
)': '์์น๊ธ(์ต์ข
)',
'์ด ์ฃผ๋ฌธ๊ธ์ก': '์ฃผ๋ฌธ๊ธ์ก'
},
inplace=True
)
# ์ด ์ด๋ฆ ํ์ธ
required_member_columns = ['์์ด๋', '์ด๋ฆ', '์ํธ', '์ฌ์
์๋ฒํธ', '์ด๋ฉ์ผ']
required_order_columns = ['์ฃผ๋ฌธ๋ฒํธ', '์์ด๋', '์ด ๊ฒฐ์ ๊ธ์ก', '์์น๊ธ(์ต์ข
)', '์ฃผ๋ฌธ๊ธ์ก']
missing_member_columns = [col for col in required_member_columns if col not in member_df.columns]
missing_order_columns = [col for col in required_order_columns if col not in order_df.columns]
if missing_member_columns:
return f"์๋ฌ ๋ฐ์: 'ํ์์ ๋ณด ํ์ผ'์ ๋๋ฝ๋ ์ด: {missing_member_columns}. ํ์ผ ์ด ์ด๋ฆ: {list(member_df.columns)}"
if missing_order_columns:
return f"์๋ฌ ๋ฐ์: '์ฃผ๋ฌธ๋ด์ญ ํ์ผ'์ ๋๋ฝ๋ ์ด: {missing_order_columns}. ํ์ผ ์ด ์ด๋ฆ: {list(order_df.columns)}"
# ์ฃผ๋ฌธ๊ธ์ก ์ด์ '์ด ๊ฒฐ์ ๊ธ์ก + ์์น๊ธ(์ต์ข
)' ํฉ๊ณ๋ฅผ ๊ณ์ฐ
order_df['์ฃผ๋ฌธ๊ธ์ก'] = order_df['์ด ๊ฒฐ์ ๊ธ์ก'] + order_df['์์น๊ธ(์ต์ข
)']
# ์ฃผ๋ฌธ๋ฒํธ ๊ธฐ์ค ์ค๋ณต ์ ๊ฑฐ ๋ฐ ์ฃผ๋ฌธ๊ธ์ก์ด 0์ธ ํ ์ญ์
order_df.drop_duplicates(subset="์ฃผ๋ฌธ๋ฒํธ", inplace=True)
order_df = order_df[order_df['์ฃผ๋ฌธ๊ธ์ก'] != 0]
# ๋์ผ ์์ด๋์ ์ฃผ๋ฌธ๊ธ์ก ํฉ์ฐํ์ฌ ์ฃผ๋ฌธํฉ๊ณ ์ด ์์ฑ
order_sum = order_df.groupby("์์ด๋")['์ฃผ๋ฌธ๊ธ์ก'].sum().reset_index()
order_sum.rename(columns={'์ฃผ๋ฌธ๊ธ์ก': '์ฃผ๋ฌธํฉ๊ณ'}, inplace=True)
order_df = pd.merge(order_df, order_sum, on="์์ด๋", how="left")
# ์์ด๋ ์ด ๊ธฐ์ค ์ค๋ณต ์ ๊ฑฐ (์ฒซ ๋ฒ์งธ ํ ์ ์ง)
order_df = order_df.drop_duplicates(subset="์์ด๋", keep="first")
# ํ์์ ๋ณด์ ์ฃผ๋ฌธ๋ด์ญ ๋ณํฉ (์์ด๋ ๊ธฐ์ค)
merged_df = pd.merge(order_df, member_df, on="์์ด๋", how="left")
# ์์ด๋๊ฐ ๋์ผํ ํ์๋ง ๊ฐ ์
๋ ฅ
for idx in order_df.index:
current_id = order_df.loc[idx, '์์ด๋']
matching_row = merged_df[merged_df['์์ด๋'] == current_id]
if not matching_row.empty:
order_df.loc[idx, '์ด๋ฆ'] = matching_row.iloc[0]['์ด๋ฆ']
order_df.loc[idx, '์ํธ'] = matching_row.iloc[0]['์ํธ']
order_df.loc[idx, '์ฌ์
์๋ฒํธ'] = matching_row.iloc[0]['์ฌ์
์๋ฒํธ']
order_df.loc[idx, '์ด๋ฉ์ผ'] = matching_row.iloc[0]['์ด๋ฉ์ผ']
# ์์ ๋ ์ฃผ๋ฌธ๋ด์ญ ํ์ผ ์ ์ฅ
updated_order_file_path = f"์ฃผ๋ฌธ๋ด์ญ(์์ )_{datetime.now().strftime('%Y%m%d_%H%M%S')}.xlsx"
order_df.to_excel(updated_order_file_path, index=False, header=['์์ด๋'] + list(order_df.columns[1:]))
# ์์ ๋ ์ฃผ๋ฌธ๋ด์ญ ํ์ผ ๋ค์ ์ฝ๊ธฐ
updated_order_df = pd.read_excel(updated_order_file_path)
# ๊ฒฐ๊ณผ ์์
์์ฑ (์์ ๋ ์ฃผ๋ฌธ๋ด์ญ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ)
result = pd.DataFrame()
result['A์ด'] = ['01'] * len(updated_order_df)
result['B์ด'] = [์์ฑ์ผ์] * len(updated_order_df)
result['C์ด'] = updated_order_df['์ฌ์
์๋ฒํธ']
result['D์ด'] = [''] * len(updated_order_df)
result['E์ด'] = updated_order_df['์ํธ']
result['F์ด'] = updated_order_df['์ด๋ฆ']
result['G์ด'] = [''] * len(updated_order_df)
result['H์ด'] = [''] * len(updated_order_df)
result['I์ด'] = [''] * len(updated_order_df)
result['J์ด'] = updated_order_df['์ด๋ฉ์ผ']
result['K์ด'] = [''] * len(updated_order_df)
result['L์ด'] = (updated_order_df['์ฃผ๋ฌธํฉ๊ณ'] / 1.1).round().astype(int) # ๊ณต๊ธ๊ฐ์ก (๋ฐ์ฌ๋ฆผํ์ฌ ์ ์๋ก ๋ณํ)
result['M์ด'] = (updated_order_df['์ฃผ๋ฌธํฉ๊ณ'] - result['L์ด']).round().astype(int) # ๋ถ๊ฐ์ธ (๋ฐ์ฌ๋ฆผํ์ฌ ์ ์๋ก ๋ณํ)
result['N์ด'] = [''] * len(updated_order_df)
result['O์ด'] = [str(์์ฑ์ผ์)[-2:]] * len(updated_order_df)
result['P์ด'] = ['์ฃผ๋ฐฉ์ฉํ ์ธ'] * len(updated_order_df)
# ๋๋จธ์ง ๊ณต๋ ์ด ์ฑ์ฐ๊ธฐ (Q์ด๋ถํฐ AY์ด๊น์ง)
๊ณต๋_์ด = [chr(i) + '์ด' for i in range(ord('Q'), ord('Z') + 1)] # Q~Z
๊ณต๋_์ด += [f"A{chr(i)}์ด" for i in range(ord('A'), ord('Y') + 1)] # AA~AY
for col in ๊ณต๋_์ด:
result[col] = [''] * len(updated_order_df)
# AY์ด ์ค์
result['AY์ด'] = ['01'] * len(updated_order_df)
# ๊ฒฐ๊ณผ ํ์ผ ์ ์ฅ
result_file = f"๊ฒฐ๊ณผ_์ธ๊ธ๊ณ์ฐ์_{datetime.now().strftime('%Y%m%d_%H%M%S')}.xlsx"
result.to_excel(result_file, index=False)
return result_file, updated_order_file_path
except Exception as e:
return f"์๋ฌ ๋ฐ์: {str(e)}"
# Gradio ์ธํฐํ์ด์ค ๊ตฌ์ฑ
def generate_excel(member_file, order_file, ์์ฑ์ผ์):
output_files = process_excel_files(member_file.name, order_file.name, ์์ฑ์ผ์)
if isinstance(output_files, str): # ์๋ฌ ๋ฉ์์ง ๋ฐํ
return output_files, None
else:
return output_files # (result_file, updated_order_file)
# Gradio UI
with gr.Blocks() as app:
gr.Markdown("### ์ธ๊ธ๊ณ์ฐ์ ์์
ํ์ผ ์์ฑ๊ธฐ")
with gr.Row():
member_file = gr.File(label="ํ์์ ๋ณด ์์
ํ์ผ ์
๋ก๋", file_types=[".xlsx"])
order_file = gr.File(label="์ฃผ๋ฌธ๋ด์ญ ์์
ํ์ผ ์
๋ก๋", file_types=[".xlsx"])
์์ฑ์ผ์ = gr.Textbox(label="์์ฑ์ผ์ (YYYYMMDD)", placeholder="์: 20250101")
generate_btn = gr.Button("์์
์์ฑ")
with gr.Row():
result_file_output = gr.File(label="๊ฒฐ๊ณผ ์ธ๊ธ๊ณ์ฐ์ ํ์ผ ๋ค์ด๋ก๋")
updated_order_file_output = gr.File(label="์ฃผ๋ฌธ๋ด์ญ(์์ ) ํ์ผ ๋ค์ด๋ก๋")
generate_btn.click(generate_excel, inputs=[member_file, order_file, ์์ฑ์ผ์], outputs=[result_file_output, updated_order_file_output])
app.launch()
|