backup: 价格bug修复 + 订单批量识别设计文档

This commit is contained in:
2026-07-19 16:17:12 +08:00
parent 968a6f8d22
commit cc66448327
6 changed files with 473 additions and 35 deletions
+13 -23
View File
@@ -352,29 +352,8 @@ class ExcelProcessor:
product['package_quantity'] = package_quantity
logger.info(f"解析已设置的规格: {product['specification']} -> 包装数量={package_quantity}")
# 新增逻辑:根据规格推断单位为"件"
if not product['unit'] and product.get('barcode') and product.get('specification') and product.get('quantity') and product.get('price') is not None:
# 检查规格是否符合容量*数量格式
volume_pattern = r'(\d+(?:\.\d+)?)\s*(?:ml|[mL]L|l|L|升|毫升)[*×xX](\d+)'
match = re.search(volume_pattern, product['specification'])
# 判断是否需要推断单位为"件"
if match:
product['unit'] = ''
logger.info(f"根据规格推断单位: {product['specification']} -> 单位=件")
else:
# 检查简单的数量*数量格式
simple_pattern = r'(\d+)[*×xX](\d+)'
match = re.search(simple_pattern, product['specification'])
if match:
product['unit'] = ''
logger.info(f"根据规格推断单位: {product['specification']} -> 单位=件")
# 应用单位转换规则
product = self.unit_converter.process_unit_conversion(product)
# 如果数量为0但单价和金额都存在,计算数量 = 金额/单价
if (product['quantity'] == 0 or product['quantity'] is None) and product['price'] > 0 and product['amount']:
# 如果数量为0但单价和金额都存在,先算数量(必须在 unit 推断之前,否则 unit 推断条件因 quantity=0 被跳过)
if (product['quantity'] == 0 or product['quantity'] is None) and product['price'] and product['amount']:
try:
amount = parse_monetary_string(product['amount'])
if amount is not None and amount > 0:
@@ -383,6 +362,17 @@ class ExcelProcessor:
product['quantity'] = quantity
except Exception as e:
logger.warning(f"通过金额和单价计算数量失败: {e}")
# 推断单位为"件":仅依赖规格文本(spec 已经是 "1*N"),不再要求 quantity 非零
if not product['unit'] and product.get('specification'):
volume_pattern = r'(\d+(?:\.\d+)?)\s*(?:ml|[mL]L|l|L|升|毫升)[*×xX](\d+)'
simple_pattern = r'(\d+)[*×xX](\d+)'
if re.search(volume_pattern, product['specification']) or re.search(simple_pattern, product['specification']):
product['unit'] = ''
logger.info(f"根据规格推断单位: {product['specification']} -> 单位=件")
# 应用单位转换规则
product = self.unit_converter.process_unit_conversion(product)
# 应用记忆库补全
product = self._apply_memory(product)