v1.1.0: 版本更新 - 增强规格解析能力、修复条码映射功能、改进特殊条码处理

This commit is contained in:
2025-05-30 10:24:30 +08:00
parent c0fceea9dc
commit b3c175836a
10 changed files with 350 additions and 77 deletions
+28
View File
@@ -297,6 +297,17 @@ class UnitConverter:
except ValueError:
pass
# 处理带重量单位的规格,如5kg*6、500g*12等
weight_match = re.match(r'([\d\.]+)(?:kg|g|克|千克|公斤)[*](\d+)', spec, re.IGNORECASE)
if weight_match:
try:
# 对于重量单位,使用1作为一级包装,后面的数字作为二级包装
level2 = int(weight_match.group(2))
logger.info(f"解析重量规格: {spec} -> 1*{level2}")
return 1, level2, None
except ValueError:
pass
# 处理带容量单位的规格,如500ml*15, 1L*12等
ml_match = re.match(r'(\d+)(?:ml|毫升)[*](\d+)', spec, re.IGNORECASE)
if ml_match:
@@ -340,6 +351,17 @@ class UnitConverter:
return 1, quantity, None
except ValueError:
pass
# 处理不规范格式,如IL*12, 6oo*12等,从中提取数字部分作为包装数量
# 只要规格中包含*和数字,就尝试提取*后面的数字作为件数
irregular_match = re.search(r'[^0-9]*\*(\d+)', spec)
if irregular_match:
try:
level2 = int(irregular_match.group(1))
logger.info(f"解析不规范规格: {spec} -> 1*{level2}")
return 1, level2, None
except ValueError:
pass
# 默认值
logger.warning(f"无法解析规格: {spec},使用默认值1*1")
@@ -440,6 +462,12 @@ class UnitConverter:
'6923644268923': {
'map_to': '6923644268480',
'description': '条码映射:6923644268923 -> 6923644268480'
},
# 添加特殊条码6958620703716,既需要特殊处理又需要映射
'6958620703716': {
'specification': '1*14',
'map_to': '6958620703907',
'description': '特殊处理: 规格1*14,同时映射到6958620703907'
}
}
+6 -6
View File
@@ -45,12 +45,6 @@ class BarcodeMapper:
special_config = self.special_barcodes[barcode]
# 处理条码映射
if 'map_to' in special_config:
new_barcode = special_config['map_to']
logger.info(f"条码映射: {barcode} -> {new_barcode}")
result['barcode'] = new_barcode
# 处理特殊倍数
if 'multiplier' in special_config:
multiplier = special_config.get('multiplier', 1)
@@ -79,5 +73,11 @@ class BarcodeMapper:
result['quantity'] = new_quantity
result['price'] = new_price
result['unit'] = target_unit
# 处理条码映射 - 放在后面以便可以同时进行特殊处理和条码映射
if 'map_to' in special_config:
new_barcode = special_config['map_to']
logger.info(f"条码映射: {barcode} -> {new_barcode}")
result['barcode'] = new_barcode
return result