style: format all Python files with Black

Apply Black formatter to the entire codebase for consistent code style.

Co-Authored-By: Claude (glm-5) <noreply@anthropic.com>
This commit is contained in:
Misaka
2026-02-26 22:44:03 +08:00
parent 1b16842a2c
commit 3b7c00377f
46 changed files with 1488 additions and 974 deletions

View File

@@ -37,19 +37,21 @@ class DiscreteMaterialPlanDAO(BaseDAO):
... print(f"Deleted: {stats['deleted']}, Inserted: {stats['inserted']}")
"""
if df.empty:
return {'deleted': 0, 'inserted': 0}
return {"deleted": 0, "inserted": 0}
# Remove duplicates based on PlanNumber and SequenceNumber
original_count = len(df)
df = df.drop_duplicates(subset=['备料计划单号', '序号'], keep='first')
df = df.drop_duplicates(subset=["备料计划单号", "序号"], keep="first")
duplicates_removed = original_count - len(df)
if duplicates_removed > 0:
print(f"[INFO] 检测到 {duplicates_removed} 条重复记录(相同计划单号和序号),已自动去重")
print(
f"[INFO] 检测到 {duplicates_removed} 条重复记录(相同计划单号和序号),已自动去重"
)
with get_connection() as db:
# Get unique plan numbers
plan_numbers = df['备料计划单号'].unique().tolist()
plan_numbers = df["备料计划单号"].unique().tolist()
# Delete existing records
deleted = self._delete_by_plan_numbers(db, plan_numbers)
@@ -57,7 +59,7 @@ class DiscreteMaterialPlanDAO(BaseDAO):
# Insert new records in batches
inserted = self._batch_insert(db, df)
return {'deleted': deleted, 'inserted': inserted}
return {"deleted": deleted, "inserted": inserted}
def _delete_by_plan_numbers(self, db, plan_numbers: List[str]) -> int:
"""
@@ -79,12 +81,12 @@ class DiscreteMaterialPlanDAO(BaseDAO):
total_deleted = 0
for i in range(0, len(plan_numbers), batch_size):
batch = plan_numbers[i:i + batch_size]
batch = plan_numbers[i : i + batch_size]
placeholder = self._get_placeholder()
placeholders = ','.join([placeholder for _ in batch])
placeholders = ",".join([placeholder for _ in batch])
# 根据数据库类型选择表名
table_name = self._convert_sql('[dbo].[DiscreteMaterialPlanData]')
table_name = self._convert_sql("[dbo].[DiscreteMaterialPlanData]")
sql = f"DELETE FROM {table_name} WHERE PlanNumber IN ({placeholders})"
deleted = db.execute_update(sql, tuple(batch))
@@ -108,7 +110,7 @@ class DiscreteMaterialPlanDAO(BaseDAO):
Total number of records inserted
"""
# 根据数据库类型选择表名
table_name = self._convert_sql('[dbo].[DiscreteMaterialPlanData]')
table_name = self._convert_sql("[dbo].[DiscreteMaterialPlanData]")
placeholder = self._get_placeholder()
sql = f"""
@@ -126,7 +128,7 @@ class DiscreteMaterialPlanDAO(BaseDAO):
records = self._convert_df_to_records(df)
for i in range(0, len(records), batch_size):
batch = records[i:i + batch_size]
batch = records[i : i + batch_size]
for record in batch:
db.execute_update(sql, record)
total_inserted += 1
@@ -150,20 +152,44 @@ class DiscreteMaterialPlanDAO(BaseDAO):
"""
# Column order must match INSERT statement
column_order = [
'工厂', '备料状态', '备料计划单号', '来源单号', '备料类型', '产品编码',
'产品名称', '产品单位', '产品计划数量', '用料部门', '备注', '制单人',
'制单日期', '审批人', '审批日期', '序号', '材料编码', '材料名称',
'规格', '型号', '图号', '物料材质', '计划数量', '单位', '需用日期',
'发料仓库', '单位用量', '累计出库数量', 'BOM版本'
"工厂",
"备料状态",
"备料计划单号",
"来源单号",
"备料类型",
"产品编码",
"产品名称",
"产品单位",
"产品计划数量",
"用料部门",
"备注",
"制单人",
"制单日期",
"审批人",
"审批日期",
"序号",
"材料编码",
"材料名称",
"规格",
"型号",
"图号",
"物料材质",
"计划数量",
"单位",
"需用日期",
"发料仓库",
"单位用量",
"累计出库数量",
"BOM版本",
]
# Numeric columns with their default values and data types
numeric_columns = {
'产品计划数量': (0, int),
'序号': (0, int),
'计划数量': (0, int),
'单位用量': (0.0, float),
'累计出库数量': (0, int),
"产品计划数量": (0, int),
"序号": (0, int),
"计划数量": (0, int),
"单位用量": (0.0, float),
"累计出库数量": (0, int),
}
records = []
@@ -172,7 +198,11 @@ class DiscreteMaterialPlanDAO(BaseDAO):
for col in column_order:
value = row.get(col)
# Handle NaN, None, or empty string values
if pd.isna(value) or value is None or (isinstance(value, str) and value.strip() == ''):
if (
pd.isna(value)
or value is None
or (isinstance(value, str) and value.strip() == "")
):
if col in numeric_columns:
# Use default value for numeric columns
record.append(numeric_columns[col][0])
@@ -209,7 +239,7 @@ class DiscreteMaterialPlanDAO(BaseDAO):
List of dictionaries representing records
"""
with get_connection() as db:
table_name = self._convert_sql('[dbo].[DiscreteMaterialPlanData]')
table_name = self._convert_sql("[dbo].[DiscreteMaterialPlanData]")
placeholder = self._get_placeholder()
sql = f"SELECT * FROM {table_name} WHERE PlanNumber = {placeholder}"
return db.execute_query(sql, (plan_number,))
@@ -227,8 +257,8 @@ class DiscreteMaterialPlanDAO(BaseDAO):
if not plan_numbers:
return []
placeholder = self._get_placeholder()
placeholders = ','.join([placeholder for _ in plan_numbers])
table_name = self._convert_sql('[dbo].[DiscreteMaterialPlanData]')
placeholders = ",".join([placeholder for _ in plan_numbers])
table_name = self._convert_sql("[dbo].[DiscreteMaterialPlanData]")
sql = f"SELECT * FROM {table_name} WHERE PlanNumber IN ({placeholders})"
with get_connection() as db:
return db.execute_query(sql, tuple(plan_numbers))
@@ -244,7 +274,7 @@ class DiscreteMaterialPlanDAO(BaseDAO):
List of dictionaries representing records
"""
with get_connection() as db:
table_name = self._convert_sql('[dbo].[DiscreteMaterialPlanData]')
table_name = self._convert_sql("[dbo].[DiscreteMaterialPlanData]")
placeholder = self._get_placeholder()
sql = f"SELECT * FROM {table_name} WHERE SourceNumber = {placeholder}"
return db.execute_query(sql, (order_id,))
@@ -260,11 +290,11 @@ class DiscreteMaterialPlanDAO(BaseDAO):
Number of records
"""
with get_connection() as db:
table_name = self._convert_sql('[dbo].[DiscreteMaterialPlanData]')
table_name = self._convert_sql("[dbo].[DiscreteMaterialPlanData]")
placeholder = self._get_placeholder()
sql = f"SELECT COUNT(*) as count FROM {table_name} WHERE PlanNumber = {placeholder}"
result = db.execute_query(sql, (plan_number,))
return result[0]['count'] if result else 0
return result[0]["count"] if result else 0
def count_all(self) -> int:
"""
@@ -274,10 +304,10 @@ class DiscreteMaterialPlanDAO(BaseDAO):
Total number of records
"""
with get_connection() as db:
table_name = self._convert_sql('[dbo].[DiscreteMaterialPlanData]')
table_name = self._convert_sql("[dbo].[DiscreteMaterialPlanData]")
sql = f"SELECT COUNT(*) as count FROM {table_name}"
result = db.execute_query(sql)
return result[0]['count'] if result else 0
return result[0]["count"] if result else 0
def delete_by_plan_numbers(self, plan_numbers: List[str]) -> int:
"""
@@ -301,7 +331,7 @@ class DiscreteMaterialPlanDAO(BaseDAO):
unique plans, unique orders, and date range
"""
with get_connection() as db:
table_name = self._convert_sql('[dbo].[DiscreteMaterialPlanData]')
table_name = self._convert_sql("[dbo].[DiscreteMaterialPlanData]")
sql = f"""
SELECT
COUNT(*) as total_records,
@@ -324,7 +354,7 @@ class DiscreteMaterialPlanDAO(BaseDAO):
List of dictionaries representing all records
"""
with get_connection() as db:
table_name = self._convert_sql('[dbo].[DiscreteMaterialPlanData]')
table_name = self._convert_sql("[dbo].[DiscreteMaterialPlanData]")
sql = f"SELECT * FROM {table_name}"
return db.execute_query(sql)
@@ -346,10 +376,10 @@ class DiscreteMaterialPlanDAO(BaseDAO):
all_results = []
for i in range(0, len(source_numbers), batch_size):
batch = source_numbers[i:i + batch_size]
batch = source_numbers[i : i + batch_size]
placeholder = self._get_placeholder()
placeholders = ','.join([placeholder for _ in batch])
table_name = self._convert_sql('[dbo].[DiscreteMaterialPlanData]')
placeholders = ",".join([placeholder for _ in batch])
table_name = self._convert_sql("[dbo].[DiscreteMaterialPlanData]")
sql = f"SELECT * FROM {table_name} WHERE SourceNumber IN ({placeholders})"
with get_connection() as db:
results = db.execute_query(sql, tuple(batch))
@@ -368,7 +398,7 @@ class DiscreteMaterialPlanDAO(BaseDAO):
List of dictionaries representing deduplicated records
"""
with get_connection() as db:
table_name = self._convert_sql('[dbo].[DiscreteMaterialPlanData]')
table_name = self._convert_sql("[dbo].[DiscreteMaterialPlanData]")
sql = f"""
WITH RankedRecords AS (
@@ -414,10 +444,10 @@ class DiscreteMaterialPlanDAO(BaseDAO):
all_results = []
for i in range(0, len(source_numbers), batch_size):
batch = source_numbers[i:i + batch_size]
batch = source_numbers[i : i + batch_size]
placeholder = self._get_placeholder()
placeholders = ','.join([placeholder for _ in batch])
table_name = self._convert_sql('[dbo].[DiscreteMaterialPlanData]')
placeholders = ",".join([placeholder for _ in batch])
table_name = self._convert_sql("[dbo].[DiscreteMaterialPlanData]")
sql = f"""
WITH RankedRecords AS (
@@ -458,23 +488,23 @@ class DiscreteMaterialPlanDAO(BaseDAO):
Returns:
List of unique material names
"""
table_name = self._convert_sql('[dbo].[DiscreteMaterialPlanData]')
table_name = self._convert_sql("[dbo].[DiscreteMaterialPlanData]")
if source_numbers is None or not source_numbers:
# No filter - get all unique material names
sql = f"SELECT DISTINCT MaterialName FROM {table_name} WHERE MaterialName IS NOT NULL"
with get_connection() as db:
results = db.execute_query(sql)
return [r['MaterialName'] for r in results if r.get('MaterialName')]
return [r["MaterialName"] for r in results if r.get("MaterialName")]
else:
# Filter by SourceNumber list
batch_size = 2000
all_material_names = set()
for i in range(0, len(source_numbers), batch_size):
batch = source_numbers[i:i + batch_size]
batch = source_numbers[i : i + batch_size]
placeholder = self._get_placeholder()
placeholders = ','.join([placeholder for _ in batch])
placeholders = ",".join([placeholder for _ in batch])
sql = f"""
SELECT DISTINCT MaterialName
FROM {table_name}
@@ -483,7 +513,9 @@ class DiscreteMaterialPlanDAO(BaseDAO):
"""
with get_connection() as db:
results = db.execute_query(sql, tuple(batch))
batch_materials = [r['MaterialName'] for r in results if r.get('MaterialName')]
batch_materials = [
r["MaterialName"] for r in results if r.get("MaterialName")
]
all_material_names.update(batch_materials)
return list(all_material_names)