save code

This commit is contained in:
Your Name
2026-01-27 17:30:17 +08:00
parent a416e2091f
commit 884b9f47a2
17 changed files with 910 additions and 44 deletions
+89
View File
@@ -0,0 +1,89 @@
import pandas as pd
from datetime import datetime
from app.database.database import SessionLocal
from app.models import Project, User
def import_projects_from_excel():
"""从Excel文件导入项目数据"""
db = SessionLocal()
try:
# 读取Excel文件
excel_path = "/home/xsl/code/xsl_node/docs/example.xls"
print(f"Reading Excel file: {excel_path}")
# 读取所有工作表
xls = pd.ExcelFile(excel_path)
print(f"Excel file has sheets: {xls.sheet_names}")
# 读取第一个工作表
df = pd.read_excel(xls, sheet_name=0)
print(f"Read {len(df)} rows from Excel")
# 获取marketing用户ID
marketing_user = db.query(User).filter(User.username == "marketing").first()
if not marketing_user:
print("Marketing user not found. Exiting.")
return
# 准备导入的项目数据
projects_to_import = []
skipped_rows = 0
for index, row in df.iterrows():
try:
# 创建项目对象
project = Project(
project_code=str(row.get('项目编号', f'PROJ{index+1}')),
name=str(row.get('项目名称', f'项目{index+1}')),
project_type=str(row.get('工程类别', '')),
description=str(row.get('项目描述', '')),
department=str(row.get('所属部门', '未知部门')),
contract_amount=float(row.get('合同金额(万元)', 0)) if pd.notna(row.get('合同金额(万元)')) else 0,
project_manager=str(row.get('项目负责人', '')),
client_company=str(row.get('建设单位', '')),
client_contact=str(row.get('建设单位联系人', '')),
contract_date=pd.to_datetime(row.get('合同签订日期')).date() if pd.notna(row.get('合同签订日期')) else None,
start_date=pd.to_datetime(row.get('开始日期')).date() if pd.notna(row.get('开始日期')) else None,
planned_end_date=pd.to_datetime(row.get('计划结束日期')).date() if pd.notna(row.get('计划结束日期')) else None,
actual_end_date=pd.to_datetime(row.get('实际结束日期')).date() if pd.notna(row.get('实际结束日期')) else None,
progress=float(row.get('累计进度(%', 0)) if pd.notna(row.get('累计进度(%')) else 0,
actual_received_amount=float(row.get('实际收款金额(万元)', 0)) if pd.notna(row.get('实际收款金额(万元)')) else 0,
payment_completion_rate=float(row.get('回款完成率(%', 0)) if pd.notna(row.get('回款完成率(%')) else 0,
payment_terms=str(row.get('付款方式', '')),
status=str(row.get('状态', 'pending')),
created_by=marketing_user.id
)
projects_to_import.append(project)
# 每100条记录打印一次进度
if (index + 1) % 100 == 0:
print(f"Processed {index + 1} rows...")
except Exception as e:
print(f"Error processing row {index + 1}: {e}")
skipped_rows += 1
continue
# 批量导入数据
if projects_to_import:
print(f"Importing {len(projects_to_import)} projects to database...")
db.add_all(projects_to_import)
db.commit()
print(f"Successfully imported {len(projects_to_import)} projects!")
print(f"Skipped {skipped_rows} rows due to errors")
else:
print("No projects to import")
except Exception as e:
db.rollback()
print(f"Error importing projects: {e}")
import traceback
traceback.print_exc()
finally:
db.close()
if __name__ == "__main__":
import_projects_from_excel()