From fb12e63c4cb9ddb40ec98abfefc015b91153e98a Mon Sep 17 00:00:00 2001 From: houhuan Date: Fri, 12 Dec 2025 13:46:00 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E4=BE=9B=E5=BA=94=E5=95=86=E7=AE=A1?= =?UTF-8?q?=E7=90=86):=20=E6=96=B0=E5=A2=9E=E8=A7=84=E5=88=99=E5=BC=95?= =?UTF-8?q?=E6=93=8E=E4=B8=8E=E8=AF=8D=E5=85=B8=E9=85=8D=E7=BD=AE=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refactor(处理器): 重构通用供应商处理器以支持规则引擎 docs: 更新README与文档说明供应商管理功能 build: 更新打包脚本注入版本信息 test: 添加规则引擎单元测试 --- .gitignore | 42 +- ...化列映射向导的尺寸、置顶行为与字段标签.md | 43 + .../供应商管理GUI与可视化配置方案.md | 41 + .../供应商规则系统全面优化与落地计划.md | 70 + .../供应商词典与规则编辑器扩展方案.md | 52 + .../documents/修复“验证匹配”面板未加载问题.md | 30 + .../基于样例结果的验证闭环与规则简化优化.md | 57 + .trae/documents/继续执行周计划(任务7–10).md | 54 + .trae/documents/继续改进并显性呈现改动.md | 52 + .../解决“只有订单数量列”场景的可操作方案.md | 50 + .../通用采购单规范化与规则引擎优化方案.md | 42 + README.md | 58 + app/core/excel/processor.py | 7 +- app/core/excel/validators.py | 2 +- app/core/handlers/rule_engine.py | 150 + .../generic_supplier_processor.py | 65 +- build_exe.py | 48 + config.ini | 2 + config/barcode_mappings.json | 8 + config/suppliers_config.json | 204 +- data/user_settings.json | 8 + logs/app.core.excel.converter.log | 1864 +++++++++++ ...excel.handlers.unit_converter_handlers.log | 120 + logs/app.core.excel.merger.log | 94 + logs/app.core.excel.processor.log | 2726 +++++++++++++++++ logs/app.core.excel.validators.log | 494 +++ logs/app.core.ocr.baidu_ocr.log | 5 + logs/app.core.ocr.table_ocr.log | 130 + logs/app.core.utils.file_utils.log | 3 + logs/app.services.ocr_service.log | 52 + logs/app.services.order_service.log | 97 + templates/商品资料.xlsx | Bin 0 -> 788274 bytes 启动器.py | 2070 ++++++++++++- 33 files changed, 8678 insertions(+), 62 deletions(-) create mode 100644 .trae/documents/优化列映射向导的尺寸、置顶行为与字段标签.md create mode 100644 .trae/documents/供应商管理GUI与可视化配置方案.md create mode 100644 .trae/documents/供应商规则系统全面优化与落地计划.md create mode 100644 .trae/documents/供应商词典与规则编辑器扩展方案.md create mode 100644 .trae/documents/修复“验证匹配”面板未加载问题.md create mode 100644 .trae/documents/基于样例结果的验证闭环与规则简化优化.md create mode 100644 .trae/documents/继续执行周计划(任务7–10).md create mode 100644 .trae/documents/继续改进并显性呈现改动.md create mode 100644 .trae/documents/解决“只有订单数量列”场景的可操作方案.md create mode 100644 .trae/documents/通用采购单规范化与规则引擎优化方案.md create mode 100644 README.md create mode 100644 app/core/handlers/rule_engine.py create mode 100644 data/user_settings.json create mode 100644 templates/商品资料.xlsx diff --git a/.gitignore b/.gitignore index 83c4521..9afac1b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,29 +1,27 @@ -# Python缓存文件 +# Python __pycache__/ -*.py[cod] -*$py.class +*.pyc +*.pyo +.pytest_cache/ +.venv/ -# 虚拟环境 -venv/ -env/ -ENV/ +# Build & dist +build/ +dist/ +release/ +*.spec -# 日志文件 -logs/*.log -logs/*.active -*.log.* - -# 临时文件和缓存 +# Logs & temp +logs/ data/temp/ -data/*.bak -*.bak + +# Runtime outputs +data/output/ +data/result/ + +# OS/IDE .DS_Store - -# 输出文件(可选是否忽略) -# data/output/ - -# IDE文件 +Thumbs.db .idea/ .vscode/ -*.swp -*.swo \ No newline at end of file + diff --git a/.trae/documents/优化列映射向导的尺寸、置顶行为与字段标签.md b/.trae/documents/优化列映射向导的尺寸、置顶行为与字段标签.md new file mode 100644 index 0000000..5b4c2db --- /dev/null +++ b/.trae/documents/优化列映射向导的尺寸、置顶行为与字段标签.md @@ -0,0 +1,43 @@ +## 问题与目标 +- 弹窗尺寸偏小,不便操作 +- 弹窗及文件选择后没有在最上层,易被其他窗口遮挡 +- 字段英文名不直观,需要显示中文对应(银豹模板列) + +## 改进方案 +### 1. 弹窗尺寸与置顶行为 +- 将列映射向导窗口尺寸调整为 `780x660`,保持自适应(子控件 `fill=tk.BOTH, expand=True`) +- 打开向导时:`dlg.lift()`、`dlg.attributes('-topmost', True)`,`after_idle` 取消置顶但保持焦点;`dlg.transient(root)`、`dlg.grab_set()` 防止被遮挡 +- 选择文件后的回调中再次 `dlg.lift()` 和短暂置顶,确保返回后窗口在最上层 +- 同步为模板管理窗口应用同样策略 + +### 2. 字段标签中文提示 +- 列映射向导的标准字段改为按 `ColumnMapper.STANDARD_COLUMNS` 动态生成(若可用),并为每个字段追加中文说明,例如: + - `barcode(条码)` + - `name(商品名称)` + - `specification(规格)` + - `quantity(数量)` + - `unit(单位)` + - `unit_price(采购单价)` + - `total_price(金额/小计)` + - `category(类别)` + - `brand(品牌)` + - `supplier(供应商)` +- 若 `ColumnMapper` 不可用,则用内置 `friendly_labels` 字典生成上述标签 + +### 3. 布局优化与可用性 +- 保持“文件路径 + 浏览 + 预览前30行 + 加载列”四项同一行,按钮设 `padx=6`,保证易点 +- 映射区使用 `ttk.Combobox(state='readonly')`,宽度适配,并确保行高足够(留白) +- 预览区保留顶部表格(前30行),支持点击行自动填充表头行号;加载列时按指定行读取 + +### 4. 代码改动位置 +- `启动器.py`: + - `open_column_mapping_wizard_alt`:调整几何尺寸与置顶;在“浏览”回调与预览/加载流程中补充 `lift/topmost`;扩展标准字段与中文标签 + - `open_template_manager`:统一尺寸与置顶行为 +- 仅UI与行为改动,不影响处理逻辑;保存仍写入 `suppliers_config.json` 的 `header_row` 与 `column_mapping` + +### 5. 验证 +- 打开列映射向导:窗口足够大,居中且在最上层;选择文件后窗口仍在最上层 +- 字段标签显示为英+中:如 `name(商品名称)` +- 预览前30行与加载列同一行;点击预览行自动写入表头行号;保存后提示成功并写入配置 + +请确认以上方案,确认后我将立即实施并验证。 \ No newline at end of file diff --git a/.trae/documents/供应商管理GUI与可视化配置方案.md b/.trae/documents/供应商管理GUI与可视化配置方案.md new file mode 100644 index 0000000..d476638 --- /dev/null +++ b/.trae/documents/供应商管理GUI与可视化配置方案.md @@ -0,0 +1,41 @@ +## 目标 +- 在系统设置中提供“供应商管理”GUI,支持新增/编辑/删除供应商,无需手改代码或JSON。 +- 一站式配置:基本信息、表头与列映射、规则与词典、模板管理,保存后即时生效。 + +## 界面设计 +- 入口:右侧“系统设置”新增按钮“供应商管理”。 +- 布局: + - 左栏:供应商列表(名称),支持搜索/新建/复制/删除。 + - 右侧Tab: + 1) 基本信息:`name`、`description`、`filename_patterns`、`content_indicators`、`header_row` + 2) 列映射与表头:嵌入现有“列映射向导”核心(预览前30行、表头选行、加载列、智能映射、导入/导出) + 3) 规则与词典:词典编辑(忽略词、单位同义词、包装倍数、名称正则、默认单位/包装);规则预设与规则预览(原始→规范化) + 4) 模板管理:`output_templates` 列表、当前选择与批量校验 +- 操作按钮:保存(写入`suppliers_config.json`)、重载处理器、导入/导出供应商配置(单个或全部)。 + +## 数据流与验证 +- 加载/保存:统一读写`config/suppliers_config.json`;保存后调用`ProcessorService.reload_processors()`。 +- 校验:复用`ProcessorService._validate_suppliers_config`;保存前进行schema校验,错误弹窗聚合列表。 +- 预设:提供“基础拆分与推断”规则预设;可导入/导出自定义规则。 + +## 增强逻辑(自动化建议) +- 新建供应商时,可选择样例Excel: + - 自动检测表头与初始列映射;基于列名关键词给出映射建议。 + - 词典预填:常见单位同义词、默认单位“瓶”、常见包装倍数(件/箱/提/盒)。 + +## 实施步骤 +1) 创建`open_supplier_manager`弹窗(系统设置入口),左列表+右侧Tab结构。 +2) 基本信息Tab:表单与校验;保存更新到JSON。 +3) 列映射与表头Tab:复用现有向导组件(预览/加载/智能映射/导入/导出)。 +4) 规则与词典Tab:编辑词典与规则预览,保存写入`dictionary`与`rules`。 +5) 模板管理Tab:维护`output_templates`与`current_template_index`,批量校验与报告显示。 +6) 保存与重载:统一写入后调用处理器重载并日志提示。 + +## 验证 +- GUI走查:新增/复制/删除供应商配置;规则预览正确;模板校验能识别缺失列。 +- 处理生效:保存后立刻按新规则规范化并填充模板输出。 + +## 后续扩展 +- 多供应商批量校验与报告导出;词典共享/继承;规则预设库扩展。 + +如果确认,我将开始实现该GUI及其数据流,并将现有向导整合到供应商管理中以形成一站式配置体验。 \ No newline at end of file diff --git a/.trae/documents/供应商规则系统全面优化与落地计划.md b/.trae/documents/供应商规则系统全面优化与落地计划.md new file mode 100644 index 0000000..09ee446 --- /dev/null +++ b/.trae/documents/供应商规则系统全面优化与落地计划.md @@ -0,0 +1,70 @@ +## 痛点复盘 +- 不同供应商存在强差异:列名不统一、单位混杂在数量、规格隐藏在名称、供应商缺失等 +- 现有向导只解决列映射层面,规则与词典编辑、执行顺序与生效范围不清晰 +- 缺少可视化“从原始→规范化→模板填充”的贯通验证;流程易跑不通 + +## 总体方案 +- 建立“供应商规则系统”:可配置、可视化、可预览,贯穿 映射→清洗→规则→模板 填充全链路 +- 提供“规则库 + 词典 + 执行管道”三层抽象,支持每家供应商自定义规则组合与执行顺序 +- 完善 GUI:供应商管理中的四大Tab一站式配置,规则编辑器内置预设与预览,落地即验证 + +## 数据模型 +- `suppliers_config.json` 每个供应商对象结构: + - `name`、`description` + - `filename_patterns`、`content_indicators` + - `header_row` + - `column_mapping`(源列→标准列) + - `rules`: 有序规则数组(见下) + - `dictionary`: 解析词典(`ignore_words`、`unit_synonyms`、`pack_multipliers`、`name_patterns`、`default_unit`、`default_package_quantity`) + - `output_templates`: 模板列表;`current_template_index`: 当前模板索引 + +## 规则库(首批) +- `split_quantity_unit(source)`: 拆分数量中的单位(箱/件/提/盒/瓶),无单位用默认单位 +- `extract_spec_from_name(source)`: 从名称抽取规格/包装(容量×数量/简单双乘),应用忽略词与名称正则 +- `normalize_unit(target,map)`: 单位归一(同义词→统一单位),件/箱/提/盒按包装倍数转换数量为“瓶” +- `compute_quantity_from_total()`: 数量缺失时用金额/单价回推数量 +- `fill_missing(fills)`: 缺失填充,例如单位默认“瓶” +- `mark_gift()`: 金额/单价为0或名称含“赠品/O/o/空”标记赠品 +- 后续扩展:`classify_category(name)`, `extract_brand(name)`, `strip_noise(name)` 等 + +## 执行管道 +- 处理器执行顺序:映射→清洗→规则(有序)→模板填充 +- 每条规则可访问 `dictionary`,执行结果在 DataFrame 上可追踪(供预览) +- 提供“预览栈”:展示原始→每步规则输出(多步Diff),定位问题 + +## GUI优化 +- 供应商管理: + - 左侧供应商列表(搜索/新建/复制/删除/导入/导出) + - 右侧四大Tab: + - 基本信息:必填校验与保存 + - 列映射与表头:现有向导增强(滚动条、表头选行、智能映射、导入/导出) + - 规则与词典: + - 规则编辑器(顺序可调整:上/下移动、插入/删除规则) + - 词典编辑(忽略词、单位同义词、包装倍数、名称正则、默认值) + - 规则预设(常用组合)与“应用规则预览”(展示原始→规范化两列;可切换查看逐步Diff) + - 模板管理:模板列表/当前选择与批量校验,显示缺失/多余列报告 +- 性能与体验:所有弹窗置顶回焦;滚动与水平滚动;列宽拖拽与一键导出预览为CSV + +## 使用路径(推荐) +1. 新建供应商→选样例Excel→自动表头与初始映射建议 +2. 规则预设:选择“基础拆分与推断”→应用规则预览→查看原始/规范化对比 +3. 细化词典:补充忽略词、单位同义词、包装倍数、名称正则→再次预览 +4. 保存并重载→跑一份真实文件→最近文件中打开结果核验→如有差异回到规则编辑器微调 + +## 验证与可视化 +- 单元测试:表头识别/数量拆分/名称规格解析/单位归一/数量回推/赠品标记 +- 烟雾测试:5–10类典型供货商样本端到端验证(含极端情况:无单位、名称含噪声、数量混合单位) +- 日志:每步规则执行计数与示例行输出(前/后5行),便于定位问题 + +## 交付物 +- 规则引擎模块与规范接口;处理器接入 +- 供应商管理GUI(规则编辑器、词典编辑器、预设与预览) +- 扩展配置示例与测试数据;打包脚本校验资源 + +## 里程碑 +- Day 1:规则库与引擎扩展、处理器接入、预览栈接口 +- Day 2:GUI规则编辑器(顺序调整/增删)、词典编辑器、规则预设与预览 +- Day 3:模板批量校验、单元与烟雾测试、日志强化 +- Day 4:回归修正与打包交付 + +确认后我将开始实现上述内容,确保不同供应商可独立配置精细规则并“所见即所得”验证,流程稳定可跑通。 \ No newline at end of file diff --git a/.trae/documents/供应商词典与规则编辑器扩展方案.md b/.trae/documents/供应商词典与规则编辑器扩展方案.md new file mode 100644 index 0000000..3c0f479 --- /dev/null +++ b/.trae/documents/供应商词典与规则编辑器扩展方案.md @@ -0,0 +1,52 @@ +## 目标 +- 为具体供应商定制更细的解析规则(词典、包装倍数、忽略词、同义单位),并在列映射向导提供可视化编辑入口与预览。 + +## 配置扩展 +- 扩展 `suppliers_config.json` 每个供应商对象新增: + - `dictionary`: 解析词典 + - `ignore_words`: ["白膜","彩膜","赠品"](在名称解析时剔除) + - `unit_synonyms`: {"箱":"件","提":"件","盒":"件","瓶":"瓶"} + - `pack_multipliers`: {"件": 24, "箱": 24, "提": 12, "盒": 10}(缺规格时用于单位归一) + - `name_patterns`: [正则表达式](从名称抽取规格/容量×数量,如 `([\d\.]+)(ml|l|升|毫升)[*×xX](\d+)`) + - `default_unit`: "瓶" + - `default_package_quantity`: 1 + - `rules`: 规则数组(与现有一致),规则在执行时可访问 `dictionary` + - `output_templates`: 模板列表;`current_template_index`: 当前选择索引 + +## 规则引擎增强 +- 在 `app/core/handlers/rule_engine.py`: + - `apply_rules(df, rules, dictionary=None)` 接口增加 `dictionary` 参数 + - `extract_spec_from_name`:先剔除 `ignore_words`,匹配 `name_patterns`,无匹配时按 `pack_multipliers` 推断包装数量 + - `normalize_unit`:使用 `unit_synonyms` 统一单位;如单位为“件/箱/提/盒”且有 `package_quantity` 或 `pack_multipliers`,数量×包装并单位归一为“瓶” + - `split_quantity_unit`:解析数量中的单位,同义词归一;无单位时用 `default_unit` + - 其余规则(回推数量、填充、赠品标记)保持不变 + +## 供应商处理器接入 +- `GenericSupplierProcessor`: + - 从 `supplier_config['dictionary']` 取词典并传入 `apply_rules`,保证每家供应商按自身词典执行 + - 若未配置词典,使用默认空词典 + +## 向导UI扩展(右侧系统设置→列映射向导) +- 增加“供应商规则”区域: + - 可编辑列表: + - 忽略词(多行输入或表格) + - 单位同义词(键值对表格:原单位→统一单位) + - 包装倍数(单位→包装数量) + - 名称正则(多行,每行一个表达式) + - 默认单位、默认包装数量(输入框) + - 操作:新增/删除、导入(JSON)/导出(JSON)、保存 + - 规则预览: + - 选择预设(基础拆分与推断或自定义),点击“应用规则预览”,显示“原始/规范化”两列树表对比 + - 保存行为:将 `dictionary` 与 `rules` 写入对应供应商的 `suppliers_config.json` 并重载处理器 + +## 验证与测试 +- 单元测试: + - 名称解析(容量×数量、简单乘法、忽略词影响、同义词归一) + - 数量拆分与单位归一(“4瓶/1箱/3件/2提/2盒”) + - 包装倍数应用与数量回推 +- 烟雾测试:构建 5–10 类供货商样本,验证端到端转换与模板填充可用 + +## 交付 +- 完成词典与规则编辑入口、配置扩展与引擎接入,提交验证报告与示例配置;保留导入/导出便于你迭代调整。 + +确认后我将按此方案实现:扩展配置→增强规则引擎→处理器接入→向导UI与预览→测试。 \ No newline at end of file diff --git a/.trae/documents/修复“验证匹配”面板未加载问题.md b/.trae/documents/修复“验证匹配”面板未加载问题.md new file mode 100644 index 0000000..4396a8b --- /dev/null +++ b/.trae/documents/修复“验证匹配”面板未加载问题.md @@ -0,0 +1,30 @@ +## 原因 + +* 按钮调用了 `safe_open_validation_panel`,其内部检查 `open_validation_panel` 是否存在;当前代码中未定义该函数,导致始终提示“程序未加载,请重启”。 + +## 修复方案 + +* 在 `启动器.py` 中新增顶层函数 `open_validation_panel(log_widget)`,与其它 `open_*` 工具函数并列,确保加载顺序稳定。 + +* 保留按钮绑定到 `safe_open_validation_panel`,其将直接调用新定义的 `open_validation_panel`。 + +## 实施 + +* 添加 `open_validation_panel`: + + * 入口参数:`log_widget` + + * 实现与之前描述一致:供应商选择、原始文件/期望结果选择、运行验证生成差异、生成建议并“应用建议”写回配置。 + +* 放置位置:`show_supported_processors` 与 `safe_open_validation_panel` 相邻区域,确保可见与可用。 + +## 验证 + +* 启动程序→系统设置→点击“验证匹配”,应正常打开面板无提示。 + +* 选择“农夫山泉”与提供的文件后运行验证,查看差异与建议。 + +## 预期 + +* 面板不再提示重启;功能可用。 + diff --git a/.trae/documents/基于样例结果的验证闭环与规则简化优化.md b/.trae/documents/基于样例结果的验证闭环与规则简化优化.md new file mode 100644 index 0000000..3aba29e --- /dev/null +++ b/.trae/documents/基于样例结果的验证闭环与规则简化优化.md @@ -0,0 +1,57 @@ +## 目标 +- 用你提供的原始文件与期望结果跑通“验证闭环”,自动对比差异并生成修正建议。 +- 将“规则设置”改造成通俗易懂的“向导 + 快速模板 + 自动识别”,让普通用户也能完成操作。 + +## 验证闭环(立即可用) +- 新增“验证匹配”面板: + - 选择原始Excel:`data/output/微信图片_20251115212128_148_108.xlsx` + - 选择期望结果:`data/result/采购单_微信图片_20251115212128_148_108.xls` + - 一键运行当前供应商流程 → 自动生成临时结果 → 与期望结果进行单元格级对比 + - 输出差异报告: + - 列差异(列缺失/多余/名称不一致) + - 行差异(按条码或名称对齐,数量/单位/单价/金额差异) + - 规则差异归因(例如:数量未拆分、单位未归一) + - 按“应用建议”自动调整当前供应商的规则/词典(可撤销) + +## 简化操作设计 +- 两种模式: + - 简单模式(默认): + - 步骤:选择文件 → 选择供应商 → 选择快速模板 → 预览 → 生成 + - 字段中文说明(name(商品名称)、quantity(数量)等)与自动建议 + - 高级模式: + - 可编辑规则顺序与参数、词典、正则;具备步骤预览与Diff +- 快速模板: + - “无数量/单位列”模板:自动配置拆分数量单位→名称提取规格→单位归一→缺省填充→标记赠品 + - “纯金额/单价反推数量”模板:直接回推数量 + - “条码驱动匹配”模板:条码为主键对齐 + +## 自动识别与建议 +- 列名识别:从表头关键词自动映射常用字段 +- 单位与数量:从“订单数量”拆分,单位同义词与包装倍数自动套用 +- 名称提取规格:词典与正则库(容量×数量、双乘、“550水24白膜”)自动解析;失败行计数提示 +- 自动修正建议: + - 若数量为空:建议添加“split_quantity_unit(source=订单数量)” + - 若单位为“箱/件/提/盒”:建议添加“normalize_unit + pack_multipliers” + - 若金额与单价存在且数量为空:建议添加“compute_quantity_from_total” + +## 差异对比与一键修复 +- 差异可视化:原始→规范化→模板填充三栏对比;支持仅显示变化列、导出CSV +- 一键修复:将建议以“卡片”列表展示,点击应用后立即刷新预览;支持撤销上一步 + +## 交互流程 +1) 进入“验证匹配” → 选择原始与期望 → 运行 → 查看差异 +2) 点击“应用建议”直观修复规则/词典 → 差异减少直至匹配 +3) 切回“简单模式”一键生成采购单 + +## 技术实现要点 +- 供应商配置:继续使用 `suppliers_config.json`,但在GUI中隐藏JSON细节,改为中文表单与下拉 +- 规则执行:保留引擎,新增“建议生成器”根据差异报告生成规则/词典变更 +- 对比对齐:优先按条码对齐;无条码时按名称近似匹配(去噪后模糊比对) + +## 里程碑 +- Day 1:验证面板与差异对比;建议生成器(数量/单位/规格/金额) +- Day 2:简单/高级模式切换;快速模板与自动识别 +- Day 3:一键修复与撤销;导出差异报告 +- Day 4:回归测试与打包;提供“农夫山泉”预设并用你的样例验证匹配 + +确认后我将实现“验证匹配”面板并接入建议修复,先用你提供的农夫山泉样例跑通闭环,再推广到其它供应商。 \ No newline at end of file diff --git a/.trae/documents/继续执行周计划(任务7–10).md b/.trae/documents/继续执行周计划(任务7–10).md new file mode 100644 index 0000000..46a8d97 --- /dev/null +++ b/.trae/documents/继续执行周计划(任务7–10).md @@ -0,0 +1,54 @@ +## 目标 +- 按照优化实施计划,从第3周任务7/8开始全面落地,并同时推进第4周任务9/10,确保可视化、配置驱动和交付质量提升。 + +## 任务7:列映射向导完善 +- 字段扩展与中文提示:标准字段统一以英+中展示,支持更多列(条码、名称、规格、数量、单位、单价、金额/小计、分类、品牌、供应商)。 +- 自动建议增强:结合样本数据统计(字符串比例、特殊关键词、数值特征)给出更可靠的映射建议。 +- 表头定位增强:支持预览选择,并保存 `header_row`;向导内清晰提示当前使用的表头行。 +- 配置管理:支持导入/导出映射方案(JSON),可一键应用到多供应商。 +- 热重载与快捷入口:保存后自动重载供应商处理器;在系统设置区和快捷键中提供入口。 + +## 任务8:模板管理与校验完善 +- 模板组管理:支持为每个供应商选择/保存多个模板(默认、备用),UI下拉选择当前模板。 +- 差异检测:读取模板首行表头与系统标准列比较,列表显示缺失/多余字段与修复建议。 +- 批量校验:可一次性校验选定供应商的所有模板组并生成报告。 +- 示例生成:按标准列生成示例模板,便于对齐格式。 + +## 任务9:单元测试与烟雾测试 +- 单元测试(pytest): + - `_find_header_row` 不同格式表头识别(第一行/中间行/合并行/空白行混杂)。 + - `GenericSupplierProcessor` 列映射、清洗规则(remove_rows/fill_na/convert_type)与公式计算。 + - 模板填充的关键路径(必要列检测、数量/赠送量/单价写入)。 +- 烟雾测试:准备小样本(图片→OCR→Excel→采购单),验证端到端可用,记录日志与输出。 + +## 任务10:打包与版本信息 +- 版本信息:主窗口标题与“关于”对话框显示版本号、构建时间、更新日志入口。 +- 打包校验:构建后检查模板与配置文件存在性;打包时拷贝资源并生成校验报告。 +- 更新脚本:完善 `build_exe.py` 支持版本号注入与资源校验失败时中止。 + +## 实现要点 +- GUI:系统设置页整合入口;对话框使用 780×660/540 尺寸,`topmost`/`lift`/`focus_force` 保证焦点。 +- 配置:`suppliers_config.json` 增加 `header_row`、`column_mapping`、`output_templates`(数组)与当前选择索引。 +- 处理器:优先使用保存的表头行;模板管理选择的模板在处理时应用。 +- 日志与提示:保存/校验/重载操作统一写入日志面板并气泡提示。 + +## 验证 +- 交互走查:向导流程顺畅、字段标签明确、置顶行为正常。 +- 单元测试通过率达标(≥90%覆盖关键模块);烟雾测试输出正确文件且无异常。 +- 打包后 EXE 启动显示版本信息;资源齐备,最近文件可双击打开。 + +## 变更范围 +- `启动器.py`(设置页UI、向导与模板管理弹窗) +- `app/core/processors/supplier_processors/generic_supplier_processor.py`(读取与映射逻辑) +- `app/core/excel/processor.py`(表头行识别与模板填充校验) +- `config/suppliers_config.json`(结构扩展) +- `tests/`(新增pytest用例与烟雾测试脚本) +- `build_exe.py`(版本注入与校验) + +## 时间安排 +- Day 1:任务7 UI/配置完成,处理器联动与验证 +- Day 2:任务8 模板管理增强与批量校验 +- Day 3:任务9 单元测试与烟雾测试 +- Day 4:任务10 打包与版本信息,回归测试与文档补充 + +确认后我将按以上计划开始实施并逐项提交验证结果。 \ No newline at end of file diff --git a/.trae/documents/继续改进并显性呈现改动.md b/.trae/documents/继续改进并显性呈现改动.md new file mode 100644 index 0000000..091a19d --- /dev/null +++ b/.trae/documents/继续改进并显性呈现改动.md @@ -0,0 +1,52 @@ +## 概览 +- 目标:让改动更可见并提升识别/处理准确性与可操作性 +- 范围:GUI入口与提示、表头识别与手动指定、供应商配置联动、交互一致性 + +## 可见入口改造 +- 在“Excel处理→特殊处理”区新增两个明显按钮: + - “列映射向导”:加载 Excel 源列 → 映射到标准列 → 保存至 `config/suppliers_config.json` + - “模板管理”:选择模板、校验表头列是否包含必需项 → 保存路径至供应商配置 +- 在“快捷操作”区补充一个“显示处理器类型”入口,便于确认支持的文件类型 +- 在保存成功后增加气泡提示与日志条目(log 面板出现“列映射已保存”“模板路径已保存”) + +## 手动表头行支持 +- 在“列映射向导”弹窗增加“表头行号(从1开始)”输入框: + - 加载列时按照指定行重读 Excel 并展示源列 + - 保存时将 `header_row`(零基索引)写入 `suppliers_config.json` +- 通用供应商处理器读取时优先使用 `supplier_config['header_row']`;未设置时执行自动表头检测(关键词+非空比例+字符串比例) + +## 自动表头检测增强 +- Excel 单文件处理与通用供应商处理器: + - 扫描范围扩大到前 30 行 + - 扩充关键词:加入金额类(“金额/小计/总计/合计/合计金额”) + - 综合评分:关键词命中+非空比例+字符串比例,阈值达到即判为表头;否则选第一个有效行 + +## 交互与一致性 +- “单个识别”按钮直接弹出图片选择(只允许 `jpg/jpeg/png/bmp`),取消即终止 +- “单个处理”按钮弹出 Excel 选择(只允许 `xlsx/xls`),取消即终止,不再默认处理最新 Excel +- 处理完成后不再自动打开 `result/output` 目录,改为通过“最近文件”双击打开 +- 最近文件仅记录图片/Excel,自动过滤无效并按修改时间降序展示,空历史时从 `data/output`、`data/result` 回填合规文件 + +## 供应商配置联动 +- `suppliers_config.json`: + - `column_mapping`:保存源列→标准列映射 + - `header_row`:保存手动指定的表头行(零基) + - `output_template`:保存模板路径(相对路径) +- 处理器加载时校验并日志提示不合法项,保留已通过的配置 + +## 验证与可视化 +- 操作日志:保存映射/模板时写入成功日志 +- 处理器信息:通过“显示处理器类型”对话框列出支持的扩展名和描述 +- 手动表头验证:在向导中“加载列”后,源列下拉应出现正确列名;处理后“最近文件”出现输出采购单 + +## 预计改动位置 +- GUI按钮与向导弹窗:`启动器.py`(特殊处理区与工具函数) +- 自动表头检测与手动表头使用: + - Excel处理:`app/core/excel/processor.py` 的 `_find_header_row`、`process_specific_file` + - 通用供应商处理:`app/core/processors/supplier_processors/generic_supplier_processor.py` 的 `_read_supplier_data`、`_find_header_row` +- 供应商配置:`config/suppliers_config.json` + +## 交付 +- 提交代码改动后,更新打包 EXE,便携包包含上述 UI 与功能;提供操作说明与可见验证点。 + +请确认以上计划,确认后我将按此逐项实现并验证。 \ No newline at end of file diff --git a/.trae/documents/解决“只有订单数量列”场景的可操作方案.md b/.trae/documents/解决“只有订单数量列”场景的可操作方案.md new file mode 100644 index 0000000..9aa8da9 --- /dev/null +++ b/.trae/documents/解决“只有订单数量列”场景的可操作方案.md @@ -0,0 +1,50 @@ +## 你现在就能这样做 +- 目标:在没有“规格/数量/单位”列、只有“订单数量”列(如“4瓶/1箱/5箱/3件”)时,拆分出数量与单位,并按名称提取规格,最终规范化为银豹模板字段。 + +### A. 最小映射(只为模板填充) +- 在“供应商管理 → 列映射与表头”页,只需映射这些常用列: + - name ← 商品名称 + - barcode ← 条码(如有) + - unit_price ← 单价(如有) + - total_price ← 金额/小计(如有) +- 不需要映射“数量/单位/规格”,后续用规则直接从原始列生成。 + +### B. 规则与词典设置(关键) +- 在“供应商管理 → 规则与词典”页: +1) 规则列表按顺序添加: + - split_quantity_unit,参数:source=订单数量 + - extract_spec_from_name,参数:source=商品名称 + - normalize_unit,参数:target=unit,map={"箱":"件","提":"件","盒":"件"} + - fill_missing,参数:fills={"unit":"瓶"} + - mark_gift(可选) + - compute_quantity_from_total(可选,当只有金额/单价时) +2) 词典设置: + - unit_synonyms:{"箱":"件","提":"件","盒":"件","瓶":"瓶"} + - pack_multipliers:{"件":24,"箱":24,"提":12,"盒":10}(根据你的供应商习惯调整) + - default_unit:瓶 + - default_package_quantity:1 + - ignore_words:如(白膜、彩膜、赠品) + - name_patterns(每行一个正则): + - (\d+(?:\.\d+)?)(ml|l|升|毫升)[*×xX](\d+) + - (\d+)[*×xX](\d+)瓶 + - 需要时加入供应商特有格式,如“550水24白膜”可匹配“(\d{2,3}).*?(\d{1,3})”并将第二组当作包装数 + +### C. 预览与验证 +- 在“规则与词典”页选择Excel,点击“生成步骤预览”: + - 看“原始 → 规范化”两侧表,对比是否出现 quantity(数值)、unit(单位)、specification、package_quantity + - 在“预览步骤”中逐步查看每一条规则的结果;必要时导出CSV核对 +- 保存后会自动重载处理器;用真实文件跑一次,结果会出现在“最近文件”,双击打开核验。 + +### D. 解释关键点 +- 映射是为了模板填充字段的命名统一;对于“订单数量”这种来源列,规则会直接读取 source=订单数量,不要求你把它映射成标准列。 +- 规则执行后,会产生标准字段:quantity、unit、specification、package_quantity,可被模板填充。 +- normalize_unit会用词典的pack_multipliers或name解析出的package_quantity,自动把“件/箱/提/盒”的数量换算成“瓶”,并将unit统一为“瓶”。 + +## 我将继续优化的点(让流程更清晰) +1) 规则表单中的“来源列”改为可选下拉(直接从Excel列名取值),无需手填。 +2) 步骤预览支持“仅显示变化的列(Diff模式)”与“错误计数”(未匹配的行统计)。 +3) 提供“无数量/单位列”的快速模版:自动添加上述规则与词典默认值,一键套用。 +4) 规则帮助提示:每条规则说明输入/输出字段与常见示例。 +5) 供应商级的“测试运行”:选文件→一键规范化→预览→导出结果,独立于正式处理。 + +如果你同意,我将按上述方案完善GUI交互(来源列下拉、快速模板、Diff预览、错误计数与一键测试),并把默认规则与词典预设直接提供出来,确保“只有订单数量列”的场景开箱可用。 \ No newline at end of file diff --git a/.trae/documents/通用采购单规范化与规则引擎优化方案.md b/.trae/documents/通用采购单规范化与规则引擎优化方案.md new file mode 100644 index 0000000..e08aa63 --- /dev/null +++ b/.trae/documents/通用采购单规范化与规则引擎优化方案.md @@ -0,0 +1,42 @@ +## 目标 +- 通过规则引擎把不同供货商的OCR表格规范为统一字段,并自动拆分“数量+单位”、从名称推断规格、标记赠品,最终稳定填充银豹模板。 + +## 配置与规则 +- 扩展 `suppliers_config.json`: + - `rules`: 规则数组(顺序执行) + - `output_templates`: 模板列表;`current_template_index`: 当前模板索引 +- 规则类型: + - `split_quantity_unit`(拆分“4瓶/1箱/3件/2提/2盒”) + - `extract_spec_from_name`(解析“1.8L×8瓶”“550水24白膜”等) + - `normalize_unit`(单位归一“箱/件/提/盒/瓶”→统一“瓶”,按包装转换数量) + - `compute_quantity_from_total`(数量缺失时用金额/单价反推) + - `infer_supplier`(文件名/内容推断供应商) + - `fill_missing`(填默认值) + - `mark_gift`(金额/单价=0或“赠品/O/o/空”) + +## 实现 +- 新建 `app/core/handlers/rule_engine.py`:输入DataFrame与规则列表,返回规范化DataFrame +- 在 `GenericSupplierProcessor` 中:列映射→清洗→规则引擎→输出 +- 列映射向导增强: + - 增加“规则预设”选择与“应用规则预览”按钮,显示原始/规范化后的对比 + - 支持导入/导出(映射+规则)JSON +- 模板管理增强:模板组选择、批量校验、示例模板生成 + +## 解析与正则 +- 名称解析: + - 容量×数量:`(\d+(?:\.\d+)?)(ml|l|升|毫升)[*×xX](\d+)` + - 简单数量×数量:`(\d+)[*×xX](\d+)` + - 词典忽略词:如“白膜”等 +- 数量拆分:`(?P\d+(?:\.\d+)?)(?P箱|件|提|盒|瓶)` + +## 验证 +- 单元测试覆盖规则与表头识别;烟雾测试涵盖“无单位/规格/数量混杂”的样本 +- GUI预览确认规则效果;保存后热重载处理器 + +## 里程碑 +- Day 1:规则引擎与处理器接入 +- Day 2:向导规则预览与导入/导出;模板组管理 +- Day 3:测试与样本库 +- Day 4:打包与交付验证 + +请确认,我将立即开始实现并逐步提交验证结果。 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..201d913 --- /dev/null +++ b/README.md @@ -0,0 +1,58 @@ +# 益选 OCR 订单处理系统 + +## 概览 +- 面向零售与分销场景的采购单处理工具,支持图片 OCR → Excel 规范化 → 模板填充 → 合并导出全流程 +- 通过供应商管理与规则引擎,适配不同供应商的格式差异(数量含单位、名称包含规格、缺失列补齐) +- 提供验证匹配面板与单价校验机制,确保输出与既定模板一致且价格合理 + +## 核心功能 +- 图片/Excel处理:拖拽或选择文件,生成银豹采购单(`templates/银豹-采购单模板.xls`) +- 供应商管理(系统设置 → 供应商管理): + - 基本信息、文件名匹配、表头行号 + - 列映射与表头:预览前30行、表头选行、加载列、智能映射、导入/导出 + - 规则与词典:忽略词、单位同义词、包装倍数、名称正则、默认单位/包装;规则预设与步骤预览(原始→逐步→规范化);导出预览CSV + - 模板管理:模板列表与当前索引,批量校验报告 +- 验证匹配面板(系统设置 → 验证匹配): + - 选择原始Excel与期望结果,运行当前流程自动对比差异并生成建议(数量拆分、单位归一、名称提规格、金额回推) + - 一键应用建议写回供应商配置与词典,减少手动调整 +- 单价校验:生成采购单后按条码比对 `templates/商品资料.xlsx` 的“进货价(必填)”;价差大于1元弹窗提示,小于等于1元不打扰 + +## 关键适配(蓉城易购) +- 新模板(如“订单1765440157955.xlsx”): + - 使用第三行作为表头(`header=2`) + - 关键词选列并重命名到期望字段:商品条码(小条码)、订购数量(小单位)、单价(小单位)、优惠后金额(小单位)、单位 + - 单位优先匹配“单位(订购单位)”列,清洗为去空白并将“件”替换为“份” + - 多条码行(逗号/顿号/斜杠/空格分隔)拆分为多行,数量均分并重算金额,单位保持订购单位 + - 新模板映射:将“优惠后金额(小单位)”作为单价,“出库小计(元)”作为金额来源 + +## 使用说明 +1. 运行程序(EXE或源码运行) +2. 在主界面: + - 拖拽或选择图片/Excel进行处理 + - 系统设置 → 供应商管理:配置供应商、列映射与规则;使用规则预览查看规范化效果 + - 系统设置 → 验证匹配:选择原始与期望文件,差异对比;应用建议后重载配置 +3. 处理成功后,采购单保存到 `data/output` 或 `data/result`,最近文件列表可双击打开查看 + +## 构建与打包 +- 依赖:Python 3.9+,虚拟环境建议 +- 安装打包工具:`pip install pyinstaller` +- 运行打包脚本:`python build_exe.py` + - 生成 EXE:`dist/OCR订单处理系统.exe` + - 生成便携包:`release/OCR订单处理系统.exe`(包含 `templates/银豹-采购单模板.xls` 与 `templates/商品资料.xlsx`) + +## Git 提交建议 +- 建议忽略构建目录与运行输出(见 `.gitignore`) +- 保留模板与配置:`templates/银豹-采购单模板.xls`、`templates/商品资料.xlsx`、`config/config.ini`、`config/barcode_mappings.json` + +## 常见问题 +- 表头识别失败:在供应商管理的“列映射与表头”页预览表头行并选择正确行号 +- 数量含单位:启用 `split_quantity_unit` 与 `normalize_unit` 规则并配置单位同义词与包装倍数 +- 名称中规格:配置 `ignore_words` 与 `name_patterns`,使用步骤预览确认解析效果 +- 单价校验未提示:确认 `templates/商品资料.xlsx` 存在且列名包含“进货价”与条码列(`商品条码/条码/barcode`) + +## 变更记录(近期) +- 新增验证匹配面板与建议修复 +- 规则预设与步骤预览(原始→逐步→规范化) +- 单价校验机制(价差>1元提示) +- 蓉城易购新模板适配(第三行表头、单位(订购单位)、多条码拆分、金额映射) + diff --git a/app/core/excel/processor.py b/app/core/excel/processor.py index 9e9b246..771328b 100644 --- a/app/core/excel/processor.py +++ b/app/core/excel/processor.py @@ -605,17 +605,16 @@ class ExcelProcessor: Returns: 表头行索引,如果未找到则返回None """ - # 定义可能的表头关键词 header_keywords = [ '条码', '条形码', '商品条码', '商品名称', '名称', '数量', '单位', '单价', - '规格', '商品编码', '采购数量', '采购单位', '商品', '品名' + '规格', '商品编码', '采购数量', '采购单位', '商品', '品名', + '金额', '小计', '总计', '合计', '合计金额' ] # 存储每行的匹配分数 row_scores = [] - # 遍历前10行(通常表头不会太靠后) - max_rows_to_check = min(10, len(df)) + max_rows_to_check = min(30, len(df)) for row in range(max_rows_to_check): row_data = df.iloc[row] score = 0 diff --git a/app/core/excel/validators.py b/app/core/excel/validators.py index 89129f2..1b3fb07 100644 --- a/app/core/excel/validators.py +++ b/app/core/excel/validators.py @@ -298,4 +298,4 @@ class ProductValidator: logger.warning(f"数量验证失败: {error_msg}") validated_product['quantity'] = 0.0 - return validated_product + return validated_product \ No newline at end of file diff --git a/app/core/handlers/rule_engine.py b/app/core/handlers/rule_engine.py new file mode 100644 index 0000000..ebd56f0 --- /dev/null +++ b/app/core/handlers/rule_engine.py @@ -0,0 +1,150 @@ +import re +import pandas as pd +from typing import List, Dict, Any, Optional + +def _split_quantity_unit(df: pd.DataFrame, source: str, dictionary: Optional[Dict[str, Any]] = None) -> pd.DataFrame: + if source in df.columns: + vals = df[source].astype(str).fillna("") + nums = [] + units = [] + default_unit = (dictionary or {}).get("default_unit", "") + unit_synonyms = (dictionary or {}).get("unit_synonyms", {}) + for v in vals: + m = re.search(r"(\d+(?:\.\d+)?)(箱|件|提|盒|瓶)", v) + if m: + nums.append(float(m.group(1))) + u = unit_synonyms.get(m.group(2), m.group(2)) + units.append(u) + else: + try: + nums.append(float(v)) + units.append(unit_synonyms.get(default_unit, default_unit)) + except: + nums.append(0.0) + units.append(unit_synonyms.get(default_unit, default_unit)) + df["quantity"] = nums + df["unit"] = units + return df + +def _extract_spec_from_name(df: pd.DataFrame, source: str, dictionary: Optional[Dict[str, Any]] = None) -> pd.DataFrame: + if source in df.columns: + names = df[source].astype(str).fillna("") + specs = [] + packs = [] + ignore_words = (dictionary or {}).get("ignore_words", []) + name_patterns = (dictionary or {}).get("name_patterns", []) + for s in names: + if ignore_words: + for w in ignore_words: + s = s.replace(w, "") + matched = False + for pat in name_patterns: + try: + m = re.search(pat, s) + if m and len(m.groups()) >= 2: + try: + qty = int(m.group(len(m.groups()))) + except: + qty = None + specs.append(s) + packs.append(qty) + matched = True + break + except Exception: + pass + if matched: + continue + m = re.search(r"(\d+(?:\.\d+)?)(ml|l|升|毫升)[*×xX](\d+)", s, re.IGNORECASE) + if m: + specs.append(f"{m.group(1)}{m.group(2)}*{m.group(3)}") + packs.append(int(m.group(3))) + continue + m2 = re.search(r"(\d+)[*×xX](\d+)", s) + if m2: + specs.append(f"1*{m2.group(2)}") + packs.append(int(m2.group(2))) + continue + m3 = re.search(r"(\d{2,3})\D*(\d{1,3})\D*", s) + if m3: + specs.append(f"1*{m3.group(2)}") + packs.append(int(m3.group(2))) + continue + specs.append("") + packs.append(None) + df["specification"] = df.get("specification", pd.Series(specs)) + df["package_quantity"] = packs + return df + +def _normalize_unit(df: pd.DataFrame, target: str, unit_map: Dict[str, str], dictionary: Optional[Dict[str, Any]] = None) -> pd.DataFrame: + if target in df.columns: + df[target] = df[target].astype(str) + df[target] = df[target].apply(lambda u: unit_map.get(u, u)) + pack_multipliers = (dictionary or {}).get("pack_multipliers", {}) + default_pq = (dictionary or {}).get("default_package_quantity", 1) + try: + if "quantity" in df.columns: + def convert_qty(row): + u = row.get(target) + q = row.get("quantity") + pq = row.get("package_quantity") + if u in ("件", "箱", "提", "盒"): + mult = pq or pack_multipliers.get(u, default_pq) + if pd.notna(q) and pd.notna(mult) and float(mult) > 0: + return float(q) * float(mult) + return q + df["quantity"] = df.apply(convert_qty, axis=1) + df[target] = df[target].apply(lambda u: "瓶" if u in ("件","箱","提","盒") else u) + except Exception: + pass + return df + +def _compute_quantity_from_total(df: pd.DataFrame) -> pd.DataFrame: + if "quantity" in df.columns and "unit_price" in df.columns: + qty = df["quantity"].fillna(0) + up = pd.to_numeric(df.get("unit_price", 0), errors="coerce").fillna(0) + tp = pd.to_numeric(df.get("total_price", 0), errors="coerce").fillna(0) + need = (qty <= 0) & (up > 0) & (tp > 0) + df.loc[need, "quantity"] = (tp[need] / up[need]).round(6) + return df + +def _fill_missing(df: pd.DataFrame, fills: Dict[str, Any]) -> pd.DataFrame: + for k, v in fills.items(): + if k in df.columns: + df[k] = df[k].fillna(v) + else: + df[k] = v + return df + +def _mark_gift(df: pd.DataFrame) -> pd.DataFrame: + df["is_gift"] = False + tp = df.get("total_price") + up = df.get("unit_price") + flags = pd.Series([False]*len(df)) + if tp is not None: + tpn = pd.to_numeric(tp, errors="coerce").fillna(0) + flags = flags | (tpn == 0) + if up is not None: + upn = pd.to_numeric(up, errors="coerce").fillna(0) + flags = flags | (upn == 0) + if "name" in df.columns: + flags = flags | df["name"].astype(str).str.contains(r"赠品|^o$|^O$", regex=True) + df.loc[flags, "is_gift"] = True + return df + +def apply_rules(df: pd.DataFrame, rules: List[Dict[str, Any]], dictionary: Optional[Dict[str, Any]] = None) -> pd.DataFrame: + out = df.copy() + for r in rules or []: + t = r.get("type") + if t == "split_quantity_unit": + out = _split_quantity_unit(out, r.get("source", "quantity"), dictionary) + elif t == "extract_spec_from_name": + out = _extract_spec_from_name(out, r.get("source", "name"), dictionary) + elif t == "normalize_unit": + out = _normalize_unit(out, r.get("target", "unit"), r.get("map", {}), dictionary) + elif t == "compute_quantity_from_total": + out = _compute_quantity_from_total(out) + elif t == "fill_missing": + out = _fill_missing(out, r.get("fills", {})) + elif t == "mark_gift": + out = _mark_gift(out) + return out \ No newline at end of file diff --git a/app/core/processors/supplier_processors/generic_supplier_processor.py b/app/core/processors/supplier_processors/generic_supplier_processor.py index 5ad13d8..5d2ae1f 100644 --- a/app/core/processors/supplier_processors/generic_supplier_processor.py +++ b/app/core/processors/supplier_processors/generic_supplier_processor.py @@ -11,6 +11,7 @@ from pathlib import Path from ..base import BaseProcessor from ...utils.log_utils import get_logger +from ...handlers.rule_engine import apply_rules logger = get_logger(__name__) @@ -118,10 +119,17 @@ class GenericSupplierProcessor(BaseProcessor): self.logger.error("数据清洗失败") self.log_processing_end(input_file, success=False) return None + try: + rules = self.supplier_config.get('rules', []) + dictionary = self.supplier_config.get('dictionary') + standardized_df = apply_rules(cleaned_df, rules, dictionary) + except Exception as e: + self.logger.warning(f"规则执行失败: {e}") + standardized_df = cleaned_df # 步骤4: 计算处理 self.logger.info("步骤4/4: 计算处理...") - calculated_df = self._apply_calculations(cleaned_df) + calculated_df = self._apply_calculations(standardized_df) if calculated_df is None: self.logger.error("计算处理失败") self.log_processing_end(input_file, success=False) @@ -205,15 +213,26 @@ class GenericSupplierProcessor(BaseProcessor): 数据DataFrame或None """ try: - df = self._read_excel_safely(file_path) - - if df.empty: + specified = self.supplier_config.get('header_row') + if specified is not None: + try: + df = self._read_excel_safely(file_path, header=int(specified)) + except Exception: + df = self._read_excel_safely(file_path) + else: + df0 = self._read_excel_safely(file_path, header=None) + if df0 is None: + return None + header_row = self._find_header_row(df0) + if header_row is not None: + df = self._read_excel_safely(file_path, header=header_row) + else: + df = self._read_excel_safely(file_path) + if df is None or df.empty: self.logger.warning("数据文件为空") return None - self.logger.info(f"成功读取数据,形状: {df.shape}") return df - except Exception as e: self.logger.error(f"读取数据失败: {e}") return None @@ -235,6 +254,40 @@ class GenericSupplierProcessor(BaseProcessor): except Exception as e: self.logger.error(f"读取Excel失败: {file_path} - {e}") raise + + def _find_header_row(self, df: pd.DataFrame) -> Optional[int]: + try: + header_keywords = [ + '条码','条形码','商品编码','商品名称','名称','数量','单位','单价','规格', + '金额','小计','总计','合计','合计金额' + ] + scores = [] + rows_to_check = min(30, len(df)) + for r in range(rows_to_check): + row = df.iloc[r] + score = 0 + for cell in row: + if isinstance(cell, str): + s = cell.strip().lower() + for kw in header_keywords: + if kw.lower() in s: + score += 5 + non_empty = row.count() + if non_empty / max(1, len(row)) > 0.5: + score += 2 + str_count = sum(1 for c in row if isinstance(c, str)) + if str_count / max(1, len(row)) > 0.5: + score += 3 + scores.append((r, score)) + scores.sort(key=lambda x: x[1], reverse=True) + if scores and scores[0][1] >= 5: + return scores[0][0] + for r in range(len(df)): + if df.iloc[r].notna().sum() > 3: + return r + return None + except Exception: + return None def _apply_column_mapping(self, df: pd.DataFrame) -> Optional[pd.DataFrame]: """应用列映射 diff --git a/build_exe.py b/build_exe.py index e679fcf..e296de8 100644 --- a/build_exe.py +++ b/build_exe.py @@ -121,6 +121,40 @@ def build_exe(): """构建EXE文件""" print("开始构建EXE文件...") try: + # 注入版本信息到根config.ini + try: + root_cfg = Path('config.ini') + from datetime import datetime + version_str = datetime.now().strftime('%Y.%m.%d.%H%M') + if root_cfg.exists(): + lines = root_cfg.read_text(encoding='utf-8').splitlines() + has_app = any(l.strip().lower() == '[app]' for l in lines) + if not has_app: + lines.append('[App]') + lines.append(f'version = {version_str}') + else: + # 更新或追加version + new_lines = [] + in_app = False + app_written = False + for l in lines: + if l.strip().lower() == '[app]': + in_app = True + new_lines.append(l) + continue + if in_app and l.strip().lower().startswith('version'): + new_lines.append(f'version = {version_str}') + app_written = True + in_app = True + continue + new_lines.append(l) + if not app_written: + new_lines.append('version = ' + version_str) + lines = new_lines + root_cfg.write_text('\n'.join(lines), encoding='utf-8') + print(f"已写入版本号: {version_str}") + except Exception as e: + print(f"版本信息注入失败: {e}") result = subprocess.run([ 'pyinstaller', 'OCR订单处理系统.spec' @@ -150,6 +184,9 @@ def build_exe(): if root_config_file.exists(): shutil.copy2(root_config_file, dist_dir) print(f"已复制根配置文件到dist: {root_config_file} -> {dist_dir}") + else: + print("警告: 根配置文件不存在,将创建缺省版本") + (dist_dir / 'config.ini').write_text('[App]\nversion = dev\n', encoding='utf-8') except subprocess.CalledProcessError as e: print(f"构建失败: {e}") @@ -210,6 +247,17 @@ def create_portable_package(): print(f"已复制模板文件: {template_file} -> {release_dir / 'templates'}") else: print(f"警告: 模板文件不存在: {template_file}") + item_file = Path('templates/商品资料.xlsx') + if item_file.exists(): + try: + (Path('dist') / 'templates').mkdir(exist_ok=True) + shutil.copy2(item_file, Path('dist') / 'templates') + except Exception: + pass + shutil.copy2(item_file, release_dir / 'templates') + print(f"已复制商品资料: {item_file} -> {release_dir / 'templates'}") + else: + print(f"警告: 商品资料文件不存在: {item_file}") # 创建README文件 readme_content = ''' diff --git a/config.ini b/config.ini index 7c0f180..bd33df3 100644 --- a/config.ini +++ b/config.ini @@ -26,3 +26,5 @@ max_file_size_mb = 4 [Templates] purchase_order = 银豹-采购单模板.xls +[App] +version = 2025.12.12.1309 diff --git a/config/barcode_mappings.json b/config/barcode_mappings.json index ad0ee89..63add19 100644 --- a/config/barcode_mappings.json +++ b/config/barcode_mappings.json @@ -179,6 +179,14 @@ "map_to": "69021343", "description": "条码映射:6923450653012 -> 69021343" }, + "6923644295844": { + "map_to": "6923644285036", + "description": "条码映射:6923644295844 -> 6923644285036" + }, + "6907992513157": { + "map_to": "6907992513195", + "description": "条码映射:6907992513157 -> 6907992513195" + }, "6925019900087": { "multiplier": 10, "target_unit": "瓶", diff --git a/config/suppliers_config.json b/config/suppliers_config.json index cebfd96..6ad452b 100644 --- a/config/suppliers_config.json +++ b/config/suppliers_config.json @@ -3,13 +3,26 @@ { "name": "蓉城易购", "description": "蓉城易购供应商订单处理", - "filename_patterns": ["*蓉城*", "*rongcheng*", "*易*"], - "content_indicators": ["蓉城易购", "商品编码", "订货数量"], + "filename_patterns": [ + "*蓉城*", + "*rongcheng*", + "*易*" + ], + "content_indicators": [ + "蓉城易购", + "商品编码", + "订货数量" + ], "column_mapping": { - "商品编码": "barcode", - "商品名称": "name", - "订货数量": "quantity", - "单价": "unit_price" + "商品条码(小条码)": "barcode", + "商品名称": "name", + "规格": "specification", + "订购数量(小单位)": "quantity", + "单位": "unit", + "单价(小单位)": "unit_price", + "优惠后金额(小单位)": "total_price", + "备注": "category", + "行号": "supplier" }, "cleaning_rules": [ { @@ -18,7 +31,9 @@ }, { "type": "fill_na", - "columns": ["unit_price"], + "columns": [ + "unit_price" + ], "value": 0 } ], @@ -30,13 +45,57 @@ "factor": 1 } ], - "output_suffix": "_蓉城易购_银豹采购单" + "output_suffix": "_蓉城易购_银豹采购单", + "header_row": 2, + "rules": [ + { + "type": "split_quantity_unit", + "source": "订购数量(小单位)" + }, + { + "type": "extract_spec_from_name", + "source": "商品名称" + }, + { + "type": "normalize_unit", + "target": "unit", + "map": { + "箱": "件", + "提": "件", + "盒": "件" + } + }, + { + "type": "compute_quantity_from_total" + }, + { + "type": "mark_gift" + }, + { + "type": "fill_missing", + "fills": { + "unit": "瓶" + } + } + ], + "output_templates": [ + "templates/银豹-采购单模板.xls" + ], + "current_template_index": 0 }, { "name": "通用食品供应商", "description": "通用食品类供应商订单", - "filename_patterns": ["*食品*", "*配送*", "*供货*"], - "content_indicators": ["产品条码", "订购量", "进货价"], + "filename_patterns": [ + "*食品*", + "*配送*", + "*供货*" + ], + "content_indicators": [ + "产品条码", + "订购量", + "进货价" + ], "column_mapping": { "产品条码": "barcode", "产品名称": "name", @@ -46,16 +105,133 @@ "cleaning_rules": [ { "type": "convert_type", - "columns": ["unit_price"], + "columns": [ + "unit_price" + ], "target_type": "float" }, { "type": "fill_na", - "columns": ["barcode", "name", "quantity"], + "columns": [ + "barcode", + "name", + "quantity" + ], "value": 0 } ], - "output_suffix": "_食品供应商_银豹采购单" + "output_suffix": "_食品供应商_银豹采购单", + "rules": [ + { + "type": "split_quantity_unit", + "source": "订购量" + }, + { + "type": "extract_spec_from_name", + "source": "产品名称" + }, + { + "type": "normalize_unit", + "target": "unit", + "map": { + "箱": "件", + "提": "件", + "盒": "件" + } + }, + { + "type": "compute_quantity_from_total" + }, + { + "type": "mark_gift" + }, + { + "type": "fill_missing", + "fills": { + "unit": "瓶" + } + } + ], + "output_templates": [ + "templates/银豹-采购单模板.xls" + ], + "current_template_index": 0 + }, + { + "name": "农夫山泉", + "description": "", + "filename_patterns": [], + "content_indicators": [], + "column_mapping": { + "条形码": "barcode", + "商品名称": "name", + "销售价": "unit_price", + "订单金额": "total_price", + "Unnamed: 0": "supplier", + "备注": "brand" + }, + "header_row": 0, + "rules": [ + { + "type": "split_quantity_unit", + "source": "订单数量" + }, + { + "type": "extract_spec_from_name", + "source": "name" + }, + { + "type": "normalize_unit", + "target": "unit", + "map": { + "箱": "件", + "提": "件", + "盒": "件" + } + }, + { + "type": "compute_quantity_from_total" + }, + { + "type": "mark_gift" + }, + { + "type": "fill_missing", + "fills": { + "unit": "瓶" + } + } + ], + "dictionary": { + "ignore_words": [ + "白膜", + "彩膜", + "赠品" + ], + "unit_synonyms": { + "箱": "件", + "提": "件", + "盒": "件", + "瓶": "瓶" + }, + "pack_multipliers": { + "件": 24, + "箱": 24, + "提": 12, + "盒": 10 + }, + "name_patterns": [ + "(\\d+(?:\\.\\d+)?)(ml|mL|ML|l|L|升|毫升)[*×xX](\\d+)", + "(\\d+)[*×xX](\\d+)瓶", + "(\\d{2,3}).*?(\\d{1,3})" + ], + "default_unit": "瓶", + "default_package_quantity": 1 + }, + "output_templates": [ + "templates/银豹-采购单模板.xls" + ], + "current_template_index": 0 } ] -} \ No newline at end of file +} diff --git a/data/user_settings.json b/data/user_settings.json new file mode 100644 index 0000000..3ad9051 --- /dev/null +++ b/data/user_settings.json @@ -0,0 +1,8 @@ +{ + "window_size": "900x600", + "theme_mode": "light", + "recent_files": [ + "data/result\\采购单_蓉城易购-订单1765513867817.xls", + "E:\\2025Code\\python\\orc-order-v2\\data\\output\\蓉城易购-订单1765513867817.xlsx" + ] +} \ No newline at end of file diff --git a/logs/app.core.excel.converter.log b/logs/app.core.excel.converter.log index c887d67..3fb642b 100644 --- a/logs/app.core.excel.converter.log +++ b/logs/app.core.excel.converter.log @@ -5214,3 +5214,1867 @@ 2025-11-15 18:01:52,700 - app.core.excel.converter - INFO - 从名称推断规格(入纸箱): 900树叶茉莉花茶12入纸箱 -> 1*12 2025-11-15 18:01:52,764 - app.core.excel.converter - INFO - 解析二级规格: 1*12 -> 1*12 2025-11-15 18:01:52,779 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 0.0, 单价: 62.0, 单位: +2025-11-16 10:48:45,505 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 10:56:22,516 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 11:23:59,373 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 11:26:04,216 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 11:26:06,794 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 12:20:11,339 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 12:51:04,842 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 12:51:06,909 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 13:03:10,560 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 13:03:10,582 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 13:03:28,078 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 13:13:52,781 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 13:18:18,247 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 13:18:18,270 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 13:51:09,016 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 13:51:12,228 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 14:25:50,024 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 14:25:55,568 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 14:25:55,955 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 4瓶 -> 数量=4.0, 单位=瓶 +2025-11-16 14:25:55,972 - app.core.excel.converter - INFO - 从名称推断规格(白膜): 550水24白膜 -> 1*24 +2025-11-16 14:25:56,020 - app.core.excel.converter - INFO - 解析二级规格: 1*24 -> 1*24 +2025-11-16 14:25:56,052 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 1箱 -> 数量=1.0, 单位=箱 +2025-11-16 14:25:56,072 - app.core.excel.converter - INFO - 从名称推断规格(白膜): 550水24白膜 -> 1*24 +2025-11-16 14:25:56,100 - app.core.excel.converter - INFO - 解析二级规格: 1*24 -> 1*24 +2025-11-16 14:25:56,118 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 5桶 -> 数量=5.0, 单位=桶 +2025-11-16 14:25:56,129 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 12.9L桶装水 -> 12.9L*1 +2025-11-16 14:25:56,171 - app.core.excel.converter - INFO - 解析容量(L)规格: 12.9L*1 -> 1*1 +2025-11-16 14:25:56,183 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 15.0, 单位: 桶 +2025-11-16 14:25:56,192 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 1箱 -> 数量=1.0, 单位=箱 +2025-11-16 14:25:56,202 - app.core.excel.converter - INFO - 从名称推断规格(纸箱): 550尖叫多肽15纸箱 -> 1*15 +2025-11-16 14:25:56,230 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-11-16 14:25:56,255 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 2箱 -> 数量=2.0, 单位=箱 +2025-11-16 14:25:56,265 - app.core.excel.converter - INFO - 从名称推断规格(入纸箱): 445水溶C血橙15入纸箱 -> 1*15 +2025-11-16 14:25:56,297 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-11-16 14:25:56,317 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 2箱 -> 数量=2.0, 单位=箱 +2025-11-16 14:25:56,327 - app.core.excel.converter - INFO - 从名称推断规格(直接格式): 500-东方树叶-陈皮白茶1*15-纸 +箱装-普通装 -> 1*15 +2025-11-16 14:25:56,361 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-11-16 14:25:56,392 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 2箱 -> 数量=2.0, 单位=箱 +2025-11-16 14:25:56,404 - app.core.excel.converter - INFO - 从名称推断规格(纸箱): 500树叶茉莉花茶15纸箱 -> 1*15 +2025-11-16 14:25:56,435 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-11-16 14:25:56,457 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 5箱 -> 数量=5.0, 单位=箱 +2025-11-16 14:25:56,469 - app.core.excel.converter - INFO - 从名称推断规格(入纸箱): 900树叶茉莉花茶12入纸箱 -> 1*12 +2025-11-16 14:25:56,498 - app.core.excel.converter - INFO - 解析二级规格: 1*12 -> 1*12 +2025-11-16 14:39:42,980 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 14:39:42,994 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 14:59:35,436 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 14:59:35,458 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 4瓶 -> 数量=4.0, 单位=瓶 +2025-11-16 14:59:35,459 - app.core.excel.converter - INFO - 从名称推断规格(白膜): 550水24白膜 -> 1*24 +2025-11-16 14:59:35,462 - app.core.excel.converter - INFO - 解析二级规格: 1*24 -> 1*24 +2025-11-16 14:59:35,463 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 1箱 -> 数量=1.0, 单位=箱 +2025-11-16 14:59:35,463 - app.core.excel.converter - INFO - 从名称推断规格(白膜): 550水24白膜 -> 1*24 +2025-11-16 14:59:35,464 - app.core.excel.converter - INFO - 解析二级规格: 1*24 -> 1*24 +2025-11-16 14:59:35,465 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 5桶 -> 数量=5.0, 单位=桶 +2025-11-16 14:59:35,466 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 12.9L桶装水 -> 12.9L*1 +2025-11-16 14:59:35,467 - app.core.excel.converter - INFO - 解析容量(L)规格: 12.9L*1 -> 1*1 +2025-11-16 14:59:35,468 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 15.0, 单位: 桶 +2025-11-16 14:59:35,468 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 1箱 -> 数量=1.0, 单位=箱 +2025-11-16 14:59:35,469 - app.core.excel.converter - INFO - 从名称推断规格(纸箱): 550尖叫多肽15纸箱 -> 1*15 +2025-11-16 14:59:35,470 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-11-16 14:59:35,471 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 2箱 -> 数量=2.0, 单位=箱 +2025-11-16 14:59:35,471 - app.core.excel.converter - INFO - 从名称推断规格(入纸箱): 445水溶C血橙15入纸箱 -> 1*15 +2025-11-16 14:59:35,473 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-11-16 14:59:35,474 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 2箱 -> 数量=2.0, 单位=箱 +2025-11-16 14:59:35,475 - app.core.excel.converter - INFO - 从名称推断规格(直接格式): 500-东方树叶-陈皮白茶1*15-纸 +箱装-普通装 -> 1*15 +2025-11-16 14:59:35,475 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-11-16 14:59:35,477 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 2箱 -> 数量=2.0, 单位=箱 +2025-11-16 14:59:35,477 - app.core.excel.converter - INFO - 从名称推断规格(纸箱): 500树叶茉莉花茶15纸箱 -> 1*15 +2025-11-16 14:59:35,478 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-11-16 14:59:35,479 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 5箱 -> 数量=5.0, 单位=箱 +2025-11-16 14:59:35,480 - app.core.excel.converter - INFO - 从名称推断规格(入纸箱): 900树叶茉莉花茶12入纸箱 -> 1*12 +2025-11-16 14:59:35,481 - app.core.excel.converter - INFO - 解析二级规格: 1*12 -> 1*12 +2025-11-16 15:03:21,891 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 15:03:21,914 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 4瓶 -> 数量=4.0, 单位=瓶 +2025-11-16 15:03:21,915 - app.core.excel.converter - INFO - 从名称推断规格(白膜): 550水24白膜 -> 1*24 +2025-11-16 15:03:21,918 - app.core.excel.converter - INFO - 解析二级规格: 1*24 -> 1*24 +2025-11-16 15:03:21,919 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 1箱 -> 数量=1.0, 单位=箱 +2025-11-16 15:03:21,919 - app.core.excel.converter - INFO - 从名称推断规格(白膜): 550水24白膜 -> 1*24 +2025-11-16 15:03:21,920 - app.core.excel.converter - INFO - 解析二级规格: 1*24 -> 1*24 +2025-11-16 15:03:21,921 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 5桶 -> 数量=5.0, 单位=桶 +2025-11-16 15:03:21,922 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 12.9L桶装水 -> 12.9L*1 +2025-11-16 15:03:21,923 - app.core.excel.converter - INFO - 解析容量(L)规格: 12.9L*1 -> 1*1 +2025-11-16 15:03:21,924 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 15.0, 单位: 桶 +2025-11-16 15:03:21,924 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 1箱 -> 数量=1.0, 单位=箱 +2025-11-16 15:03:21,925 - app.core.excel.converter - INFO - 从名称推断规格(纸箱): 550尖叫多肽15纸箱 -> 1*15 +2025-11-16 15:03:21,926 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-11-16 15:03:21,927 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 2箱 -> 数量=2.0, 单位=箱 +2025-11-16 15:03:21,927 - app.core.excel.converter - INFO - 从名称推断规格(入纸箱): 445水溶C血橙15入纸箱 -> 1*15 +2025-11-16 15:03:21,928 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-11-16 15:03:21,929 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 2箱 -> 数量=2.0, 单位=箱 +2025-11-16 15:03:21,929 - app.core.excel.converter - INFO - 从名称推断规格(直接格式): 500-东方树叶-陈皮白茶1*15-纸 +箱装-普通装 -> 1*15 +2025-11-16 15:03:21,930 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-11-16 15:03:21,931 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 2箱 -> 数量=2.0, 单位=箱 +2025-11-16 15:03:21,931 - app.core.excel.converter - INFO - 从名称推断规格(纸箱): 500树叶茉莉花茶15纸箱 -> 1*15 +2025-11-16 15:03:21,933 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-11-16 15:03:21,934 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 5箱 -> 数量=5.0, 单位=箱 +2025-11-16 15:03:21,934 - app.core.excel.converter - INFO - 从名称推断规格(入纸箱): 900树叶茉莉花茶12入纸箱 -> 1*12 +2025-11-16 15:03:21,935 - app.core.excel.converter - INFO - 解析二级规格: 1*12 -> 1*12 +2025-11-16 15:08:33,545 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 15:08:33,566 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 4瓶 -> 数量=4.0, 单位=瓶 +2025-11-16 15:08:33,567 - app.core.excel.converter - INFO - 从名称推断规格(白膜): 550水24白膜 -> 1*24 +2025-11-16 15:08:33,570 - app.core.excel.converter - INFO - 解析二级规格: 1*24 -> 1*24 +2025-11-16 15:08:33,571 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 1箱 -> 数量=1.0, 单位=箱 +2025-11-16 15:08:33,571 - app.core.excel.converter - INFO - 从名称推断规格(白膜): 550水24白膜 -> 1*24 +2025-11-16 15:08:33,572 - app.core.excel.converter - INFO - 解析二级规格: 1*24 -> 1*24 +2025-11-16 15:08:33,573 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 5桶 -> 数量=5.0, 单位=桶 +2025-11-16 15:08:33,574 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 12.9L桶装水 -> 12.9L*1 +2025-11-16 15:08:33,575 - app.core.excel.converter - INFO - 解析容量(L)规格: 12.9L*1 -> 1*1 +2025-11-16 15:08:33,576 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 15.0, 单位: 桶 +2025-11-16 15:08:33,576 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 1箱 -> 数量=1.0, 单位=箱 +2025-11-16 15:08:33,577 - app.core.excel.converter - INFO - 从名称推断规格(纸箱): 550尖叫多肽15纸箱 -> 1*15 +2025-11-16 15:08:33,578 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-11-16 15:08:33,578 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 2箱 -> 数量=2.0, 单位=箱 +2025-11-16 15:08:33,579 - app.core.excel.converter - INFO - 从名称推断规格(入纸箱): 445水溶C血橙15入纸箱 -> 1*15 +2025-11-16 15:08:33,579 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-11-16 15:08:33,580 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 2箱 -> 数量=2.0, 单位=箱 +2025-11-16 15:08:33,581 - app.core.excel.converter - INFO - 从名称推断规格(直接格式): 500-东方树叶-陈皮白茶1*15-纸 +箱装-普通装 -> 1*15 +2025-11-16 15:08:33,582 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-11-16 15:08:33,583 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 2箱 -> 数量=2.0, 单位=箱 +2025-11-16 15:08:33,583 - app.core.excel.converter - INFO - 从名称推断规格(纸箱): 500树叶茉莉花茶15纸箱 -> 1*15 +2025-11-16 15:08:33,584 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-11-16 15:08:33,585 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 5箱 -> 数量=5.0, 单位=箱 +2025-11-16 15:08:33,585 - app.core.excel.converter - INFO - 从名称推断规格(入纸箱): 900树叶茉莉花茶12入纸箱 -> 1*12 +2025-11-16 15:08:33,586 - app.core.excel.converter - INFO - 解析二级规格: 1*12 -> 1*12 +2025-11-16 15:11:11,212 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 15:11:11,666 - app.core.excel.converter - INFO - 解析等式规格: 1件=12桶 -> 1*12 +2025-11-16 15:11:11,736 - app.core.excel.converter - INFO - 解析等式规格: 1件=12桶 -> 1*12 +2025-11-16 15:11:11,800 - app.core.excel.converter - INFO - 解析等式规格: 1件=12桶 -> 1*12 +2025-11-16 15:13:47,393 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 15:13:49,807 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 1件 -> 数量=1.0, 单位=件 +2025-11-16 15:13:49,856 - app.core.excel.converter - INFO - 解析容量(L)规格: 400L*15 -> 1*15 +2025-11-16 15:13:49,874 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 1件 -> 数量=1.0, 单位=件 +2025-11-16 15:13:49,934 - app.core.excel.converter - INFO - 解析容量(L)规格: 450L*15 -> 1*15 +2025-11-16 15:13:49,976 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 1件 -> 数量=1.0, 单位=件 +2025-11-16 15:13:50,027 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-11-16 15:13:50,049 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 1件 -> 数量=1.0, 单位=件 +2025-11-16 15:13:50,106 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-11-16 15:13:50,156 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 3件 -> 数量=3.0, 单位=件 +2025-11-16 15:13:50,216 - app.core.excel.converter - INFO - 解析容量(L)规格: 500L*15 -> 1*15 +2025-11-16 15:13:50,252 - app.core.excel.converter - INFO - 从数量提取单位(基本格式): 2件 -> 数量=2.0, 单位=件 +2025-11-16 15:13:50,325 - app.core.excel.converter - INFO - 解析容量(L)规格: 596L*24 -> 1*24 +2025-11-16 15:15:36,193 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-16 15:15:38,261 - app.core.excel.converter - INFO - 解析容量(L)规格: 1L*12 -> 1*12 +2025-11-16 15:15:38,339 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-16 15:15:38,411 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-16 15:15:38,492 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-16 15:15:38,564 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:36:13,269 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-20 18:36:13,660 - app.core.excel.converter - INFO - 解析容量(L)规格: 1L*12 -> 1*12 +2025-11-20 18:36:13,716 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:36:13,758 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:36:13,805 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:36:13,860 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:36:42,083 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-20 18:36:42,485 - app.core.excel.converter - INFO - 解析容量(L)规格: 1L*12 -> 1*12 +2025-11-20 18:36:42,553 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:36:42,622 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:36:42,708 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:36:42,793 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:42:25,894 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-20 18:42:26,290 - app.core.excel.converter - INFO - 解析容量(L)规格: 1L*12 -> 1*12 +2025-11-20 18:42:26,325 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:42:26,384 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:42:26,438 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:42:26,492 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:44:11,107 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-20 18:44:11,696 - app.core.excel.converter - INFO - 解析容量(L)规格: 1L*12 -> 1*12 +2025-11-20 18:44:11,762 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:44:11,837 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:44:11,906 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:44:11,990 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:47:03,898 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-20 18:47:04,488 - app.core.excel.converter - INFO - 解析容量(L)规格: 1L*12 -> 1*12 +2025-11-20 18:47:04,550 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:47:04,634 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:47:04,719 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:47:04,793 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:56:30,323 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-20 18:56:30,965 - app.core.excel.converter - INFO - 解析容量(L)规格: 1L*12 -> 1*12 +2025-11-20 18:56:31,018 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:56:31,075 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:56:31,137 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 18:56:31,200 - app.core.excel.converter - INFO - 解析容量(ml)规格: 600ml*15 -> 1*15 +2025-11-20 19:38:18,808 - app.core.excel.converter - INFO - 成功加载条码映射配置,共49项 +2025-11-20 19:39:19,758 - app.core.excel.converter - INFO - 条码映射配置保存成功,共50项 +2025-11-20 20:10:12,659 - app.core.excel.converter - INFO - 成功加载条码映射配置,共50项 +2025-11-20 20:11:06,721 - app.core.excel.converter - INFO - 条码映射配置保存成功,共51项 +2025-12-01 22:21:09,089 - app.core.excel.converter - INFO - 成功加载条码映射配置,共51项 +2025-12-01 22:21:10,857 - app.core.excel.converter - INFO - 从名称推断规格(白膜): 550水24白膜 -> 1*24 +2025-12-01 22:21:10,932 - app.core.excel.converter - INFO - 解析二级规格: 1*24 -> 1*24 +2025-12-01 22:21:10,966 - app.core.excel.converter - INFO - 从名称推断规格(直接格式): 500-东方树叶-陈皮白茶1*15-纸 +箱装-普通装 -> 1*15 +2025-12-01 22:21:11,050 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-12-01 22:21:11,059 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 0.0, 单价: 55.0, 单位: +2025-12-01 22:21:11,098 - app.core.excel.converter - INFO - 从名称推断规格(入纸箱): 500树叶青柑普洱15入纸箱 -> 1*15 +2025-12-01 22:21:11,135 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-12-01 22:21:11,144 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 0.0, 单价: 55.0, 单位: +2025-12-01 22:21:11,184 - app.core.excel.converter - INFO - 从名称推断规格(纸箱): 500树叶茉莉花茶15纸箱 -> 1*15 +2025-12-01 22:21:11,247 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-12-01 22:21:11,269 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 0.0, 单价: 55.0, 单位: +2025-12-01 22:21:11,295 - app.core.excel.converter - INFO - 从名称推断规格(纸箱): 500树叶乌龙茶15纸箱 -> 1*15 +2025-12-01 22:21:11,367 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-12-01 22:21:11,386 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 0.0, 单价: 55.0, 单位: +2025-12-01 22:21:11,425 - app.core.excel.converter - INFO - 从名称推断规格(纸箱): 500树叶绿茶15纸箱 -> 1*15 +2025-12-01 22:21:11,496 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-12-01 22:21:11,509 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 0.0, 单价: 55.0, 单位: +2025-12-01 22:21:11,531 - app.core.excel.converter - INFO - 从名称推断规格(入纸箱): 1.5树叶茉莉花茶6入纸箱装 -> 1*6 +2025-12-01 22:21:11,597 - app.core.excel.converter - INFO - 解析二级规格: 1*6 -> 1*6 +2025-12-01 22:21:11,606 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 0.0, 单价: 50.0, 单位: +2025-12-01 22:21:11,622 - app.core.excel.converter - INFO - 从名称推断规格(纸箱): 500茶π西柚茉莉15纸箱 -> 1*15 +2025-12-01 22:21:11,688 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-12-01 22:21:11,707 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 0.0, 单价: 56.0, 单位: +2025-12-12 11:00:14,073 - app.core.excel.converter - INFO - 成功加载条码映射配置,共51项 +2025-12-12 11:00:14,142 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 雪碧2L@ -> 2L*1 +2025-12-12 11:00:14,146 - app.core.excel.converter - INFO - 解析容量(L)规格: 2L*1 -> 1*1 +2025-12-12 11:00:14,222 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝饮用纯净水2.08L@ -> 2.08L*1 +2025-12-12 11:00:14,223 - app.core.excel.converter - INFO - 解析容量(L)规格: 2.08L*1 -> 1*1 +2025-12-12 11:00:14,223 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 40.0, 单价: 21.52, 单位: 6901285993046 +2025-12-12 11:00:14,223 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝纯净水4.5L@ -> 4.5L*1 +2025-12-12 11:00:14,223 - app.core.excel.converter - INFO - 解析容量(L)规格: 4.5L*1 -> 1*1 +2025-12-12 11:00:14,223 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 8.0, 单价: 26.08, 单位: 6901285991547 +2025-12-12 11:00:14,223 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝饮用纯净水1.555L@ -> 1.555L*1 +2025-12-12 11:00:14,223 - app.core.excel.converter - INFO - 解析容量(L)规格: 1.555L*1 -> 1*1 +2025-12-12 11:00:14,223 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 60.0, 单价: 24.6, 单位: 6901285991288 +2025-12-12 11:00:14,227 - app.core.excel.converter - INFO - 提取规格: 奥利奥薄脆酸甜草莓味95g@ -> 95*None +2025-12-12 11:00:14,227 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥薄脆酸甜草莓味95g@ -> 95*None +2025-12-12 11:00:14,229 - app.core.excel.converter - WARNING - 无法解析规格: 95*None,使用默认值1*1 +2025-12-12 11:00:14,229 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 6.5, 单位: 6901668934925 +2025-12-12 11:00:14,229 - app.core.excel.converter - INFO - 提取规格: 奥利奥杯奥草莓味55g@ -> 55*None +2025-12-12 11:00:14,230 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥杯奥草莓味55g@ -> 55*None +2025-12-12 11:00:14,230 - app.core.excel.converter - WARNING - 无法解析规格: 55*None,使用默认值1*1 +2025-12-12 11:00:14,231 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.6, 单位: 6901668054715 +2025-12-12 11:00:14,231 - app.core.excel.converter - INFO - 提取规格: 奥利奥杯奥巧克力55g@ -> 55*None +2025-12-12 11:00:14,232 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥杯奥巧克力55g@ -> 55*None +2025-12-12 11:00:14,232 - app.core.excel.converter - WARNING - 无法解析规格: 55*None,使用默认值1*1 +2025-12-12 11:00:14,232 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.6, 单位: 6901668053916 +2025-12-12 11:00:14,232 - app.core.excel.converter - INFO - 提取规格: 好丽友蛋黄派2P46g@ -> 46*None +2025-12-12 11:00:14,232 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 好丽友蛋黄派2P46g@ -> 46*None +2025-12-12 11:00:14,232 - app.core.excel.converter - WARNING - 无法解析规格: 46*None,使用默认值1*1 +2025-12-12 11:00:14,235 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.0, 单位: 6920907800616 +2025-12-12 11:00:14,235 - app.core.excel.converter - INFO - 提取规格: 都市牧场爽口含片正梅味38g@ -> 38*None +2025-12-12 11:00:14,235 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 都市牧场爽口含片正梅味38g@ -> 38*None +2025-12-12 11:00:14,236 - app.core.excel.converter - WARNING - 无法解析规格: 38*None,使用默认值1*1 +2025-12-12 11:00:14,236 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 8.0, 单价: 38.0, 单位: +2025-12-12 11:00:14,236 - app.core.excel.converter - INFO - 提取规格: 林振合维C果C软糖什锦味68g -> 68*None +2025-12-12 11:00:14,236 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 林振合维C果C软糖什锦味68g -> 68*None +2025-12-12 11:00:14,236 - app.core.excel.converter - WARNING - 无法解析规格: 68*None,使用默认值1*1 +2025-12-12 11:00:14,238 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 8.0, 单价: 28.0, 单位: +2025-12-12 11:00:14,238 - app.core.excel.converter - INFO - 提取规格: 格力高百醇柠檬48g@ -> 48*None +2025-12-12 11:00:14,238 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 格力高百醇柠檬48g@ -> 48*None +2025-12-12 11:00:14,239 - app.core.excel.converter - WARNING - 无法解析规格: 48*None,使用默认值1*1 +2025-12-12 11:00:14,239 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 5.55, 单位: 6901845044027 +2025-12-12 11:00:14,240 - app.core.excel.converter - INFO - 提取规格: 格力高百醇抹茶慕斯味48g@ -> 48*None +2025-12-12 11:00:14,240 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 格力高百醇抹茶慕斯味48g@ -> 48*None +2025-12-12 11:00:14,241 - app.core.excel.converter - WARNING - 无法解析规格: 48*None,使用默认值1*1 +2025-12-12 11:00:14,242 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 5.55, 单位: 6901845040968 +2025-12-12 11:00:14,242 - app.core.excel.converter - INFO - 提取规格: 奥利奥饼干经典原味48.5g@ -> 48.5*None +2025-12-12 11:00:14,242 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥饼干经典原味48.5g@ -> 48.5*None +2025-12-12 11:00:14,242 - app.core.excel.converter - WARNING - 无法解析规格: 48.5*None,使用默认值1*1 +2025-12-12 11:00:14,242 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 6.0, 单价: 1.99, 单位: 6901668935649 +2025-12-12 11:00:14,242 - app.core.excel.converter - INFO - 提取规格: 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None +2025-12-12 11:00:14,242 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None +2025-12-12 11:00:14,242 - app.core.excel.converter - WARNING - 无法解析规格: 48.5*None,使用默认值1*1 +2025-12-12 11:00:14,242 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 1.99, 单位: 6901668935663 +2025-12-12 11:00:14,242 - app.core.excel.converter - INFO - 提取规格: 法丽兹曲奇芝士巧克力70g@ -> 70*None +2025-12-12 11:00:14,246 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 法丽兹曲奇芝士巧克力70g@ -> 70*None +2025-12-12 11:00:14,246 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:00:14,246 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.66, 单位: 6947929617534 +2025-12-12 11:00:14,246 - app.core.excel.converter - INFO - 提取规格: 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None +2025-12-12 11:00:14,246 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None +2025-12-12 11:00:14,249 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:00:14,249 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.66, 单位: 6947929617138 +2025-12-12 11:00:14,249 - app.core.excel.converter - INFO - 提取规格: 太平梳打饼干奶盐味100g@ -> 100*None +2025-12-12 11:00:14,250 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 太平梳打饼干奶盐味100g@ -> 100*None +2025-12-12 11:00:14,250 - app.core.excel.converter - WARNING - 无法解析规格: 100*None,使用默认值1*1 +2025-12-12 11:00:14,250 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.5, 单位: 6901668200013 +2025-12-12 11:00:14,251 - app.core.excel.converter - INFO - 提取规格: 太平梳打饼干海苔味100g@ -> 100*None +2025-12-12 11:00:14,251 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 太平梳打饼干海苔味100g@ -> 100*None +2025-12-12 11:00:14,252 - app.core.excel.converter - WARNING - 无法解析规格: 100*None,使用默认值1*1 +2025-12-12 11:00:14,252 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.5, 单位: 6901668200303 +2025-12-12 11:00:14,252 - app.core.excel.converter - INFO - 提取规格: 达利园手指饼115g@ -> 115*None +2025-12-12 11:00:14,253 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园手指饼115g@ -> 115*None +2025-12-12 11:00:14,253 - app.core.excel.converter - WARNING - 无法解析规格: 115*None,使用默认值1*1 +2025-12-12 11:00:14,254 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.25, 单位: 6911988005229 +2025-12-12 11:00:14,254 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点杏仁酥饼146g@ -> 146*None +2025-12-12 11:00:14,254 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点杏仁酥饼146g@ -> 146*None +2025-12-12 11:00:14,255 - app.core.excel.converter - WARNING - 无法解析规格: 146*None,使用默认值1*1 +2025-12-12 11:00:14,256 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.8, 单位: 6911988000293 +2025-12-12 11:00:14,256 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点核桃酥饼146g@ -> 146*None +2025-12-12 11:00:14,256 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点核桃酥饼146g@ -> 146*None +2025-12-12 11:00:14,257 - app.core.excel.converter - WARNING - 无法解析规格: 146*None,使用默认值1*1 +2025-12-12 11:00:14,257 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.8, 单位: 6911988000286 +2025-12-12 11:00:14,258 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆腰果饼108g@ -> 108*None +2025-12-12 11:00:14,259 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆腰果饼108g@ -> 108*None +2025-12-12 11:00:14,259 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:00:14,260 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 6911988009777 +2025-12-12 11:00:14,260 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆杏仁饼108g@ -> 108*None +2025-12-12 11:00:14,260 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆杏仁饼108g@ -> 108*None +2025-12-12 11:00:14,261 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:00:14,261 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 6911988009760 +2025-12-12 11:00:14,262 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆核桃饼108g@ -> 108*None +2025-12-12 11:00:14,262 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆核桃饼108g@ -> 108*None +2025-12-12 11:00:14,262 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:00:14,263 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 6911988009784 +2025-12-12 11:00:14,263 - app.core.excel.converter - INFO - 提取规格: 嘉士利威化饼干草莓味115g@ -> 115*None +2025-12-12 11:00:14,264 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利威化饼干草莓味115g@ -> 115*None +2025-12-12 11:00:14,264 - app.core.excel.converter - WARNING - 无法解析规格: 115*None,使用默认值1*1 +2025-12-12 11:00:14,264 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 2.0, 单价: 3.8, 单位: 6901180581683 +2025-12-12 11:00:14,264 - app.core.excel.converter - INFO - 提取规格: 亨裕饼朱古力味饼干186g -> 186*None +2025-12-12 11:00:14,264 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 亨裕饼朱古力味饼干186g -> 186*None +2025-12-12 11:00:14,264 - app.core.excel.converter - WARNING - 无法解析规格: 186*None,使用默认值1*1 +2025-12-12 11:00:14,266 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.0, 单位: 6932024200552 +2025-12-12 11:00:14,266 - app.core.excel.converter - INFO - 提取规格: 亨裕早茶饼干110g -> 110*None +2025-12-12 11:00:14,266 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 亨裕早茶饼干110g -> 110*None +2025-12-12 11:00:14,267 - app.core.excel.converter - WARNING - 无法解析规格: 110*None,使用默认值1*1 +2025-12-12 11:00:14,267 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 1.7, 单位: 6932024200583 +2025-12-12 11:00:14,267 - app.core.excel.converter - INFO - 提取规格: 趣多多香浓巧克力味85g@ -> 85*None +2025-12-12 11:00:14,267 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 趣多多香浓巧克力味85g@ -> 85*None +2025-12-12 11:00:14,269 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:00:14,269 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 5.2, 单位: 6901668936714 +2025-12-12 11:00:14,269 - app.core.excel.converter - INFO - 提取规格: 趣多多缤纷逗巧克力85g@ -> 85*None +2025-12-12 11:00:14,270 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 趣多多缤纷逗巧克力85g@ -> 85*None +2025-12-12 11:00:14,270 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:00:14,270 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 5.2, 单位: 6901668062499 +2025-12-12 11:00:14,270 - app.core.excel.converter - INFO - 提取规格: 米老头雪花煎卷椰奶味150g@ -> 150*None +2025-12-12 11:00:14,270 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 米老头雪花煎卷椰奶味150g@ -> 150*None +2025-12-12 11:00:14,270 - app.core.excel.converter - WARNING - 无法解析规格: 150*None,使用默认值1*1 +2025-12-12 11:00:14,270 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.8, 单位: 6925332600046 +2025-12-12 11:00:14,273 - app.core.excel.converter - INFO - 提取规格: 金富士牛乳饼干香浓牛奶味130g@ -> 130*None +2025-12-12 11:00:14,273 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 金富士牛乳饼干香浓牛奶味130g@ -> 130*None +2025-12-12 11:00:14,273 - app.core.excel.converter - WARNING - 无法解析规格: 130*None,使用默认值1*1 +2025-12-12 11:00:14,274 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.8, 单位: 6921233904955 +2025-12-12 11:00:14,274 - app.core.excel.converter - INFO - 提取规格: 嘉士利果乐果香蓝莓味85g@ -> 85*None +2025-12-12 11:00:14,274 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利果乐果香蓝莓味85g@ -> 85*None +2025-12-12 11:00:14,275 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:00:14,275 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.0, 单位: 6901180993387 +2025-12-12 11:00:14,276 - app.core.excel.converter - INFO - 提取规格: 嘉士利果乐果香草莓味85g@ -> 85*None +2025-12-12 11:00:14,276 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利果乐果香草莓味85g@ -> 85*None +2025-12-12 11:00:14,276 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:00:14,277 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.0, 单位: 6901180993486 +2025-12-12 11:00:14,277 - app.core.excel.converter - INFO - 提取规格: 旺旺仙贝52g@ -> 52*None +2025-12-12 11:00:14,277 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 旺旺仙贝52g@ -> 52*None +2025-12-12 11:00:14,277 - app.core.excel.converter - WARNING - 无法解析规格: 52*None,使用默认值1*1 +2025-12-12 11:00:14,277 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 3.95, 单位: 6920546800046 +2025-12-12 11:00:14,277 - app.core.excel.converter - INFO - 提取规格: 旺旺雪饼84g@ -> 84*None +2025-12-12 11:00:14,277 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 旺旺雪饼84g@ -> 84*None +2025-12-12 11:00:14,277 - app.core.excel.converter - WARNING - 无法解析规格: 84*None,使用默认值1*1 +2025-12-12 11:00:14,277 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.5, 单位: 6920546800053 +2025-12-12 11:00:14,277 - app.core.excel.converter - INFO - 提取规格: 达利园蛋黄派230g@ -> 230*None +2025-12-12 11:00:14,277 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园蛋黄派230g@ -> 230*None +2025-12-12 11:00:14,281 - app.core.excel.converter - WARNING - 无法解析规格: 230*None,使用默认值1*1 +2025-12-12 11:00:14,281 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 1.0, 单价: 5.88, 单位: 6911988006783 +2025-12-12 11:00:14,281 - app.core.excel.converter - INFO - 提取规格: 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None +2025-12-12 11:00:14,281 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None +2025-12-12 11:00:14,283 - app.core.excel.converter - WARNING - 无法解析规格: 22*None,使用默认值1*1 +2025-12-12 11:00:14,283 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 20.0, 单价: 15.0, 单位: 6971295190728 +2025-12-12 11:00:14,283 - app.core.excel.converter - INFO - 提取规格: 劲仔手撕肉干麻辣味10g@ -> 10*None +2025-12-12 11:00:14,284 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔手撕肉干麻辣味10g@ -> 10*None +2025-12-12 11:00:14,284 - app.core.excel.converter - WARNING - 无法解析规格: 10*None,使用默认值1*1 +2025-12-12 11:00:14,284 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 20.0, 单价: 26.6, 单位: 6951957217215 +2025-12-12 11:00:14,285 - app.core.excel.converter - INFO - 提取规格: 劲仔手撕肉干香辣味10g@ -> 10*None +2025-12-12 11:00:14,285 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔手撕肉干香辣味10g@ -> 10*None +2025-12-12 11:00:14,286 - app.core.excel.converter - WARNING - 无法解析规格: 10*None,使用默认值1*1 +2025-12-12 11:00:14,286 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 20.0, 单价: 26.6, 单位: 6951957217208 +2025-12-12 11:00:14,342 - app.core.excel.converter - INFO - 提取规格: 登荣香辣爽口鸡23g -> 23*None +2025-12-12 11:00:14,342 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 登荣香辣爽口鸡23g -> 23*None +2025-12-12 11:00:14,342 - app.core.excel.converter - WARNING - 无法解析规格: 23*None,使用默认值1*1 +2025-12-12 11:00:14,342 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 20.0, 单价: 15.0, 单位: +2025-12-12 11:00:14,342 - app.core.excel.converter - INFO - 提取规格: 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None +2025-12-12 11:00:14,342 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None +2025-12-12 11:00:14,342 - app.core.excel.converter - WARNING - 无法解析规格: 12*None,使用默认值1*1 +2025-12-12 11:00:14,342 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 16.0, 单价: 23.2, 单位: 6914973603462 +2025-12-12 11:00:14,347 - app.core.excel.converter - INFO - 提取规格: 味芝元洞庭鱼排香辣味26g -> 26*None +2025-12-12 11:00:14,347 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 味芝元洞庭鱼排香辣味26g -> 26*None +2025-12-12 11:00:14,348 - app.core.excel.converter - WARNING - 无法解析规格: 26*None,使用默认值1*1 +2025-12-12 11:00:14,348 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 15.0, 单价: 1.5, 单位: 6936869215092 +2025-12-12 11:00:14,348 - app.core.excel.converter - INFO - 提取规格: 劲仔小鱼麻辣小鱼12g@ -> 12*None +2025-12-12 11:00:14,349 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔小鱼麻辣小鱼12g@ -> 12*None +2025-12-12 11:00:14,349 - app.core.excel.converter - WARNING - 无法解析规格: 12*None,使用默认值1*1 +2025-12-12 11:00:14,350 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 20.0, 单价: 14.2, 单位: +2025-12-12 11:00:14,350 - app.core.excel.converter - INFO - 提取规格: 缺牙齿素牛肚香辣味16g -> 16*None +2025-12-12 11:00:14,351 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 缺牙齿素牛肚香辣味16g -> 16*None +2025-12-12 11:00:14,351 - app.core.excel.converter - WARNING - 无法解析规格: 16*None,使用默认值1*1 +2025-12-12 11:00:14,351 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 30.0, 单价: 22.5, 单位: 6976481800344 +2025-12-12 11:00:14,352 - app.core.excel.converter - INFO - 提取规格: 乐事青柠味70g@ -> 70*None +2025-12-12 11:00:14,352 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事青柠味70g@ -> 70*None +2025-12-12 11:00:14,353 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:00:14,353 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.79, 单位: 6924743919266 +2025-12-12 11:00:14,353 - app.core.excel.converter - INFO - 提取规格: 乐事黄瓜味70g@ -> 70*None +2025-12-12 11:00:14,353 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事黄瓜味70g@ -> 70*None +2025-12-12 11:00:14,353 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:00:14,353 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.79, 单位: 6924743919259 +2025-12-12 11:00:14,353 - app.core.excel.converter - INFO - 提取规格: 乐事德克萨斯烧烤味70g@ -> 70*None +2025-12-12 11:00:14,353 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事德克萨斯烧烤味70g@ -> 70*None +2025-12-12 11:00:14,353 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:00:14,353 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 4.79, 单位: 6924743919228 +2025-12-12 11:00:14,357 - app.core.excel.converter - INFO - 提取规格: 乐事薯片经典原味23g(串串装)@ -> 23*None +2025-12-12 11:00:14,358 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事薯片经典原味23g(串串装)@ -> 23*None +2025-12-12 11:00:14,358 - app.core.excel.converter - WARNING - 无法解析规格: 23*None,使用默认值1*1 +2025-12-12 11:00:14,359 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 1.0, 单价: 1.35, 单位: 6924743928077 +2025-12-12 11:13:15,281 - app.core.excel.converter - INFO - 成功加载条码映射配置,共51项 +2025-12-12 11:13:15,323 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 雪碧2L@ -> 2L*1 +2025-12-12 11:13:15,326 - app.core.excel.converter - INFO - 解析容量(L)规格: 2L*1 -> 1*1 +2025-12-12 11:13:15,326 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝饮用纯净水2.08L@ -> 2.08L*1 +2025-12-12 11:13:15,329 - app.core.excel.converter - INFO - 解析容量(L)规格: 2.08L*1 -> 1*1 +2025-12-12 11:13:15,329 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 40.0, 单价: 21.52, 单位: 6901285993046 +2025-12-12 11:13:15,329 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝纯净水4.5L@ -> 4.5L*1 +2025-12-12 11:13:15,331 - app.core.excel.converter - INFO - 解析容量(L)规格: 4.5L*1 -> 1*1 +2025-12-12 11:13:15,331 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 8.0, 单价: 26.08, 单位: 6901285991547 +2025-12-12 11:13:15,331 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝饮用纯净水1.555L@ -> 1.555L*1 +2025-12-12 11:13:15,332 - app.core.excel.converter - INFO - 解析容量(L)规格: 1.555L*1 -> 1*1 +2025-12-12 11:13:15,332 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 60.0, 单价: 24.6, 单位: 6901285991288 +2025-12-12 11:13:15,333 - app.core.excel.converter - INFO - 提取规格: 奥利奥薄脆酸甜草莓味95g@ -> 95*None +2025-12-12 11:13:15,333 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥薄脆酸甜草莓味95g@ -> 95*None +2025-12-12 11:13:15,333 - app.core.excel.converter - WARNING - 无法解析规格: 95*None,使用默认值1*1 +2025-12-12 11:13:15,333 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 6.5, 单位: 6901668934925 +2025-12-12 11:13:15,337 - app.core.excel.converter - INFO - 提取规格: 奥利奥杯奥草莓味55g@ -> 55*None +2025-12-12 11:13:15,337 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥杯奥草莓味55g@ -> 55*None +2025-12-12 11:13:15,338 - app.core.excel.converter - WARNING - 无法解析规格: 55*None,使用默认值1*1 +2025-12-12 11:13:15,338 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.6, 单位: 6901668054715 +2025-12-12 11:13:15,339 - app.core.excel.converter - INFO - 提取规格: 奥利奥杯奥巧克力55g@ -> 55*None +2025-12-12 11:13:15,339 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥杯奥巧克力55g@ -> 55*None +2025-12-12 11:13:15,340 - app.core.excel.converter - WARNING - 无法解析规格: 55*None,使用默认值1*1 +2025-12-12 11:13:15,340 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.6, 单位: 6901668053916 +2025-12-12 11:13:15,340 - app.core.excel.converter - INFO - 提取规格: 好丽友蛋黄派2P46g@ -> 46*None +2025-12-12 11:13:15,341 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 好丽友蛋黄派2P46g@ -> 46*None +2025-12-12 11:13:15,342 - app.core.excel.converter - WARNING - 无法解析规格: 46*None,使用默认值1*1 +2025-12-12 11:13:15,342 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.0, 单位: 6920907800616 +2025-12-12 11:13:15,342 - app.core.excel.converter - INFO - 提取规格: 都市牧场爽口含片正梅味38g@ -> 38*None +2025-12-12 11:13:15,343 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 都市牧场爽口含片正梅味38g@ -> 38*None +2025-12-12 11:13:15,344 - app.core.excel.converter - WARNING - 无法解析规格: 38*None,使用默认值1*1 +2025-12-12 11:13:15,345 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 8.0, 单价: 38.0, 单位: +2025-12-12 11:13:15,345 - app.core.excel.converter - INFO - 提取规格: 林振合维C果C软糖什锦味68g -> 68*None +2025-12-12 11:13:15,346 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 林振合维C果C软糖什锦味68g -> 68*None +2025-12-12 11:13:15,347 - app.core.excel.converter - WARNING - 无法解析规格: 68*None,使用默认值1*1 +2025-12-12 11:13:15,347 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 8.0, 单价: 28.0, 单位: +2025-12-12 11:13:15,347 - app.core.excel.converter - INFO - 提取规格: 格力高百醇柠檬48g@ -> 48*None +2025-12-12 11:13:15,348 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 格力高百醇柠檬48g@ -> 48*None +2025-12-12 11:13:15,349 - app.core.excel.converter - WARNING - 无法解析规格: 48*None,使用默认值1*1 +2025-12-12 11:13:15,349 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 5.55, 单位: 6901845044027 +2025-12-12 11:13:15,350 - app.core.excel.converter - INFO - 提取规格: 格力高百醇抹茶慕斯味48g@ -> 48*None +2025-12-12 11:13:15,350 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 格力高百醇抹茶慕斯味48g@ -> 48*None +2025-12-12 11:13:15,351 - app.core.excel.converter - WARNING - 无法解析规格: 48*None,使用默认值1*1 +2025-12-12 11:13:15,352 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 5.55, 单位: 6901845040968 +2025-12-12 11:13:15,352 - app.core.excel.converter - INFO - 提取规格: 奥利奥饼干经典原味48.5g@ -> 48.5*None +2025-12-12 11:13:15,353 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥饼干经典原味48.5g@ -> 48.5*None +2025-12-12 11:13:15,353 - app.core.excel.converter - WARNING - 无法解析规格: 48.5*None,使用默认值1*1 +2025-12-12 11:13:15,353 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 6.0, 单价: 1.99, 单位: 6901668935649 +2025-12-12 11:13:15,355 - app.core.excel.converter - INFO - 提取规格: 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None +2025-12-12 11:13:15,355 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None +2025-12-12 11:13:15,356 - app.core.excel.converter - WARNING - 无法解析规格: 48.5*None,使用默认值1*1 +2025-12-12 11:13:15,356 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 1.99, 单位: 6901668935663 +2025-12-12 11:13:15,356 - app.core.excel.converter - INFO - 提取规格: 法丽兹曲奇芝士巧克力70g@ -> 70*None +2025-12-12 11:13:15,357 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 法丽兹曲奇芝士巧克力70g@ -> 70*None +2025-12-12 11:13:15,357 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:13:15,357 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.66, 单位: 6947929617534 +2025-12-12 11:13:15,357 - app.core.excel.converter - INFO - 提取规格: 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None +2025-12-12 11:13:15,359 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None +2025-12-12 11:13:15,360 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:13:15,360 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.66, 单位: 6947929617138 +2025-12-12 11:13:15,360 - app.core.excel.converter - INFO - 提取规格: 太平梳打饼干奶盐味100g@ -> 100*None +2025-12-12 11:13:15,360 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 太平梳打饼干奶盐味100g@ -> 100*None +2025-12-12 11:13:15,361 - app.core.excel.converter - WARNING - 无法解析规格: 100*None,使用默认值1*1 +2025-12-12 11:13:15,362 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.5, 单位: 6901668200013 +2025-12-12 11:13:15,362 - app.core.excel.converter - INFO - 提取规格: 太平梳打饼干海苔味100g@ -> 100*None +2025-12-12 11:13:15,363 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 太平梳打饼干海苔味100g@ -> 100*None +2025-12-12 11:13:15,363 - app.core.excel.converter - WARNING - 无法解析规格: 100*None,使用默认值1*1 +2025-12-12 11:13:15,363 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.5, 单位: 6901668200303 +2025-12-12 11:13:15,363 - app.core.excel.converter - INFO - 提取规格: 达利园手指饼115g@ -> 115*None +2025-12-12 11:13:15,363 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园手指饼115g@ -> 115*None +2025-12-12 11:13:15,363 - app.core.excel.converter - WARNING - 无法解析规格: 115*None,使用默认值1*1 +2025-12-12 11:13:15,367 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.25, 单位: 6911988005229 +2025-12-12 11:13:15,367 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点杏仁酥饼146g@ -> 146*None +2025-12-12 11:13:15,367 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点杏仁酥饼146g@ -> 146*None +2025-12-12 11:13:15,367 - app.core.excel.converter - WARNING - 无法解析规格: 146*None,使用默认值1*1 +2025-12-12 11:13:15,369 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.8, 单位: 6911988000293 +2025-12-12 11:13:15,369 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点核桃酥饼146g@ -> 146*None +2025-12-12 11:13:15,369 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点核桃酥饼146g@ -> 146*None +2025-12-12 11:13:15,370 - app.core.excel.converter - WARNING - 无法解析规格: 146*None,使用默认值1*1 +2025-12-12 11:13:15,370 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.8, 单位: 6911988000286 +2025-12-12 11:13:15,371 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆腰果饼108g@ -> 108*None +2025-12-12 11:13:15,371 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆腰果饼108g@ -> 108*None +2025-12-12 11:13:15,372 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:13:15,372 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 6911988009777 +2025-12-12 11:13:15,373 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆杏仁饼108g@ -> 108*None +2025-12-12 11:13:15,373 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆杏仁饼108g@ -> 108*None +2025-12-12 11:13:15,374 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:13:15,374 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 6911988009760 +2025-12-12 11:13:15,374 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆核桃饼108g@ -> 108*None +2025-12-12 11:13:15,374 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆核桃饼108g@ -> 108*None +2025-12-12 11:13:15,374 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:13:15,374 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 6911988009784 +2025-12-12 11:13:15,374 - app.core.excel.converter - INFO - 提取规格: 嘉士利威化饼干草莓味115g@ -> 115*None +2025-12-12 11:13:15,374 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利威化饼干草莓味115g@ -> 115*None +2025-12-12 11:13:15,378 - app.core.excel.converter - WARNING - 无法解析规格: 115*None,使用默认值1*1 +2025-12-12 11:13:15,378 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 2.0, 单价: 3.8, 单位: 6901180581683 +2025-12-12 11:13:15,378 - app.core.excel.converter - INFO - 提取规格: 亨裕饼朱古力味饼干186g -> 186*None +2025-12-12 11:13:15,379 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 亨裕饼朱古力味饼干186g -> 186*None +2025-12-12 11:13:15,380 - app.core.excel.converter - WARNING - 无法解析规格: 186*None,使用默认值1*1 +2025-12-12 11:13:15,380 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.0, 单位: 6932024200552 +2025-12-12 11:13:15,380 - app.core.excel.converter - INFO - 提取规格: 亨裕早茶饼干110g -> 110*None +2025-12-12 11:13:15,381 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 亨裕早茶饼干110g -> 110*None +2025-12-12 11:13:15,382 - app.core.excel.converter - WARNING - 无法解析规格: 110*None,使用默认值1*1 +2025-12-12 11:13:15,382 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 1.7, 单位: 6932024200583 +2025-12-12 11:13:15,382 - app.core.excel.converter - INFO - 提取规格: 趣多多香浓巧克力味85g@ -> 85*None +2025-12-12 11:13:15,382 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 趣多多香浓巧克力味85g@ -> 85*None +2025-12-12 11:13:15,384 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:13:15,384 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 5.2, 单位: 6901668936714 +2025-12-12 11:13:15,385 - app.core.excel.converter - INFO - 提取规格: 趣多多缤纷逗巧克力85g@ -> 85*None +2025-12-12 11:13:15,385 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 趣多多缤纷逗巧克力85g@ -> 85*None +2025-12-12 11:13:15,386 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:13:15,386 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 5.2, 单位: 6901668062499 +2025-12-12 11:13:15,387 - app.core.excel.converter - INFO - 提取规格: 米老头雪花煎卷椰奶味150g@ -> 150*None +2025-12-12 11:13:15,387 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 米老头雪花煎卷椰奶味150g@ -> 150*None +2025-12-12 11:13:15,388 - app.core.excel.converter - WARNING - 无法解析规格: 150*None,使用默认值1*1 +2025-12-12 11:13:15,389 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.8, 单位: 6925332600046 +2025-12-12 11:13:15,389 - app.core.excel.converter - INFO - 提取规格: 金富士牛乳饼干香浓牛奶味130g@ -> 130*None +2025-12-12 11:13:15,389 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 金富士牛乳饼干香浓牛奶味130g@ -> 130*None +2025-12-12 11:13:15,390 - app.core.excel.converter - WARNING - 无法解析规格: 130*None,使用默认值1*1 +2025-12-12 11:13:15,391 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.8, 单位: 6921233904955 +2025-12-12 11:13:15,391 - app.core.excel.converter - INFO - 提取规格: 嘉士利果乐果香蓝莓味85g@ -> 85*None +2025-12-12 11:13:15,391 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利果乐果香蓝莓味85g@ -> 85*None +2025-12-12 11:13:15,392 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:13:15,393 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.0, 单位: 6901180993387 +2025-12-12 11:13:15,393 - app.core.excel.converter - INFO - 提取规格: 嘉士利果乐果香草莓味85g@ -> 85*None +2025-12-12 11:13:15,393 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利果乐果香草莓味85g@ -> 85*None +2025-12-12 11:13:15,393 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:13:15,393 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.0, 单位: 6901180993486 +2025-12-12 11:13:15,393 - app.core.excel.converter - INFO - 提取规格: 旺旺仙贝52g@ -> 52*None +2025-12-12 11:13:15,393 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 旺旺仙贝52g@ -> 52*None +2025-12-12 11:13:15,393 - app.core.excel.converter - WARNING - 无法解析规格: 52*None,使用默认值1*1 +2025-12-12 11:13:15,393 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 3.95, 单位: 6920546800046 +2025-12-12 11:13:15,397 - app.core.excel.converter - INFO - 提取规格: 旺旺雪饼84g@ -> 84*None +2025-12-12 11:13:15,398 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 旺旺雪饼84g@ -> 84*None +2025-12-12 11:13:15,399 - app.core.excel.converter - WARNING - 无法解析规格: 84*None,使用默认值1*1 +2025-12-12 11:13:15,399 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.5, 单位: 6920546800053 +2025-12-12 11:13:15,399 - app.core.excel.converter - INFO - 提取规格: 达利园蛋黄派230g@ -> 230*None +2025-12-12 11:13:15,399 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园蛋黄派230g@ -> 230*None +2025-12-12 11:13:15,400 - app.core.excel.converter - WARNING - 无法解析规格: 230*None,使用默认值1*1 +2025-12-12 11:13:15,401 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 1.0, 单价: 5.88, 单位: 6911988006783 +2025-12-12 11:13:15,401 - app.core.excel.converter - INFO - 提取规格: 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None +2025-12-12 11:13:15,401 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None +2025-12-12 11:13:15,402 - app.core.excel.converter - WARNING - 无法解析规格: 22*None,使用默认值1*1 +2025-12-12 11:13:15,403 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 20.0, 单价: 15.0, 单位: 6971295190728 +2025-12-12 11:13:15,403 - app.core.excel.converter - INFO - 提取规格: 劲仔手撕肉干麻辣味10g@ -> 10*None +2025-12-12 11:13:15,403 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔手撕肉干麻辣味10g@ -> 10*None +2025-12-12 11:13:15,404 - app.core.excel.converter - WARNING - 无法解析规格: 10*None,使用默认值1*1 +2025-12-12 11:13:15,404 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 20.0, 单价: 26.6, 单位: 6951957217215 +2025-12-12 11:13:15,404 - app.core.excel.converter - INFO - 提取规格: 劲仔手撕肉干香辣味10g@ -> 10*None +2025-12-12 11:13:15,404 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔手撕肉干香辣味10g@ -> 10*None +2025-12-12 11:13:15,404 - app.core.excel.converter - WARNING - 无法解析规格: 10*None,使用默认值1*1 +2025-12-12 11:13:15,404 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 20.0, 单价: 26.6, 单位: 6951957217208 +2025-12-12 11:13:15,404 - app.core.excel.converter - INFO - 提取规格: 登荣香辣爽口鸡23g -> 23*None +2025-12-12 11:13:15,408 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 登荣香辣爽口鸡23g -> 23*None +2025-12-12 11:13:15,408 - app.core.excel.converter - WARNING - 无法解析规格: 23*None,使用默认值1*1 +2025-12-12 11:13:15,409 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 20.0, 单价: 15.0, 单位: +2025-12-12 11:13:15,409 - app.core.excel.converter - INFO - 提取规格: 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None +2025-12-12 11:13:15,409 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None +2025-12-12 11:13:15,410 - app.core.excel.converter - WARNING - 无法解析规格: 12*None,使用默认值1*1 +2025-12-12 11:13:15,410 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 16.0, 单价: 23.2, 单位: 6914973603462 +2025-12-12 11:13:15,411 - app.core.excel.converter - INFO - 提取规格: 味芝元洞庭鱼排香辣味26g -> 26*None +2025-12-12 11:13:15,411 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 味芝元洞庭鱼排香辣味26g -> 26*None +2025-12-12 11:13:15,412 - app.core.excel.converter - WARNING - 无法解析规格: 26*None,使用默认值1*1 +2025-12-12 11:13:15,413 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 15.0, 单价: 1.5, 单位: 6936869215092 +2025-12-12 11:13:15,413 - app.core.excel.converter - INFO - 提取规格: 劲仔小鱼麻辣小鱼12g@ -> 12*None +2025-12-12 11:13:15,413 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔小鱼麻辣小鱼12g@ -> 12*None +2025-12-12 11:13:15,413 - app.core.excel.converter - WARNING - 无法解析规格: 12*None,使用默认值1*1 +2025-12-12 11:13:15,413 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 20.0, 单价: 14.2, 单位: +2025-12-12 11:13:15,413 - app.core.excel.converter - INFO - 提取规格: 缺牙齿素牛肚香辣味16g -> 16*None +2025-12-12 11:13:15,413 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 缺牙齿素牛肚香辣味16g -> 16*None +2025-12-12 11:13:15,417 - app.core.excel.converter - WARNING - 无法解析规格: 16*None,使用默认值1*1 +2025-12-12 11:13:15,417 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 30.0, 单价: 22.5, 单位: 6976481800344 +2025-12-12 11:13:15,417 - app.core.excel.converter - INFO - 提取规格: 乐事青柠味70g@ -> 70*None +2025-12-12 11:13:15,417 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事青柠味70g@ -> 70*None +2025-12-12 11:13:15,419 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:13:15,419 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.79, 单位: 6924743919266 +2025-12-12 11:13:15,420 - app.core.excel.converter - INFO - 提取规格: 乐事黄瓜味70g@ -> 70*None +2025-12-12 11:13:15,420 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事黄瓜味70g@ -> 70*None +2025-12-12 11:13:15,421 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:13:15,421 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.79, 单位: 6924743919259 +2025-12-12 11:13:15,422 - app.core.excel.converter - INFO - 提取规格: 乐事德克萨斯烧烤味70g@ -> 70*None +2025-12-12 11:13:15,422 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事德克萨斯烧烤味70g@ -> 70*None +2025-12-12 11:13:15,423 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:13:15,423 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 4.79, 单位: 6924743919228 +2025-12-12 11:13:15,423 - app.core.excel.converter - INFO - 提取规格: 乐事薯片经典原味23g(串串装)@ -> 23*None +2025-12-12 11:13:15,423 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事薯片经典原味23g(串串装)@ -> 23*None +2025-12-12 11:13:15,423 - app.core.excel.converter - WARNING - 无法解析规格: 23*None,使用默认值1*1 +2025-12-12 11:13:15,423 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 1.0, 单价: 1.35, 单位: 6924743928077 +2025-12-12 11:22:25,990 - app.core.excel.converter - INFO - 成功加载条码映射配置,共51项 +2025-12-12 11:22:26,024 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 雪碧2L@ -> 2L*1 +2025-12-12 11:22:26,027 - app.core.excel.converter - INFO - 解析容量(L)规格: 2L*1 -> 1*1 +2025-12-12 11:22:26,028 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝饮用纯净水2.08L@ -> 2.08L*1 +2025-12-12 11:22:26,029 - app.core.excel.converter - INFO - 解析容量(L)规格: 2.08L*1 -> 1*1 +2025-12-12 11:22:26,030 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 40.0, 单价: 21.52, 单位: 6901285993046 +2025-12-12 11:22:26,031 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝纯净水4.5L@ -> 4.5L*1 +2025-12-12 11:22:26,032 - app.core.excel.converter - INFO - 解析容量(L)规格: 4.5L*1 -> 1*1 +2025-12-12 11:22:26,032 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 8.0, 单价: 26.08, 单位: 6901285991547 +2025-12-12 11:22:26,032 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝饮用纯净水1.555L@ -> 1.555L*1 +2025-12-12 11:22:26,033 - app.core.excel.converter - INFO - 解析容量(L)规格: 1.555L*1 -> 1*1 +2025-12-12 11:22:26,033 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 60.0, 单价: 24.6, 单位: 6901285991288 +2025-12-12 11:22:26,034 - app.core.excel.converter - INFO - 提取规格: 奥利奥薄脆酸甜草莓味95g@ -> 95*None +2025-12-12 11:22:26,034 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥薄脆酸甜草莓味95g@ -> 95*None +2025-12-12 11:22:26,036 - app.core.excel.converter - WARNING - 无法解析规格: 95*None,使用默认值1*1 +2025-12-12 11:22:26,036 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 6.5, 单位: 6901668934925 +2025-12-12 11:22:26,037 - app.core.excel.converter - INFO - 提取规格: 奥利奥杯奥草莓味55g@ -> 55*None +2025-12-12 11:22:26,037 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥杯奥草莓味55g@ -> 55*None +2025-12-12 11:22:26,039 - app.core.excel.converter - WARNING - 无法解析规格: 55*None,使用默认值1*1 +2025-12-12 11:22:26,039 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.6, 单位: 6901668054715 +2025-12-12 11:22:26,039 - app.core.excel.converter - INFO - 提取规格: 奥利奥杯奥巧克力55g@ -> 55*None +2025-12-12 11:22:26,040 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥杯奥巧克力55g@ -> 55*None +2025-12-12 11:22:26,040 - app.core.excel.converter - WARNING - 无法解析规格: 55*None,使用默认值1*1 +2025-12-12 11:22:26,040 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.6, 单位: 6901668053916 +2025-12-12 11:22:26,040 - app.core.excel.converter - INFO - 提取规格: 好丽友蛋黄派2P46g@ -> 46*None +2025-12-12 11:22:26,042 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 好丽友蛋黄派2P46g@ -> 46*None +2025-12-12 11:22:26,042 - app.core.excel.converter - WARNING - 无法解析规格: 46*None,使用默认值1*1 +2025-12-12 11:22:26,042 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.0, 单位: 6920907800616 +2025-12-12 11:22:26,043 - app.core.excel.converter - INFO - 提取规格: 都市牧场爽口含片正梅味38g@ -> 38*None +2025-12-12 11:22:26,043 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 都市牧场爽口含片正梅味38g@ -> 38*None +2025-12-12 11:22:26,045 - app.core.excel.converter - WARNING - 无法解析规格: 38*None,使用默认值1*1 +2025-12-12 11:22:26,045 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 8.0, 单价: 38.0, 单位: +2025-12-12 11:22:26,046 - app.core.excel.converter - INFO - 提取规格: 林振合维C果C软糖什锦味68g -> 68*None +2025-12-12 11:22:26,046 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 林振合维C果C软糖什锦味68g -> 68*None +2025-12-12 11:22:26,047 - app.core.excel.converter - WARNING - 无法解析规格: 68*None,使用默认值1*1 +2025-12-12 11:22:26,047 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 8.0, 单价: 28.0, 单位: +2025-12-12 11:22:26,048 - app.core.excel.converter - INFO - 提取规格: 格力高百醇柠檬48g@ -> 48*None +2025-12-12 11:22:26,048 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 格力高百醇柠檬48g@ -> 48*None +2025-12-12 11:22:26,049 - app.core.excel.converter - WARNING - 无法解析规格: 48*None,使用默认值1*1 +2025-12-12 11:22:26,049 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 5.55, 单位: 6901845044027 +2025-12-12 11:22:26,050 - app.core.excel.converter - INFO - 提取规格: 格力高百醇抹茶慕斯味48g@ -> 48*None +2025-12-12 11:22:26,050 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 格力高百醇抹茶慕斯味48g@ -> 48*None +2025-12-12 11:22:26,050 - app.core.excel.converter - WARNING - 无法解析规格: 48*None,使用默认值1*1 +2025-12-12 11:22:26,051 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 5.55, 单位: 6901845040968 +2025-12-12 11:22:26,051 - app.core.excel.converter - INFO - 提取规格: 奥利奥饼干经典原味48.5g@ -> 48.5*None +2025-12-12 11:22:26,051 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥饼干经典原味48.5g@ -> 48.5*None +2025-12-12 11:22:26,052 - app.core.excel.converter - WARNING - 无法解析规格: 48.5*None,使用默认值1*1 +2025-12-12 11:22:26,052 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 6.0, 单价: 1.99, 单位: 6901668935649 +2025-12-12 11:22:26,052 - app.core.excel.converter - INFO - 提取规格: 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None +2025-12-12 11:22:26,052 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None +2025-12-12 11:22:26,052 - app.core.excel.converter - WARNING - 无法解析规格: 48.5*None,使用默认值1*1 +2025-12-12 11:22:26,052 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 1.99, 单位: 6901668935663 +2025-12-12 11:22:26,055 - app.core.excel.converter - INFO - 提取规格: 法丽兹曲奇芝士巧克力70g@ -> 70*None +2025-12-12 11:22:26,056 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 法丽兹曲奇芝士巧克力70g@ -> 70*None +2025-12-12 11:22:26,057 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:22:26,057 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.66, 单位: 6947929617534 +2025-12-12 11:22:26,057 - app.core.excel.converter - INFO - 提取规格: 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None +2025-12-12 11:22:26,058 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None +2025-12-12 11:22:26,059 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:22:26,059 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.66, 单位: 6947929617138 +2025-12-12 11:22:26,059 - app.core.excel.converter - INFO - 提取规格: 太平梳打饼干奶盐味100g@ -> 100*None +2025-12-12 11:22:26,060 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 太平梳打饼干奶盐味100g@ -> 100*None +2025-12-12 11:22:26,061 - app.core.excel.converter - WARNING - 无法解析规格: 100*None,使用默认值1*1 +2025-12-12 11:22:26,061 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.5, 单位: 6901668200013 +2025-12-12 11:22:26,061 - app.core.excel.converter - INFO - 提取规格: 太平梳打饼干海苔味100g@ -> 100*None +2025-12-12 11:22:26,061 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 太平梳打饼干海苔味100g@ -> 100*None +2025-12-12 11:22:26,061 - app.core.excel.converter - WARNING - 无法解析规格: 100*None,使用默认值1*1 +2025-12-12 11:22:26,061 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.5, 单位: 6901668200303 +2025-12-12 11:22:26,061 - app.core.excel.converter - INFO - 提取规格: 达利园手指饼115g@ -> 115*None +2025-12-12 11:22:26,061 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园手指饼115g@ -> 115*None +2025-12-12 11:22:26,065 - app.core.excel.converter - WARNING - 无法解析规格: 115*None,使用默认值1*1 +2025-12-12 11:22:26,065 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.25, 单位: 6911988005229 +2025-12-12 11:22:26,065 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点杏仁酥饼146g@ -> 146*None +2025-12-12 11:22:26,065 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点杏仁酥饼146g@ -> 146*None +2025-12-12 11:22:26,066 - app.core.excel.converter - WARNING - 无法解析规格: 146*None,使用默认值1*1 +2025-12-12 11:22:26,067 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.8, 单位: 6911988000293 +2025-12-12 11:22:26,068 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点核桃酥饼146g@ -> 146*None +2025-12-12 11:22:26,068 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点核桃酥饼146g@ -> 146*None +2025-12-12 11:22:26,069 - app.core.excel.converter - WARNING - 无法解析规格: 146*None,使用默认值1*1 +2025-12-12 11:22:26,069 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.8, 单位: 6911988000286 +2025-12-12 11:22:26,069 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆腰果饼108g@ -> 108*None +2025-12-12 11:22:26,069 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆腰果饼108g@ -> 108*None +2025-12-12 11:22:26,070 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:22:26,070 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 6911988009777 +2025-12-12 11:22:26,071 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆杏仁饼108g@ -> 108*None +2025-12-12 11:22:26,071 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆杏仁饼108g@ -> 108*None +2025-12-12 11:22:26,072 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:22:26,072 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 6911988009760 +2025-12-12 11:22:26,072 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆核桃饼108g@ -> 108*None +2025-12-12 11:22:26,073 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆核桃饼108g@ -> 108*None +2025-12-12 11:22:26,074 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:22:26,074 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 6911988009784 +2025-12-12 11:22:26,074 - app.core.excel.converter - INFO - 提取规格: 嘉士利威化饼干草莓味115g@ -> 115*None +2025-12-12 11:22:26,074 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利威化饼干草莓味115g@ -> 115*None +2025-12-12 11:22:26,075 - app.core.excel.converter - WARNING - 无法解析规格: 115*None,使用默认值1*1 +2025-12-12 11:22:26,075 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 2.0, 单价: 3.8, 单位: 6901180581683 +2025-12-12 11:22:26,075 - app.core.excel.converter - INFO - 提取规格: 亨裕饼朱古力味饼干186g -> 186*None +2025-12-12 11:22:26,075 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 亨裕饼朱古力味饼干186g -> 186*None +2025-12-12 11:22:26,078 - app.core.excel.converter - WARNING - 无法解析规格: 186*None,使用默认值1*1 +2025-12-12 11:22:26,078 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.0, 单位: 6932024200552 +2025-12-12 11:22:26,078 - app.core.excel.converter - INFO - 提取规格: 亨裕早茶饼干110g -> 110*None +2025-12-12 11:22:26,079 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 亨裕早茶饼干110g -> 110*None +2025-12-12 11:22:26,079 - app.core.excel.converter - WARNING - 无法解析规格: 110*None,使用默认值1*1 +2025-12-12 11:22:26,080 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 1.7, 单位: 6932024200583 +2025-12-12 11:22:26,080 - app.core.excel.converter - INFO - 提取规格: 趣多多香浓巧克力味85g@ -> 85*None +2025-12-12 11:22:26,080 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 趣多多香浓巧克力味85g@ -> 85*None +2025-12-12 11:22:26,080 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:22:26,080 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 5.2, 单位: 6901668936714 +2025-12-12 11:22:26,081 - app.core.excel.converter - INFO - 提取规格: 趣多多缤纷逗巧克力85g@ -> 85*None +2025-12-12 11:22:26,081 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 趣多多缤纷逗巧克力85g@ -> 85*None +2025-12-12 11:22:26,082 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:22:26,082 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 5.2, 单位: 6901668062499 +2025-12-12 11:22:26,082 - app.core.excel.converter - INFO - 提取规格: 米老头雪花煎卷椰奶味150g@ -> 150*None +2025-12-12 11:22:26,083 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 米老头雪花煎卷椰奶味150g@ -> 150*None +2025-12-12 11:22:26,083 - app.core.excel.converter - WARNING - 无法解析规格: 150*None,使用默认值1*1 +2025-12-12 11:22:26,083 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.8, 单位: 6925332600046 +2025-12-12 11:22:26,083 - app.core.excel.converter - INFO - 提取规格: 金富士牛乳饼干香浓牛奶味130g@ -> 130*None +2025-12-12 11:22:26,083 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 金富士牛乳饼干香浓牛奶味130g@ -> 130*None +2025-12-12 11:22:26,086 - app.core.excel.converter - WARNING - 无法解析规格: 130*None,使用默认值1*1 +2025-12-12 11:22:26,086 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.8, 单位: 6921233904955 +2025-12-12 11:22:26,086 - app.core.excel.converter - INFO - 提取规格: 嘉士利果乐果香蓝莓味85g@ -> 85*None +2025-12-12 11:22:26,087 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利果乐果香蓝莓味85g@ -> 85*None +2025-12-12 11:22:26,088 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:22:26,088 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.0, 单位: 6901180993387 +2025-12-12 11:22:26,089 - app.core.excel.converter - INFO - 提取规格: 嘉士利果乐果香草莓味85g@ -> 85*None +2025-12-12 11:22:26,089 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利果乐果香草莓味85g@ -> 85*None +2025-12-12 11:22:26,090 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:22:26,090 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.0, 单位: 6901180993486 +2025-12-12 11:22:26,091 - app.core.excel.converter - INFO - 提取规格: 旺旺仙贝52g@ -> 52*None +2025-12-12 11:22:26,091 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 旺旺仙贝52g@ -> 52*None +2025-12-12 11:22:26,091 - app.core.excel.converter - WARNING - 无法解析规格: 52*None,使用默认值1*1 +2025-12-12 11:22:26,091 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 3.95, 单位: 6920546800046 +2025-12-12 11:22:26,091 - app.core.excel.converter - INFO - 提取规格: 旺旺雪饼84g@ -> 84*None +2025-12-12 11:22:26,091 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 旺旺雪饼84g@ -> 84*None +2025-12-12 11:22:26,091 - app.core.excel.converter - WARNING - 无法解析规格: 84*None,使用默认值1*1 +2025-12-12 11:22:26,091 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.5, 单位: 6920546800053 +2025-12-12 11:22:26,095 - app.core.excel.converter - INFO - 提取规格: 达利园蛋黄派230g@ -> 230*None +2025-12-12 11:22:26,095 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园蛋黄派230g@ -> 230*None +2025-12-12 11:22:26,096 - app.core.excel.converter - WARNING - 无法解析规格: 230*None,使用默认值1*1 +2025-12-12 11:22:26,096 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 1.0, 单价: 5.88, 单位: 6911988006783 +2025-12-12 11:22:26,097 - app.core.excel.converter - INFO - 提取规格: 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None +2025-12-12 11:22:26,097 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None +2025-12-12 11:22:26,098 - app.core.excel.converter - WARNING - 无法解析规格: 22*None,使用默认值1*1 +2025-12-12 11:22:26,098 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 20.0, 单价: 15.0, 单位: 6971295190728 +2025-12-12 11:22:26,099 - app.core.excel.converter - INFO - 提取规格: 劲仔手撕肉干麻辣味10g@ -> 10*None +2025-12-12 11:22:26,099 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔手撕肉干麻辣味10g@ -> 10*None +2025-12-12 11:22:26,099 - app.core.excel.converter - WARNING - 无法解析规格: 10*None,使用默认值1*1 +2025-12-12 11:22:26,100 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 20.0, 单价: 26.6, 单位: 6951957217215 +2025-12-12 11:22:26,100 - app.core.excel.converter - INFO - 提取规格: 劲仔手撕肉干香辣味10g@ -> 10*None +2025-12-12 11:22:26,100 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔手撕肉干香辣味10g@ -> 10*None +2025-12-12 11:22:26,100 - app.core.excel.converter - WARNING - 无法解析规格: 10*None,使用默认值1*1 +2025-12-12 11:22:26,100 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 20.0, 单价: 26.6, 单位: 6951957217208 +2025-12-12 11:22:26,100 - app.core.excel.converter - INFO - 提取规格: 登荣香辣爽口鸡23g -> 23*None +2025-12-12 11:22:26,100 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 登荣香辣爽口鸡23g -> 23*None +2025-12-12 11:22:26,104 - app.core.excel.converter - WARNING - 无法解析规格: 23*None,使用默认值1*1 +2025-12-12 11:22:26,104 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 20.0, 单价: 15.0, 单位: +2025-12-12 11:22:26,104 - app.core.excel.converter - INFO - 提取规格: 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None +2025-12-12 11:22:26,106 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None +2025-12-12 11:22:26,106 - app.core.excel.converter - WARNING - 无法解析规格: 12*None,使用默认值1*1 +2025-12-12 11:22:26,106 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 16.0, 单价: 23.2, 单位: 6914973603462 +2025-12-12 11:22:26,107 - app.core.excel.converter - INFO - 提取规格: 味芝元洞庭鱼排香辣味26g -> 26*None +2025-12-12 11:22:26,107 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 味芝元洞庭鱼排香辣味26g -> 26*None +2025-12-12 11:22:26,108 - app.core.excel.converter - WARNING - 无法解析规格: 26*None,使用默认值1*1 +2025-12-12 11:22:26,108 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 15.0, 单价: 1.5, 单位: 6936869215092 +2025-12-12 11:22:26,109 - app.core.excel.converter - INFO - 提取规格: 劲仔小鱼麻辣小鱼12g@ -> 12*None +2025-12-12 11:22:26,109 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔小鱼麻辣小鱼12g@ -> 12*None +2025-12-12 11:22:26,110 - app.core.excel.converter - WARNING - 无法解析规格: 12*None,使用默认值1*1 +2025-12-12 11:22:26,110 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 20.0, 单价: 14.2, 单位: +2025-12-12 11:22:26,110 - app.core.excel.converter - INFO - 提取规格: 缺牙齿素牛肚香辣味16g -> 16*None +2025-12-12 11:22:26,110 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 缺牙齿素牛肚香辣味16g -> 16*None +2025-12-12 11:22:26,111 - app.core.excel.converter - WARNING - 无法解析规格: 16*None,使用默认值1*1 +2025-12-12 11:22:26,111 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 30.0, 单价: 22.5, 单位: 6976481800344 +2025-12-12 11:22:26,111 - app.core.excel.converter - INFO - 提取规格: 乐事青柠味70g@ -> 70*None +2025-12-12 11:22:26,111 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事青柠味70g@ -> 70*None +2025-12-12 11:22:26,111 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:22:26,111 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.79, 单位: 6924743919266 +2025-12-12 11:22:26,111 - app.core.excel.converter - INFO - 提取规格: 乐事黄瓜味70g@ -> 70*None +2025-12-12 11:22:26,111 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事黄瓜味70g@ -> 70*None +2025-12-12 11:22:26,111 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:22:26,115 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.79, 单位: 6924743919259 +2025-12-12 11:22:26,116 - app.core.excel.converter - INFO - 提取规格: 乐事德克萨斯烧烤味70g@ -> 70*None +2025-12-12 11:22:26,116 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事德克萨斯烧烤味70g@ -> 70*None +2025-12-12 11:22:26,117 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:22:26,117 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 4.79, 单位: 6924743919228 +2025-12-12 11:22:26,118 - app.core.excel.converter - INFO - 提取规格: 乐事薯片经典原味23g(串串装)@ -> 23*None +2025-12-12 11:22:26,118 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事薯片经典原味23g(串串装)@ -> 23*None +2025-12-12 11:22:26,119 - app.core.excel.converter - WARNING - 无法解析规格: 23*None,使用默认值1*1 +2025-12-12 11:22:26,119 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 1.0, 单价: 1.35, 单位: 6924743928077 +2025-12-12 11:32:26,690 - app.core.excel.converter - INFO - 成功加载条码映射配置,共51项 +2025-12-12 11:32:26,725 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 雪碧2L@ -> 2L*1 +2025-12-12 11:32:26,726 - app.core.excel.converter - INFO - 解析容量(L)规格: 2L*1 -> 1*1 +2025-12-12 11:32:26,726 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝饮用纯净水2.08L@ -> 2.08L*1 +2025-12-12 11:32:26,726 - app.core.excel.converter - INFO - 解析容量(L)规格: 2.08L*1 -> 1*1 +2025-12-12 11:32:26,730 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 40.0, 单价: 21.52, 单位: 6901285993046 +2025-12-12 11:32:26,730 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝纯净水4.5L@ -> 4.5L*1 +2025-12-12 11:32:26,732 - app.core.excel.converter - INFO - 解析容量(L)规格: 4.5L*1 -> 1*1 +2025-12-12 11:32:26,732 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 8.0, 单价: 26.08, 单位: 6901285991547 +2025-12-12 11:32:26,733 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝饮用纯净水1.555L@ -> 1.555L*1 +2025-12-12 11:32:26,733 - app.core.excel.converter - INFO - 解析容量(L)规格: 1.555L*1 -> 1*1 +2025-12-12 11:32:26,733 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 60.0, 单价: 24.6, 单位: 6901285991288 +2025-12-12 11:32:26,734 - app.core.excel.converter - INFO - 提取规格: 奥利奥薄脆酸甜草莓味95g@ -> 95*None +2025-12-12 11:32:26,734 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥薄脆酸甜草莓味95g@ -> 95*None +2025-12-12 11:32:26,735 - app.core.excel.converter - WARNING - 无法解析规格: 95*None,使用默认值1*1 +2025-12-12 11:32:26,736 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 6.5, 单位: 6901668934925 +2025-12-12 11:32:26,736 - app.core.excel.converter - INFO - 提取规格: 奥利奥杯奥草莓味55g@ -> 55*None +2025-12-12 11:32:26,736 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥杯奥草莓味55g@ -> 55*None +2025-12-12 11:32:26,736 - app.core.excel.converter - WARNING - 无法解析规格: 55*None,使用默认值1*1 +2025-12-12 11:32:26,736 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.6, 单位: 6901668054715 +2025-12-12 11:32:26,736 - app.core.excel.converter - INFO - 提取规格: 奥利奥杯奥巧克力55g@ -> 55*None +2025-12-12 11:32:26,739 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥杯奥巧克力55g@ -> 55*None +2025-12-12 11:32:26,739 - app.core.excel.converter - WARNING - 无法解析规格: 55*None,使用默认值1*1 +2025-12-12 11:32:26,739 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.6, 单位: 6901668053916 +2025-12-12 11:32:26,739 - app.core.excel.converter - INFO - 提取规格: 好丽友蛋黄派2P46g@ -> 46*None +2025-12-12 11:32:26,739 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 好丽友蛋黄派2P46g@ -> 46*None +2025-12-12 11:32:26,742 - app.core.excel.converter - WARNING - 无法解析规格: 46*None,使用默认值1*1 +2025-12-12 11:32:26,742 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.0, 单位: 6920907800616 +2025-12-12 11:32:26,743 - app.core.excel.converter - INFO - 提取规格: 都市牧场爽口含片正梅味38g@ -> 38*None +2025-12-12 11:32:26,743 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 都市牧场爽口含片正梅味38g@ -> 38*None +2025-12-12 11:32:26,744 - app.core.excel.converter - WARNING - 无法解析规格: 38*None,使用默认值1*1 +2025-12-12 11:32:26,744 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 8.0, 单价: 38.0, 单位: +2025-12-12 11:32:26,744 - app.core.excel.converter - INFO - 提取规格: 林振合维C果C软糖什锦味68g -> 68*None +2025-12-12 11:32:26,745 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 林振合维C果C软糖什锦味68g -> 68*None +2025-12-12 11:32:26,746 - app.core.excel.converter - WARNING - 无法解析规格: 68*None,使用默认值1*1 +2025-12-12 11:32:26,746 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 8.0, 单价: 28.0, 单位: +2025-12-12 11:32:26,746 - app.core.excel.converter - INFO - 提取规格: 格力高百醇柠檬48g@ -> 48*None +2025-12-12 11:32:26,746 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 格力高百醇柠檬48g@ -> 48*None +2025-12-12 11:32:26,747 - app.core.excel.converter - WARNING - 无法解析规格: 48*None,使用默认值1*1 +2025-12-12 11:32:26,747 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 5.55, 单位: 6901845044027 +2025-12-12 11:32:26,747 - app.core.excel.converter - INFO - 提取规格: 格力高百醇抹茶慕斯味48g@ -> 48*None +2025-12-12 11:32:26,748 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 格力高百醇抹茶慕斯味48g@ -> 48*None +2025-12-12 11:32:26,748 - app.core.excel.converter - WARNING - 无法解析规格: 48*None,使用默认值1*1 +2025-12-12 11:32:26,748 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 5.55, 单位: 6901845040968 +2025-12-12 11:32:26,748 - app.core.excel.converter - INFO - 提取规格: 奥利奥饼干经典原味48.5g@ -> 48.5*None +2025-12-12 11:32:26,748 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥饼干经典原味48.5g@ -> 48.5*None +2025-12-12 11:32:26,751 - app.core.excel.converter - WARNING - 无法解析规格: 48.5*None,使用默认值1*1 +2025-12-12 11:32:26,752 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 6.0, 单价: 1.99, 单位: 6901668935649 +2025-12-12 11:32:26,752 - app.core.excel.converter - INFO - 提取规格: 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None +2025-12-12 11:32:26,752 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None +2025-12-12 11:32:26,753 - app.core.excel.converter - WARNING - 无法解析规格: 48.5*None,使用默认值1*1 +2025-12-12 11:32:26,753 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 1.99, 单位: 6901668935663 +2025-12-12 11:32:26,755 - app.core.excel.converter - INFO - 提取规格: 法丽兹曲奇芝士巧克力70g@ -> 70*None +2025-12-12 11:32:26,755 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 法丽兹曲奇芝士巧克力70g@ -> 70*None +2025-12-12 11:32:26,756 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:32:26,756 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.66, 单位: 6947929617534 +2025-12-12 11:32:26,756 - app.core.excel.converter - INFO - 提取规格: 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None +2025-12-12 11:32:26,756 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None +2025-12-12 11:32:26,758 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:32:26,758 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.66, 单位: 6947929617138 +2025-12-12 11:32:26,758 - app.core.excel.converter - INFO - 提取规格: 太平梳打饼干奶盐味100g@ -> 100*None +2025-12-12 11:32:26,759 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 太平梳打饼干奶盐味100g@ -> 100*None +2025-12-12 11:32:26,759 - app.core.excel.converter - WARNING - 无法解析规格: 100*None,使用默认值1*1 +2025-12-12 11:32:26,760 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.5, 单位: 6901668200013 +2025-12-12 11:32:26,760 - app.core.excel.converter - INFO - 提取规格: 太平梳打饼干海苔味100g@ -> 100*None +2025-12-12 11:32:26,761 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 太平梳打饼干海苔味100g@ -> 100*None +2025-12-12 11:32:26,762 - app.core.excel.converter - WARNING - 无法解析规格: 100*None,使用默认值1*1 +2025-12-12 11:32:26,762 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.5, 单位: 6901668200303 +2025-12-12 11:32:26,763 - app.core.excel.converter - INFO - 提取规格: 达利园手指饼115g@ -> 115*None +2025-12-12 11:32:26,763 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园手指饼115g@ -> 115*None +2025-12-12 11:32:26,765 - app.core.excel.converter - WARNING - 无法解析规格: 115*None,使用默认值1*1 +2025-12-12 11:32:26,765 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.25, 单位: 6911988005229 +2025-12-12 11:32:26,765 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点杏仁酥饼146g@ -> 146*None +2025-12-12 11:32:26,765 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点杏仁酥饼146g@ -> 146*None +2025-12-12 11:32:26,767 - app.core.excel.converter - WARNING - 无法解析规格: 146*None,使用默认值1*1 +2025-12-12 11:32:26,767 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.8, 单位: 6911988000293 +2025-12-12 11:32:26,768 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点核桃酥饼146g@ -> 146*None +2025-12-12 11:32:26,768 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点核桃酥饼146g@ -> 146*None +2025-12-12 11:32:26,769 - app.core.excel.converter - WARNING - 无法解析规格: 146*None,使用默认值1*1 +2025-12-12 11:32:26,769 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.8, 单位: 6911988000286 +2025-12-12 11:32:26,770 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆腰果饼108g@ -> 108*None +2025-12-12 11:32:26,770 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆腰果饼108g@ -> 108*None +2025-12-12 11:32:26,771 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:32:26,771 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 6911988009777 +2025-12-12 11:32:26,771 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆杏仁饼108g@ -> 108*None +2025-12-12 11:32:26,771 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆杏仁饼108g@ -> 108*None +2025-12-12 11:32:26,772 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:32:26,772 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 6911988009760 +2025-12-12 11:32:26,773 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆核桃饼108g@ -> 108*None +2025-12-12 11:32:26,773 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆核桃饼108g@ -> 108*None +2025-12-12 11:32:26,773 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:32:26,773 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 6911988009784 +2025-12-12 11:32:26,773 - app.core.excel.converter - INFO - 提取规格: 嘉士利威化饼干草莓味115g@ -> 115*None +2025-12-12 11:32:26,773 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利威化饼干草莓味115g@ -> 115*None +2025-12-12 11:32:26,777 - app.core.excel.converter - WARNING - 无法解析规格: 115*None,使用默认值1*1 +2025-12-12 11:32:26,777 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 2.0, 单价: 3.8, 单位: 6901180581683 +2025-12-12 11:32:26,777 - app.core.excel.converter - INFO - 提取规格: 亨裕饼朱古力味饼干186g -> 186*None +2025-12-12 11:32:26,778 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 亨裕饼朱古力味饼干186g -> 186*None +2025-12-12 11:32:26,779 - app.core.excel.converter - WARNING - 无法解析规格: 186*None,使用默认值1*1 +2025-12-12 11:32:26,779 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.0, 单位: 6932024200552 +2025-12-12 11:32:26,779 - app.core.excel.converter - INFO - 提取规格: 亨裕早茶饼干110g -> 110*None +2025-12-12 11:32:26,780 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 亨裕早茶饼干110g -> 110*None +2025-12-12 11:32:26,780 - app.core.excel.converter - WARNING - 无法解析规格: 110*None,使用默认值1*1 +2025-12-12 11:32:26,780 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 1.7, 单位: 6932024200583 +2025-12-12 11:32:26,780 - app.core.excel.converter - INFO - 提取规格: 趣多多香浓巧克力味85g@ -> 85*None +2025-12-12 11:32:26,781 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 趣多多香浓巧克力味85g@ -> 85*None +2025-12-12 11:32:26,781 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:32:26,781 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 5.2, 单位: 6901668936714 +2025-12-12 11:32:26,781 - app.core.excel.converter - INFO - 提取规格: 趣多多缤纷逗巧克力85g@ -> 85*None +2025-12-12 11:32:26,781 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 趣多多缤纷逗巧克力85g@ -> 85*None +2025-12-12 11:32:26,784 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:32:26,784 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 5.2, 单位: 6901668062499 +2025-12-12 11:32:26,784 - app.core.excel.converter - INFO - 提取规格: 米老头雪花煎卷椰奶味150g@ -> 150*None +2025-12-12 11:32:26,785 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 米老头雪花煎卷椰奶味150g@ -> 150*None +2025-12-12 11:32:26,785 - app.core.excel.converter - WARNING - 无法解析规格: 150*None,使用默认值1*1 +2025-12-12 11:32:26,786 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.8, 单位: 6925332600046 +2025-12-12 11:32:26,786 - app.core.excel.converter - INFO - 提取规格: 金富士牛乳饼干香浓牛奶味130g@ -> 130*None +2025-12-12 11:32:26,786 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 金富士牛乳饼干香浓牛奶味130g@ -> 130*None +2025-12-12 11:32:26,787 - app.core.excel.converter - WARNING - 无法解析规格: 130*None,使用默认值1*1 +2025-12-12 11:32:26,788 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.8, 单位: 6921233904955 +2025-12-12 11:32:26,788 - app.core.excel.converter - INFO - 提取规格: 嘉士利果乐果香蓝莓味85g@ -> 85*None +2025-12-12 11:32:26,788 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利果乐果香蓝莓味85g@ -> 85*None +2025-12-12 11:32:26,789 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:32:26,789 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.0, 单位: 6901180993387 +2025-12-12 11:32:26,790 - app.core.excel.converter - INFO - 提取规格: 嘉士利果乐果香草莓味85g@ -> 85*None +2025-12-12 11:32:26,790 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利果乐果香草莓味85g@ -> 85*None +2025-12-12 11:32:26,792 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:32:26,792 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.0, 单位: 6901180993486 +2025-12-12 11:32:26,792 - app.core.excel.converter - INFO - 提取规格: 旺旺仙贝52g@ -> 52*None +2025-12-12 11:32:26,793 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 旺旺仙贝52g@ -> 52*None +2025-12-12 11:32:26,793 - app.core.excel.converter - WARNING - 无法解析规格: 52*None,使用默认值1*1 +2025-12-12 11:32:26,794 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 3.95, 单位: 6920546800046 +2025-12-12 11:32:26,794 - app.core.excel.converter - INFO - 提取规格: 旺旺雪饼84g@ -> 84*None +2025-12-12 11:32:26,794 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 旺旺雪饼84g@ -> 84*None +2025-12-12 11:32:26,795 - app.core.excel.converter - WARNING - 无法解析规格: 84*None,使用默认值1*1 +2025-12-12 11:32:26,795 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.5, 单位: 6920546800053 +2025-12-12 11:32:26,796 - app.core.excel.converter - INFO - 提取规格: 达利园蛋黄派230g@ -> 230*None +2025-12-12 11:32:26,797 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园蛋黄派230g@ -> 230*None +2025-12-12 11:32:26,798 - app.core.excel.converter - WARNING - 无法解析规格: 230*None,使用默认值1*1 +2025-12-12 11:32:26,798 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 1.0, 单价: 5.88, 单位: 6911988006783 +2025-12-12 11:32:26,798 - app.core.excel.converter - INFO - 提取规格: 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None +2025-12-12 11:32:26,799 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None +2025-12-12 11:32:26,799 - app.core.excel.converter - WARNING - 无法解析规格: 22*None,使用默认值1*1 +2025-12-12 11:32:26,800 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 20.0, 单价: 15.0, 单位: 6971295190728 +2025-12-12 11:32:26,800 - app.core.excel.converter - INFO - 提取规格: 劲仔手撕肉干麻辣味10g@ -> 10*None +2025-12-12 11:32:26,800 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔手撕肉干麻辣味10g@ -> 10*None +2025-12-12 11:32:26,801 - app.core.excel.converter - WARNING - 无法解析规格: 10*None,使用默认值1*1 +2025-12-12 11:32:26,801 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 20.0, 单价: 26.6, 单位: 6951957217215 +2025-12-12 11:32:26,802 - app.core.excel.converter - INFO - 提取规格: 劲仔手撕肉干香辣味10g@ -> 10*None +2025-12-12 11:32:26,802 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔手撕肉干香辣味10g@ -> 10*None +2025-12-12 11:32:26,803 - app.core.excel.converter - WARNING - 无法解析规格: 10*None,使用默认值1*1 +2025-12-12 11:32:26,803 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 20.0, 单价: 26.6, 单位: 6951957217208 +2025-12-12 11:32:26,804 - app.core.excel.converter - INFO - 提取规格: 登荣香辣爽口鸡23g -> 23*None +2025-12-12 11:32:26,805 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 登荣香辣爽口鸡23g -> 23*None +2025-12-12 11:32:26,806 - app.core.excel.converter - WARNING - 无法解析规格: 23*None,使用默认值1*1 +2025-12-12 11:32:26,806 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 20.0, 单价: 15.0, 单位: +2025-12-12 11:32:26,806 - app.core.excel.converter - INFO - 提取规格: 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None +2025-12-12 11:32:26,807 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None +2025-12-12 11:32:26,807 - app.core.excel.converter - WARNING - 无法解析规格: 12*None,使用默认值1*1 +2025-12-12 11:32:26,807 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 16.0, 单价: 23.2, 单位: 6914973603462 +2025-12-12 11:32:26,807 - app.core.excel.converter - INFO - 提取规格: 味芝元洞庭鱼排香辣味26g -> 26*None +2025-12-12 11:32:26,807 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 味芝元洞庭鱼排香辣味26g -> 26*None +2025-12-12 11:32:26,807 - app.core.excel.converter - WARNING - 无法解析规格: 26*None,使用默认值1*1 +2025-12-12 11:32:26,807 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 15.0, 单价: 1.5, 单位: 6936869215092 +2025-12-12 11:32:26,807 - app.core.excel.converter - INFO - 提取规格: 劲仔小鱼麻辣小鱼12g@ -> 12*None +2025-12-12 11:32:26,807 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔小鱼麻辣小鱼12g@ -> 12*None +2025-12-12 11:32:26,812 - app.core.excel.converter - WARNING - 无法解析规格: 12*None,使用默认值1*1 +2025-12-12 11:32:26,812 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 20.0, 单价: 14.2, 单位: +2025-12-12 11:32:26,812 - app.core.excel.converter - INFO - 提取规格: 缺牙齿素牛肚香辣味16g -> 16*None +2025-12-12 11:32:26,813 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 缺牙齿素牛肚香辣味16g -> 16*None +2025-12-12 11:32:26,814 - app.core.excel.converter - WARNING - 无法解析规格: 16*None,使用默认值1*1 +2025-12-12 11:32:26,814 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 30.0, 单价: 22.5, 单位: 6976481800344 +2025-12-12 11:32:26,814 - app.core.excel.converter - INFO - 提取规格: 乐事青柠味70g@ -> 70*None +2025-12-12 11:32:26,815 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事青柠味70g@ -> 70*None +2025-12-12 11:32:26,815 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:32:26,815 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.79, 单位: 6924743919266 +2025-12-12 11:32:26,817 - app.core.excel.converter - INFO - 提取规格: 乐事黄瓜味70g@ -> 70*None +2025-12-12 11:32:26,817 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事黄瓜味70g@ -> 70*None +2025-12-12 11:32:26,818 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:32:26,818 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.79, 单位: 6924743919259 +2025-12-12 11:32:26,819 - app.core.excel.converter - INFO - 提取规格: 乐事德克萨斯烧烤味70g@ -> 70*None +2025-12-12 11:32:26,819 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事德克萨斯烧烤味70g@ -> 70*None +2025-12-12 11:32:26,820 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:32:26,820 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 4.79, 单位: 6924743919228 +2025-12-12 11:32:26,821 - app.core.excel.converter - INFO - 提取规格: 乐事薯片经典原味23g(串串装)@ -> 23*None +2025-12-12 11:32:26,821 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事薯片经典原味23g(串串装)@ -> 23*None +2025-12-12 11:32:26,821 - app.core.excel.converter - WARNING - 无法解析规格: 23*None,使用默认值1*1 +2025-12-12 11:32:26,822 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 1.0, 单价: 1.35, 单位: 6924743928077 +2025-12-12 11:34:40,235 - app.core.excel.converter - INFO - 成功加载条码映射配置,共51项 +2025-12-12 11:34:40,273 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 雪碧2L@ -> 2L*1 +2025-12-12 11:34:40,276 - app.core.excel.converter - INFO - 解析容量(L)规格: 2L*1 -> 1*1 +2025-12-12 11:34:40,277 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝饮用纯净水2.08L@ -> 2.08L*1 +2025-12-12 11:34:40,278 - app.core.excel.converter - INFO - 解析容量(L)规格: 2.08L*1 -> 1*1 +2025-12-12 11:34:40,280 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝纯净水4.5L@ -> 4.5L*1 +2025-12-12 11:34:40,281 - app.core.excel.converter - INFO - 解析容量(L)规格: 4.5L*1 -> 1*1 +2025-12-12 11:34:40,281 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝饮用纯净水1.555L@ -> 1.555L*1 +2025-12-12 11:34:40,283 - app.core.excel.converter - INFO - 解析容量(L)规格: 1.555L*1 -> 1*1 +2025-12-12 11:34:40,284 - app.core.excel.converter - INFO - 提取规格: 奥利奥薄脆酸甜草莓味95g@ -> 95*None +2025-12-12 11:34:40,284 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥薄脆酸甜草莓味95g@ -> 95*None +2025-12-12 11:34:40,285 - app.core.excel.converter - WARNING - 无法解析规格: 95*None,使用默认值1*1 +2025-12-12 11:34:40,287 - app.core.excel.converter - INFO - 提取规格: 奥利奥杯奥草莓味55g@ -> 55*None +2025-12-12 11:34:40,287 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥杯奥草莓味55g@ -> 55*None +2025-12-12 11:34:40,287 - app.core.excel.converter - WARNING - 无法解析规格: 55*None,使用默认值1*1 +2025-12-12 11:34:40,287 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.6, 单位: 杯 +2025-12-12 11:34:40,287 - app.core.excel.converter - INFO - 提取规格: 奥利奥杯奥巧克力55g@ -> 55*None +2025-12-12 11:34:40,287 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥杯奥巧克力55g@ -> 55*None +2025-12-12 11:34:40,289 - app.core.excel.converter - WARNING - 无法解析规格: 55*None,使用默认值1*1 +2025-12-12 11:34:40,290 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.6, 单位: 杯 +2025-12-12 11:34:40,290 - app.core.excel.converter - INFO - 提取规格: 好丽友蛋黄派2P46g@ -> 46*None +2025-12-12 11:34:40,291 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 好丽友蛋黄派2P46g@ -> 46*None +2025-12-12 11:34:40,292 - app.core.excel.converter - WARNING - 无法解析规格: 46*None,使用默认值1*1 +2025-12-12 11:34:40,292 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.0, 单位: 个 +2025-12-12 11:34:40,292 - app.core.excel.converter - INFO - 提取规格: 都市牧场爽口含片正梅味38g@ -> 38*None +2025-12-12 11:34:40,293 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 都市牧场爽口含片正梅味38g@ -> 38*None +2025-12-12 11:34:40,294 - app.core.excel.converter - WARNING - 无法解析规格: 38*None,使用默认值1*1 +2025-12-12 11:34:40,294 - app.core.excel.converter - INFO - 提取规格: 林振合维C果C软糖什锦味68g -> 68*None +2025-12-12 11:34:40,294 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 林振合维C果C软糖什锦味68g -> 68*None +2025-12-12 11:34:40,294 - app.core.excel.converter - WARNING - 无法解析规格: 68*None,使用默认值1*1 +2025-12-12 11:34:40,298 - app.core.excel.converter - INFO - 提取规格: 格力高百醇柠檬48g@ -> 48*None +2025-12-12 11:34:40,298 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 格力高百醇柠檬48g@ -> 48*None +2025-12-12 11:34:40,298 - app.core.excel.converter - WARNING - 无法解析规格: 48*None,使用默认值1*1 +2025-12-12 11:34:40,299 - app.core.excel.converter - INFO - 提取规格: 格力高百醇抹茶慕斯味48g@ -> 48*None +2025-12-12 11:34:40,299 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 格力高百醇抹茶慕斯味48g@ -> 48*None +2025-12-12 11:34:40,300 - app.core.excel.converter - WARNING - 无法解析规格: 48*None,使用默认值1*1 +2025-12-12 11:34:40,301 - app.core.excel.converter - INFO - 提取规格: 奥利奥饼干经典原味48.5g@ -> 48.5*None +2025-12-12 11:34:40,301 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥饼干经典原味48.5g@ -> 48.5*None +2025-12-12 11:34:40,302 - app.core.excel.converter - WARNING - 无法解析规格: 48.5*None,使用默认值1*1 +2025-12-12 11:34:40,302 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 6.0, 单价: 1.99, 单位: 袋 +2025-12-12 11:34:40,303 - app.core.excel.converter - INFO - 提取规格: 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None +2025-12-12 11:34:40,303 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None +2025-12-12 11:34:40,304 - app.core.excel.converter - WARNING - 无法解析规格: 48.5*None,使用默认值1*1 +2025-12-12 11:34:40,304 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 1.99, 单位: 袋 +2025-12-12 11:34:40,304 - app.core.excel.converter - INFO - 提取规格: 法丽兹曲奇芝士巧克力70g@ -> 70*None +2025-12-12 11:34:40,304 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 法丽兹曲奇芝士巧克力70g@ -> 70*None +2025-12-12 11:34:40,304 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:34:40,304 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.66, 单位: 袋 +2025-12-12 11:34:40,304 - app.core.excel.converter - INFO - 提取规格: 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None +2025-12-12 11:34:40,308 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None +2025-12-12 11:34:40,308 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:34:40,308 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.66, 单位: 袋 +2025-12-12 11:34:40,310 - app.core.excel.converter - INFO - 提取规格: 太平梳打饼干奶盐味100g@ -> 100*None +2025-12-12 11:34:40,310 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 太平梳打饼干奶盐味100g@ -> 100*None +2025-12-12 11:34:40,311 - app.core.excel.converter - WARNING - 无法解析规格: 100*None,使用默认值1*1 +2025-12-12 11:34:40,311 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.5, 单位: 袋 +2025-12-12 11:34:40,311 - app.core.excel.converter - INFO - 提取规格: 太平梳打饼干海苔味100g@ -> 100*None +2025-12-12 11:34:40,312 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 太平梳打饼干海苔味100g@ -> 100*None +2025-12-12 11:34:40,312 - app.core.excel.converter - WARNING - 无法解析规格: 100*None,使用默认值1*1 +2025-12-12 11:34:40,313 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.5, 单位: 袋 +2025-12-12 11:34:40,313 - app.core.excel.converter - INFO - 提取规格: 达利园手指饼115g@ -> 115*None +2025-12-12 11:34:40,313 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园手指饼115g@ -> 115*None +2025-12-12 11:34:40,314 - app.core.excel.converter - WARNING - 无法解析规格: 115*None,使用默认值1*1 +2025-12-12 11:34:40,314 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.25, 单位: 袋 +2025-12-12 11:34:40,315 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点杏仁酥饼146g@ -> 146*None +2025-12-12 11:34:40,315 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点杏仁酥饼146g@ -> 146*None +2025-12-12 11:34:40,316 - app.core.excel.converter - WARNING - 无法解析规格: 146*None,使用默认值1*1 +2025-12-12 11:34:40,316 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.8, 单位: 袋 +2025-12-12 11:34:40,317 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点核桃酥饼146g@ -> 146*None +2025-12-12 11:34:40,317 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点核桃酥饼146g@ -> 146*None +2025-12-12 11:34:40,318 - app.core.excel.converter - WARNING - 无法解析规格: 146*None,使用默认值1*1 +2025-12-12 11:34:40,318 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.8, 单位: 袋 +2025-12-12 11:34:40,318 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆腰果饼108g@ -> 108*None +2025-12-12 11:34:40,319 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆腰果饼108g@ -> 108*None +2025-12-12 11:34:40,320 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:34:40,321 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 袋 +2025-12-12 11:34:40,321 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆杏仁饼108g@ -> 108*None +2025-12-12 11:34:40,321 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆杏仁饼108g@ -> 108*None +2025-12-12 11:34:40,321 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:34:40,323 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 袋 +2025-12-12 11:34:40,323 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆核桃饼108g@ -> 108*None +2025-12-12 11:34:40,323 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆核桃饼108g@ -> 108*None +2025-12-12 11:34:40,325 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:34:40,325 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 袋 +2025-12-12 11:34:40,325 - app.core.excel.converter - INFO - 提取规格: 嘉士利威化饼干草莓味115g@ -> 115*None +2025-12-12 11:34:40,325 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利威化饼干草莓味115g@ -> 115*None +2025-12-12 11:34:40,325 - app.core.excel.converter - WARNING - 无法解析规格: 115*None,使用默认值1*1 +2025-12-12 11:34:40,325 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 2.0, 单价: 3.8, 单位: 袋 +2025-12-12 11:34:40,325 - app.core.excel.converter - INFO - 提取规格: 亨裕饼朱古力味饼干186g -> 186*None +2025-12-12 11:34:40,325 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 亨裕饼朱古力味饼干186g -> 186*None +2025-12-12 11:34:40,328 - app.core.excel.converter - WARNING - 无法解析规格: 186*None,使用默认值1*1 +2025-12-12 11:34:40,328 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.0, 单位: 袋 +2025-12-12 11:34:40,328 - app.core.excel.converter - INFO - 提取规格: 亨裕早茶饼干110g -> 110*None +2025-12-12 11:34:40,329 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 亨裕早茶饼干110g -> 110*None +2025-12-12 11:34:40,330 - app.core.excel.converter - WARNING - 无法解析规格: 110*None,使用默认值1*1 +2025-12-12 11:34:40,330 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 1.7, 单位: 袋 +2025-12-12 11:34:40,330 - app.core.excel.converter - INFO - 提取规格: 趣多多香浓巧克力味85g@ -> 85*None +2025-12-12 11:34:40,331 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 趣多多香浓巧克力味85g@ -> 85*None +2025-12-12 11:34:40,332 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:34:40,332 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 5.2, 单位: 袋 +2025-12-12 11:34:40,333 - app.core.excel.converter - INFO - 提取规格: 趣多多缤纷逗巧克力85g@ -> 85*None +2025-12-12 11:34:40,333 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 趣多多缤纷逗巧克力85g@ -> 85*None +2025-12-12 11:34:40,334 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:34:40,334 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 5.2, 单位: 袋 +2025-12-12 11:34:40,334 - app.core.excel.converter - INFO - 提取规格: 米老头雪花煎卷椰奶味150g@ -> 150*None +2025-12-12 11:34:40,334 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 米老头雪花煎卷椰奶味150g@ -> 150*None +2025-12-12 11:34:40,334 - app.core.excel.converter - WARNING - 无法解析规格: 150*None,使用默认值1*1 +2025-12-12 11:34:40,334 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.8, 单位: 袋 +2025-12-12 11:34:40,338 - app.core.excel.converter - INFO - 提取规格: 金富士牛乳饼干香浓牛奶味130g@ -> 130*None +2025-12-12 11:34:40,338 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 金富士牛乳饼干香浓牛奶味130g@ -> 130*None +2025-12-12 11:34:40,338 - app.core.excel.converter - WARNING - 无法解析规格: 130*None,使用默认值1*1 +2025-12-12 11:34:40,338 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.8, 单位: 袋 +2025-12-12 11:34:40,340 - app.core.excel.converter - INFO - 提取规格: 嘉士利果乐果香蓝莓味85g@ -> 85*None +2025-12-12 11:34:40,340 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利果乐果香蓝莓味85g@ -> 85*None +2025-12-12 11:34:40,341 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:34:40,341 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.0, 单位: 袋 +2025-12-12 11:34:40,342 - app.core.excel.converter - INFO - 提取规格: 嘉士利果乐果香草莓味85g@ -> 85*None +2025-12-12 11:34:40,342 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利果乐果香草莓味85g@ -> 85*None +2025-12-12 11:34:40,343 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:34:40,343 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.0, 单位: 袋 +2025-12-12 11:34:40,344 - app.core.excel.converter - INFO - 提取规格: 旺旺仙贝52g@ -> 52*None +2025-12-12 11:34:40,344 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 旺旺仙贝52g@ -> 52*None +2025-12-12 11:34:40,346 - app.core.excel.converter - WARNING - 无法解析规格: 52*None,使用默认值1*1 +2025-12-12 11:34:40,346 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 3.95, 单位: 袋 +2025-12-12 11:34:40,346 - app.core.excel.converter - INFO - 提取规格: 旺旺雪饼84g@ -> 84*None +2025-12-12 11:34:40,347 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 旺旺雪饼84g@ -> 84*None +2025-12-12 11:34:40,347 - app.core.excel.converter - WARNING - 无法解析规格: 84*None,使用默认值1*1 +2025-12-12 11:34:40,348 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.5, 单位: 袋 +2025-12-12 11:34:40,348 - app.core.excel.converter - INFO - 提取规格: 达利园蛋黄派230g@ -> 230*None +2025-12-12 11:34:40,349 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园蛋黄派230g@ -> 230*None +2025-12-12 11:34:40,350 - app.core.excel.converter - WARNING - 无法解析规格: 230*None,使用默认值1*1 +2025-12-12 11:34:40,350 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 1.0, 单价: 5.88, 单位: 袋 +2025-12-12 11:34:40,350 - app.core.excel.converter - INFO - 提取规格: 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None +2025-12-12 11:34:40,351 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None +2025-12-12 11:34:40,352 - app.core.excel.converter - WARNING - 无法解析规格: 22*None,使用默认值1*1 +2025-12-12 11:34:40,352 - app.core.excel.converter - INFO - 提取规格: 劲仔手撕肉干麻辣味10g@ -> 10*None +2025-12-12 11:34:40,353 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔手撕肉干麻辣味10g@ -> 10*None +2025-12-12 11:34:40,353 - app.core.excel.converter - WARNING - 无法解析规格: 10*None,使用默认值1*1 +2025-12-12 11:34:40,354 - app.core.excel.converter - INFO - 提取规格: 劲仔手撕肉干香辣味10g@ -> 10*None +2025-12-12 11:34:40,355 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔手撕肉干香辣味10g@ -> 10*None +2025-12-12 11:34:40,355 - app.core.excel.converter - WARNING - 无法解析规格: 10*None,使用默认值1*1 +2025-12-12 11:34:40,357 - app.core.excel.converter - INFO - 提取规格: 登荣香辣爽口鸡23g -> 23*None +2025-12-12 11:34:40,357 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 登荣香辣爽口鸡23g -> 23*None +2025-12-12 11:34:40,357 - app.core.excel.converter - WARNING - 无法解析规格: 23*None,使用默认值1*1 +2025-12-12 11:34:40,359 - app.core.excel.converter - INFO - 提取规格: 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None +2025-12-12 11:34:40,359 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None +2025-12-12 11:34:40,360 - app.core.excel.converter - WARNING - 无法解析规格: 12*None,使用默认值1*1 +2025-12-12 11:34:40,361 - app.core.excel.converter - INFO - 提取规格: 味芝元洞庭鱼排香辣味26g -> 26*None +2025-12-12 11:34:40,361 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 味芝元洞庭鱼排香辣味26g -> 26*None +2025-12-12 11:34:40,362 - app.core.excel.converter - WARNING - 无法解析规格: 26*None,使用默认值1*1 +2025-12-12 11:34:40,362 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 15.0, 单价: 1.5, 单位: 袋 +2025-12-12 11:34:40,363 - app.core.excel.converter - INFO - 提取规格: 劲仔小鱼麻辣小鱼12g@ -> 12*None +2025-12-12 11:34:40,363 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔小鱼麻辣小鱼12g@ -> 12*None +2025-12-12 11:34:40,365 - app.core.excel.converter - WARNING - 无法解析规格: 12*None,使用默认值1*1 +2025-12-12 11:34:40,366 - app.core.excel.converter - INFO - 提取规格: 缺牙齿素牛肚香辣味16g -> 16*None +2025-12-12 11:34:40,366 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 缺牙齿素牛肚香辣味16g -> 16*None +2025-12-12 11:34:40,367 - app.core.excel.converter - WARNING - 无法解析规格: 16*None,使用默认值1*1 +2025-12-12 11:34:40,368 - app.core.excel.converter - INFO - 提取规格: 乐事青柠味70g@ -> 70*None +2025-12-12 11:34:40,368 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事青柠味70g@ -> 70*None +2025-12-12 11:34:40,369 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:34:40,369 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.79, 单位: 袋 +2025-12-12 11:34:40,369 - app.core.excel.converter - INFO - 提取规格: 乐事黄瓜味70g@ -> 70*None +2025-12-12 11:34:40,370 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事黄瓜味70g@ -> 70*None +2025-12-12 11:34:40,370 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:34:40,371 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.79, 单位: 袋 +2025-12-12 11:34:40,371 - app.core.excel.converter - INFO - 提取规格: 乐事德克萨斯烧烤味70g@ -> 70*None +2025-12-12 11:34:40,371 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事德克萨斯烧烤味70g@ -> 70*None +2025-12-12 11:34:40,371 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:34:40,371 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 4.79, 单位: 袋 +2025-12-12 11:34:40,371 - app.core.excel.converter - INFO - 提取规格: 乐事薯片经典原味23g(串串装)@ -> 23*None +2025-12-12 11:34:40,371 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事薯片经典原味23g(串串装)@ -> 23*None +2025-12-12 11:34:40,375 - app.core.excel.converter - WARNING - 无法解析规格: 23*None,使用默认值1*1 +2025-12-12 11:34:40,375 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 1.0, 单价: 1.35, 单位: 袋 +2025-12-12 11:38:53,256 - app.core.excel.converter - INFO - 成功加载条码映射配置,共51项 +2025-12-12 11:38:53,294 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 雪碧2L@ -> 2L*1 +2025-12-12 11:38:53,297 - app.core.excel.converter - INFO - 解析容量(L)规格: 2L*1 -> 1*1 +2025-12-12 11:38:53,297 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 8.0, 单价: 44.32, 单位: 份 +2025-12-12 11:38:53,298 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝饮用纯净水2.08L@ -> 2.08L*1 +2025-12-12 11:38:53,299 - app.core.excel.converter - INFO - 解析容量(L)规格: 2.08L*1 -> 1*1 +2025-12-12 11:38:53,299 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 40.0, 单价: 21.52, 单位: 份 +2025-12-12 11:38:53,300 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝纯净水4.5L@ -> 4.5L*1 +2025-12-12 11:38:53,301 - app.core.excel.converter - INFO - 解析容量(L)规格: 4.5L*1 -> 1*1 +2025-12-12 11:38:53,302 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 8.0, 单价: 26.08, 单位: 份 +2025-12-12 11:38:53,303 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝饮用纯净水1.555L@ -> 1.555L*1 +2025-12-12 11:38:53,304 - app.core.excel.converter - INFO - 解析容量(L)规格: 1.555L*1 -> 1*1 +2025-12-12 11:38:53,304 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 60.0, 单价: 24.6, 单位: 份 +2025-12-12 11:38:53,305 - app.core.excel.converter - INFO - 提取规格: 奥利奥薄脆酸甜草莓味95g@ -> 95*None +2025-12-12 11:38:53,305 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥薄脆酸甜草莓味95g@ -> 95*None +2025-12-12 11:38:53,307 - app.core.excel.converter - WARNING - 无法解析规格: 95*None,使用默认值1*1 +2025-12-12 11:38:53,307 - app.core.excel.converter - INFO - 提取规格: 奥利奥杯奥草莓味55g@ -> 55*None +2025-12-12 11:38:53,307 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥杯奥草莓味55g@ -> 55*None +2025-12-12 11:38:53,307 - app.core.excel.converter - WARNING - 无法解析规格: 55*None,使用默认值1*1 +2025-12-12 11:38:53,307 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.6, 单位: 杯 +2025-12-12 11:38:53,307 - app.core.excel.converter - INFO - 提取规格: 奥利奥杯奥巧克力55g@ -> 55*None +2025-12-12 11:38:53,307 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥杯奥巧克力55g@ -> 55*None +2025-12-12 11:38:53,311 - app.core.excel.converter - WARNING - 无法解析规格: 55*None,使用默认值1*1 +2025-12-12 11:38:53,311 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.6, 单位: 杯 +2025-12-12 11:38:53,312 - app.core.excel.converter - INFO - 提取规格: 好丽友蛋黄派2P46g@ -> 46*None +2025-12-12 11:38:53,312 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 好丽友蛋黄派2P46g@ -> 46*None +2025-12-12 11:38:53,313 - app.core.excel.converter - WARNING - 无法解析规格: 46*None,使用默认值1*1 +2025-12-12 11:38:53,314 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.0, 单位: 个 +2025-12-12 11:38:53,314 - app.core.excel.converter - INFO - 提取规格: 都市牧场爽口含片正梅味38g@ -> 38*None +2025-12-12 11:38:53,315 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 都市牧场爽口含片正梅味38g@ -> 38*None +2025-12-12 11:38:53,316 - app.core.excel.converter - WARNING - 无法解析规格: 38*None,使用默认值1*1 +2025-12-12 11:38:53,317 - app.core.excel.converter - INFO - 提取规格: 林振合维C果C软糖什锦味68g -> 68*None +2025-12-12 11:38:53,317 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 林振合维C果C软糖什锦味68g -> 68*None +2025-12-12 11:38:53,317 - app.core.excel.converter - WARNING - 无法解析规格: 68*None,使用默认值1*1 +2025-12-12 11:38:53,317 - app.core.excel.converter - INFO - 提取规格: 格力高百醇柠檬48g@ -> 48*None +2025-12-12 11:38:53,317 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 格力高百醇柠檬48g@ -> 48*None +2025-12-12 11:38:53,321 - app.core.excel.converter - WARNING - 无法解析规格: 48*None,使用默认值1*1 +2025-12-12 11:38:53,323 - app.core.excel.converter - INFO - 提取规格: 格力高百醇抹茶慕斯味48g@ -> 48*None +2025-12-12 11:38:53,323 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 格力高百醇抹茶慕斯味48g@ -> 48*None +2025-12-12 11:38:53,324 - app.core.excel.converter - WARNING - 无法解析规格: 48*None,使用默认值1*1 +2025-12-12 11:38:53,325 - app.core.excel.converter - INFO - 提取规格: 奥利奥饼干经典原味48.5g@ -> 48.5*None +2025-12-12 11:38:53,325 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥饼干经典原味48.5g@ -> 48.5*None +2025-12-12 11:38:53,326 - app.core.excel.converter - WARNING - 无法解析规格: 48.5*None,使用默认值1*1 +2025-12-12 11:38:53,326 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 6.0, 单价: 1.99, 单位: 袋 +2025-12-12 11:38:53,327 - app.core.excel.converter - INFO - 提取规格: 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None +2025-12-12 11:38:53,327 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None +2025-12-12 11:38:53,328 - app.core.excel.converter - WARNING - 无法解析规格: 48.5*None,使用默认值1*1 +2025-12-12 11:38:53,329 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 1.99, 单位: 袋 +2025-12-12 11:38:53,329 - app.core.excel.converter - INFO - 提取规格: 法丽兹曲奇芝士巧克力70g@ -> 70*None +2025-12-12 11:38:53,330 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 法丽兹曲奇芝士巧克力70g@ -> 70*None +2025-12-12 11:38:53,331 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:38:53,331 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.66, 单位: 袋 +2025-12-12 11:38:53,332 - app.core.excel.converter - INFO - 提取规格: 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None +2025-12-12 11:38:53,332 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None +2025-12-12 11:38:53,332 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:38:53,335 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.66, 单位: 袋 +2025-12-12 11:38:53,335 - app.core.excel.converter - INFO - 提取规格: 太平梳打饼干奶盐味100g@ -> 100*None +2025-12-12 11:38:53,335 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 太平梳打饼干奶盐味100g@ -> 100*None +2025-12-12 11:38:53,336 - app.core.excel.converter - WARNING - 无法解析规格: 100*None,使用默认值1*1 +2025-12-12 11:38:53,336 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.5, 单位: 袋 +2025-12-12 11:38:53,337 - app.core.excel.converter - INFO - 提取规格: 太平梳打饼干海苔味100g@ -> 100*None +2025-12-12 11:38:53,337 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 太平梳打饼干海苔味100g@ -> 100*None +2025-12-12 11:38:53,338 - app.core.excel.converter - WARNING - 无法解析规格: 100*None,使用默认值1*1 +2025-12-12 11:38:53,338 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.5, 单位: 袋 +2025-12-12 11:38:53,339 - app.core.excel.converter - INFO - 提取规格: 达利园手指饼115g@ -> 115*None +2025-12-12 11:38:53,339 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园手指饼115g@ -> 115*None +2025-12-12 11:38:53,340 - app.core.excel.converter - WARNING - 无法解析规格: 115*None,使用默认值1*1 +2025-12-12 11:38:53,340 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.25, 单位: 袋 +2025-12-12 11:38:53,341 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点杏仁酥饼146g@ -> 146*None +2025-12-12 11:38:53,341 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点杏仁酥饼146g@ -> 146*None +2025-12-12 11:38:53,343 - app.core.excel.converter - WARNING - 无法解析规格: 146*None,使用默认值1*1 +2025-12-12 11:38:53,343 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.8, 单位: 袋 +2025-12-12 11:38:53,343 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点核桃酥饼146g@ -> 146*None +2025-12-12 11:38:53,343 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点核桃酥饼146g@ -> 146*None +2025-12-12 11:38:53,345 - app.core.excel.converter - WARNING - 无法解析规格: 146*None,使用默认值1*1 +2025-12-12 11:38:53,345 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.8, 单位: 袋 +2025-12-12 11:38:53,346 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆腰果饼108g@ -> 108*None +2025-12-12 11:38:53,347 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆腰果饼108g@ -> 108*None +2025-12-12 11:38:53,348 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:38:53,348 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 袋 +2025-12-12 11:38:53,349 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆杏仁饼108g@ -> 108*None +2025-12-12 11:38:53,349 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆杏仁饼108g@ -> 108*None +2025-12-12 11:38:53,350 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:38:53,351 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 袋 +2025-12-12 11:38:53,351 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆核桃饼108g@ -> 108*None +2025-12-12 11:38:53,352 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆核桃饼108g@ -> 108*None +2025-12-12 11:38:53,352 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:38:53,352 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 袋 +2025-12-12 11:38:53,353 - app.core.excel.converter - INFO - 提取规格: 嘉士利威化饼干草莓味115g@ -> 115*None +2025-12-12 11:38:53,353 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利威化饼干草莓味115g@ -> 115*None +2025-12-12 11:38:53,354 - app.core.excel.converter - WARNING - 无法解析规格: 115*None,使用默认值1*1 +2025-12-12 11:38:53,354 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 2.0, 单价: 3.8, 单位: 袋 +2025-12-12 11:38:53,355 - app.core.excel.converter - INFO - 提取规格: 亨裕饼朱古力味饼干186g -> 186*None +2025-12-12 11:38:53,355 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 亨裕饼朱古力味饼干186g -> 186*None +2025-12-12 11:38:53,355 - app.core.excel.converter - WARNING - 无法解析规格: 186*None,使用默认值1*1 +2025-12-12 11:38:53,355 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.0, 单位: 袋 +2025-12-12 11:38:53,355 - app.core.excel.converter - INFO - 提取规格: 亨裕早茶饼干110g -> 110*None +2025-12-12 11:38:53,357 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 亨裕早茶饼干110g -> 110*None +2025-12-12 11:38:53,358 - app.core.excel.converter - WARNING - 无法解析规格: 110*None,使用默认值1*1 +2025-12-12 11:38:53,358 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 1.7, 单位: 袋 +2025-12-12 11:38:53,358 - app.core.excel.converter - INFO - 提取规格: 趣多多香浓巧克力味85g@ -> 85*None +2025-12-12 11:38:53,359 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 趣多多香浓巧克力味85g@ -> 85*None +2025-12-12 11:38:53,360 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:38:53,360 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 5.2, 单位: 袋 +2025-12-12 11:38:53,360 - app.core.excel.converter - INFO - 提取规格: 趣多多缤纷逗巧克力85g@ -> 85*None +2025-12-12 11:38:53,361 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 趣多多缤纷逗巧克力85g@ -> 85*None +2025-12-12 11:38:53,362 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:38:53,362 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 5.2, 单位: 袋 +2025-12-12 11:38:53,362 - app.core.excel.converter - INFO - 提取规格: 米老头雪花煎卷椰奶味150g@ -> 150*None +2025-12-12 11:38:53,362 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 米老头雪花煎卷椰奶味150g@ -> 150*None +2025-12-12 11:38:53,362 - app.core.excel.converter - WARNING - 无法解析规格: 150*None,使用默认值1*1 +2025-12-12 11:38:53,362 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.8, 单位: 袋 +2025-12-12 11:38:53,362 - app.core.excel.converter - INFO - 提取规格: 金富士牛乳饼干香浓牛奶味130g@ -> 130*None +2025-12-12 11:38:53,362 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 金富士牛乳饼干香浓牛奶味130g@ -> 130*None +2025-12-12 11:38:53,366 - app.core.excel.converter - WARNING - 无法解析规格: 130*None,使用默认值1*1 +2025-12-12 11:38:53,366 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.8, 单位: 袋 +2025-12-12 11:38:53,366 - app.core.excel.converter - INFO - 提取规格: 嘉士利果乐果香蓝莓味85g@ -> 85*None +2025-12-12 11:38:53,367 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利果乐果香蓝莓味85g@ -> 85*None +2025-12-12 11:38:53,367 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:38:53,368 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.0, 单位: 袋 +2025-12-12 11:38:53,368 - app.core.excel.converter - INFO - 提取规格: 嘉士利果乐果香草莓味85g@ -> 85*None +2025-12-12 11:38:53,368 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利果乐果香草莓味85g@ -> 85*None +2025-12-12 11:38:53,369 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:38:53,370 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.0, 单位: 袋 +2025-12-12 11:38:53,370 - app.core.excel.converter - INFO - 提取规格: 旺旺仙贝52g@ -> 52*None +2025-12-12 11:38:53,370 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 旺旺仙贝52g@ -> 52*None +2025-12-12 11:38:53,371 - app.core.excel.converter - WARNING - 无法解析规格: 52*None,使用默认值1*1 +2025-12-12 11:38:53,372 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 3.95, 单位: 袋 +2025-12-12 11:38:53,372 - app.core.excel.converter - INFO - 提取规格: 旺旺雪饼84g@ -> 84*None +2025-12-12 11:38:53,372 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 旺旺雪饼84g@ -> 84*None +2025-12-12 11:38:53,372 - app.core.excel.converter - WARNING - 无法解析规格: 84*None,使用默认值1*1 +2025-12-12 11:38:53,372 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.5, 单位: 袋 +2025-12-12 11:38:53,372 - app.core.excel.converter - INFO - 提取规格: 达利园蛋黄派230g@ -> 230*None +2025-12-12 11:38:53,372 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园蛋黄派230g@ -> 230*None +2025-12-12 11:38:53,376 - app.core.excel.converter - WARNING - 无法解析规格: 230*None,使用默认值1*1 +2025-12-12 11:38:53,376 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 1.0, 单价: 5.88, 单位: 袋 +2025-12-12 11:38:53,376 - app.core.excel.converter - INFO - 提取规格: 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None +2025-12-12 11:38:53,376 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None +2025-12-12 11:38:53,377 - app.core.excel.converter - WARNING - 无法解析规格: 22*None,使用默认值1*1 +2025-12-12 11:38:53,378 - app.core.excel.converter - INFO - 提取规格: 劲仔手撕肉干麻辣味10g@ -> 10*None +2025-12-12 11:38:53,378 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔手撕肉干麻辣味10g@ -> 10*None +2025-12-12 11:38:53,379 - app.core.excel.converter - WARNING - 无法解析规格: 10*None,使用默认值1*1 +2025-12-12 11:38:53,381 - app.core.excel.converter - INFO - 提取规格: 劲仔手撕肉干香辣味10g@ -> 10*None +2025-12-12 11:38:53,381 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔手撕肉干香辣味10g@ -> 10*None +2025-12-12 11:38:53,382 - app.core.excel.converter - WARNING - 无法解析规格: 10*None,使用默认值1*1 +2025-12-12 11:38:53,384 - app.core.excel.converter - INFO - 提取规格: 登荣香辣爽口鸡23g -> 23*None +2025-12-12 11:38:53,384 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 登荣香辣爽口鸡23g -> 23*None +2025-12-12 11:38:53,385 - app.core.excel.converter - WARNING - 无法解析规格: 23*None,使用默认值1*1 +2025-12-12 11:38:53,386 - app.core.excel.converter - INFO - 提取规格: 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None +2025-12-12 11:38:53,386 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None +2025-12-12 11:38:53,387 - app.core.excel.converter - WARNING - 无法解析规格: 12*None,使用默认值1*1 +2025-12-12 11:38:53,388 - app.core.excel.converter - INFO - 提取规格: 味芝元洞庭鱼排香辣味26g -> 26*None +2025-12-12 11:38:53,388 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 味芝元洞庭鱼排香辣味26g -> 26*None +2025-12-12 11:38:53,389 - app.core.excel.converter - WARNING - 无法解析规格: 26*None,使用默认值1*1 +2025-12-12 11:38:53,390 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 15.0, 单价: 1.5, 单位: 袋 +2025-12-12 11:38:53,390 - app.core.excel.converter - INFO - 提取规格: 劲仔小鱼麻辣小鱼12g@ -> 12*None +2025-12-12 11:38:53,391 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔小鱼麻辣小鱼12g@ -> 12*None +2025-12-12 11:38:53,392 - app.core.excel.converter - WARNING - 无法解析规格: 12*None,使用默认值1*1 +2025-12-12 11:38:53,393 - app.core.excel.converter - INFO - 提取规格: 缺牙齿素牛肚香辣味16g -> 16*None +2025-12-12 11:38:53,393 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 缺牙齿素牛肚香辣味16g -> 16*None +2025-12-12 11:38:53,394 - app.core.excel.converter - WARNING - 无法解析规格: 16*None,使用默认值1*1 +2025-12-12 11:38:53,394 - app.core.excel.converter - INFO - 提取规格: 乐事青柠味70g@ -> 70*None +2025-12-12 11:38:53,395 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事青柠味70g@ -> 70*None +2025-12-12 11:38:53,396 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:38:53,396 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.79, 单位: 袋 +2025-12-12 11:38:53,396 - app.core.excel.converter - INFO - 提取规格: 乐事黄瓜味70g@ -> 70*None +2025-12-12 11:38:53,397 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事黄瓜味70g@ -> 70*None +2025-12-12 11:38:53,397 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:38:53,397 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.79, 单位: 袋 +2025-12-12 11:38:53,398 - app.core.excel.converter - INFO - 提取规格: 乐事德克萨斯烧烤味70g@ -> 70*None +2025-12-12 11:38:53,398 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事德克萨斯烧烤味70g@ -> 70*None +2025-12-12 11:38:53,399 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:38:53,399 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 4.79, 单位: 袋 +2025-12-12 11:38:53,399 - app.core.excel.converter - INFO - 提取规格: 乐事薯片经典原味23g(串串装)@ -> 23*None +2025-12-12 11:38:53,399 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事薯片经典原味23g(串串装)@ -> 23*None +2025-12-12 11:38:53,399 - app.core.excel.converter - WARNING - 无法解析规格: 23*None,使用默认值1*1 +2025-12-12 11:38:53,399 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 1.0, 单价: 1.35, 单位: 袋 +2025-12-12 11:49:38,203 - app.core.excel.converter - INFO - 成功加载条码映射配置,共51项 +2025-12-12 11:49:38,238 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 雪碧2L@ -> 2L*1 +2025-12-12 11:49:38,241 - app.core.excel.converter - INFO - 解析容量(L)规格: 2L*1 -> 1*1 +2025-12-12 11:49:38,242 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 8.0, 单价: 5.26, 单位: 份 +2025-12-12 11:49:38,242 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝饮用纯净水2.08L@ -> 2.08L*1 +2025-12-12 11:49:38,244 - app.core.excel.converter - INFO - 解析容量(L)规格: 2.08L*1 -> 1*1 +2025-12-12 11:49:38,244 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 40.0, 单价: 2.56, 单位: 份 +2025-12-12 11:49:38,245 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝纯净水4.5L@ -> 4.5L*1 +2025-12-12 11:49:38,245 - app.core.excel.converter - INFO - 解析容量(L)规格: 4.5L*1 -> 1*1 +2025-12-12 11:49:38,245 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 8.0, 单价: 6.19, 单位: 份 +2025-12-12 11:49:38,245 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 怡宝饮用纯净水1.555L@ -> 1.555L*1 +2025-12-12 11:49:38,245 - app.core.excel.converter - INFO - 解析容量(L)规格: 1.555L*1 -> 1*1 +2025-12-12 11:49:38,248 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 60.0, 单价: 1.95, 单位: 份 +2025-12-12 11:49:38,248 - app.core.excel.converter - INFO - 提取规格: 奥利奥薄脆酸甜草莓味95g@ -> 95*None +2025-12-12 11:49:38,250 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥薄脆酸甜草莓味95g@ -> 95*None +2025-12-12 11:49:38,251 - app.core.excel.converter - WARNING - 无法解析规格: 95*None,使用默认值1*1 +2025-12-12 11:49:38,252 - app.core.excel.converter - INFO - 提取规格: 奥利奥杯奥草莓味55g@ -> 55*None +2025-12-12 11:49:38,252 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥杯奥草莓味55g@ -> 55*None +2025-12-12 11:49:38,253 - app.core.excel.converter - WARNING - 无法解析规格: 55*None,使用默认值1*1 +2025-12-12 11:49:38,253 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.42, 单位: 杯 +2025-12-12 11:49:38,254 - app.core.excel.converter - INFO - 提取规格: 奥利奥杯奥巧克力55g@ -> 55*None +2025-12-12 11:49:38,254 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥杯奥巧克力55g@ -> 55*None +2025-12-12 11:49:38,256 - app.core.excel.converter - WARNING - 无法解析规格: 55*None,使用默认值1*1 +2025-12-12 11:49:38,256 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.42, 单位: 杯 +2025-12-12 11:49:38,256 - app.core.excel.converter - INFO - 提取规格: 好丽友蛋黄派2P46g@ -> 46*None +2025-12-12 11:49:38,256 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 好丽友蛋黄派2P46g@ -> 46*None +2025-12-12 11:49:38,257 - app.core.excel.converter - WARNING - 无法解析规格: 46*None,使用默认值1*1 +2025-12-12 11:49:38,257 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.85, 单位: 个 +2025-12-12 11:49:38,258 - app.core.excel.converter - INFO - 提取规格: 都市牧场爽口含片正梅味38g@ -> 38*None +2025-12-12 11:49:38,258 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 都市牧场爽口含片正梅味38g@ -> 38*None +2025-12-12 11:49:38,259 - app.core.excel.converter - WARNING - 无法解析规格: 38*None,使用默认值1*1 +2025-12-12 11:49:38,260 - app.core.excel.converter - INFO - 提取规格: 林振合维C果C软糖什锦味68g -> 68*None +2025-12-12 11:49:38,260 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 林振合维C果C软糖什锦味68g -> 68*None +2025-12-12 11:49:38,260 - app.core.excel.converter - WARNING - 无法解析规格: 68*None,使用默认值1*1 +2025-12-12 11:49:38,260 - app.core.excel.converter - INFO - 提取规格: 格力高百醇柠檬48g@ -> 48*None +2025-12-12 11:49:38,260 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 格力高百醇柠檬48g@ -> 48*None +2025-12-12 11:49:38,260 - app.core.excel.converter - WARNING - 无法解析规格: 48*None,使用默认值1*1 +2025-12-12 11:49:38,260 - app.core.excel.converter - INFO - 提取规格: 格力高百醇抹茶慕斯味48g@ -> 48*None +2025-12-12 11:49:38,264 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 格力高百醇抹茶慕斯味48g@ -> 48*None +2025-12-12 11:49:38,264 - app.core.excel.converter - WARNING - 无法解析规格: 48*None,使用默认值1*1 +2025-12-12 11:49:38,265 - app.core.excel.converter - INFO - 提取规格: 奥利奥饼干经典原味48.5g@ -> 48.5*None +2025-12-12 11:49:38,265 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥饼干经典原味48.5g@ -> 48.5*None +2025-12-12 11:49:38,266 - app.core.excel.converter - WARNING - 无法解析规格: 48.5*None,使用默认值1*1 +2025-12-12 11:49:38,267 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 6.0, 单价: 1.89, 单位: 袋 +2025-12-12 11:49:38,267 - app.core.excel.converter - INFO - 提取规格: 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None +2025-12-12 11:49:38,267 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None +2025-12-12 11:49:38,268 - app.core.excel.converter - WARNING - 无法解析规格: 48.5*None,使用默认值1*1 +2025-12-12 11:49:38,269 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 1.89, 单位: 袋 +2025-12-12 11:49:38,269 - app.core.excel.converter - INFO - 提取规格: 法丽兹曲奇芝士巧克力70g@ -> 70*None +2025-12-12 11:49:38,269 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 法丽兹曲奇芝士巧克力70g@ -> 70*None +2025-12-12 11:49:38,271 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:49:38,271 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.53, 单位: 袋 +2025-12-12 11:49:38,271 - app.core.excel.converter - INFO - 提取规格: 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None +2025-12-12 11:49:38,272 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None +2025-12-12 11:49:38,272 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:49:38,273 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.53, 单位: 袋 +2025-12-12 11:49:38,273 - app.core.excel.converter - INFO - 提取规格: 太平梳打饼干奶盐味100g@ -> 100*None +2025-12-12 11:49:38,273 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 太平梳打饼干奶盐味100g@ -> 100*None +2025-12-12 11:49:38,274 - app.core.excel.converter - WARNING - 无法解析规格: 100*None,使用默认值1*1 +2025-12-12 11:49:38,275 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.05, 单位: 袋 +2025-12-12 11:49:38,275 - app.core.excel.converter - INFO - 提取规格: 太平梳打饼干海苔味100g@ -> 100*None +2025-12-12 11:49:38,275 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 太平梳打饼干海苔味100g@ -> 100*None +2025-12-12 11:49:38,275 - app.core.excel.converter - WARNING - 无法解析规格: 100*None,使用默认值1*1 +2025-12-12 11:49:38,275 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.05, 单位: 袋 +2025-12-12 11:49:38,275 - app.core.excel.converter - INFO - 提取规格: 达利园手指饼115g@ -> 115*None +2025-12-12 11:49:38,275 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园手指饼115g@ -> 115*None +2025-12-12 11:49:38,275 - app.core.excel.converter - WARNING - 无法解析规格: 115*None,使用默认值1*1 +2025-12-12 11:49:38,275 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.14, 单位: 袋 +2025-12-12 11:49:38,279 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点杏仁酥饼146g@ -> 146*None +2025-12-12 11:49:38,279 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点杏仁酥饼146g@ -> 146*None +2025-12-12 11:49:38,280 - app.core.excel.converter - WARNING - 无法解析规格: 146*None,使用默认值1*1 +2025-12-12 11:49:38,280 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.61, 单位: 袋 +2025-12-12 11:49:38,281 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点核桃酥饼146g@ -> 146*None +2025-12-12 11:49:38,281 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点核桃酥饼146g@ -> 146*None +2025-12-12 11:49:38,282 - app.core.excel.converter - WARNING - 无法解析规格: 146*None,使用默认值1*1 +2025-12-12 11:49:38,282 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.61, 单位: 袋 +2025-12-12 11:49:38,282 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆腰果饼108g@ -> 108*None +2025-12-12 11:49:38,284 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆腰果饼108g@ -> 108*None +2025-12-12 11:49:38,285 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:49:38,285 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.71, 单位: 袋 +2025-12-12 11:49:38,285 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆杏仁饼108g@ -> 108*None +2025-12-12 11:49:38,285 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆杏仁饼108g@ -> 108*None +2025-12-12 11:49:38,285 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:49:38,285 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.71, 单位: 袋 +2025-12-12 11:49:38,285 - app.core.excel.converter - INFO - 提取规格: 达利园好吃点香脆核桃饼108g@ -> 108*None +2025-12-12 11:49:38,285 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园好吃点香脆核桃饼108g@ -> 108*None +2025-12-12 11:49:38,285 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 11:49:38,289 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.71, 单位: 袋 +2025-12-12 11:49:38,289 - app.core.excel.converter - INFO - 提取规格: 嘉士利威化饼干草莓味115g@ -> 115*None +2025-12-12 11:49:38,289 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利威化饼干草莓味115g@ -> 115*None +2025-12-12 11:49:38,289 - app.core.excel.converter - WARNING - 无法解析规格: 115*None,使用默认值1*1 +2025-12-12 11:49:38,292 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 2.0, 单价: 3.61, 单位: 袋 +2025-12-12 11:49:38,292 - app.core.excel.converter - INFO - 提取规格: 亨裕饼朱古力味饼干186g -> 186*None +2025-12-12 11:49:38,292 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 亨裕饼朱古力味饼干186g -> 186*None +2025-12-12 11:49:38,294 - app.core.excel.converter - WARNING - 无法解析规格: 186*None,使用默认值1*1 +2025-12-12 11:49:38,294 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 袋 +2025-12-12 11:49:38,294 - app.core.excel.converter - INFO - 提取规格: 亨裕早茶饼干110g -> 110*None +2025-12-12 11:49:38,294 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 亨裕早茶饼干110g -> 110*None +2025-12-12 11:49:38,295 - app.core.excel.converter - WARNING - 无法解析规格: 110*None,使用默认值1*1 +2025-12-12 11:49:38,295 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 1.61, 单位: 袋 +2025-12-12 11:49:38,295 - app.core.excel.converter - INFO - 提取规格: 趣多多香浓巧克力味85g@ -> 85*None +2025-12-12 11:49:38,296 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 趣多多香浓巧克力味85g@ -> 85*None +2025-12-12 11:49:38,296 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:49:38,297 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 4.52, 单位: 袋 +2025-12-12 11:49:38,297 - app.core.excel.converter - INFO - 提取规格: 趣多多缤纷逗巧克力85g@ -> 85*None +2025-12-12 11:49:38,297 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 趣多多缤纷逗巧克力85g@ -> 85*None +2025-12-12 11:49:38,298 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:49:38,298 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 4.52, 单位: 袋 +2025-12-12 11:49:38,298 - app.core.excel.converter - INFO - 提取规格: 米老头雪花煎卷椰奶味150g@ -> 150*None +2025-12-12 11:49:38,300 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 米老头雪花煎卷椰奶味150g@ -> 150*None +2025-12-12 11:49:38,301 - app.core.excel.converter - WARNING - 无法解析规格: 150*None,使用默认值1*1 +2025-12-12 11:49:38,302 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.61, 单位: 袋 +2025-12-12 11:49:38,302 - app.core.excel.converter - INFO - 提取规格: 金富士牛乳饼干香浓牛奶味130g@ -> 130*None +2025-12-12 11:49:38,302 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 金富士牛乳饼干香浓牛奶味130g@ -> 130*None +2025-12-12 11:49:38,303 - app.core.excel.converter - WARNING - 无法解析规格: 130*None,使用默认值1*1 +2025-12-12 11:49:38,304 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.61, 单位: 袋 +2025-12-12 11:49:38,304 - app.core.excel.converter - INFO - 提取规格: 嘉士利果乐果香蓝莓味85g@ -> 85*None +2025-12-12 11:49:38,304 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利果乐果香蓝莓味85g@ -> 85*None +2025-12-12 11:49:38,305 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:49:38,305 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 袋 +2025-12-12 11:49:38,305 - app.core.excel.converter - INFO - 提取规格: 嘉士利果乐果香草莓味85g@ -> 85*None +2025-12-12 11:49:38,305 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 嘉士利果乐果香草莓味85g@ -> 85*None +2025-12-12 11:49:38,305 - app.core.excel.converter - WARNING - 无法解析规格: 85*None,使用默认值1*1 +2025-12-12 11:49:38,305 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.85, 单位: 袋 +2025-12-12 11:49:38,305 - app.core.excel.converter - INFO - 提取规格: 旺旺仙贝52g@ -> 52*None +2025-12-12 11:49:38,305 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 旺旺仙贝52g@ -> 52*None +2025-12-12 11:49:38,309 - app.core.excel.converter - WARNING - 无法解析规格: 52*None,使用默认值1*1 +2025-12-12 11:49:38,309 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 3.75, 单位: 袋 +2025-12-12 11:49:38,309 - app.core.excel.converter - INFO - 提取规格: 旺旺雪饼84g@ -> 84*None +2025-12-12 11:49:38,309 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 旺旺雪饼84g@ -> 84*None +2025-12-12 11:49:38,310 - app.core.excel.converter - WARNING - 无法解析规格: 84*None,使用默认值1*1 +2025-12-12 11:49:38,311 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.27, 单位: 袋 +2025-12-12 11:49:38,311 - app.core.excel.converter - INFO - 提取规格: 达利园蛋黄派230g@ -> 230*None +2025-12-12 11:49:38,311 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园蛋黄派230g@ -> 230*None +2025-12-12 11:49:38,312 - app.core.excel.converter - WARNING - 无法解析规格: 230*None,使用默认值1*1 +2025-12-12 11:49:38,312 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 1.0, 单价: 5.59, 单位: 袋 +2025-12-12 11:49:38,313 - app.core.excel.converter - INFO - 提取规格: 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None +2025-12-12 11:49:38,313 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None +2025-12-12 11:49:38,314 - app.core.excel.converter - WARNING - 无法解析规格: 22*None,使用默认值1*1 +2025-12-12 11:49:38,315 - app.core.excel.converter - INFO - 提取规格: 劲仔手撕肉干麻辣味10g@ -> 10*None +2025-12-12 11:49:38,315 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔手撕肉干麻辣味10g@ -> 10*None +2025-12-12 11:49:38,317 - app.core.excel.converter - WARNING - 无法解析规格: 10*None,使用默认值1*1 +2025-12-12 11:49:38,349 - app.core.excel.converter - INFO - 提取规格: 劲仔手撕肉干香辣味10g@ -> 10*None +2025-12-12 11:49:38,349 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔手撕肉干香辣味10g@ -> 10*None +2025-12-12 11:49:38,349 - app.core.excel.converter - WARNING - 无法解析规格: 10*None,使用默认值1*1 +2025-12-12 11:49:38,353 - app.core.excel.converter - INFO - 提取规格: 登荣香辣爽口鸡23g -> 23*None +2025-12-12 11:49:38,353 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 登荣香辣爽口鸡23g -> 23*None +2025-12-12 11:49:38,353 - app.core.excel.converter - WARNING - 无法解析规格: 23*None,使用默认值1*1 +2025-12-12 11:49:38,355 - app.core.excel.converter - INFO - 提取规格: 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None +2025-12-12 11:49:38,356 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None +2025-12-12 11:49:38,356 - app.core.excel.converter - WARNING - 无法解析规格: 12*None,使用默认值1*1 +2025-12-12 11:49:38,357 - app.core.excel.converter - INFO - 提取规格: 味芝元洞庭鱼排香辣味26g -> 26*None +2025-12-12 11:49:38,357 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 味芝元洞庭鱼排香辣味26g -> 26*None +2025-12-12 11:49:38,359 - app.core.excel.converter - WARNING - 无法解析规格: 26*None,使用默认值1*1 +2025-12-12 11:49:38,359 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 15.0, 单价: 1.42, 单位: 袋 +2025-12-12 11:49:38,359 - app.core.excel.converter - INFO - 提取规格: 劲仔小鱼麻辣小鱼12g@ -> 12*None +2025-12-12 11:49:38,360 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 劲仔小鱼麻辣小鱼12g@ -> 12*None +2025-12-12 11:49:38,361 - app.core.excel.converter - WARNING - 无法解析规格: 12*None,使用默认值1*1 +2025-12-12 11:49:38,361 - app.core.excel.converter - INFO - 提取规格: 缺牙齿素牛肚香辣味16g -> 16*None +2025-12-12 11:49:38,361 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 缺牙齿素牛肚香辣味16g -> 16*None +2025-12-12 11:49:38,363 - app.core.excel.converter - WARNING - 无法解析规格: 16*None,使用默认值1*1 +2025-12-12 11:49:38,363 - app.core.excel.converter - INFO - 提取规格: 乐事青柠味70g@ -> 70*None +2025-12-12 11:49:38,364 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事青柠味70g@ -> 70*None +2025-12-12 11:49:38,364 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:49:38,365 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.55, 单位: 袋 +2025-12-12 11:49:38,365 - app.core.excel.converter - INFO - 提取规格: 乐事黄瓜味70g@ -> 70*None +2025-12-12 11:49:38,366 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事黄瓜味70g@ -> 70*None +2025-12-12 11:49:38,366 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:49:38,367 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.55, 单位: 袋 +2025-12-12 11:49:38,367 - app.core.excel.converter - INFO - 提取规格: 乐事德克萨斯烧烤味70g@ -> 70*None +2025-12-12 11:49:38,367 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事德克萨斯烧烤味70g@ -> 70*None +2025-12-12 11:49:38,368 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 11:49:38,368 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 4.55, 单位: 袋 +2025-12-12 11:49:38,368 - app.core.excel.converter - INFO - 提取规格: 乐事薯片经典原味23g(串串装)@ -> 23*None +2025-12-12 11:49:38,368 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事薯片经典原味23g(串串装)@ -> 23*None +2025-12-12 11:49:38,370 - app.core.excel.converter - WARNING - 无法解析规格: 23*None,使用默认值1*1 +2025-12-12 11:49:38,370 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 1.0, 单价: 1.35, 单位: 袋 +2025-12-12 12:30:07,698 - app.core.excel.converter - INFO - 成功加载条码映射配置,共51项 +2025-12-12 12:30:07,726 - app.core.excel.converter - INFO - 提取规格: 乐事墨西哥鸡汁番茄味70g@ -> 70*None +2025-12-12 12:30:07,726 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事墨西哥鸡汁番茄味70g@ -> 70*None +2025-12-12 12:30:07,730 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 12:30:07,730 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.55, 单位: 袋 +2025-12-12 12:30:07,730 - app.core.excel.converter - INFO - 提取规格: 乐事美国经典原味70g@ -> 70*None +2025-12-12 12:30:07,730 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事美国经典原味70g@ -> 70*None +2025-12-12 12:30:07,730 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 12:30:07,730 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 4.55, 单位: 袋 +2025-12-12 12:30:07,730 - app.core.excel.converter - INFO - 提取规格: 子弟原切马铃薯片清怡黄瓜味95g@ -> 95*None +2025-12-12 12:30:07,730 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 子弟原切马铃薯片清怡黄瓜味95g@ -> 95*None +2025-12-12 12:30:07,730 - app.core.excel.converter - WARNING - 无法解析规格: 95*None,使用默认值1*1 +2025-12-12 12:30:07,730 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 6.0, 单价: 5.32, 单位: 袋 +2025-12-12 12:30:07,734 - app.core.excel.converter - INFO - 提取规格: 子弟原切马铃薯片美滋番茄味95g@ -> 95*None +2025-12-12 12:30:07,734 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 子弟原切马铃薯片美滋番茄味95g@ -> 95*None +2025-12-12 12:30:07,734 - app.core.excel.converter - WARNING - 无法解析规格: 95*None,使用默认值1*1 +2025-12-12 12:30:07,734 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 6.0, 单价: 5.32, 单位: 袋 +2025-12-12 12:30:07,734 - app.core.excel.converter - INFO - 提取规格: 子弟原切马铃薯片经典麻辣味95g@ -> 95*None +2025-12-12 12:30:07,734 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 子弟原切马铃薯片经典麻辣味95g@ -> 95*None +2025-12-12 12:30:07,734 - app.core.excel.converter - WARNING - 无法解析规格: 95*None,使用默认值1*1 +2025-12-12 12:30:07,734 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 6.0, 单价: 5.32, 单位: 袋 +2025-12-12 12:30:07,734 - app.core.excel.converter - INFO - 提取规格: 子弟原切马铃薯片劲爆麻辣味95g@ -> 95*None +2025-12-12 12:30:07,738 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 子弟原切马铃薯片劲爆麻辣味95g@ -> 95*None +2025-12-12 12:30:07,738 - app.core.excel.converter - WARNING - 无法解析规格: 95*None,使用默认值1*1 +2025-12-12 12:30:07,738 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 6.0, 单价: 5.32, 单位: 袋 +2025-12-12 12:30:07,738 - app.core.excel.converter - INFO - 提取规格: 飘零大叔香辣猪肉脯50g@ -> 50*None +2025-12-12 12:30:07,738 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 飘零大叔香辣猪肉脯50g@ -> 50*None +2025-12-12 12:30:07,738 - app.core.excel.converter - WARNING - 无法解析规格: 50*None,使用默认值1*1 +2025-12-12 12:30:07,738 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 5.46, 单位: 袋 +2025-12-12 12:30:07,738 - app.core.excel.converter - INFO - 提取规格: 飘零大叔川味烤香肠香辣味65g@ -> 65*None +2025-12-12 12:30:07,738 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 飘零大叔川味烤香肠香辣味65g@ -> 65*None +2025-12-12 12:30:07,742 - app.core.excel.converter - WARNING - 无法解析规格: 65*None,使用默认值1*1 +2025-12-12 12:30:07,742 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 6.77, 单位: 袋 +2025-12-12 12:30:07,742 - app.core.excel.converter - INFO - 提取规格: 川牛娃老成都五香牛肉干60g -> 60*None +2025-12-12 12:30:07,742 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 川牛娃老成都五香牛肉干60g -> 60*None +2025-12-12 12:30:07,742 - app.core.excel.converter - WARNING - 无法解析规格: 60*None,使用默认值1*1 +2025-12-12 12:30:07,742 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 9.03, 单位: 袋 +2025-12-12 12:30:07,742 - app.core.excel.converter - INFO - 提取规格: 王小卤虎皮凤爪卤香味 105g@ -> 105*None +2025-12-12 12:30:07,742 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 王小卤虎皮凤爪卤香味 105g@ -> 105*None +2025-12-12 12:30:07,746 - app.core.excel.converter - WARNING - 无法解析规格: 105*None,使用默认值1*1 +2025-12-12 12:30:07,746 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 10.36, 单位: 袋 +2025-12-12 12:30:07,746 - app.core.excel.converter - INFO - 提取规格: 王小卤虎皮凤爪火锅味105g@ -> 105*None +2025-12-12 12:30:07,746 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 王小卤虎皮凤爪火锅味105g@ -> 105*None +2025-12-12 12:30:07,746 - app.core.excel.converter - WARNING - 无法解析规格: 105*None,使用默认值1*1 +2025-12-12 12:30:07,746 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 2.0, 单价: 10.36, 单位: 袋 +2025-12-12 12:30:07,746 - app.core.excel.converter - INFO - 提取规格: 四味王酱鸭脖猛辣味60g@ -> 60*None +2025-12-12 12:30:07,746 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 四味王酱鸭脖猛辣味60g@ -> 60*None +2025-12-12 12:30:07,746 - app.core.excel.converter - WARNING - 无法解析规格: 60*None,使用默认值1*1 +2025-12-12 12:30:07,750 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 2.0, 单价: 4.66, 单位: 个 +2025-12-12 12:30:07,750 - app.core.excel.converter - INFO - 提取规格: 四味王酱鸭脖微辣味60g@ -> 60*None +2025-12-12 12:30:07,750 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 四味王酱鸭脖微辣味60g@ -> 60*None +2025-12-12 12:30:07,750 - app.core.excel.converter - WARNING - 无法解析规格: 60*None,使用默认值1*1 +2025-12-12 12:30:07,750 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 4.66, 单位: 个 +2025-12-12 12:30:07,750 - app.core.excel.converter - INFO - 提取规格: 麦得赞盐焗烤腿90g -> 90*None +2025-12-12 12:30:07,750 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 麦得赞盐焗烤腿90g -> 90*None +2025-12-12 12:30:07,753 - app.core.excel.converter - WARNING - 无法解析规格: 90*None,使用默认值1*1 +2025-12-12 12:30:07,753 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.71, 单位: 袋 +2025-12-12 12:30:07,754 - app.core.excel.converter - INFO - 提取规格: 杨记老卤双爪多味70g -> 70*None +2025-12-12 12:30:07,754 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 杨记老卤双爪多味70g -> 70*None +2025-12-12 12:30:07,755 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 12:30:07,755 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.8, 单位: 袋 +2025-12-12 12:30:07,756 - app.core.excel.converter - INFO - 提取规格: 逍遥嘴花椒鸡味180g -> 180*None +2025-12-12 12:30:07,756 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 逍遥嘴花椒鸡味180g -> 180*None +2025-12-12 12:30:07,757 - app.core.excel.converter - WARNING - 无法解析规格: 180*None,使用默认值1*1 +2025-12-12 12:30:07,757 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 6.0, 单价: 2.85, 单位: 袋 +2025-12-12 12:30:07,757 - app.core.excel.converter - INFO - 提取规格: 茂林炭烤鱿鱼丝60g -> 60*None +2025-12-12 12:30:07,757 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 茂林炭烤鱿鱼丝60g -> 60*None +2025-12-12 12:30:07,758 - app.core.excel.converter - WARNING - 无法解析规格: 60*None,使用默认值1*1 +2025-12-12 12:30:07,759 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 8.46, 单位: 袋 +2025-12-12 12:30:07,759 - app.core.excel.converter - INFO - 提取规格: 金满福手工辣条素龙虾味152g -> 152*None +2025-12-12 12:30:07,759 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 金满福手工辣条素龙虾味152g -> 152*None +2025-12-12 12:30:07,759 - app.core.excel.converter - WARNING - 无法解析规格: 152*None,使用默认值1*1 +2025-12-12 12:30:07,759 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 2.95, 单位: 袋 +2025-12-12 12:30:07,759 - app.core.excel.converter - INFO - 提取规格: 卫龙大面筋102g@ -> 102*None +2025-12-12 12:30:07,759 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 卫龙大面筋102g@ -> 102*None +2025-12-12 12:30:07,759 - app.core.excel.converter - WARNING - 无法解析规格: 102*None,使用默认值1*1 +2025-12-12 12:30:07,759 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 6.0, 单价: 2.58, 单位: 袋 +2025-12-12 12:30:07,763 - app.core.excel.converter - INFO - 提取规格: 麻辣王子地道辣条很麻很辣73g -> 73*None +2025-12-12 12:30:07,763 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 麻辣王子地道辣条很麻很辣73g -> 73*None +2025-12-12 12:30:07,763 - app.core.excel.converter - WARNING - 无法解析规格: 73*None,使用默认值1*1 +2025-12-12 12:30:07,763 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 3.61, 单位: 袋 +2025-12-12 12:30:07,763 - app.core.excel.converter - INFO - 提取规格: 麻辣王子地道辣条微麻微辣73g -> 73*None +2025-12-12 12:30:07,763 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 麻辣王子地道辣条微麻微辣73g -> 73*None +2025-12-12 12:30:07,763 - app.core.excel.converter - WARNING - 无法解析规格: 73*None,使用默认值1*1 +2025-12-12 12:30:07,763 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 6.0, 单价: 3.61, 单位: 袋 +2025-12-12 12:30:07,763 - app.core.excel.converter - INFO - 提取规格: 展华大辣棒麻辣牛肉味138g -> 138*None +2025-12-12 12:30:07,767 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 展华大辣棒麻辣牛肉味138g -> 138*None +2025-12-12 12:30:07,767 - app.core.excel.converter - WARNING - 无法解析规格: 138*None,使用默认值1*1 +2025-12-12 12:30:07,767 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 6.0, 单价: 2.95, 单位: 袋 +2025-12-12 12:30:07,767 - app.core.excel.converter - INFO - 提取规格: 徐福记米果卷香烤牛排90g@ -> 90*None +2025-12-12 12:30:07,767 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 徐福记米果卷香烤牛排90g@ -> 90*None +2025-12-12 12:30:07,767 - app.core.excel.converter - WARNING - 无法解析规格: 90*None,使用默认值1*1 +2025-12-12 12:30:07,767 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 2.0, 单价: 4.62, 单位: 袋 +2025-12-12 12:30:07,767 - app.core.excel.converter - INFO - 提取规格: 徐福记米果卷奶油玉米90g@ -> 90*None +2025-12-12 12:30:07,767 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 徐福记米果卷奶油玉米90g@ -> 90*None +2025-12-12 12:30:07,771 - app.core.excel.converter - WARNING - 无法解析规格: 90*None,使用默认值1*1 +2025-12-12 12:30:07,771 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 2.0, 单价: 4.62, 单位: 袋 +2025-12-12 12:30:07,771 - app.core.excel.converter - INFO - 提取规格: 登荣素口水鸡65g -> 65*None +2025-12-12 12:30:07,771 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 登荣素口水鸡65g -> 65*None +2025-12-12 12:30:07,771 - app.core.excel.converter - WARNING - 无法解析规格: 65*None,使用默认值1*1 +2025-12-12 12:30:07,771 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 1.52, 单位: 袋 +2025-12-12 12:30:07,771 - app.core.excel.converter - INFO - 提取规格: 太哥辣白菜味调味面制品58g -> 58*None +2025-12-12 12:30:07,771 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 太哥辣白菜味调味面制品58g -> 58*None +2025-12-12 12:30:07,771 - app.core.excel.converter - WARNING - 无法解析规格: 58*None,使用默认值1*1 +2025-12-12 12:30:07,775 - app.core.excel.converter - INFO - 提取规格: 小渝儿泡椒牛板筋泡椒80g@ -> 80*None +2025-12-12 12:30:07,775 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 小渝儿泡椒牛板筋泡椒80g@ -> 80*None +2025-12-12 12:30:07,775 - app.core.excel.converter - WARNING - 无法解析规格: 80*None,使用默认值1*1 +2025-12-12 12:30:07,775 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 1.38, 单位: 袋 +2025-12-12 12:30:07,775 - app.core.excel.converter - INFO - 提取规格: 小渝儿泡椒臭干子泡椒80g@ -> 80*None +2025-12-12 12:30:07,775 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 小渝儿泡椒臭干子泡椒80g@ -> 80*None +2025-12-12 12:30:07,775 - app.core.excel.converter - WARNING - 无法解析规格: 80*None,使用默认值1*1 +2025-12-12 12:30:07,775 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 6.0, 单价: 1.22, 单位: 袋 +2025-12-12 12:30:07,775 - app.core.excel.converter - INFO - 提取规格: 郎阿哥牛羊配辣味90g -> 90*None +2025-12-12 12:30:07,775 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 郎阿哥牛羊配辣味90g -> 90*None +2025-12-12 12:30:07,779 - app.core.excel.converter - WARNING - 无法解析规格: 90*None,使用默认值1*1 +2025-12-12 12:30:07,779 - app.core.excel.converter - INFO - 提取规格: 卫龙大面筋106g@ -> 106*None +2025-12-12 12:30:07,779 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 卫龙大面筋106g@ -> 106*None +2025-12-12 12:30:07,779 - app.core.excel.converter - WARNING - 无法解析规格: 106*None,使用默认值1*1 +2025-12-12 12:30:07,779 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 3.13, 单位: 袋 +2025-12-12 12:30:07,779 - app.core.excel.converter - INFO - 提取规格: 小滑头薄片(经典)72g -> 72*None +2025-12-12 12:30:07,779 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 小滑头薄片(经典)72g -> 72*None +2025-12-12 12:30:07,779 - app.core.excel.converter - WARNING - 无法解析规格: 72*None,使用默认值1*1 +2025-12-12 12:30:07,779 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 1.43, 单位: 袋 +2025-12-12 12:30:07,784 - app.core.excel.converter - INFO - 提取规格: 溜溜梅西梅60g@ -> 60*None +2025-12-12 12:30:07,784 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 溜溜梅西梅60g@ -> 60*None +2025-12-12 12:30:07,785 - app.core.excel.converter - WARNING - 无法解析规格: 60*None,使用默认值1*1 +2025-12-12 12:30:07,785 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.61, 单位: 袋 +2025-12-12 12:30:07,785 - app.core.excel.converter - INFO - 提取规格: 溜溜梅清梅60g@ -> 60*None +2025-12-12 12:30:07,786 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 溜溜梅清梅60g@ -> 60*None +2025-12-12 12:30:07,786 - app.core.excel.converter - WARNING - 无法解析规格: 60*None,使用默认值1*1 +2025-12-12 12:30:07,786 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.61, 单位: 袋 +2025-12-12 12:30:07,787 - app.core.excel.converter - INFO - 提取规格: 溜溜梅雪梅60g@ -> 60*None +2025-12-12 12:30:07,787 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 溜溜梅雪梅60g@ -> 60*None +2025-12-12 12:30:07,788 - app.core.excel.converter - WARNING - 无法解析规格: 60*None,使用默认值1*1 +2025-12-12 12:30:07,788 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 3.61, 单位: 袋 +2025-12-12 12:30:07,788 - app.core.excel.converter - INFO - 提取规格: 溜溜梅西梅160g@ -> 160*None +2025-12-12 12:30:07,788 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 溜溜梅西梅160g@ -> 160*None +2025-12-12 12:30:07,788 - app.core.excel.converter - WARNING - 无法解析规格: 160*None,使用默认值1*1 +2025-12-12 12:30:07,788 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 8.55, 单位: 袋 +2025-12-12 12:30:07,791 - app.core.excel.converter - INFO - 提取规格: 溜溜梅清梅160g@ -> 160*None +2025-12-12 12:30:07,791 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 溜溜梅清梅160g@ -> 160*None +2025-12-12 12:30:07,791 - app.core.excel.converter - WARNING - 无法解析规格: 160*None,使用默认值1*1 +2025-12-12 12:30:07,791 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 8.55, 单位: 袋 +2025-12-12 12:30:07,791 - app.core.excel.converter - INFO - 提取规格: 溜溜梅杨梅50g@ -> 50*None +2025-12-12 12:30:07,791 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 溜溜梅杨梅50g@ -> 50*None +2025-12-12 12:30:07,791 - app.core.excel.converter - WARNING - 无法解析规格: 50*None,使用默认值1*1 +2025-12-12 12:30:07,791 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.61, 单位: 袋 +2025-12-12 12:30:07,791 - app.core.excel.converter - INFO - 提取规格: 天马达利雪梅65g -> 65*None +2025-12-12 12:30:07,795 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 天马达利雪梅65g -> 65*None +2025-12-12 12:30:07,795 - app.core.excel.converter - WARNING - 无法解析规格: 65*None,使用默认值1*1 +2025-12-12 12:30:07,795 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.38, 单位: 袋 +2025-12-12 12:30:07,795 - app.core.excel.converter - INFO - 提取规格: 必吃客雪花山楂条142g -> 142*None +2025-12-12 12:30:07,795 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 必吃客雪花山楂条142g -> 142*None +2025-12-12 12:30:07,795 - app.core.excel.converter - WARNING - 无法解析规格: 142*None,使用默认值1*1 +2025-12-12 12:30:07,795 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 3.9, 单位: 袋 +2025-12-12 12:30:07,795 - app.core.excel.converter - INFO - 提取规格: 必吃客零售瓶红薯果脯140g -> 140*None +2025-12-12 12:30:07,795 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 必吃客零售瓶红薯果脯140g -> 140*None +2025-12-12 12:30:07,799 - app.core.excel.converter - WARNING - 无法解析规格: 140*None,使用默认值1*1 +2025-12-12 12:30:07,799 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.99, 单位: 袋 +2025-12-12 12:30:07,799 - app.core.excel.converter - INFO - 提取规格: 75g旺宝香蕉脆片 -> 75*None +2025-12-12 12:30:07,799 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 75g旺宝香蕉脆片 -> 75*None +2025-12-12 12:30:07,799 - app.core.excel.converter - WARNING - 无法解析规格: 75*None,使用默认值1*1 +2025-12-12 12:30:07,799 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.04, 单位: 袋 +2025-12-12 12:30:07,799 - app.core.excel.converter - INFO - 提取规格: 旺宝开心果100g -> 100*None +2025-12-12 12:30:07,799 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 旺宝开心果100g -> 100*None +2025-12-12 12:30:07,803 - app.core.excel.converter - WARNING - 无法解析规格: 100*None,使用默认值1*1 +2025-12-12 12:30:07,803 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 9.98, 单位: 袋 +2025-12-12 12:30:07,803 - app.core.excel.converter - INFO - 提取规格: 金枣庄阿胶枣200g -> 200*None +2025-12-12 12:30:07,803 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 金枣庄阿胶枣200g -> 200*None +2025-12-12 12:30:07,803 - app.core.excel.converter - WARNING - 无法解析规格: 200*None,使用默认值1*1 +2025-12-12 12:30:07,803 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.52, 单位: 袋 +2025-12-12 12:30:07,803 - app.core.excel.converter - INFO - 提取规格: 大白兔奶糖114g@ -> 114*None +2025-12-12 12:30:07,803 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 大白兔奶糖114g@ -> 114*None +2025-12-12 12:30:07,803 - app.core.excel.converter - WARNING - 无法解析规格: 114*None,使用默认值1*1 +2025-12-12 12:30:07,807 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 5.69, 单位: 袋 +2025-12-12 12:30:07,807 - app.core.excel.converter - INFO - 提取规格: 佳宝无核葡萄干90g -> 90*None +2025-12-12 12:30:07,807 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 佳宝无核葡萄干90g -> 90*None +2025-12-12 12:30:07,807 - app.core.excel.converter - WARNING - 无法解析规格: 90*None,使用默认值1*1 +2025-12-12 12:30:07,807 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.33, 单位: 袋 +2025-12-12 12:30:07,807 - app.core.excel.converter - INFO - 提取规格: 老程华甲级杂糖140g -> 140*None +2025-12-12 12:30:07,807 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 老程华甲级杂糖140g -> 140*None +2025-12-12 12:30:07,807 - app.core.excel.converter - WARNING - 无法解析规格: 140*None,使用默认值1*1 +2025-12-12 12:30:07,807 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.42, 单位: 袋 +2025-12-12 12:30:07,807 - app.core.excel.converter - INFO - 提取规格: 飘零大叔香卤铁蛋88g@ -> 88*None +2025-12-12 12:30:07,811 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 飘零大叔香卤铁蛋88g@ -> 88*None +2025-12-12 12:30:07,811 - app.core.excel.converter - WARNING - 无法解析规格: 88*None,使用默认值1*1 +2025-12-12 12:30:07,811 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 5.15, 单位: 袋 +2025-12-12 12:30:07,811 - app.core.excel.converter - INFO - 提取规格: 80g调皮猴鹌鹑蛋(麻辣味) -> 80*None +2025-12-12 12:30:07,811 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 80g调皮猴鹌鹑蛋(麻辣味) -> 80*None +2025-12-12 12:30:07,811 - app.core.excel.converter - WARNING - 无法解析规格: 80*None,使用默认值1*1 +2025-12-12 12:30:07,811 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.38, 单位: 袋 +2025-12-12 12:30:07,811 - app.core.excel.converter - INFO - 提取规格: 有友卤香鸡翅120g@ -> 120*None +2025-12-12 12:30:07,811 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 有友卤香鸡翅120g@ -> 120*None +2025-12-12 12:30:07,816 - app.core.excel.converter - WARNING - 无法解析规格: 120*None,使用默认值1*1 +2025-12-12 12:30:07,816 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 12.35, 单位: 袋 +2025-12-12 12:30:07,817 - app.core.excel.converter - INFO - 提取规格: 125g千百度卤香鸡翅(五香味) -> 125*None +2025-12-12 12:30:07,817 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 125g千百度卤香鸡翅(五香味) -> 125*None +2025-12-12 12:30:07,818 - app.core.excel.converter - WARNING - 无法解析规格: 125*None,使用默认值1*1 +2025-12-12 12:30:07,818 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 11.6, 单位: 袋 +2025-12-12 12:30:07,819 - app.core.excel.converter - INFO - 提取规格: 逍遥派盐焗鸡腿100g -> 100*None +2025-12-12 12:30:07,819 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 逍遥派盐焗鸡腿100g -> 100*None +2025-12-12 12:30:07,820 - app.core.excel.converter - WARNING - 无法解析规格: 100*None,使用默认值1*1 +2025-12-12 12:30:07,820 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 8.27, 单位: 袋 +2025-12-12 12:30:07,820 - app.core.excel.converter - INFO - 提取规格: 周小贱功夫鸭脖疯狂香辣味55g -> 55*None +2025-12-12 12:30:07,821 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 周小贱功夫鸭脖疯狂香辣味55g -> 55*None +2025-12-12 12:30:07,821 - app.core.excel.converter - WARNING - 无法解析规格: 55*None,使用默认值1*1 +2025-12-12 12:30:07,821 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 6.0, 单价: 4.28, 单位: 袋 +2025-12-12 12:30:07,821 - app.core.excel.converter - INFO - 提取规格: 好巴食豆腐干麻辣味涨95g -> 95*None +2025-12-12 12:30:07,821 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 好巴食豆腐干麻辣味涨95g -> 95*None +2025-12-12 12:30:07,821 - app.core.excel.converter - WARNING - 无法解析规格: 95*None,使用默认值1*1 +2025-12-12 12:30:07,821 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 4.0, 单价: 3.33, 单位: 袋 +2025-12-12 12:30:07,821 - app.core.excel.converter - INFO - 提取规格: 好巴食豆腐干烧烤味涨95g -> 95*None +2025-12-12 12:30:07,821 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 好巴食豆腐干烧烤味涨95g -> 95*None +2025-12-12 12:30:07,825 - app.core.excel.converter - WARNING - 无法解析规格: 95*None,使用默认值1*1 +2025-12-12 12:30:07,825 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.33, 单位: 袋 +2025-12-12 12:30:07,825 - app.core.excel.converter - INFO - 提取规格: 好巴食南溪豆干五香味涨95g -> 95*None +2025-12-12 12:30:07,825 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 好巴食南溪豆干五香味涨95g -> 95*None +2025-12-12 12:30:07,825 - app.core.excel.converter - WARNING - 无法解析规格: 95*None,使用默认值1*1 +2025-12-12 12:30:07,825 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 3.33, 单位: 袋 +2025-12-12 12:30:07,825 - app.core.excel.converter - INFO - 提取规格: 香香嘴卤制豆腐干香辣味80g@ -> 80*None +2025-12-12 12:30:07,825 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 香香嘴卤制豆腐干香辣味80g@ -> 80*None +2025-12-12 12:30:07,825 - app.core.excel.converter - WARNING - 无法解析规格: 80*None,使用默认值1*1 +2025-12-12 12:30:07,829 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 2.66, 单位: 袋 +2025-12-12 12:30:07,829 - app.core.excel.converter - INFO - 提取规格: 老灶煮花生130g -> 130*None +2025-12-12 12:30:07,829 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 老灶煮花生130g -> 130*None +2025-12-12 12:30:07,829 - app.core.excel.converter - WARNING - 无法解析规格: 130*None,使用默认值1*1 +2025-12-12 12:30:07,829 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 3.5, 单位: 袋 +2025-12-12 12:30:07,829 - app.core.excel.converter - INFO - 提取规格: 老灶花生292g -> 292*None +2025-12-12 12:30:07,829 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 老灶花生292g -> 292*None +2025-12-12 12:30:07,829 - app.core.excel.converter - WARNING - 无法解析规格: 292*None,使用默认值1*1 +2025-12-12 12:30:07,829 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 6.63, 单位: 袋 +2025-12-12 12:30:07,829 - app.core.excel.converter - INFO - 提取规格: 老灶花生186g -> 186*None +2025-12-12 12:30:07,829 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 老灶花生186g -> 186*None +2025-12-12 12:30:07,833 - app.core.excel.converter - WARNING - 无法解析规格: 186*None,使用默认值1*1 +2025-12-12 12:30:07,833 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 8.0, 单价: 4.9, 单位: 袋 +2025-12-12 12:30:07,833 - app.core.excel.converter - INFO - 提取规格: 洽洽奶香瓜子285g@ -> 285*None +2025-12-12 12:30:07,833 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 洽洽奶香瓜子285g@ -> 285*None +2025-12-12 12:30:07,833 - app.core.excel.converter - WARNING - 无法解析规格: 285*None,使用默认值1*1 +2025-12-12 12:30:07,833 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 9.63, 单位: 袋 +2025-12-12 12:32:20,578 - app.core.excel.converter - INFO - 成功加载条码映射配置,共51项 +2025-12-12 12:32:20,603 - app.core.excel.converter - INFO - 提取规格: 洽洽香瓜子260g@ -> 260*None +2025-12-12 12:32:20,603 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 洽洽香瓜子260g@ -> 260*None +2025-12-12 12:32:20,606 - app.core.excel.converter - WARNING - 无法解析规格: 260*None,使用默认值1*1 +2025-12-12 12:32:20,606 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 8.6, 单位: 袋 +2025-12-12 12:32:20,606 - app.core.excel.converter - INFO - 提取规格: 洽洽香瓜子200g@ -> 200*None +2025-12-12 12:32:20,606 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 洽洽香瓜子200g@ -> 200*None +2025-12-12 12:32:20,606 - app.core.excel.converter - WARNING - 无法解析规格: 200*None,使用默认值1*1 +2025-12-12 12:32:20,606 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 6.35, 单位: 袋 +2025-12-12 12:32:20,606 - app.core.excel.converter - INFO - 提取规格: 洽洽香瓜子160g@ -> 160*None +2025-12-12 12:32:20,610 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 洽洽香瓜子160g@ -> 160*None +2025-12-12 12:32:20,610 - app.core.excel.converter - WARNING - 无法解析规格: 160*None,使用默认值1*1 +2025-12-12 12:32:20,610 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 5.35, 单位: 袋 +2025-12-12 12:32:20,610 - app.core.excel.converter - INFO - 提取规格: 洽洽香瓜子110g@ -> 110*None +2025-12-12 12:32:20,610 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 洽洽香瓜子110g@ -> 110*None +2025-12-12 12:32:20,610 - app.core.excel.converter - WARNING - 无法解析规格: 110*None,使用默认值1*1 +2025-12-12 12:32:20,610 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 6.0, 单价: 3.56, 单位: 袋 +2025-12-12 12:32:20,614 - app.core.excel.converter - INFO - 提取规格: 洽洽原香瓜子142g@ -> 142*None +2025-12-12 12:32:20,614 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 洽洽原香瓜子142g@ -> 142*None +2025-12-12 12:32:20,614 - app.core.excel.converter - WARNING - 无法解析规格: 142*None,使用默认值1*1 +2025-12-12 12:32:20,614 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 5.35, 单位: 袋 +2025-12-12 12:32:20,614 - app.core.excel.converter - INFO - 提取规格: 徽记生瓜子涨115g -> 115*None +2025-12-12 12:32:20,614 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 徽记生瓜子涨115g -> 115*None +2025-12-12 12:32:20,614 - app.core.excel.converter - WARNING - 无法解析规格: 115*None,使用默认值1*1 +2025-12-12 12:32:20,618 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.11, 单位: 袋 +2025-12-12 12:32:20,619 - app.core.excel.converter - INFO - 提取规格: 徽记煮瓜子涨140g -> 140*None +2025-12-12 12:32:20,619 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 徽记煮瓜子涨140g -> 140*None +2025-12-12 12:32:20,619 - app.core.excel.converter - WARNING - 无法解析规格: 140*None,使用默认值1*1 +2025-12-12 12:32:20,619 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 4.68, 单位: 袋 +2025-12-12 12:32:20,619 - app.core.excel.converter - INFO - 提取规格: 洽洽瓜子山核桃108g@ -> 108*None +2025-12-12 12:32:20,619 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 洽洽瓜子山核桃108g@ -> 108*None +2025-12-12 12:32:20,622 - app.core.excel.converter - WARNING - 无法解析规格: 108*None,使用默认值1*1 +2025-12-12 12:32:20,622 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 5.08, 单位: 袋 +2025-12-12 12:32:20,622 - app.core.excel.converter - INFO - 提取规格: 洽洽瓜子焦糖味88g@ -> 88*None +2025-12-12 12:32:20,622 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 洽洽瓜子焦糖味88g@ -> 88*None +2025-12-12 12:32:20,622 - app.core.excel.converter - WARNING - 无法解析规格: 88*None,使用默认值1*1 +2025-12-12 12:32:20,622 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 6.0, 单价: 4.59, 单位: 袋 +2025-12-12 12:32:20,622 - app.core.excel.converter - INFO - 提取规格: 百世兴酒鬼花生原味100g -> 100*None +2025-12-12 12:32:20,622 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 百世兴酒鬼花生原味100g -> 100*None +2025-12-12 12:32:20,622 - app.core.excel.converter - WARNING - 无法解析规格: 100*None,使用默认值1*1 +2025-12-12 12:32:20,626 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 3.82, 单位: 袋 +2025-12-12 12:32:20,626 - app.core.excel.converter - INFO - 提取规格: 百世兴酒鬼花生80g -> 80*None +2025-12-12 12:32:20,626 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 百世兴酒鬼花生80g -> 80*None +2025-12-12 12:32:20,628 - app.core.excel.converter - WARNING - 无法解析规格: 80*None,使用默认值1*1 +2025-12-12 12:32:20,628 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.34, 单位: 袋 +2025-12-12 12:32:20,628 - app.core.excel.converter - INFO - 提取规格: 老程华怪味胡豆140g -> 140*None +2025-12-12 12:32:20,628 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 老程华怪味胡豆140g -> 140*None +2025-12-12 12:32:20,629 - app.core.excel.converter - WARNING - 无法解析规格: 140*None,使用默认值1*1 +2025-12-12 12:32:20,630 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 3.06, 单位: 袋 +2025-12-12 12:32:20,630 - app.core.excel.converter - INFO - 提取规格: 老程华重庆怪味胡豆190g -> 190*None +2025-12-12 12:32:20,630 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 老程华重庆怪味胡豆190g -> 190*None +2025-12-12 12:32:20,630 - app.core.excel.converter - WARNING - 无法解析规格: 190*None,使用默认值1*1 +2025-12-12 12:32:20,630 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 3.92, 单位: 袋 +2025-12-12 12:32:20,630 - app.core.excel.converter - INFO - 提取规格: 甘源瓜子仁蟹黄味75g@ -> 75*None +2025-12-12 12:32:20,630 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 甘源瓜子仁蟹黄味75g@ -> 75*None +2025-12-12 12:32:20,630 - app.core.excel.converter - WARNING - 无法解析规格: 75*None,使用默认值1*1 +2025-12-12 12:32:20,634 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 3.06, 单位: 袋 +2025-12-12 12:32:20,635 - app.core.excel.converter - INFO - 提取规格: 甘源青豌豆蒜香味75g@ -> 75*None +2025-12-12 12:32:20,635 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 甘源青豌豆蒜香味75g@ -> 75*None +2025-12-12 12:32:20,635 - app.core.excel.converter - WARNING - 无法解析规格: 75*None,使用默认值1*1 +2025-12-12 12:32:20,635 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 3.06, 单位: 袋 +2025-12-12 12:32:20,635 - app.core.excel.converter - INFO - 提取规格: 素味居泡山椒笋尖100g -> 100*None +2025-12-12 12:32:20,635 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 素味居泡山椒笋尖100g -> 100*None +2025-12-12 12:32:20,635 - app.core.excel.converter - WARNING - 无法解析规格: 100*None,使用默认值1*1 +2025-12-12 12:32:20,635 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 2.73, 单位: 袋 +2025-12-12 12:32:20,639 - app.core.excel.converter - INFO - 提取规格: 卧龙酥脆小麻花烧烤味138g -> 138*None +2025-12-12 12:32:20,639 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 卧龙酥脆小麻花烧烤味138g -> 138*None +2025-12-12 12:32:20,639 - app.core.excel.converter - WARNING - 无法解析规格: 138*None,使用默认值1*1 +2025-12-12 12:32:20,639 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.01, 单位: 袋 +2025-12-12 12:32:20,639 - app.core.excel.converter - INFO - 提取规格: 川洋黑米锅巴香葱味82g@ -> 82*None +2025-12-12 12:32:20,639 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 川洋黑米锅巴香葱味82g@ -> 82*None +2025-12-12 12:32:20,639 - app.core.excel.converter - WARNING - 无法解析规格: 82*None,使用默认值1*1 +2025-12-12 12:32:20,639 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.45, 单位: 袋 +2025-12-12 12:32:20,643 - app.core.excel.converter - INFO - 提取规格: 寻唐记锅巴牛肉味70g -> 70*None +2025-12-12 12:32:20,643 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 寻唐记锅巴牛肉味70g -> 70*None +2025-12-12 12:32:20,643 - app.core.excel.converter - WARNING - 无法解析规格: 70*None,使用默认值1*1 +2025-12-12 12:32:20,643 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 1.91, 单位: 袋 +2025-12-12 12:32:20,643 - app.core.excel.converter - INFO - 提取规格: 吴氏远久肥肠酥192g -> 192*None +2025-12-12 12:32:20,643 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 吴氏远久肥肠酥192g -> 192*None +2025-12-12 12:32:20,643 - app.core.excel.converter - WARNING - 无法解析规格: 192*None,使用默认值1*1 +2025-12-12 12:32:20,643 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 2.77, 单位: 袋 +2025-12-12 12:32:20,647 - app.core.excel.converter - INFO - 提取规格: 吴氏远久猫耳朵192g -> 192*None +2025-12-12 12:32:20,647 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 吴氏远久猫耳朵192g -> 192*None +2025-12-12 12:32:20,647 - app.core.excel.converter - WARNING - 无法解析规格: 192*None,使用默认值1*1 +2025-12-12 12:32:20,647 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 2.77, 单位: 袋 +2025-12-12 12:32:20,647 - app.core.excel.converter - INFO - 提取规格: 吴氏远久麻辣鱼卷192g -> 192*None +2025-12-12 12:32:20,647 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 吴氏远久麻辣鱼卷192g -> 192*None +2025-12-12 12:32:20,647 - app.core.excel.converter - WARNING - 无法解析规格: 192*None,使用默认值1*1 +2025-12-12 12:32:20,651 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 2.77, 单位: 袋 +2025-12-12 12:32:20,651 - app.core.excel.converter - INFO - 提取规格: 盼盼薯片100g@ -> 100*None +2025-12-12 12:32:20,651 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 盼盼薯片100g@ -> 100*None +2025-12-12 12:32:20,651 - app.core.excel.converter - WARNING - 无法解析规格: 100*None,使用默认值1*1 +2025-12-12 12:32:20,651 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 2.63, 单位: 袋 +2025-12-12 12:32:20,651 - app.core.excel.converter - INFO - 提取规格: 盼盼金虾条分享装烤肉味75g@ -> 75*None +2025-12-12 12:32:20,651 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 盼盼金虾条分享装烤肉味75g@ -> 75*None +2025-12-12 12:32:20,655 - app.core.excel.converter - WARNING - 无法解析规格: 75*None,使用默认值1*1 +2025-12-12 12:32:20,655 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 2.39, 单位: 袋 +2025-12-12 12:32:20,655 - app.core.excel.converter - INFO - 提取规格: 30g东莱泡椒鸡蛋 -> 30*None +2025-12-12 12:32:20,655 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 30g东莱泡椒鸡蛋 -> 30*None +2025-12-12 12:32:20,655 - app.core.excel.converter - WARNING - 无法解析规格: 30*None,使用默认值1*1 +2025-12-12 12:32:20,655 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 10.0, 单价: 1.08, 单位: 袋 +2025-12-12 12:32:20,655 - app.core.excel.converter - INFO - 提取规格: 30g东莱卤鸡蛋 -> 30*None +2025-12-12 12:32:20,655 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 30g东莱卤鸡蛋 -> 30*None +2025-12-12 12:32:20,655 - app.core.excel.converter - WARNING - 无法解析规格: 30*None,使用默认值1*1 +2025-12-12 12:32:20,655 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 10.0, 单价: 1.08, 单位: 袋 +2025-12-12 12:32:20,659 - app.core.excel.converter - INFO - 提取规格: 达利园可比克听装薯片番茄味45g@ -> 45*None +2025-12-12 12:32:20,659 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 达利园可比克听装薯片番茄味45g@ -> 45*None +2025-12-12 12:32:20,660 - app.core.excel.converter - WARNING - 无法解析规格: 45*None,使用默认值1*1 +2025-12-12 12:32:20,660 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 2.72, 单位: 听 +2025-12-12 12:32:20,661 - app.core.excel.converter - INFO - 提取规格: 乐事无限嗞嗞烤肉味90g@ -> 90*None +2025-12-12 12:32:20,661 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 乐事无限嗞嗞烤肉味90g@ -> 90*None +2025-12-12 12:32:20,662 - app.core.excel.converter - WARNING - 无法解析规格: 90*None,使用默认值1*1 +2025-12-12 12:32:20,662 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 3.0, 单价: 6.21, 单位: 听 +2025-12-12 12:32:20,663 - app.core.excel.converter - INFO - 提取规格: 贤哥每日杂粮36g@ -> 36*None +2025-12-12 12:32:20,663 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 贤哥每日杂粮36g@ -> 36*None +2025-12-12 12:32:20,664 - app.core.excel.converter - WARNING - 无法解析规格: 36*None,使用默认值1*1 +2025-12-12 12:32:20,665 - app.core.excel.converter - INFO - 提取规格: 狗牙儿披萨卷香辣味188g@ -> 188*None +2025-12-12 12:32:20,665 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 狗牙儿披萨卷香辣味188g@ -> 188*None +2025-12-12 12:32:20,665 - app.core.excel.converter - WARNING - 无法解析规格: 188*None,使用默认值1*1 +2025-12-12 12:32:20,665 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.2, 单位: 袋 +2025-12-12 12:32:20,665 - app.core.excel.converter - INFO - 提取规格: 滇二娃土豆片麻辣味40g -> 40*None +2025-12-12 12:32:20,665 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 滇二娃土豆片麻辣味40g -> 40*None +2025-12-12 12:32:20,668 - app.core.excel.converter - WARNING - 无法解析规格: 40*None,使用默认值1*1 +2025-12-12 12:32:20,668 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 6.0, 单价: 1.72, 单位: 袋 +2025-12-12 12:32:20,668 - app.core.excel.converter - INFO - 提取规格: 脆升升薯片蜂蜜黄油味60g@ -> 60*None +2025-12-12 12:32:20,668 - app.core.excel.converter - INFO - 从名称推断规格(通用模式): 脆升升薯片蜂蜜黄油味60g@ -> 60*None +2025-12-12 12:32:20,668 - app.core.excel.converter - WARNING - 无法解析规格: 60*None,使用默认值1*1 +2025-12-12 12:32:20,668 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 5.0, 单价: 4.59, 单位: 袋 +2025-12-12 12:32:20,668 - app.core.excel.converter - INFO - 从名称推断规格(简单容量): 娃哈哈纯净水1.5L@ -> 1.5L*1 +2025-12-12 12:32:20,668 - app.core.excel.converter - INFO - 解析容量(L)规格: 1.5L*1 -> 1*1 +2025-12-12 12:32:20,672 - app.core.excel.converter - INFO - 其他单位处理: 保持原样 数量: 48.0, 单价: 2.1, 单位: 份 diff --git a/logs/app.core.excel.handlers.unit_converter_handlers.log b/logs/app.core.excel.handlers.unit_converter_handlers.log index 9dbee14..0158fcb 100644 --- a/logs/app.core.excel.handlers.unit_converter_handlers.log +++ b/logs/app.core.excel.handlers.unit_converter_handlers.log @@ -4334,3 +4334,123 @@ 2025-11-15 18:00:06,375 - app.core.excel.handlers.unit_converter_handlers - INFO - 赠品单位处理: 保持原样 数量: 0.0, 单价: 0, 单位: 2025-11-15 18:01:52,034 - app.core.excel.handlers.unit_converter_handlers - INFO - 赠品单位处理: 保持原样 数量: 0.0, 单价: 0, 单位: 2025-11-15 18:01:52,123 - app.core.excel.handlers.unit_converter_handlers - INFO - 赠品单位处理: 保持原样 数量: 0.0, 单价: 0, 单位: +2025-11-16 14:25:56,036 - app.core.excel.handlers.unit_converter_handlers - INFO - 赠品瓶单位处理: 保持原样 数量: 4.0, 单价: 0, 单位: 瓶 +2025-11-16 14:25:56,109 - app.core.excel.handlers.unit_converter_handlers - INFO - 赠品箱单位处理: 数量: 1.0 -> 24.0, 单价: 0, 单位: 箱 -> 瓶 +2025-11-16 14:25:56,246 - app.core.excel.handlers.unit_converter_handlers - INFO - 箱单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 箱 -> 瓶 +2025-11-16 14:25:56,309 - app.core.excel.handlers.unit_converter_handlers - INFO - 箱单位处理: 数量: 2.0 -> 30.0, 单价: 56.0 -> 3.7333333333333334, 单位: 箱 -> 瓶 +2025-11-16 14:25:56,380 - app.core.excel.handlers.unit_converter_handlers - INFO - 箱单位处理: 数量: 2.0 -> 30.0, 单价: 55.0 -> 3.6666666666666665, 单位: 箱 -> 瓶 +2025-11-16 14:25:56,447 - app.core.excel.handlers.unit_converter_handlers - INFO - 箱单位处理: 数量: 2.0 -> 30.0, 单价: 55.0 -> 3.6666666666666665, 单位: 箱 -> 瓶 +2025-11-16 14:25:56,509 - app.core.excel.handlers.unit_converter_handlers - INFO - 箱单位处理: 数量: 5.0 -> 60.0, 单价: 62.0 -> 5.166666666666667, 单位: 箱 -> 瓶 +2025-11-16 14:59:35,462 - app.core.excel.handlers.unit_converter_handlers - INFO - 赠品瓶单位处理: 保持原样 数量: 4.0, 单价: 0, 单位: 瓶 +2025-11-16 14:59:35,465 - app.core.excel.handlers.unit_converter_handlers - INFO - 赠品箱单位处理: 数量: 1.0 -> 24.0, 单价: 0, 单位: 箱 -> 瓶 +2025-11-16 14:59:35,470 - app.core.excel.handlers.unit_converter_handlers - INFO - 箱单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 箱 -> 瓶 +2025-11-16 14:59:35,473 - app.core.excel.handlers.unit_converter_handlers - INFO - 箱单位处理: 数量: 2.0 -> 30.0, 单价: 56.0 -> 3.7333333333333334, 单位: 箱 -> 瓶 +2025-11-16 14:59:35,476 - app.core.excel.handlers.unit_converter_handlers - INFO - 箱单位处理: 数量: 2.0 -> 30.0, 单价: 55.0 -> 3.6666666666666665, 单位: 箱 -> 瓶 +2025-11-16 14:59:35,478 - app.core.excel.handlers.unit_converter_handlers - INFO - 箱单位处理: 数量: 2.0 -> 30.0, 单价: 55.0 -> 3.6666666666666665, 单位: 箱 -> 瓶 +2025-11-16 14:59:35,481 - app.core.excel.handlers.unit_converter_handlers - INFO - 箱单位处理: 数量: 5.0 -> 60.0, 单价: 62.0 -> 5.166666666666667, 单位: 箱 -> 瓶 +2025-11-16 15:03:21,918 - app.core.excel.handlers.unit_converter_handlers - INFO - 赠品瓶单位处理: 保持原样 数量: 4.0, 单价: 0, 单位: 瓶 +2025-11-16 15:03:21,920 - app.core.excel.handlers.unit_converter_handlers - INFO - 赠品箱单位处理: 数量: 1.0 -> 24.0, 单价: 0, 单位: 箱 -> 瓶 +2025-11-16 15:03:21,926 - app.core.excel.handlers.unit_converter_handlers - INFO - 箱单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 箱 -> 瓶 +2025-11-16 15:03:21,928 - app.core.excel.handlers.unit_converter_handlers - INFO - 箱单位处理: 数量: 2.0 -> 30.0, 单价: 56.0 -> 3.7333333333333334, 单位: 箱 -> 瓶 +2025-11-16 15:03:21,931 - app.core.excel.handlers.unit_converter_handlers - INFO - 箱单位处理: 数量: 2.0 -> 30.0, 单价: 55.0 -> 3.6666666666666665, 单位: 箱 -> 瓶 +2025-11-16 15:03:21,933 - app.core.excel.handlers.unit_converter_handlers - INFO - 箱单位处理: 数量: 2.0 -> 30.0, 单价: 55.0 -> 3.6666666666666665, 单位: 箱 -> 瓶 +2025-11-16 15:03:21,935 - app.core.excel.handlers.unit_converter_handlers - INFO - 箱单位处理: 数量: 5.0 -> 60.0, 单价: 62.0 -> 5.166666666666667, 单位: 箱 -> 瓶 +2025-11-16 15:08:33,570 - app.core.excel.handlers.unit_converter_handlers - INFO - 赠品瓶单位处理: 保持原样 数量: 4.0, 单价: 0, 单位: 瓶 +2025-11-16 15:08:33,573 - app.core.excel.handlers.unit_converter_handlers - INFO - 赠品箱单位处理: 数量: 1.0 -> 24.0, 单价: 0, 单位: 箱 -> 瓶 +2025-11-16 15:08:33,578 - app.core.excel.handlers.unit_converter_handlers - INFO - 箱单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 箱 -> 瓶 +2025-11-16 15:08:33,580 - app.core.excel.handlers.unit_converter_handlers - INFO - 箱单位处理: 数量: 2.0 -> 30.0, 单价: 56.0 -> 3.7333333333333334, 单位: 箱 -> 瓶 +2025-11-16 15:08:33,582 - app.core.excel.handlers.unit_converter_handlers - INFO - 箱单位处理: 数量: 2.0 -> 30.0, 单价: 55.0 -> 3.6666666666666665, 单位: 箱 -> 瓶 +2025-11-16 15:08:33,584 - app.core.excel.handlers.unit_converter_handlers - INFO - 箱单位处理: 数量: 2.0 -> 30.0, 单价: 55.0 -> 3.6666666666666665, 单位: 箱 -> 瓶 +2025-11-16 15:08:33,586 - app.core.excel.handlers.unit_converter_handlers - INFO - 箱单位处理: 数量: 5.0 -> 60.0, 单价: 62.0 -> 5.166666666666667, 单位: 箱 -> 瓶 +2025-11-16 15:11:11,687 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 12.0, 单价: 48.0 -> 4.0, 单位: 件 -> 瓶 +2025-11-16 15:11:11,748 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 0.5 -> 6.0, 单价: 48.0 -> 4.0, 单位: 件 -> 瓶 +2025-11-16 15:11:11,814 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 0.5 -> 6.0, 单价: 48.0 -> 4.0, 单位: 件 -> 瓶 +2025-11-16 15:13:49,867 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 45.0 -> 3.0, 单位: 件 -> 瓶 +2025-11-16 15:13:49,956 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 50.0 -> 3.3333333333333335, 单位: 件 -> 瓶 +2025-11-16 15:13:50,038 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 45.0 -> 3.0, 单位: 件 -> 瓶 +2025-11-16 15:13:50,130 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 45.0 -> 3.0, 单位: 件 -> 瓶 +2025-11-16 15:13:50,227 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 3.0 -> 45.0, 单价: 43.0 -> 2.8666666666666667, 单位: 件 -> 瓶 +2025-11-16 15:13:50,349 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 2.0 -> 48.0, 单价: 22.0 -> 0.9166666666666666, 单位: 件 -> 瓶 +2025-11-16 15:15:38,282 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 12.0, 单价: 62.0 -> 5.166666666666667, 单位: 件 -> 瓶 +2025-11-16 15:15:38,360 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-16 15:15:38,422 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 2.0 -> 30.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-16 15:15:38,515 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-16 15:15:38,585 - app.core.excel.handlers.unit_converter_handlers - INFO - 赠品件单位处理: 数量: 1.0 -> 15.0, 单价: 0, 单位: 件 -> 瓶 +2025-11-20 18:36:13,668 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 12.0, 单价: 62.0 -> 5.166666666666667, 单位: 件 -> 瓶 +2025-11-20 18:36:13,726 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-20 18:36:13,769 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 2.0 -> 30.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-20 18:36:13,824 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-20 18:36:13,870 - app.core.excel.handlers.unit_converter_handlers - INFO - 赠品件单位处理: 数量: 1.0 -> 15.0, 单价: 0, 单位: 件 -> 瓶 +2025-11-20 18:36:42,501 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 12.0, 单价: 62.0 -> 5.166666666666667, 单位: 件 -> 瓶 +2025-11-20 18:36:42,573 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-20 18:36:42,642 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 2.0 -> 30.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-20 18:36:42,729 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-20 18:36:42,814 - app.core.excel.handlers.unit_converter_handlers - INFO - 赠品件单位处理: 数量: 1.0 -> 15.0, 单价: 0, 单位: 件 -> 瓶 +2025-11-20 18:42:26,298 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 12.0, 单价: 62.0 -> 5.166666666666667, 单位: 件 -> 瓶 +2025-11-20 18:42:26,343 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-20 18:42:26,404 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 2.0 -> 30.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-20 18:42:26,448 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-20 18:42:26,501 - app.core.excel.handlers.unit_converter_handlers - INFO - 赠品件单位处理: 数量: 1.0 -> 15.0, 单价: 0, 单位: 件 -> 瓶 +2025-11-20 18:44:11,712 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 12.0, 单价: 62.0 -> 5.166666666666667, 单位: 件 -> 瓶 +2025-11-20 18:44:11,779 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-20 18:44:11,856 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 2.0 -> 30.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-20 18:44:11,926 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-20 18:44:12,009 - app.core.excel.handlers.unit_converter_handlers - INFO - 赠品件单位处理: 数量: 1.0 -> 15.0, 单价: 0, 单位: 件 -> 瓶 +2025-11-20 18:47:04,503 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 12.0, 单价: 62.0 -> 5.166666666666667, 单位: 件 -> 瓶 +2025-11-20 18:47:04,570 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-20 18:47:04,654 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 2.0 -> 30.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-20 18:47:04,740 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-20 18:47:04,807 - app.core.excel.handlers.unit_converter_handlers - INFO - 赠品件单位处理: 数量: 1.0 -> 15.0, 单价: 0, 单位: 件 -> 瓶 +2025-11-20 18:56:30,982 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 12.0, 单价: 62.0 -> 5.166666666666667, 单位: 件 -> 瓶 +2025-11-20 18:56:31,034 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-20 18:56:31,088 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 2.0 -> 30.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-20 18:56:31,150 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-11-20 18:56:31,215 - app.core.excel.handlers.unit_converter_handlers - INFO - 赠品件单位处理: 数量: 1.0 -> 15.0, 单价: 0, 单位: 件 -> 瓶 +2025-12-01 22:21:10,949 - app.core.excel.handlers.unit_converter_handlers - INFO - 赠品单位处理: 保持原样 数量: 0.0, 单价: 0, 单位: +2025-12-12 11:00:14,147 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 8.0 -> 8.0, 单价: 44.32 -> 44.32, 单位: 件 -> 瓶 +2025-12-12 11:13:15,326 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 8.0 -> 8.0, 单价: 44.32 -> 44.32, 单位: 件 -> 瓶 +2025-12-12 11:22:26,028 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 8.0 -> 8.0, 单价: 44.32 -> 44.32, 单位: 件 -> 瓶 +2025-12-12 11:32:26,726 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 8.0 -> 8.0, 单价: 44.32 -> 44.32, 单位: 件 -> 瓶 +2025-12-12 11:34:40,277 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 8.0 -> 8.0, 单价: 44.32 -> 44.32, 单位: 件 -> 瓶 +2025-12-12 11:34:40,278 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 40.0 -> 40.0, 单价: 21.52 -> 21.52, 单位: 件 -> 瓶 +2025-12-12 11:34:40,281 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 8.0 -> 8.0, 单价: 26.08 -> 26.08, 单位: 件 -> 瓶 +2025-12-12 11:34:40,283 - app.core.excel.handlers.unit_converter_handlers - INFO - 件单位处理: 数量: 60.0 -> 60.0, 单价: 24.6 -> 24.6, 单位: 件 -> 瓶 +2025-12-12 11:34:40,285 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 5.0, 单价: 6.5, 单位: 盒 +2025-12-12 11:34:40,294 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 8.0, 单价: 38.0, 单位: 盒 +2025-12-12 11:34:40,294 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 8.0, 单价: 28.0, 单位: 盒 +2025-12-12 11:34:40,298 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 4.0, 单价: 5.55, 单位: 盒 +2025-12-12 11:34:40,300 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 5.0, 单价: 5.55, 单位: 盒 +2025-12-12 11:34:40,352 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 20.0, 单价: 15.0, 单位: 盒 +2025-12-12 11:34:40,354 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 20.0, 单价: 26.6, 单位: 盒 +2025-12-12 11:34:40,355 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 20.0, 单价: 26.6, 单位: 盒 +2025-12-12 11:34:40,357 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 20.0, 单价: 15.0, 单位: 提 +2025-12-12 11:34:40,360 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 16.0, 单价: 23.2, 单位: 盒 +2025-12-12 11:34:40,365 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 20.0, 单价: 14.2, 单位: 盒 +2025-12-12 11:34:40,367 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 30.0, 单价: 22.5, 单位: 盒 +2025-12-12 11:38:53,307 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 5.0, 单价: 6.5, 单位: 盒 +2025-12-12 11:38:53,316 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 8.0, 单价: 38.0, 单位: 盒 +2025-12-12 11:38:53,317 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 8.0, 单价: 28.0, 单位: 盒 +2025-12-12 11:38:53,321 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 4.0, 单价: 5.55, 单位: 盒 +2025-12-12 11:38:53,324 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 5.0, 单价: 5.55, 单位: 盒 +2025-12-12 11:38:53,378 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 20.0, 单价: 15.0, 单位: 盒 +2025-12-12 11:38:53,381 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 20.0, 单价: 26.6, 单位: 盒 +2025-12-12 11:38:53,382 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 20.0, 单价: 26.6, 单位: 盒 +2025-12-12 11:38:53,386 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 20.0, 单价: 15.0, 单位: 提 +2025-12-12 11:38:53,387 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 16.0, 单价: 23.2, 单位: 盒 +2025-12-12 11:38:53,392 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 20.0, 单价: 14.2, 单位: 盒 +2025-12-12 11:38:53,394 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 30.0, 单价: 22.5, 单位: 盒 +2025-12-12 11:49:38,251 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 5.0, 单价: 5.66, 单位: 盒 +2025-12-12 11:49:38,259 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 8.0, 单价: 4.51, 单位: 盒 +2025-12-12 11:49:38,260 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 8.0, 单价: 3.32, 单位: 盒 +2025-12-12 11:49:38,260 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 4.0, 单价: 5.27, 单位: 盒 +2025-12-12 11:49:38,265 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 5.0, 单价: 5.27, 单位: 盒 +2025-12-12 11:49:38,314 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 20.0, 单价: 0.71, 单位: 盒 +2025-12-12 11:49:38,349 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 20.0, 单价: 1.26, 单位: 盒 +2025-12-12 11:49:38,349 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 20.0, 单价: 1.26, 单位: 盒 +2025-12-12 11:49:38,355 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 20.0, 单价: 0.71, 单位: 提 +2025-12-12 11:49:38,357 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 16.0, 单价: 1.38, 单位: 盒 +2025-12-12 11:49:38,361 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 20.0, 单价: 0.67, 单位: 盒 +2025-12-12 11:49:38,363 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 30.0, 单价: 0.71, 单位: 盒 +2025-12-12 12:30:07,771 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 10.0, 单价: 1.43, 单位: 提 +2025-12-12 12:30:07,779 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 6.0, 单价: 2.09, 单位: 提 +2025-12-12 12:32:20,664 - app.core.excel.handlers.unit_converter_handlers - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 30.0, 单价: 0.66, 单位: 盒 diff --git a/logs/app.core.excel.merger.log b/logs/app.core.excel.merger.log index 2eb457c..3f73b0c 100644 --- a/logs/app.core.excel.merger.log +++ b/logs/app.core.excel.merger.log @@ -161,3 +161,97 @@ 2025-11-15 18:00:07,582 - app.core.excel.merger - INFO - 找到 3 个采购单Excel文件 2025-11-15 18:01:51,698 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output 2025-11-15 18:01:51,710 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 10:48:45,534 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 10:48:45,552 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 10:56:22,516 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 10:56:22,516 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 11:23:59,373 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 11:23:59,373 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 11:26:06,795 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 11:26:06,795 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 12:51:06,910 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 12:51:06,910 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 13:03:10,562 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 13:03:10,563 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 13:03:10,583 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 13:03:10,584 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 13:18:18,247 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 13:18:18,248 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 13:18:18,270 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 13:18:18,271 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 13:51:09,017 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 13:51:09,018 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 14:25:50,027 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 14:25:50,031 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 14:25:55,596 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 14:25:55,612 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 14:25:56,992 - app.core.excel.merger - INFO - 搜索目录 data/result 中的采购单Excel文件 +2025-11-16 14:25:57,001 - app.core.excel.merger - INFO - 找到 1 个采购单Excel文件 +2025-11-16 14:39:42,980 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 14:39:42,980 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 14:39:42,995 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 14:39:42,996 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 14:59:35,437 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 14:59:35,437 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 15:03:21,893 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 15:03:21,893 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 15:08:33,545 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 15:08:33,546 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 15:11:11,240 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 15:11:11,254 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 15:11:12,200 - app.core.excel.merger - INFO - 搜索目录 data/result 中的采购单Excel文件 +2025-11-16 15:11:12,212 - app.core.excel.merger - INFO - 找到 2 个采购单Excel文件 +2025-11-16 15:13:47,399 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 15:13:47,401 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 15:13:50,815 - app.core.excel.merger - INFO - 搜索目录 data/result 中的采购单Excel文件 +2025-11-16 15:13:50,816 - app.core.excel.merger - INFO - 找到 3 个采购单Excel文件 +2025-11-16 15:15:36,200 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 15:15:36,203 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-16 15:15:39,032 - app.core.excel.merger - INFO - 搜索目录 data/result 中的采购单Excel文件 +2025-11-16 15:15:39,033 - app.core.excel.merger - INFO - 找到 1 个采购单Excel文件 +2025-11-20 18:36:13,285 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-20 18:36:13,295 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-20 18:36:14,159 - app.core.excel.merger - INFO - 搜索目录 data/result 中的采购单Excel文件 +2025-11-20 18:36:14,170 - app.core.excel.merger - INFO - 找到 1 个采购单Excel文件 +2025-11-20 18:36:42,097 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-20 18:36:42,104 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-20 18:36:43,288 - app.core.excel.merger - INFO - 搜索目录 data/result 中的采购单Excel文件 +2025-11-20 18:36:43,297 - app.core.excel.merger - INFO - 找到 1 个采购单Excel文件 +2025-11-20 18:42:25,918 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-20 18:42:25,932 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-20 18:42:26,808 - app.core.excel.merger - INFO - 搜索目录 data/result 中的采购单Excel文件 +2025-11-20 18:42:26,819 - app.core.excel.merger - INFO - 找到 1 个采购单Excel文件 +2025-11-20 18:44:11,119 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-20 18:44:11,128 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-20 18:46:17,345 - app.core.excel.merger - INFO - 搜索目录 data/result 中的采购单Excel文件 +2025-11-20 18:46:17,346 - app.core.excel.merger - INFO - 找到 1 个采购单Excel文件 +2025-11-20 18:47:03,916 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-20 18:47:03,919 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-20 18:50:11,046 - app.core.excel.merger - INFO - 搜索目录 data/result 中的采购单Excel文件 +2025-11-20 18:50:11,047 - app.core.excel.merger - INFO - 找到 1 个采购单Excel文件 +2025-11-20 18:56:30,337 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-20 18:56:30,348 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-11-20 18:56:34,058 - app.core.excel.merger - INFO - 搜索目录 data/result 中的采购单Excel文件 +2025-11-20 18:56:34,061 - app.core.excel.merger - INFO - 找到 1 个采购单Excel文件 +2025-12-01 22:21:09,101 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-01 22:21:09,105 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-12-01 22:21:20,388 - app.core.excel.merger - INFO - 搜索目录 data/result 中的采购单Excel文件 +2025-12-01 22:21:20,390 - app.core.excel.merger - INFO - 找到 1 个采购单Excel文件 +2025-12-12 11:00:14,089 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-12 11:00:14,095 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-12-12 11:13:15,287 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-12 11:13:15,288 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-12-12 11:22:25,990 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-12 11:22:25,990 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-12-12 11:32:26,694 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-12 11:32:26,694 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-12-12 11:34:40,238 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-12 11:34:40,238 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-12-12 11:38:53,256 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-12 11:38:53,260 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-12-12 11:49:38,203 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-12 11:49:38,203 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-12-12 12:30:07,698 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-12 12:30:07,700 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls +2025-12-12 12:32:20,579 - app.core.excel.merger - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-12 12:32:20,579 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger完成,模板文件: E:\2025Code\python\orc-order-v2\templates\银豹-采购单模板.xls diff --git a/logs/app.core.excel.processor.log b/logs/app.core.excel.processor.log index f044483..4e5dcdb 100644 --- a/logs/app.core.excel.processor.log +++ b/logs/app.core.excel.processor.log @@ -28421,3 +28421,2729 @@ 2025-11-15 18:01:53,179 - app.core.excel.processor - INFO - 条码 6921168509256 填充:仅有赠品,采购量=0,赠品数量=0.0 2025-11-15 18:01:53,189 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251114131924_600_278.xls 2025-11-15 18:01:53,215 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251114131924_600_278.xls +2025-11-16 10:48:45,488 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 10:48:45,496 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 10:48:45,522 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-16 10:48:45,587 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-11-16 10:48:45,608 - app.core.excel.processor - WARNING - 未在 data/output 目录下找到未处理的Excel文件 +2025-11-16 10:48:45,637 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-11-16 10:48:45,669 - app.core.excel.processor - WARNING - 未在 data/output 目录下找到未处理的Excel文件 +2025-11-16 10:48:45,687 - app.core.excel.processor - WARNING - 未找到可处理的Excel文件 +2025-11-16 10:56:22,512 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 10:56:22,512 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 10:56:22,516 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-16 10:56:22,516 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-11-16 10:56:22,516 - app.core.excel.processor - WARNING - 未在 data/output 目录下找到未处理的Excel文件 +2025-11-16 11:23:59,369 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 11:23:59,369 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 11:23:59,373 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-16 11:26:06,793 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 11:26:06,794 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 11:26:06,795 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-16 12:51:06,908 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 12:51:06,909 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 12:51:06,909 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-16 13:03:10,560 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 13:03:10,560 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 13:03:10,562 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-16 13:03:10,581 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 13:03:10,582 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 13:03:10,583 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-16 13:18:18,246 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 13:18:18,246 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 13:18:18,247 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-16 13:18:18,269 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 13:18:18,269 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 13:18:18,270 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-16 13:51:09,015 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 13:51:09,016 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 13:51:09,017 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-16 14:25:50,013 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 14:25:50,018 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 14:25:50,025 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-16 14:25:50,067 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-11-16 14:25:50,078 - app.core.excel.processor - INFO - 找到最新的Excel文件: data/output\~$微信图片_20251115212128_148_108.xlsx +2025-11-16 14:25:50,108 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-11-16 14:25:50,127 - app.core.excel.processor - INFO - 找到最新的Excel文件: data/output\~$微信图片_20251115212128_148_108.xlsx +2025-11-16 14:25:50,144 - app.core.excel.processor - INFO - 开始处理Excel文件: data/output\~$微信图片_20251115212128_148_108.xlsx +2025-11-16 14:25:50,177 - app.core.excel.processor - ERROR - 处理Excel文件时出错: data/output\~$微信图片_20251115212128_148_108.xlsx, 错误: [Errno 13] Permission denied: 'data/output\\~$微信图片_20251115212128_148_108.xlsx' +2025-11-16 14:25:55,549 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 14:25:55,559 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 14:25:55,578 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-16 14:25:55,659 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-11-16 14:25:55,667 - app.core.excel.processor - INFO - 找到最新的Excel文件: data/output\微信图片_20251115212128_148_108.xlsx +2025-11-16 14:25:55,700 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-11-16 14:25:55,718 - app.core.excel.processor - INFO - 找到最新的Excel文件: data/output\微信图片_20251115212128_148_108.xlsx +2025-11-16 14:25:55,738 - app.core.excel.processor - INFO - 开始处理Excel文件: data/output\微信图片_20251115212128_148_108.xlsx +2025-11-16 14:25:55,775 - app.core.excel.processor - INFO - 成功读取Excel文件: data/output\微信图片_20251115212128_148_108.xlsx, 共 10 行 +2025-11-16 14:25:55,788 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 40 +2025-11-16 14:25:55,805 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-11-16 14:25:55,842 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 9 行有效数据 +2025-11-16 14:25:55,860 - app.core.excel.processor - INFO - 找到精确匹配的条码列: 条形码 +2025-11-16 14:25:55,860 - app.core.excel.processor - INFO - 使用条码列: 条形码 +2025-11-16 14:25:55,877 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-11-16 14:25:55,893 - app.core.excel.processor - INFO - 找到quantity列: 订单数量 +2025-11-16 14:25:55,911 - app.core.excel.processor - INFO - 找到price列: 销售价 +2025-11-16 14:25:55,925 - app.core.excel.processor - INFO - 找到amount列(部分匹配): 订单金额 +2025-11-16 14:25:55,940 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '条形码', 'name': '商品名称', 'quantity': '订单数量', 'price': '销售价', 'amount': '订单金额'} +2025-11-16 14:25:55,989 - app.core.excel.processor - INFO - 从商品名称推断规格: 550水24白膜 -> 1*24, 包装数量=24 +2025-11-16 14:25:56,081 - app.core.excel.processor - INFO - 从商品名称推断规格: 550水24白膜 -> 1*24, 包装数量=24 +2025-11-16 14:25:56,140 - app.core.excel.processor - INFO - 从商品名称推断规格: 12.9L桶装水 -> 12.9L*1, 包装数量=1 +2025-11-16 14:25:56,212 - app.core.excel.processor - INFO - 从商品名称推断规格: 550尖叫多肽15纸箱 -> 1*15, 包装数量=15 +2025-11-16 14:25:56,277 - app.core.excel.processor - INFO - 从商品名称推断规格: 445水溶C血橙15入纸箱 -> 1*15, 包装数量=15 +2025-11-16 14:25:56,337 - app.core.excel.processor - INFO - 从商品名称推断规格: 500-东方树叶-陈皮白茶1*15-纸 +箱装-普通装 -> 1*15, 包装数量=15 +2025-11-16 14:25:56,415 - app.core.excel.processor - INFO - 从商品名称推断规格: 500树叶茉莉花茶15纸箱 -> 1*15, 包装数量=15 +2025-11-16 14:25:56,479 - app.core.excel.processor - INFO - 从商品名称推断规格: 900树叶茉莉花茶12入纸箱 -> 1*12, 包装数量=12 +2025-11-16 14:25:56,518 - app.core.excel.processor - INFO - 提取到 8 个商品信息 +2025-11-16 14:25:56,534 - app.core.excel.processor - INFO - 开始处理8 个产品信息 +2025-11-16 14:25:56,541 - app.core.excel.processor - INFO - 处理商品: 条码=6921168509256, 数量=4.0, 单价=0, 是否赠品=True +2025-11-16 14:25:56,551 - app.core.excel.processor - INFO - 发现赠品:条码6921168509256, 数量=4.0 +2025-11-16 14:25:56,560 - app.core.excel.processor - INFO - 处理商品: 条码=6921168509256, 数量=24.0, 单价=0, 是否赠品=True +2025-11-16 14:25:56,572 - app.core.excel.processor - INFO - 发现赠品:条码6921168509256, 数量=24.0 +2025-11-16 14:25:56,581 - app.core.excel.processor - INFO - 处理商品: 条码=6921168594054, 数量=5.0, 单价=15.0, 是否赠品=False +2025-11-16 14:25:56,589 - app.core.excel.processor - INFO - 发现正常商品:条码6921168594054, 数量=5.0, 单价=15.0 +2025-11-16 14:25:56,608 - app.core.excel.processor - INFO - 处理商品: 条码=6921168504015, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-16 14:25:56,616 - app.core.excel.processor - INFO - 发现正常商品:条码6921168504015, 数量=15.0, 单价=3.6666666666666665 +2025-11-16 14:25:56,631 - app.core.excel.processor - INFO - 处理商品: 条码=6921168560189, 数量=30.0, 单价=3.7333333333333334, 是否赠品=False +2025-11-16 14:25:56,647 - app.core.excel.processor - INFO - 发现正常商品:条码6921168560189, 数量=30.0, 单价=3.7333333333333334 +2025-11-16 14:25:56,664 - app.core.excel.processor - INFO - 处理商品: 条码=6921168562909, 数量=30.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-16 14:25:56,680 - app.core.excel.processor - INFO - 发现正常商品:条码6921168562909, 数量=30.0, 单价=3.6666666666666665 +2025-11-16 14:25:56,688 - app.core.excel.processor - INFO - 处理商品: 条码=6921168558049, 数量=30.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-16 14:25:56,696 - app.core.excel.processor - INFO - 发现正常商品:条码6921168558049, 数量=30.0, 单价=3.6666666666666665 +2025-11-16 14:25:56,711 - app.core.excel.processor - INFO - 处理商品: 条码=6921168598427, 数量=60.0, 单价=5.166666666666667, 是否赠品=False +2025-11-16 14:25:56,728 - app.core.excel.processor - INFO - 发现正常商品:条码6921168598427, 数量=60.0, 单价=5.166666666666667 +2025-11-16 14:25:56,743 - app.core.excel.processor - INFO - 分组后共7 个不同条码的商品 +2025-11-16 14:25:56,751 - app.core.excel.processor - INFO - 条码 6921168509256 处理结果:只有赠品,数量=28.0 +2025-11-16 14:25:56,768 - app.core.excel.processor - INFO - 条码 6921168594054 处理结果:正常商品数量5.0,单价15.0,赠品数量0 +2025-11-16 14:25:56,784 - app.core.excel.processor - INFO - 条码 6921168504015 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-11-16 14:25:56,801 - app.core.excel.processor - INFO - 条码 6921168560189 处理结果:正常商品数量30.0,单价3.7333333333333334,赠品数量0 +2025-11-16 14:25:56,817 - app.core.excel.processor - INFO - 条码 6921168562909 处理结果:正常商品数量30.0,单价3.6666666666666665,赠品数量0 +2025-11-16 14:25:56,834 - app.core.excel.processor - INFO - 条码 6921168558049 处理结果:正常商品数量30.0,单价3.6666666666666665,赠品数量0 +2025-11-16 14:25:56,850 - app.core.excel.processor - INFO - 条码 6921168598427 处理结果:正常商品数量60.0,单价5.166666666666667,赠品数量0 +2025-11-16 14:25:56,867 - app.core.excel.processor - INFO - 条码 6921168509256 填充:仅有赠品,采购量=0,赠品数量=28.0 +2025-11-16 14:25:56,917 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251115212128_148_108.xls +2025-11-16 14:25:56,918 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251115212128_148_108.xls +2025-11-16 14:39:42,978 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 14:39:42,980 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 14:39:42,980 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-16 14:39:42,994 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 14:39:42,994 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 14:39:42,995 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-16 14:59:35,434 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 14:59:35,435 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 14:59:35,436 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-16 14:59:35,438 - app.core.excel.processor - INFO - 开始处理Excel文件: E:/2025Code/python/orc-order-v2/data/output/微信图片_20251115212128_148_108.xlsx +2025-11-16 14:59:35,445 - app.core.excel.processor - INFO - 成功读取Excel文件: E:/2025Code/python/orc-order-v2/data/output/微信图片_20251115212128_148_108.xlsx, 共 10 行 +2025-11-16 14:59:35,447 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 40 +2025-11-16 14:59:35,447 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-11-16 14:59:35,454 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 9 行有效数据 +2025-11-16 14:59:35,454 - app.core.excel.processor - INFO - 找到精确匹配的条码列: 条形码 +2025-11-16 14:59:35,455 - app.core.excel.processor - INFO - 使用条码列: 条形码 +2025-11-16 14:59:35,455 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-11-16 14:59:35,456 - app.core.excel.processor - INFO - 找到quantity列: 订单数量 +2025-11-16 14:59:35,456 - app.core.excel.processor - INFO - 找到price列: 销售价 +2025-11-16 14:59:35,456 - app.core.excel.processor - INFO - 找到amount列(部分匹配): 订单金额 +2025-11-16 14:59:35,457 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '条形码', 'name': '商品名称', 'quantity': '订单数量', 'price': '销售价', 'amount': '订单金额'} +2025-11-16 14:59:35,460 - app.core.excel.processor - INFO - 从商品名称推断规格: 550水24白膜 -> 1*24, 包装数量=24 +2025-11-16 14:59:35,464 - app.core.excel.processor - INFO - 从商品名称推断规格: 550水24白膜 -> 1*24, 包装数量=24 +2025-11-16 14:59:35,467 - app.core.excel.processor - INFO - 从商品名称推断规格: 12.9L桶装水 -> 12.9L*1, 包装数量=1 +2025-11-16 14:59:35,469 - app.core.excel.processor - INFO - 从商品名称推断规格: 550尖叫多肽15纸箱 -> 1*15, 包装数量=15 +2025-11-16 14:59:35,471 - app.core.excel.processor - INFO - 从商品名称推断规格: 445水溶C血橙15入纸箱 -> 1*15, 包装数量=15 +2025-11-16 14:59:35,475 - app.core.excel.processor - INFO - 从商品名称推断规格: 500-东方树叶-陈皮白茶1*15-纸 +箱装-普通装 -> 1*15, 包装数量=15 +2025-11-16 14:59:35,477 - app.core.excel.processor - INFO - 从商品名称推断规格: 500树叶茉莉花茶15纸箱 -> 1*15, 包装数量=15 +2025-11-16 14:59:35,480 - app.core.excel.processor - INFO - 从商品名称推断规格: 900树叶茉莉花茶12入纸箱 -> 1*12, 包装数量=12 +2025-11-16 14:59:35,482 - app.core.excel.processor - INFO - 提取到 8 个商品信息 +2025-11-16 14:59:35,487 - app.core.excel.processor - INFO - 开始处理8 个产品信息 +2025-11-16 14:59:35,487 - app.core.excel.processor - INFO - 处理商品: 条码=6921168509256, 数量=4.0, 单价=0, 是否赠品=True +2025-11-16 14:59:35,488 - app.core.excel.processor - INFO - 发现赠品:条码6921168509256, 数量=4.0 +2025-11-16 14:59:35,488 - app.core.excel.processor - INFO - 处理商品: 条码=6921168509256, 数量=24.0, 单价=0, 是否赠品=True +2025-11-16 14:59:35,489 - app.core.excel.processor - INFO - 发现赠品:条码6921168509256, 数量=24.0 +2025-11-16 14:59:35,489 - app.core.excel.processor - INFO - 处理商品: 条码=6921168594054, 数量=5.0, 单价=15.0, 是否赠品=False +2025-11-16 14:59:35,490 - app.core.excel.processor - INFO - 发现正常商品:条码6921168594054, 数量=5.0, 单价=15.0 +2025-11-16 14:59:35,490 - app.core.excel.processor - INFO - 处理商品: 条码=6921168504015, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-16 14:59:35,490 - app.core.excel.processor - INFO - 发现正常商品:条码6921168504015, 数量=15.0, 单价=3.6666666666666665 +2025-11-16 14:59:35,491 - app.core.excel.processor - INFO - 处理商品: 条码=6921168560189, 数量=30.0, 单价=3.7333333333333334, 是否赠品=False +2025-11-16 14:59:35,491 - app.core.excel.processor - INFO - 发现正常商品:条码6921168560189, 数量=30.0, 单价=3.7333333333333334 +2025-11-16 14:59:35,492 - app.core.excel.processor - INFO - 处理商品: 条码=6921168562909, 数量=30.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-16 14:59:35,492 - app.core.excel.processor - INFO - 发现正常商品:条码6921168562909, 数量=30.0, 单价=3.6666666666666665 +2025-11-16 14:59:35,492 - app.core.excel.processor - INFO - 处理商品: 条码=6921168558049, 数量=30.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-16 14:59:35,492 - app.core.excel.processor - INFO - 发现正常商品:条码6921168558049, 数量=30.0, 单价=3.6666666666666665 +2025-11-16 14:59:35,492 - app.core.excel.processor - INFO - 处理商品: 条码=6921168598427, 数量=60.0, 单价=5.166666666666667, 是否赠品=False +2025-11-16 14:59:35,493 - app.core.excel.processor - INFO - 发现正常商品:条码6921168598427, 数量=60.0, 单价=5.166666666666667 +2025-11-16 14:59:35,493 - app.core.excel.processor - INFO - 分组后共7 个不同条码的商品 +2025-11-16 14:59:35,493 - app.core.excel.processor - INFO - 条码 6921168509256 处理结果:只有赠品,数量=28.0 +2025-11-16 14:59:35,494 - app.core.excel.processor - INFO - 条码 6921168594054 处理结果:正常商品数量5.0,单价15.0,赠品数量0 +2025-11-16 14:59:35,494 - app.core.excel.processor - INFO - 条码 6921168504015 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-11-16 14:59:35,494 - app.core.excel.processor - INFO - 条码 6921168560189 处理结果:正常商品数量30.0,单价3.7333333333333334,赠品数量0 +2025-11-16 14:59:35,495 - app.core.excel.processor - INFO - 条码 6921168562909 处理结果:正常商品数量30.0,单价3.6666666666666665,赠品数量0 +2025-11-16 14:59:35,495 - app.core.excel.processor - INFO - 条码 6921168558049 处理结果:正常商品数量30.0,单价3.6666666666666665,赠品数量0 +2025-11-16 14:59:35,495 - app.core.excel.processor - INFO - 条码 6921168598427 处理结果:正常商品数量60.0,单价5.166666666666667,赠品数量0 +2025-11-16 14:59:35,496 - app.core.excel.processor - INFO - 条码 6921168509256 填充:仅有赠品,采购量=0,赠品数量=28.0 +2025-11-16 14:59:35,498 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251115212128_148_108.xls +2025-11-16 14:59:35,537 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251115212128_148_108.xls +2025-11-16 15:03:21,890 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 15:03:21,891 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 15:03:21,892 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-16 15:03:21,894 - app.core.excel.processor - INFO - 开始处理Excel文件: E:/2025Code/python/orc-order-v2/data/output/微信图片_20251115212128_148_108.xlsx +2025-11-16 15:03:21,901 - app.core.excel.processor - INFO - 成功读取Excel文件: E:/2025Code/python/orc-order-v2/data/output/微信图片_20251115212128_148_108.xlsx, 共 10 行 +2025-11-16 15:03:21,904 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 40 +2025-11-16 15:03:21,904 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-11-16 15:03:21,911 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 9 行有效数据 +2025-11-16 15:03:21,911 - app.core.excel.processor - INFO - 找到精确匹配的条码列: 条形码 +2025-11-16 15:03:21,911 - app.core.excel.processor - INFO - 使用条码列: 条形码 +2025-11-16 15:03:21,912 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-11-16 15:03:21,912 - app.core.excel.processor - INFO - 找到quantity列: 订单数量 +2025-11-16 15:03:21,913 - app.core.excel.processor - INFO - 找到price列: 销售价 +2025-11-16 15:03:21,913 - app.core.excel.processor - INFO - 找到amount列(部分匹配): 订单金额 +2025-11-16 15:03:21,913 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '条形码', 'name': '商品名称', 'quantity': '订单数量', 'price': '销售价', 'amount': '订单金额'} +2025-11-16 15:03:21,916 - app.core.excel.processor - INFO - 从商品名称推断规格: 550水24白膜 -> 1*24, 包装数量=24 +2025-11-16 15:03:21,920 - app.core.excel.processor - INFO - 从商品名称推断规格: 550水24白膜 -> 1*24, 包装数量=24 +2025-11-16 15:03:21,923 - app.core.excel.processor - INFO - 从商品名称推断规格: 12.9L桶装水 -> 12.9L*1, 包装数量=1 +2025-11-16 15:03:21,925 - app.core.excel.processor - INFO - 从商品名称推断规格: 550尖叫多肽15纸箱 -> 1*15, 包装数量=15 +2025-11-16 15:03:21,927 - app.core.excel.processor - INFO - 从商品名称推断规格: 445水溶C血橙15入纸箱 -> 1*15, 包装数量=15 +2025-11-16 15:03:21,930 - app.core.excel.processor - INFO - 从商品名称推断规格: 500-东方树叶-陈皮白茶1*15-纸 +箱装-普通装 -> 1*15, 包装数量=15 +2025-11-16 15:03:21,932 - app.core.excel.processor - INFO - 从商品名称推断规格: 500树叶茉莉花茶15纸箱 -> 1*15, 包装数量=15 +2025-11-16 15:03:21,934 - app.core.excel.processor - INFO - 从商品名称推断规格: 900树叶茉莉花茶12入纸箱 -> 1*12, 包装数量=12 +2025-11-16 15:03:21,935 - app.core.excel.processor - INFO - 提取到 8 个商品信息 +2025-11-16 15:03:21,940 - app.core.excel.processor - INFO - 开始处理8 个产品信息 +2025-11-16 15:03:21,940 - app.core.excel.processor - INFO - 处理商品: 条码=6921168509256, 数量=4.0, 单价=0, 是否赠品=True +2025-11-16 15:03:21,941 - app.core.excel.processor - INFO - 发现赠品:条码6921168509256, 数量=4.0 +2025-11-16 15:03:21,941 - app.core.excel.processor - INFO - 处理商品: 条码=6921168509256, 数量=24.0, 单价=0, 是否赠品=True +2025-11-16 15:03:21,942 - app.core.excel.processor - INFO - 发现赠品:条码6921168509256, 数量=24.0 +2025-11-16 15:03:21,942 - app.core.excel.processor - INFO - 处理商品: 条码=6921168594054, 数量=5.0, 单价=15.0, 是否赠品=False +2025-11-16 15:03:21,943 - app.core.excel.processor - INFO - 发现正常商品:条码6921168594054, 数量=5.0, 单价=15.0 +2025-11-16 15:03:21,943 - app.core.excel.processor - INFO - 处理商品: 条码=6921168504015, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-16 15:03:21,943 - app.core.excel.processor - INFO - 发现正常商品:条码6921168504015, 数量=15.0, 单价=3.6666666666666665 +2025-11-16 15:03:21,944 - app.core.excel.processor - INFO - 处理商品: 条码=6921168560189, 数量=30.0, 单价=3.7333333333333334, 是否赠品=False +2025-11-16 15:03:21,944 - app.core.excel.processor - INFO - 发现正常商品:条码6921168560189, 数量=30.0, 单价=3.7333333333333334 +2025-11-16 15:03:21,945 - app.core.excel.processor - INFO - 处理商品: 条码=6921168562909, 数量=30.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-16 15:03:21,945 - app.core.excel.processor - INFO - 发现正常商品:条码6921168562909, 数量=30.0, 单价=3.6666666666666665 +2025-11-16 15:03:21,945 - app.core.excel.processor - INFO - 处理商品: 条码=6921168558049, 数量=30.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-16 15:03:21,946 - app.core.excel.processor - INFO - 发现正常商品:条码6921168558049, 数量=30.0, 单价=3.6666666666666665 +2025-11-16 15:03:21,946 - app.core.excel.processor - INFO - 处理商品: 条码=6921168598427, 数量=60.0, 单价=5.166666666666667, 是否赠品=False +2025-11-16 15:03:21,946 - app.core.excel.processor - INFO - 发现正常商品:条码6921168598427, 数量=60.0, 单价=5.166666666666667 +2025-11-16 15:03:21,947 - app.core.excel.processor - INFO - 分组后共7 个不同条码的商品 +2025-11-16 15:03:21,947 - app.core.excel.processor - INFO - 条码 6921168509256 处理结果:只有赠品,数量=28.0 +2025-11-16 15:03:21,948 - app.core.excel.processor - INFO - 条码 6921168594054 处理结果:正常商品数量5.0,单价15.0,赠品数量0 +2025-11-16 15:03:21,948 - app.core.excel.processor - INFO - 条码 6921168504015 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-11-16 15:03:21,948 - app.core.excel.processor - INFO - 条码 6921168560189 处理结果:正常商品数量30.0,单价3.7333333333333334,赠品数量0 +2025-11-16 15:03:21,949 - app.core.excel.processor - INFO - 条码 6921168562909 处理结果:正常商品数量30.0,单价3.6666666666666665,赠品数量0 +2025-11-16 15:03:21,949 - app.core.excel.processor - INFO - 条码 6921168558049 处理结果:正常商品数量30.0,单价3.6666666666666665,赠品数量0 +2025-11-16 15:03:21,949 - app.core.excel.processor - INFO - 条码 6921168598427 处理结果:正常商品数量60.0,单价5.166666666666667,赠品数量0 +2025-11-16 15:03:21,950 - app.core.excel.processor - INFO - 条码 6921168509256 填充:仅有赠品,采购量=0,赠品数量=28.0 +2025-11-16 15:03:21,952 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251115212128_148_108.xls +2025-11-16 15:03:21,974 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251115212128_148_108.xls +2025-11-16 15:08:33,543 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 15:08:33,543 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 15:08:33,545 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-16 15:08:33,547 - app.core.excel.processor - INFO - 开始处理Excel文件: E:/2025Code/python/orc-order-v2/data/output/微信图片_20251115212128_148_108.xlsx +2025-11-16 15:08:33,554 - app.core.excel.processor - INFO - 成功读取Excel文件: E:/2025Code/python/orc-order-v2/data/output/微信图片_20251115212128_148_108.xlsx, 共 10 行 +2025-11-16 15:08:33,556 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 40 +2025-11-16 15:08:33,556 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-11-16 15:08:33,562 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 9 行有效数据 +2025-11-16 15:08:33,563 - app.core.excel.processor - INFO - 找到精确匹配的条码列: 条形码 +2025-11-16 15:08:33,563 - app.core.excel.processor - INFO - 使用条码列: 条形码 +2025-11-16 15:08:33,564 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-11-16 15:08:33,564 - app.core.excel.processor - INFO - 找到quantity列: 订单数量 +2025-11-16 15:08:33,564 - app.core.excel.processor - INFO - 找到price列: 销售价 +2025-11-16 15:08:33,565 - app.core.excel.processor - INFO - 找到amount列(部分匹配): 订单金额 +2025-11-16 15:08:33,565 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '条形码', 'name': '商品名称', 'quantity': '订单数量', 'price': '销售价', 'amount': '订单金额'} +2025-11-16 15:08:33,568 - app.core.excel.processor - INFO - 从商品名称推断规格: 550水24白膜 -> 1*24, 包装数量=24 +2025-11-16 15:08:33,571 - app.core.excel.processor - INFO - 从商品名称推断规格: 550水24白膜 -> 1*24, 包装数量=24 +2025-11-16 15:08:33,575 - app.core.excel.processor - INFO - 从商品名称推断规格: 12.9L桶装水 -> 12.9L*1, 包装数量=1 +2025-11-16 15:08:33,577 - app.core.excel.processor - INFO - 从商品名称推断规格: 550尖叫多肽15纸箱 -> 1*15, 包装数量=15 +2025-11-16 15:08:33,579 - app.core.excel.processor - INFO - 从商品名称推断规格: 445水溶C血橙15入纸箱 -> 1*15, 包装数量=15 +2025-11-16 15:08:33,581 - app.core.excel.processor - INFO - 从商品名称推断规格: 500-东方树叶-陈皮白茶1*15-纸 +箱装-普通装 -> 1*15, 包装数量=15 +2025-11-16 15:08:33,583 - app.core.excel.processor - INFO - 从商品名称推断规格: 500树叶茉莉花茶15纸箱 -> 1*15, 包装数量=15 +2025-11-16 15:08:33,585 - app.core.excel.processor - INFO - 从商品名称推断规格: 900树叶茉莉花茶12入纸箱 -> 1*12, 包装数量=12 +2025-11-16 15:08:33,587 - app.core.excel.processor - INFO - 提取到 8 个商品信息 +2025-11-16 15:08:33,591 - app.core.excel.processor - INFO - 开始处理8 个产品信息 +2025-11-16 15:08:33,592 - app.core.excel.processor - INFO - 处理商品: 条码=6921168509256, 数量=4.0, 单价=0, 是否赠品=True +2025-11-16 15:08:33,592 - app.core.excel.processor - INFO - 发现赠品:条码6921168509256, 数量=4.0 +2025-11-16 15:08:33,592 - app.core.excel.processor - INFO - 处理商品: 条码=6921168509256, 数量=24.0, 单价=0, 是否赠品=True +2025-11-16 15:08:33,593 - app.core.excel.processor - INFO - 发现赠品:条码6921168509256, 数量=24.0 +2025-11-16 15:08:33,593 - app.core.excel.processor - INFO - 处理商品: 条码=6921168594054, 数量=5.0, 单价=15.0, 是否赠品=False +2025-11-16 15:08:33,593 - app.core.excel.processor - INFO - 发现正常商品:条码6921168594054, 数量=5.0, 单价=15.0 +2025-11-16 15:08:33,593 - app.core.excel.processor - INFO - 处理商品: 条码=6921168504015, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-16 15:08:33,593 - app.core.excel.processor - INFO - 发现正常商品:条码6921168504015, 数量=15.0, 单价=3.6666666666666665 +2025-11-16 15:08:33,594 - app.core.excel.processor - INFO - 处理商品: 条码=6921168560189, 数量=30.0, 单价=3.7333333333333334, 是否赠品=False +2025-11-16 15:08:33,594 - app.core.excel.processor - INFO - 发现正常商品:条码6921168560189, 数量=30.0, 单价=3.7333333333333334 +2025-11-16 15:08:33,594 - app.core.excel.processor - INFO - 处理商品: 条码=6921168562909, 数量=30.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-16 15:08:33,595 - app.core.excel.processor - INFO - 发现正常商品:条码6921168562909, 数量=30.0, 单价=3.6666666666666665 +2025-11-16 15:08:33,595 - app.core.excel.processor - INFO - 处理商品: 条码=6921168558049, 数量=30.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-16 15:08:33,595 - app.core.excel.processor - INFO - 发现正常商品:条码6921168558049, 数量=30.0, 单价=3.6666666666666665 +2025-11-16 15:08:33,596 - app.core.excel.processor - INFO - 处理商品: 条码=6921168598427, 数量=60.0, 单价=5.166666666666667, 是否赠品=False +2025-11-16 15:08:33,596 - app.core.excel.processor - INFO - 发现正常商品:条码6921168598427, 数量=60.0, 单价=5.166666666666667 +2025-11-16 15:08:33,596 - app.core.excel.processor - INFO - 分组后共7 个不同条码的商品 +2025-11-16 15:08:33,597 - app.core.excel.processor - INFO - 条码 6921168509256 处理结果:只有赠品,数量=28.0 +2025-11-16 15:08:33,597 - app.core.excel.processor - INFO - 条码 6921168594054 处理结果:正常商品数量5.0,单价15.0,赠品数量0 +2025-11-16 15:08:33,597 - app.core.excel.processor - INFO - 条码 6921168504015 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-11-16 15:08:33,598 - app.core.excel.processor - INFO - 条码 6921168560189 处理结果:正常商品数量30.0,单价3.7333333333333334,赠品数量0 +2025-11-16 15:08:33,598 - app.core.excel.processor - INFO - 条码 6921168562909 处理结果:正常商品数量30.0,单价3.6666666666666665,赠品数量0 +2025-11-16 15:08:33,598 - app.core.excel.processor - INFO - 条码 6921168558049 处理结果:正常商品数量30.0,单价3.6666666666666665,赠品数量0 +2025-11-16 15:08:33,599 - app.core.excel.processor - INFO - 条码 6921168598427 处理结果:正常商品数量60.0,单价5.166666666666667,赠品数量0 +2025-11-16 15:08:33,599 - app.core.excel.processor - INFO - 条码 6921168509256 填充:仅有赠品,采购量=0,赠品数量=28.0 +2025-11-16 15:08:33,601 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251115212128_148_108.xls +2025-11-16 15:08:33,617 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251115212128_148_108.xls +2025-11-16 15:11:11,189 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 15:11:11,199 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 15:11:11,224 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-16 15:11:11,310 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-11-16 15:11:11,321 - app.core.excel.processor - INFO - 找到最新的Excel文件: data/output\微信图片_20251116151001_152_108.xlsx +2025-11-16 15:11:11,356 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-11-16 15:11:11,367 - app.core.excel.processor - INFO - 找到最新的Excel文件: data/output\微信图片_20251116151001_152_108.xlsx +2025-11-16 15:11:11,382 - app.core.excel.processor - INFO - 开始处理Excel文件: data/output\微信图片_20251116151001_152_108.xlsx +2025-11-16 15:11:11,426 - app.core.excel.processor - INFO - 成功读取Excel文件: data/output\微信图片_20251116151001_152_108.xlsx, 共 6 行 +2025-11-16 15:11:11,427 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 55 +2025-11-16 15:11:11,445 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-11-16 15:11:11,492 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 5 行有效数据 +2025-11-16 15:11:11,513 - app.core.excel.processor - INFO - 找到精确匹配的条码列: 条码 +2025-11-16 15:11:11,513 - app.core.excel.processor - INFO - 使用条码列: 条码 +2025-11-16 15:11:11,532 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-11-16 15:11:11,543 - app.core.excel.processor - INFO - 找到specification列: 规格 +2025-11-16 15:11:11,557 - app.core.excel.processor - INFO - 找到quantity列: 数量 +2025-11-16 15:11:11,570 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-11-16 15:11:11,584 - app.core.excel.processor - INFO - 找到price列: 单价 +2025-11-16 15:11:11,595 - app.core.excel.processor - INFO - 找到amount列: 金额 +2025-11-16 15:11:11,616 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '条码', 'name': '商品名称', 'specification': '规格', 'quantity': '数量', 'unit': '单位', 'price': '单价', 'amount': '金额'} +2025-11-16 15:11:11,625 - app.core.excel.processor - INFO - 解析规格: 1件=12桶 -> 包装数量=12 +2025-11-16 15:11:11,705 - app.core.excel.processor - INFO - 解析规格: 1件=12桶 -> 包装数量=12 +2025-11-16 15:11:11,761 - app.core.excel.processor - INFO - 解析规格: 1件=12桶 -> 包装数量=12 +2025-11-16 15:11:11,839 - app.core.excel.processor - INFO - 提取到 3 个商品信息 +2025-11-16 15:11:11,869 - app.core.excel.processor - INFO - 开始处理3 个产品信息 +2025-11-16 15:11:11,888 - app.core.excel.processor - INFO - 处理商品: 条码=6935270644323, 数量=12.0, 单价=4.0, 是否赠品=False +2025-11-16 15:11:11,913 - app.core.excel.processor - INFO - 发现正常商品:条码6935270644323, 数量=12.0, 单价=4.0 +2025-11-16 15:11:11,925 - app.core.excel.processor - INFO - 处理商品: 条码=6935270645160, 数量=6.0, 单价=4.0, 是否赠品=False +2025-11-16 15:11:11,950 - app.core.excel.processor - INFO - 发现正常商品:条码6935270645160, 数量=6.0, 单价=4.0 +2025-11-16 15:11:11,973 - app.core.excel.processor - INFO - 处理商品: 条码=6935270642091, 数量=6.0, 单价=4.0, 是否赠品=False +2025-11-16 15:11:11,994 - app.core.excel.processor - INFO - 发现正常商品:条码6935270642091, 数量=6.0, 单价=4.0 +2025-11-16 15:11:12,019 - app.core.excel.processor - INFO - 分组后共3 个不同条码的商品 +2025-11-16 15:11:12,043 - app.core.excel.processor - INFO - 条码 6935270644323 处理结果:正常商品数量12.0,单价4.0,赠品数量0 +2025-11-16 15:11:12,062 - app.core.excel.processor - INFO - 条码 6935270645160 处理结果:正常商品数量6.0,单价4.0,赠品数量0 +2025-11-16 15:11:12,073 - app.core.excel.processor - INFO - 条码 6935270642091 处理结果:正常商品数量6.0,单价4.0,赠品数量0 +2025-11-16 15:11:12,098 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251116151001_152_108.xls +2025-11-16 15:11:12,120 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251116151001_152_108.xls +2025-11-16 15:13:47,389 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 15:13:47,391 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 15:13:47,396 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-16 15:13:49,544 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-11-16 15:13:49,556 - app.core.excel.processor - INFO - 找到最新的Excel文件: data/output\微信图片_20251116151334_153_108.xlsx +2025-11-16 15:13:49,580 - app.core.excel.processor - INFO - 开始处理Excel文件: data/output\微信图片_20251116151334_153_108.xlsx +2025-11-16 15:13:49,600 - app.core.excel.processor - INFO - 成功读取Excel文件: data/output\微信图片_20251116151334_153_108.xlsx, 共 8 行 +2025-11-16 15:13:49,617 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 45 +2025-11-16 15:13:49,640 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-11-16 15:13:49,669 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 7 行有效数据 +2025-11-16 15:13:49,673 - app.core.excel.processor - INFO - 找到精确匹配的条码列: 条形码 +2025-11-16 15:13:49,682 - app.core.excel.processor - INFO - 使用条码列: 条形码 +2025-11-16 15:13:49,702 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-11-16 15:13:49,717 - app.core.excel.processor - INFO - 找到quantity列: 数量 +2025-11-16 15:13:49,736 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-11-16 15:13:49,753 - app.core.excel.processor - INFO - 找到price列: 销售价 +2025-11-16 15:13:49,771 - app.core.excel.processor - INFO - 找到amount列(部分匹配): 订单金额 +2025-11-16 15:13:49,789 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '条形码', 'name': '商品名称', 'quantity': '数量', 'unit': '单位', 'price': '销售价', 'amount': '订单金额'} +2025-11-16 15:13:49,825 - app.core.excel.processor - INFO - 从商品名称提取容量*数量格式: 瓶装爽歪歪400ml*15 -> 400L*15, 包装数量=15 +2025-11-16 15:13:49,893 - app.core.excel.processor - INFO - 从商品名称提取容量*数量格式: 娃哈哈瓶装大AD草莓味450ml*15 -> 450L*15, 包装数量=15 +2025-11-16 15:13:49,998 - app.core.excel.processor - INFO - 从商品名称提取重量/容量规格: 营养快线香草450g*15 -> 1*15, 包装数量=15 +2025-11-16 15:13:50,071 - app.core.excel.processor - INFO - 从商品名称提取重量/容量规格: 幸福牵线红枣450g*15 -> 1*15, 包装数量=15 +2025-11-16 15:13:50,169 - app.core.excel.processor - INFO - 从商品名称提取容量*数量格式: 娃哈哈大苏打水甜味500ml*15 -> 500L*15, 包装数量=15 +2025-11-16 15:13:50,277 - app.core.excel.processor - INFO - 从商品名称提取容量*数量格式: 娃哈哈纯净水(红标)596ml*24 -> 596L*24, 包装数量=24 +2025-11-16 15:13:50,373 - app.core.excel.processor - INFO - 提取到 6 个商品信息 +2025-11-16 15:13:50,403 - app.core.excel.processor - INFO - 开始处理6 个产品信息 +2025-11-16 15:13:50,424 - app.core.excel.processor - INFO - 处理商品: 条码=6902083814359, 数量=15.0, 单价=3.0, 是否赠品=False +2025-11-16 15:13:50,445 - app.core.excel.processor - INFO - 发现正常商品:条码6902083814359, 数量=15.0, 单价=3.0 +2025-11-16 15:13:50,471 - app.core.excel.processor - INFO - 处理商品: 条码=6902083814052, 数量=15.0, 单价=3.3333333333333335, 是否赠品=False +2025-11-16 15:13:50,483 - app.core.excel.processor - INFO - 发现正常商品:条码6902083814052, 数量=15.0, 单价=3.3333333333333335 +2025-11-16 15:13:50,505 - app.core.excel.processor - INFO - 处理商品: 条码=6902083898632, 数量=15.0, 单价=3.0, 是否赠品=False +2025-11-16 15:13:50,525 - app.core.excel.processor - INFO - 发现正常商品:条码6902083898632, 数量=15.0, 单价=3.0 +2025-11-16 15:13:50,546 - app.core.excel.processor - INFO - 处理商品: 条码=6902083905217, 数量=15.0, 单价=3.0, 是否赠品=False +2025-11-16 15:13:50,556 - app.core.excel.processor - INFO - 发现正常商品:条码6902083905217, 数量=15.0, 单价=3.0 +2025-11-16 15:13:50,567 - app.core.excel.processor - INFO - 处理商品: 条码=6902083911027, 数量=45.0, 单价=2.8666666666666667, 是否赠品=False +2025-11-16 15:13:50,577 - app.core.excel.processor - INFO - 发现正常商品:条码6902083911027, 数量=45.0, 单价=2.8666666666666667 +2025-11-16 15:13:50,586 - app.core.excel.processor - INFO - 处理商品: 条码=6902083881405, 数量=48.0, 单价=0.9166666666666666, 是否赠品=False +2025-11-16 15:13:50,594 - app.core.excel.processor - INFO - 发现正常商品:条码6902083881405, 数量=48.0, 单价=0.9166666666666666 +2025-11-16 15:13:50,602 - app.core.excel.processor - INFO - 分组后共6 个不同条码的商品 +2025-11-16 15:13:50,623 - app.core.excel.processor - INFO - 条码 6902083814359 处理结果:正常商品数量15.0,单价3.0,赠品数量0 +2025-11-16 15:13:50,643 - app.core.excel.processor - INFO - 条码 6902083814052 处理结果:正常商品数量15.0,单价3.3333333333333335,赠品数量0 +2025-11-16 15:13:50,663 - app.core.excel.processor - INFO - 条码 6902083898632 处理结果:正常商品数量15.0,单价3.0,赠品数量0 +2025-11-16 15:13:50,673 - app.core.excel.processor - INFO - 条码 6902083905217 处理结果:正常商品数量15.0,单价3.0,赠品数量0 +2025-11-16 15:13:50,692 - app.core.excel.processor - INFO - 条码 6902083911027 处理结果:正常商品数量45.0,单价2.8666666666666667,赠品数量0 +2025-11-16 15:13:50,711 - app.core.excel.processor - INFO - 条码 6902083881405 处理结果:正常商品数量48.0,单价0.9166666666666666,赠品数量0 +2025-11-16 15:13:50,743 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251116151334_153_108.xls +2025-11-16 15:13:50,753 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251116151334_153_108.xls +2025-11-16 15:15:36,190 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 15:15:36,191 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 15:15:36,195 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-16 15:15:37,920 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-11-16 15:15:37,933 - app.core.excel.processor - INFO - 找到最新的Excel文件: data/output\微信图片_20251116151514_154_108.xlsx +2025-11-16 15:15:37,957 - app.core.excel.processor - INFO - 开始处理Excel文件: data/output\微信图片_20251116151514_154_108.xlsx +2025-11-16 15:15:37,975 - app.core.excel.processor - INFO - 成功读取Excel文件: data/output\微信图片_20251116151514_154_108.xlsx, 共 7 行 +2025-11-16 15:15:37,983 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 65 +2025-11-16 15:15:38,008 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-11-16 15:15:38,042 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 6 行有效数据 +2025-11-16 15:15:38,058 - app.core.excel.processor - INFO - 找到精确匹配的条码列: 商品条码 +2025-11-16 15:15:38,082 - app.core.excel.processor - INFO - 使用条码列: 商品条码 +2025-11-16 15:15:38,090 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-11-16 15:15:38,107 - app.core.excel.processor - INFO - 找到specification列: 规格 +2025-11-16 15:15:38,129 - app.core.excel.processor - INFO - 找到quantity列: 数量 +2025-11-16 15:15:38,146 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-11-16 15:15:38,165 - app.core.excel.processor - INFO - 找到price列: 单价 +2025-11-16 15:15:38,183 - app.core.excel.processor - INFO - 找到amount列: 金额 +2025-11-16 15:15:38,202 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '商品条码', 'name': '商品名称', 'specification': '规格', 'quantity': '数量', 'unit': '单位', 'price': '单价', 'amount': '金额'} +2025-11-16 15:15:38,222 - app.core.excel.processor - INFO - 解析规格: 1L*12 -> 包装数量=12 +2025-11-16 15:15:38,300 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-16 15:15:38,380 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-16 15:15:38,444 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-16 15:15:38,528 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-16 15:15:38,609 - app.core.excel.processor - INFO - 提取到 5 个商品信息 +2025-11-16 15:15:38,639 - app.core.excel.processor - INFO - 开始处理5 个产品信息 +2025-11-16 15:15:38,657 - app.core.excel.processor - INFO - 处理商品: 条码=6902538006278, 数量=12.0, 单价=5.166666666666667, 是否赠品=False +2025-11-16 15:15:38,668 - app.core.excel.processor - INFO - 发现正常商品:条码6902538006278, 数量=12.0, 单价=5.166666666666667 +2025-11-16 15:15:38,691 - app.core.excel.processor - INFO - 处理商品: 条码=6902538008920, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-16 15:15:38,714 - app.core.excel.processor - INFO - 发现正常商品:条码6902538008920, 数量=15.0, 单价=3.6666666666666665 +2025-11-16 15:15:38,737 - app.core.excel.processor - INFO - 处理商品: 条码=6902538004045, 数量=30.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-16 15:15:38,758 - app.core.excel.processor - INFO - 发现正常商品:条码6902538004045, 数量=30.0, 单价=3.6666666666666665 +2025-11-16 15:15:38,781 - app.core.excel.processor - INFO - 处理商品: 条码=6902538007169, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-16 15:15:38,799 - app.core.excel.processor - INFO - 发现正常商品:条码6902538007169, 数量=15.0, 单价=3.6666666666666665 +2025-11-16 15:15:38,808 - app.core.excel.processor - INFO - 处理商品: 条码=6902538008401, 数量=15.0, 单价=0, 是否赠品=True +2025-11-16 15:15:38,828 - app.core.excel.processor - INFO - 发现赠品:条码6902538008401, 数量=15.0 +2025-11-16 15:15:38,837 - app.core.excel.processor - INFO - 分组后共5 个不同条码的商品 +2025-11-16 15:15:38,858 - app.core.excel.processor - INFO - 条码 6902538006278 处理结果:正常商品数量12.0,单价5.166666666666667,赠品数量0 +2025-11-16 15:15:38,867 - app.core.excel.processor - INFO - 条码 6902538008920 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-11-16 15:15:38,875 - app.core.excel.processor - INFO - 条码 6902538004045 处理结果:正常商品数量30.0,单价3.6666666666666665,赠品数量0 +2025-11-16 15:15:38,896 - app.core.excel.processor - INFO - 条码 6902538007169 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-11-16 15:15:38,914 - app.core.excel.processor - INFO - 条码 6902538008401 处理结果:只有赠品,数量=15.0 +2025-11-16 15:15:38,935 - app.core.excel.processor - INFO - 条码 6902538008401 填充:仅有赠品,采购量=0,赠品数量=15.0 +2025-11-16 15:15:38,955 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251116151514_154_108.xls +2025-11-16 15:15:38,976 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251116151514_154_108.xls +2025-11-20 18:36:13,256 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-20 18:36:13,262 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-20 18:36:13,276 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-20 18:36:13,336 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-11-20 18:36:13,337 - app.core.excel.processor - INFO - 找到最新的Excel文件: data/output\微信图片_20251116151514_154_108.xlsx +2025-11-20 18:36:13,371 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-11-20 18:36:13,389 - app.core.excel.processor - INFO - 找到最新的Excel文件: data/output\微信图片_20251116151514_154_108.xlsx +2025-11-20 18:36:13,399 - app.core.excel.processor - INFO - 开始处理Excel文件: data/output\微信图片_20251116151514_154_108.xlsx +2025-11-20 18:36:13,474 - app.core.excel.processor - INFO - 成功读取Excel文件: data/output\微信图片_20251116151514_154_108.xlsx, 共 7 行 +2025-11-20 18:36:13,476 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 65 +2025-11-20 18:36:13,494 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-11-20 18:36:13,530 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 6 行有效数据 +2025-11-20 18:36:13,544 - app.core.excel.processor - INFO - 找到精确匹配的条码列: 商品条码 +2025-11-20 18:36:13,553 - app.core.excel.processor - INFO - 使用条码列: 商品条码 +2025-11-20 18:36:13,572 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-11-20 18:36:13,582 - app.core.excel.processor - INFO - 找到specification列: 规格 +2025-11-20 18:36:13,593 - app.core.excel.processor - INFO - 找到quantity列: 数量 +2025-11-20 18:36:13,601 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-11-20 18:36:13,608 - app.core.excel.processor - INFO - 找到price列: 单价 +2025-11-20 18:36:13,616 - app.core.excel.processor - INFO - 找到amount列: 金额 +2025-11-20 18:36:13,623 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '商品条码', 'name': '商品名称', 'specification': '规格', 'quantity': '数量', 'unit': '单位', 'price': '单价', 'amount': '金额'} +2025-11-20 18:36:13,641 - app.core.excel.processor - INFO - 解析规格: 1L*12 -> 包装数量=12 +2025-11-20 18:36:13,688 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:36:13,736 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:36:13,780 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:36:13,835 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:36:13,881 - app.core.excel.processor - INFO - 提取到 5 个商品信息 +2025-11-20 18:36:13,900 - app.core.excel.processor - INFO - 开始处理5 个产品信息 +2025-11-20 18:36:13,908 - app.core.excel.processor - INFO - 处理商品: 条码=6902538006278, 数量=12.0, 单价=5.166666666666667, 是否赠品=False +2025-11-20 18:36:13,918 - app.core.excel.processor - INFO - 发现正常商品:条码6902538006278, 数量=12.0, 单价=5.166666666666667 +2025-11-20 18:36:13,933 - app.core.excel.processor - INFO - 处理商品: 条码=6902538008920, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-20 18:36:13,945 - app.core.excel.processor - INFO - 发现正常商品:条码6902538008920, 数量=15.0, 单价=3.6666666666666665 +2025-11-20 18:36:13,955 - app.core.excel.processor - INFO - 处理商品: 条码=6902538004045, 数量=30.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-20 18:36:13,966 - app.core.excel.processor - INFO - 发现正常商品:条码6902538004045, 数量=30.0, 单价=3.6666666666666665 +2025-11-20 18:36:13,977 - app.core.excel.processor - INFO - 处理商品: 条码=6902538007169, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-20 18:36:13,986 - app.core.excel.processor - INFO - 发现正常商品:条码6902538007169, 数量=15.0, 单价=3.6666666666666665 +2025-11-20 18:36:13,997 - app.core.excel.processor - INFO - 处理商品: 条码=6902538008401, 数量=15.0, 单价=0, 是否赠品=True +2025-11-20 18:36:14,005 - app.core.excel.processor - INFO - 发现赠品:条码6902538008401, 数量=15.0 +2025-11-20 18:36:14,023 - app.core.excel.processor - INFO - 分组后共5 个不同条码的商品 +2025-11-20 18:36:14,032 - app.core.excel.processor - INFO - 条码 6902538006278 处理结果:正常商品数量12.0,单价5.166666666666667,赠品数量0 +2025-11-20 18:36:14,039 - app.core.excel.processor - INFO - 条码 6902538008920 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-11-20 18:36:14,047 - app.core.excel.processor - INFO - 条码 6902538004045 处理结果:正常商品数量30.0,单价3.6666666666666665,赠品数量0 +2025-11-20 18:36:14,054 - app.core.excel.processor - INFO - 条码 6902538007169 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-11-20 18:36:14,063 - app.core.excel.processor - INFO - 条码 6902538008401 处理结果:只有赠品,数量=15.0 +2025-11-20 18:36:14,072 - app.core.excel.processor - INFO - 条码 6902538008401 填充:仅有赠品,采购量=0,赠品数量=15.0 +2025-11-20 18:36:14,101 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251116151514_154_108.xls +2025-11-20 18:36:14,111 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251116151514_154_108.xls +2025-11-20 18:36:42,073 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-20 18:36:42,077 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-20 18:36:42,091 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-20 18:36:42,148 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-11-20 18:36:42,149 - app.core.excel.processor - INFO - 找到最新的Excel文件: data/output\微信图片_20251116151514_154_108.xlsx +2025-11-20 18:36:42,175 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-11-20 18:36:42,193 - app.core.excel.processor - INFO - 找到最新的Excel文件: data/output\微信图片_20251116151514_154_108.xlsx +2025-11-20 18:36:42,212 - app.core.excel.processor - INFO - 开始处理Excel文件: data/output\微信图片_20251116151514_154_108.xlsx +2025-11-20 18:36:42,255 - app.core.excel.processor - INFO - 成功读取Excel文件: data/output\微信图片_20251116151514_154_108.xlsx, 共 7 行 +2025-11-20 18:36:42,257 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 65 +2025-11-20 18:36:42,275 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-11-20 18:36:42,308 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 6 行有效数据 +2025-11-20 18:36:42,326 - app.core.excel.processor - INFO - 找到精确匹配的条码列: 商品条码 +2025-11-20 18:36:42,327 - app.core.excel.processor - INFO - 使用条码列: 商品条码 +2025-11-20 18:36:42,346 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-11-20 18:36:42,366 - app.core.excel.processor - INFO - 找到specification列: 规格 +2025-11-20 18:36:42,384 - app.core.excel.processor - INFO - 找到quantity列: 数量 +2025-11-20 18:36:42,399 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-11-20 18:36:42,407 - app.core.excel.processor - INFO - 找到price列: 单价 +2025-11-20 18:36:42,422 - app.core.excel.processor - INFO - 找到amount列: 金额 +2025-11-20 18:36:42,436 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '商品条码', 'name': '商品名称', 'specification': '规格', 'quantity': '数量', 'unit': '单位', 'price': '单价', 'amount': '金额'} +2025-11-20 18:36:42,452 - app.core.excel.processor - INFO - 解析规格: 1L*12 -> 包装数量=12 +2025-11-20 18:36:42,516 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:36:42,589 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:36:42,663 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:36:42,751 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:36:42,833 - app.core.excel.processor - INFO - 提取到 5 个商品信息 +2025-11-20 18:36:42,862 - app.core.excel.processor - INFO - 开始处理5 个产品信息 +2025-11-20 18:36:42,878 - app.core.excel.processor - INFO - 处理商品: 条码=6902538006278, 数量=12.0, 单价=5.166666666666667, 是否赠品=False +2025-11-20 18:36:42,897 - app.core.excel.processor - INFO - 发现正常商品:条码6902538006278, 数量=12.0, 单价=5.166666666666667 +2025-11-20 18:36:42,919 - app.core.excel.processor - INFO - 处理商品: 条码=6902538008920, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-20 18:36:42,940 - app.core.excel.processor - INFO - 发现正常商品:条码6902538008920, 数量=15.0, 单价=3.6666666666666665 +2025-11-20 18:36:42,960 - app.core.excel.processor - INFO - 处理商品: 条码=6902538004045, 数量=30.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-20 18:36:42,979 - app.core.excel.processor - INFO - 发现正常商品:条码6902538004045, 数量=30.0, 单价=3.6666666666666665 +2025-11-20 18:36:43,000 - app.core.excel.processor - INFO - 处理商品: 条码=6902538007169, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-20 18:36:43,018 - app.core.excel.processor - INFO - 发现正常商品:条码6902538007169, 数量=15.0, 单价=3.6666666666666665 +2025-11-20 18:36:43,038 - app.core.excel.processor - INFO - 处理商品: 条码=6902538008401, 数量=15.0, 单价=0, 是否赠品=True +2025-11-20 18:36:43,055 - app.core.excel.processor - INFO - 发现赠品:条码6902538008401, 数量=15.0 +2025-11-20 18:36:43,073 - app.core.excel.processor - INFO - 分组后共5 个不同条码的商品 +2025-11-20 18:36:43,089 - app.core.excel.processor - INFO - 条码 6902538006278 处理结果:正常商品数量12.0,单价5.166666666666667,赠品数量0 +2025-11-20 18:36:43,109 - app.core.excel.processor - INFO - 条码 6902538008920 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-11-20 18:36:43,126 - app.core.excel.processor - INFO - 条码 6902538004045 处理结果:正常商品数量30.0,单价3.6666666666666665,赠品数量0 +2025-11-20 18:36:43,142 - app.core.excel.processor - INFO - 条码 6902538007169 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-11-20 18:36:43,162 - app.core.excel.processor - INFO - 条码 6902538008401 处理结果:只有赠品,数量=15.0 +2025-11-20 18:36:43,171 - app.core.excel.processor - INFO - 条码 6902538008401 填充:仅有赠品,采购量=0,赠品数量=15.0 +2025-11-20 18:36:43,193 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251116151514_154_108.xls +2025-11-20 18:36:43,210 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251116151514_154_108.xls +2025-11-20 18:42:25,870 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-20 18:42:25,878 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-20 18:42:25,910 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-20 18:42:25,988 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-11-20 18:42:25,996 - app.core.excel.processor - INFO - 找到最新的Excel文件: data/output\微信图片_20251116151514_154_108.xlsx +2025-11-20 18:42:26,025 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-11-20 18:42:26,044 - app.core.excel.processor - INFO - 找到最新的Excel文件: data/output\微信图片_20251116151514_154_108.xlsx +2025-11-20 18:42:26,063 - app.core.excel.processor - INFO - 开始处理Excel文件: data/output\微信图片_20251116151514_154_108.xlsx +2025-11-20 18:42:26,097 - app.core.excel.processor - INFO - 成功读取Excel文件: data/output\微信图片_20251116151514_154_108.xlsx, 共 7 行 +2025-11-20 18:42:26,099 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 65 +2025-11-20 18:42:26,109 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-11-20 18:42:26,133 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 6 行有效数据 +2025-11-20 18:42:26,148 - app.core.excel.processor - INFO - 找到精确匹配的条码列: 商品条码 +2025-11-20 18:42:26,149 - app.core.excel.processor - INFO - 使用条码列: 商品条码 +2025-11-20 18:42:26,158 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-11-20 18:42:26,168 - app.core.excel.processor - INFO - 找到specification列: 规格 +2025-11-20 18:42:26,178 - app.core.excel.processor - INFO - 找到quantity列: 数量 +2025-11-20 18:42:26,195 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-11-20 18:42:26,210 - app.core.excel.processor - INFO - 找到price列: 单价 +2025-11-20 18:42:26,232 - app.core.excel.processor - INFO - 找到amount列: 金额 +2025-11-20 18:42:26,245 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '商品条码', 'name': '商品名称', 'specification': '规格', 'quantity': '数量', 'unit': '单位', 'price': '单价', 'amount': '金额'} +2025-11-20 18:42:26,260 - app.core.excel.processor - INFO - 解析规格: 1L*12 -> 包装数量=12 +2025-11-20 18:42:26,307 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:42:26,351 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:42:26,414 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:42:26,458 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:42:26,512 - app.core.excel.processor - INFO - 提取到 5 个商品信息 +2025-11-20 18:42:26,530 - app.core.excel.processor - INFO - 开始处理5 个产品信息 +2025-11-20 18:42:26,548 - app.core.excel.processor - INFO - 处理商品: 条码=6902538006278, 数量=12.0, 单价=5.166666666666667, 是否赠品=False +2025-11-20 18:42:26,559 - app.core.excel.processor - INFO - 发现正常商品:条码6902538006278, 数量=12.0, 单价=5.166666666666667 +2025-11-20 18:42:26,569 - app.core.excel.processor - INFO - 处理商品: 条码=6902538008920, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-20 18:42:26,585 - app.core.excel.processor - INFO - 发现正常商品:条码6902538008920, 数量=15.0, 单价=3.6666666666666665 +2025-11-20 18:42:26,595 - app.core.excel.processor - INFO - 处理商品: 条码=6902538004045, 数量=30.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-20 18:42:26,608 - app.core.excel.processor - INFO - 发现正常商品:条码6902538004045, 数量=30.0, 单价=3.6666666666666665 +2025-11-20 18:42:26,617 - app.core.excel.processor - INFO - 处理商品: 条码=6902538007169, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-20 18:42:26,637 - app.core.excel.processor - INFO - 发现正常商品:条码6902538007169, 数量=15.0, 单价=3.6666666666666665 +2025-11-20 18:42:26,647 - app.core.excel.processor - INFO - 处理商品: 条码=6902538008401, 数量=15.0, 单价=0, 是否赠品=True +2025-11-20 18:42:26,665 - app.core.excel.processor - INFO - 发现赠品:条码6902538008401, 数量=15.0 +2025-11-20 18:42:26,672 - app.core.excel.processor - INFO - 分组后共5 个不同条码的商品 +2025-11-20 18:42:26,680 - app.core.excel.processor - INFO - 条码 6902538006278 处理结果:正常商品数量12.0,单价5.166666666666667,赠品数量0 +2025-11-20 18:42:26,697 - app.core.excel.processor - INFO - 条码 6902538008920 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-11-20 18:42:26,704 - app.core.excel.processor - INFO - 条码 6902538004045 处理结果:正常商品数量30.0,单价3.6666666666666665,赠品数量0 +2025-11-20 18:42:26,711 - app.core.excel.processor - INFO - 条码 6902538007169 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-11-20 18:42:26,719 - app.core.excel.processor - INFO - 条码 6902538008401 处理结果:只有赠品,数量=15.0 +2025-11-20 18:42:26,738 - app.core.excel.processor - INFO - 条码 6902538008401 填充:仅有赠品,采购量=0,赠品数量=15.0 +2025-11-20 18:42:26,749 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251116151514_154_108.xls +2025-11-20 18:42:26,758 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251116151514_154_108.xls +2025-11-20 18:44:11,103 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-20 18:44:11,105 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-20 18:44:11,109 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-20 18:44:11,385 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-11-20 18:44:11,408 - app.core.excel.processor - INFO - 找到最新的Excel文件: data/output\微信图片_20251116151514_154_108.xlsx +2025-11-20 18:44:11,429 - app.core.excel.processor - INFO - 开始处理Excel文件: data/output\微信图片_20251116151514_154_108.xlsx +2025-11-20 18:44:11,457 - app.core.excel.processor - INFO - 成功读取Excel文件: data/output\微信图片_20251116151514_154_108.xlsx, 共 7 行 +2025-11-20 18:44:11,473 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 65 +2025-11-20 18:44:11,495 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-11-20 18:44:11,520 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 6 行有效数据 +2025-11-20 18:44:11,534 - app.core.excel.processor - INFO - 找到精确匹配的条码列: 商品条码 +2025-11-20 18:44:11,550 - app.core.excel.processor - INFO - 使用条码列: 商品条码 +2025-11-20 18:44:11,566 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-11-20 18:44:11,574 - app.core.excel.processor - INFO - 找到specification列: 规格 +2025-11-20 18:44:11,589 - app.core.excel.processor - INFO - 找到quantity列: 数量 +2025-11-20 18:44:11,605 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-11-20 18:44:11,620 - app.core.excel.processor - INFO - 找到price列: 单价 +2025-11-20 18:44:11,635 - app.core.excel.processor - INFO - 找到amount列: 金额 +2025-11-20 18:44:11,650 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '商品条码', 'name': '商品名称', 'specification': '规格', 'quantity': '数量', 'unit': '单位', 'price': '单价', 'amount': '金额'} +2025-11-20 18:44:11,666 - app.core.excel.processor - INFO - 解析规格: 1L*12 -> 包装数量=12 +2025-11-20 18:44:11,728 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:44:11,797 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:44:11,874 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:44:11,947 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:44:12,028 - app.core.excel.processor - INFO - 提取到 5 个商品信息 +2025-11-20 18:44:12,055 - app.core.excel.processor - INFO - 开始处理5 个产品信息 +2025-11-20 18:44:12,073 - app.core.excel.processor - INFO - 处理商品: 条码=6902538006278, 数量=12.0, 单价=5.166666666666667, 是否赠品=False +2025-11-20 18:44:12,091 - app.core.excel.processor - INFO - 发现正常商品:条码6902538006278, 数量=12.0, 单价=5.166666666666667 +2025-11-20 18:44:12,110 - app.core.excel.processor - INFO - 处理商品: 条码=6902538008920, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-20 18:44:12,131 - app.core.excel.processor - INFO - 发现正常商品:条码6902538008920, 数量=15.0, 单价=3.6666666666666665 +2025-11-20 18:44:12,141 - app.core.excel.processor - INFO - 处理商品: 条码=6902538004045, 数量=30.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-20 18:44:12,158 - app.core.excel.processor - INFO - 发现正常商品:条码6902538004045, 数量=30.0, 单价=3.6666666666666665 +2025-11-20 18:44:12,179 - app.core.excel.processor - INFO - 处理商品: 条码=6902538007169, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-20 18:44:12,197 - app.core.excel.processor - INFO - 发现正常商品:条码6902538007169, 数量=15.0, 单价=3.6666666666666665 +2025-11-20 18:44:12,217 - app.core.excel.processor - INFO - 处理商品: 条码=6902538008401, 数量=15.0, 单价=0, 是否赠品=True +2025-11-20 18:44:12,234 - app.core.excel.processor - INFO - 发现赠品:条码6902538008401, 数量=15.0 +2025-11-20 18:44:12,251 - app.core.excel.processor - INFO - 分组后共5 个不同条码的商品 +2025-11-20 18:44:12,269 - app.core.excel.processor - INFO - 条码 6902538006278 处理结果:正常商品数量12.0,单价5.166666666666667,赠品数量0 +2025-11-20 18:44:12,286 - app.core.excel.processor - INFO - 条码 6902538008920 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-11-20 18:44:12,301 - app.core.excel.processor - INFO - 条码 6902538004045 处理结果:正常商品数量30.0,单价3.6666666666666665,赠品数量0 +2025-11-20 18:44:12,318 - app.core.excel.processor - INFO - 条码 6902538007169 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-11-20 18:44:12,335 - app.core.excel.processor - INFO - 条码 6902538008401 处理结果:只有赠品,数量=15.0 +2025-11-20 18:44:12,354 - app.core.excel.processor - INFO - 条码 6902538008401 填充:仅有赠品,采购量=0,赠品数量=15.0 +2025-11-20 18:44:12,363 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251116151514_154_108.xls +2025-11-20 18:44:12,380 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251116151514_154_108.xls +2025-11-20 18:47:03,882 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-20 18:47:03,890 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-20 18:47:03,905 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-20 18:47:04,176 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-11-20 18:47:04,187 - app.core.excel.processor - INFO - 找到最新的Excel文件: data/output\微信图片_20251116151514_154_108.xlsx +2025-11-20 18:47:04,206 - app.core.excel.processor - INFO - 开始处理Excel文件: data/output\微信图片_20251116151514_154_108.xlsx +2025-11-20 18:47:04,236 - app.core.excel.processor - INFO - 成功读取Excel文件: data/output\微信图片_20251116151514_154_108.xlsx, 共 7 行 +2025-11-20 18:47:04,246 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 65 +2025-11-20 18:47:04,273 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-11-20 18:47:04,298 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 6 行有效数据 +2025-11-20 18:47:04,314 - app.core.excel.processor - INFO - 找到精确匹配的条码列: 商品条码 +2025-11-20 18:47:04,323 - app.core.excel.processor - INFO - 使用条码列: 商品条码 +2025-11-20 18:47:04,344 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-11-20 18:47:04,361 - app.core.excel.processor - INFO - 找到specification列: 规格 +2025-11-20 18:47:04,376 - app.core.excel.processor - INFO - 找到quantity列: 数量 +2025-11-20 18:47:04,393 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-11-20 18:47:04,409 - app.core.excel.processor - INFO - 找到price列: 单价 +2025-11-20 18:47:04,425 - app.core.excel.processor - INFO - 找到amount列: 金额 +2025-11-20 18:47:04,441 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '商品条码', 'name': '商品名称', 'specification': '规格', 'quantity': '数量', 'unit': '单位', 'price': '单价', 'amount': '金额'} +2025-11-20 18:47:04,455 - app.core.excel.processor - INFO - 解析规格: 1L*12 -> 包装数量=12 +2025-11-20 18:47:04,519 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:47:04,588 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:47:04,675 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:47:04,760 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:47:04,820 - app.core.excel.processor - INFO - 提取到 5 个商品信息 +2025-11-20 18:47:04,841 - app.core.excel.processor - INFO - 开始处理5 个产品信息 +2025-11-20 18:47:04,863 - app.core.excel.processor - INFO - 处理商品: 条码=6902538006278, 数量=12.0, 单价=5.166666666666667, 是否赠品=False +2025-11-20 18:47:04,873 - app.core.excel.processor - INFO - 发现正常商品:条码6902538006278, 数量=12.0, 单价=5.166666666666667 +2025-11-20 18:47:04,886 - app.core.excel.processor - INFO - 处理商品: 条码=6902538008920, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-20 18:47:04,900 - app.core.excel.processor - INFO - 发现正常商品:条码6902538008920, 数量=15.0, 单价=3.6666666666666665 +2025-11-20 18:47:04,924 - app.core.excel.processor - INFO - 处理商品: 条码=6902538004045, 数量=30.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-20 18:47:04,942 - app.core.excel.processor - INFO - 发现正常商品:条码6902538004045, 数量=30.0, 单价=3.6666666666666665 +2025-11-20 18:47:04,951 - app.core.excel.processor - INFO - 处理商品: 条码=6902538007169, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-20 18:47:04,974 - app.core.excel.processor - INFO - 发现正常商品:条码6902538007169, 数量=15.0, 单价=3.6666666666666665 +2025-11-20 18:47:04,993 - app.core.excel.processor - INFO - 处理商品: 条码=6902538008401, 数量=15.0, 单价=0, 是否赠品=True +2025-11-20 18:47:05,012 - app.core.excel.processor - INFO - 发现赠品:条码6902538008401, 数量=15.0 +2025-11-20 18:47:05,029 - app.core.excel.processor - INFO - 分组后共5 个不同条码的商品 +2025-11-20 18:47:05,046 - app.core.excel.processor - INFO - 条码 6902538006278 处理结果:正常商品数量12.0,单价5.166666666666667,赠品数量0 +2025-11-20 18:47:05,062 - app.core.excel.processor - INFO - 条码 6902538008920 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-11-20 18:47:05,079 - app.core.excel.processor - INFO - 条码 6902538004045 处理结果:正常商品数量30.0,单价3.6666666666666665,赠品数量0 +2025-11-20 18:47:05,094 - app.core.excel.processor - INFO - 条码 6902538007169 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-11-20 18:47:05,112 - app.core.excel.processor - INFO - 条码 6902538008401 处理结果:只有赠品,数量=15.0 +2025-11-20 18:47:05,130 - app.core.excel.processor - INFO - 条码 6902538008401 填充:仅有赠品,采购量=0,赠品数量=15.0 +2025-11-20 18:47:05,149 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251116151514_154_108.xls +2025-11-20 18:47:05,170 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251116151514_154_108.xls +2025-11-20 18:56:30,304 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-20 18:56:30,313 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-20 18:56:30,325 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-11-20 18:56:30,602 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-11-20 18:56:30,622 - app.core.excel.processor - INFO - 找到最新的Excel文件: data/output\微信图片_20251116151514_154_108.xlsx +2025-11-20 18:56:30,644 - app.core.excel.processor - INFO - 开始处理Excel文件: data/output\微信图片_20251116151514_154_108.xlsx +2025-11-20 18:56:30,660 - app.core.excel.processor - INFO - 成功读取Excel文件: data/output\微信图片_20251116151514_154_108.xlsx, 共 7 行 +2025-11-20 18:56:30,682 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 65 +2025-11-20 18:56:30,707 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-11-20 18:56:30,733 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 6 行有效数据 +2025-11-20 18:56:30,741 - app.core.excel.processor - INFO - 找到精确匹配的条码列: 商品条码 +2025-11-20 18:56:30,752 - app.core.excel.processor - INFO - 使用条码列: 商品条码 +2025-11-20 18:56:30,763 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-11-20 18:56:30,774 - app.core.excel.processor - INFO - 找到specification列: 规格 +2025-11-20 18:56:30,788 - app.core.excel.processor - INFO - 找到quantity列: 数量 +2025-11-20 18:56:30,799 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-11-20 18:56:30,810 - app.core.excel.processor - INFO - 找到price列: 单价 +2025-11-20 18:56:30,820 - app.core.excel.processor - INFO - 找到amount列: 金额 +2025-11-20 18:56:30,830 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '商品条码', 'name': '商品名称', 'specification': '规格', 'quantity': '数量', 'unit': '单位', 'price': '单价', 'amount': '金额'} +2025-11-20 18:56:30,839 - app.core.excel.processor - INFO - 解析规格: 1L*12 -> 包装数量=12 +2025-11-20 18:56:30,991 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:56:31,044 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:56:31,103 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:56:31,166 - app.core.excel.processor - INFO - 解析规格: 600ml*15 -> 包装数量=15 +2025-11-20 18:56:31,230 - app.core.excel.processor - INFO - 提取到 5 个商品信息 +2025-11-20 18:56:31,252 - app.core.excel.processor - INFO - 开始处理5 个产品信息 +2025-11-20 18:56:31,275 - app.core.excel.processor - INFO - 处理商品: 条码=6902538006278, 数量=12.0, 单价=5.166666666666667, 是否赠品=False +2025-11-20 18:56:31,276 - app.core.excel.processor - INFO - 发现正常商品:条码6902538006278, 数量=12.0, 单价=5.166666666666667 +2025-11-20 18:56:31,301 - app.core.excel.processor - INFO - 处理商品: 条码=6902538008920, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-20 18:56:31,327 - app.core.excel.processor - INFO - 发现正常商品:条码6902538008920, 数量=15.0, 单价=3.6666666666666665 +2025-11-20 18:56:31,348 - app.core.excel.processor - INFO - 处理商品: 条码=6902538004045, 数量=30.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-20 18:56:31,366 - app.core.excel.processor - INFO - 发现正常商品:条码6902538004045, 数量=30.0, 单价=3.6666666666666665 +2025-11-20 18:56:31,376 - app.core.excel.processor - INFO - 处理商品: 条码=6902538007169, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-11-20 18:56:31,397 - app.core.excel.processor - INFO - 发现正常商品:条码6902538007169, 数量=15.0, 单价=3.6666666666666665 +2025-11-20 18:56:31,418 - app.core.excel.processor - INFO - 处理商品: 条码=6902538008401, 数量=15.0, 单价=0, 是否赠品=True +2025-11-20 18:56:31,438 - app.core.excel.processor - INFO - 发现赠品:条码6902538008401, 数量=15.0 +2025-11-20 18:56:31,455 - app.core.excel.processor - INFO - 分组后共5 个不同条码的商品 +2025-11-20 18:56:31,474 - app.core.excel.processor - INFO - 条码 6902538006278 处理结果:正常商品数量12.0,单价5.166666666666667,赠品数量0 +2025-11-20 18:56:31,490 - app.core.excel.processor - INFO - 条码 6902538008920 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-11-20 18:56:31,508 - app.core.excel.processor - INFO - 条码 6902538004045 处理结果:正常商品数量30.0,单价3.6666666666666665,赠品数量0 +2025-11-20 18:56:31,525 - app.core.excel.processor - INFO - 条码 6902538007169 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-11-20 18:56:31,542 - app.core.excel.processor - INFO - 条码 6902538008401 处理结果:只有赠品,数量=15.0 +2025-11-20 18:56:31,562 - app.core.excel.processor - INFO - 条码 6902538008401 填充:仅有赠品,采购量=0,赠品数量=15.0 +2025-11-20 18:56:31,581 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251116151514_154_108.xls +2025-11-20 18:56:31,600 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251116151514_154_108.xls +2025-12-01 22:21:09,072 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-01 22:21:09,080 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-12-01 22:21:09,097 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-12-01 22:21:10,615 - app.core.excel.processor - INFO - 搜索目录 data/output 中的Excel文件 +2025-12-01 22:21:10,639 - app.core.excel.processor - INFO - 找到最新的Excel文件: data/output\微信图片_20251201221738_176_108.xlsx +2025-12-01 22:21:10,663 - app.core.excel.processor - INFO - 开始处理Excel文件: data/output\微信图片_20251201221738_176_108.xlsx +2025-12-01 22:21:10,694 - app.core.excel.processor - INFO - 成功读取Excel文件: data/output\微信图片_20251201221738_176_108.xlsx, 共 10 行 +2025-12-01 22:21:10,712 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 35 +2025-12-01 22:21:10,736 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-12-01 22:21:10,764 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 9 行有效数据 +2025-12-01 22:21:10,778 - app.core.excel.processor - INFO - 找到精确匹配的条码列: 条形码 +2025-12-01 22:21:10,787 - app.core.excel.processor - INFO - 使用条码列: 条形码 +2025-12-01 22:21:10,806 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-12-01 22:21:10,824 - app.core.excel.processor - INFO - 找到price列: 销售价 +2025-12-01 22:21:10,833 - app.core.excel.processor - INFO - 找到amount列(部分匹配): 订单金额 +2025-12-01 22:21:10,840 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '条形码', 'name': '商品名称', 'price': '销售价', 'amount': '订单金额'} +2025-12-01 22:21:10,877 - app.core.excel.processor - INFO - 从商品名称推断规格: 550水24白膜 -> 1*24, 包装数量=24 +2025-12-01 22:21:10,987 - app.core.excel.processor - INFO - 从商品名称推断规格: 500-东方树叶-陈皮白茶1*15-纸 +箱装-普通装 -> 1*15, 包装数量=15 +2025-12-01 22:21:11,076 - app.core.excel.processor - INFO - 数量为空或为0,通过金额(165.0)和单价(55.0)计算得出数量: 3.0 +2025-12-01 22:21:11,108 - app.core.excel.processor - INFO - 从商品名称推断规格: 500树叶青柑普洱15入纸箱 -> 1*15, 包装数量=15 +2025-12-01 22:21:11,163 - app.core.excel.processor - INFO - 数量为空或为0,通过金额(110.0)和单价(55.0)计算得出数量: 2.0 +2025-12-01 22:21:11,201 - app.core.excel.processor - INFO - 从商品名称推断规格: 500树叶茉莉花茶15纸箱 -> 1*15, 包装数量=15 +2025-12-01 22:21:11,286 - app.core.excel.processor - INFO - 数量为空或为0,通过金额(275.0)和单价(55.0)计算得出数量: 5.0 +2025-12-01 22:21:11,303 - app.core.excel.processor - INFO - 从商品名称推断规格: 500树叶乌龙茶15纸箱 -> 1*15, 包装数量=15 +2025-12-01 22:21:11,404 - app.core.excel.processor - INFO - 数量为空或为0,通过金额(165.0)和单价(55.0)计算得出数量: 3.0 +2025-12-01 22:21:11,445 - app.core.excel.processor - INFO - 从商品名称推断规格: 500树叶绿茶15纸箱 -> 1*15, 包装数量=15 +2025-12-01 22:21:11,520 - app.core.excel.processor - INFO - 数量为空或为0,通过金额(165.0)和单价(55.0)计算得出数量: 3.0 +2025-12-01 22:21:11,552 - app.core.excel.processor - INFO - 从商品名称推断规格: 1.5树叶茉莉花茶6入纸箱装 -> 1*6, 包装数量=6 +2025-12-01 22:21:11,614 - app.core.excel.processor - INFO - 数量为空或为0,通过金额(100.0)和单价(50.0)计算得出数量: 2.0 +2025-12-01 22:21:11,630 - app.core.excel.processor - INFO - 从商品名称推断规格: 500茶π西柚茉莉15纸箱 -> 1*15, 包装数量=15 +2025-12-01 22:21:11,726 - app.core.excel.processor - INFO - 数量为空或为0,通过金额(112.0)和单价(56.0)计算得出数量: 2.0 +2025-12-01 22:21:11,745 - app.core.excel.processor - INFO - 提取到 8 个商品信息 +2025-12-01 22:21:11,771 - app.core.excel.processor - INFO - 开始处理8 个产品信息 +2025-12-01 22:21:11,782 - app.core.excel.processor - INFO - 处理商品: 条码=6921168509256, 数量=0.0, 单价=0, 是否赠品=True +2025-12-01 22:21:11,801 - app.core.excel.processor - INFO - 发现赠品:条码6921168509256, 数量=0.0 +2025-12-01 22:21:11,817 - app.core.excel.processor - INFO - 处理商品: 条码=6921168562909, 数量=3.0, 单价=55.0, 是否赠品=False +2025-12-01 22:21:11,824 - app.core.excel.processor - INFO - 发现正常商品:条码6921168562909, 数量=3.0, 单价=55.0 +2025-12-01 22:21:11,842 - app.core.excel.processor - INFO - 处理商品: 条码=6921168596348, 数量=2.0, 单价=55.0, 是否赠品=False +2025-12-01 22:21:11,861 - app.core.excel.processor - INFO - 发现正常商品:条码6921168596348, 数量=2.0, 单价=55.0 +2025-12-01 22:21:11,868 - app.core.excel.processor - INFO - 处理商品: 条码=6921168558049, 数量=5.0, 单价=55.0, 是否赠品=False +2025-12-01 22:21:11,890 - app.core.excel.processor - INFO - 发现正常商品:条码6921168558049, 数量=5.0, 单价=55.0 +2025-12-01 22:21:11,908 - app.core.excel.processor - INFO - 处理商品: 条码=6921168558032, 数量=3.0, 单价=55.0, 是否赠品=False +2025-12-01 22:21:11,915 - app.core.excel.processor - INFO - 发现正常商品:条码6921168558032, 数量=3.0, 单价=55.0 +2025-12-01 22:21:11,923 - app.core.excel.processor - INFO - 处理商品: 条码=6921168558018, 数量=3.0, 单价=55.0, 是否赠品=False +2025-12-01 22:21:11,941 - app.core.excel.processor - INFO - 发现正常商品:条码6921168558018, 数量=3.0, 单价=55.0 +2025-12-01 22:21:11,948 - app.core.excel.processor - INFO - 处理商品: 条码=6921168561445, 数量=2.0, 单价=50.0, 是否赠品=False +2025-12-01 22:21:11,965 - app.core.excel.processor - INFO - 发现正常商品:条码6921168561445, 数量=2.0, 单价=50.0 +2025-12-01 22:21:11,984 - app.core.excel.processor - INFO - 处理商品: 条码=6921168593552, 数量=2.0, 单价=56.0, 是否赠品=False +2025-12-01 22:21:12,001 - app.core.excel.processor - INFO - 发现正常商品:条码6921168593552, 数量=2.0, 单价=56.0 +2025-12-01 22:21:12,019 - app.core.excel.processor - INFO - 分组后共8 个不同条码的商品 +2025-12-01 22:21:12,037 - app.core.excel.processor - INFO - 条码 6921168509256 处理结果:只有赠品,数量=0.0 +2025-12-01 22:21:12,045 - app.core.excel.processor - INFO - 条码 6921168562909 处理结果:正常商品数量3.0,单价55.0,赠品数量0 +2025-12-01 22:21:12,063 - app.core.excel.processor - INFO - 条码 6921168596348 处理结果:正常商品数量2.0,单价55.0,赠品数量0 +2025-12-01 22:21:12,071 - app.core.excel.processor - INFO - 条码 6921168558049 处理结果:正常商品数量5.0,单价55.0,赠品数量0 +2025-12-01 22:21:12,090 - app.core.excel.processor - INFO - 条码 6921168558032 处理结果:正常商品数量3.0,单价55.0,赠品数量0 +2025-12-01 22:21:12,111 - app.core.excel.processor - INFO - 条码 6921168558018 处理结果:正常商品数量3.0,单价55.0,赠品数量0 +2025-12-01 22:21:12,130 - app.core.excel.processor - INFO - 条码 6921168561445 处理结果:正常商品数量2.0,单价50.0,赠品数量0 +2025-12-01 22:21:12,139 - app.core.excel.processor - INFO - 条码 6921168593552 处理结果:正常商品数量2.0,单价56.0,赠品数量0 +2025-12-01 22:21:12,162 - app.core.excel.processor - INFO - 条码 6921168509256 填充:仅有赠品,采购量=0,赠品数量=0.0 +2025-12-01 22:21:12,202 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251201221738_176_108.xls +2025-12-01 22:21:12,214 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_微信图片_20251201221738_176_108.xls +2025-12-12 11:00:14,060 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-12 11:00:14,069 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-12-12 11:00:14,085 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-12-12 11:00:14,100 - app.core.excel.processor - INFO - 开始处理Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx +2025-12-12 11:00:14,112 - app.core.excel.processor - INFO - 成功读取Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx, 共 57 行 +2025-12-12 11:00:14,116 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 75 +2025-12-12 11:00:14,117 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-12-12 11:00:14,127 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 56 行有效数据 +2025-12-12 11:00:14,137 - app.core.excel.processor - INFO - 找到部分匹配的条码列: 商品条码(小条码) (包含关键词: 条码) +2025-12-12 11:00:14,137 - app.core.excel.processor - INFO - 使用条码列: 商品条码(小条码) +2025-12-12 11:00:14,138 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-12-12 11:00:14,138 - app.core.excel.processor - INFO - 找到quantity列(部分匹配): 订购数量(小单位) +2025-12-12 11:00:14,138 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-12-12 11:00:14,139 - app.core.excel.processor - INFO - 找到price列(部分匹配): 单价(小单位) +2025-12-12 11:00:14,139 - app.core.excel.processor - INFO - 找到amount列(部分匹配): 优惠后金额(小单位) +2025-12-12 11:00:14,139 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '商品条码(小条码)', 'name': '商品名称', 'quantity': '订购数量(小单位)', 'unit': '单位', 'price': '单价(小单位)', 'amount': '优惠后金额(小单位)'} +2025-12-12 11:00:14,144 - app.core.excel.processor - INFO - 从商品名称推断规格: 雪碧2L@ -> 2L*1, 包装数量=1 +2025-12-12 11:00:14,145 - app.core.excel.processor - INFO - 根据规格推断单位: 2L*1 -> 单位=件 +2025-12-12 11:00:14,222 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝饮用纯净水2.08L@ -> 2.08L*1, 包装数量=1 +2025-12-12 11:00:14,223 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝纯净水4.5L@ -> 4.5L*1, 包装数量=1 +2025-12-12 11:00:14,223 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝饮用纯净水1.555L@ -> 1.555L*1, 包装数量=1 +2025-12-12 11:00:14,227 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥薄脆酸甜草莓味95g@ -> 95*None, 包装数量=95 +2025-12-12 11:00:14,230 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥杯奥草莓味55g@ -> 55*None, 包装数量=55 +2025-12-12 11:00:14,232 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥杯奥巧克力55g@ -> 55*None, 包装数量=55 +2025-12-12 11:00:14,232 - app.core.excel.processor - INFO - 从商品名称推断规格: 好丽友蛋黄派2P46g@ -> 46*None, 包装数量=46 +2025-12-12 11:00:14,235 - app.core.excel.processor - INFO - 从商品名称推断规格: 都市牧场爽口含片正梅味38g@ -> 38*None, 包装数量=38 +2025-12-12 11:00:14,236 - app.core.excel.processor - INFO - 从商品名称推断规格: 林振合维C果C软糖什锦味68g -> 68*None, 包装数量=68 +2025-12-12 11:00:14,239 - app.core.excel.processor - INFO - 从商品名称推断规格: 格力高百醇柠檬48g@ -> 48*None, 包装数量=48 +2025-12-12 11:00:14,241 - app.core.excel.processor - INFO - 从商品名称推断规格: 格力高百醇抹茶慕斯味48g@ -> 48*None, 包装数量=48 +2025-12-12 11:00:14,242 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥饼干经典原味48.5g@ -> 48.5*None, 包装数量=48 +2025-12-12 11:00:14,242 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None, 包装数量=48 +2025-12-12 11:00:14,246 - app.core.excel.processor - INFO - 从商品名称推断规格: 法丽兹曲奇芝士巧克力70g@ -> 70*None, 包装数量=70 +2025-12-12 11:00:14,246 - app.core.excel.processor - INFO - 从商品名称推断规格: 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:00:14,250 - app.core.excel.processor - INFO - 从商品名称推断规格: 太平梳打饼干奶盐味100g@ -> 100*None, 包装数量=100 +2025-12-12 11:00:14,252 - app.core.excel.processor - INFO - 从商品名称推断规格: 太平梳打饼干海苔味100g@ -> 100*None, 包装数量=100 +2025-12-12 11:00:14,253 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园手指饼115g@ -> 115*None, 包装数量=115 +2025-12-12 11:00:14,255 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点杏仁酥饼146g@ -> 146*None, 包装数量=146 +2025-12-12 11:00:14,257 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点核桃酥饼146g@ -> 146*None, 包装数量=146 +2025-12-12 11:00:14,259 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆腰果饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:00:14,261 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆杏仁饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:00:14,262 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆核桃饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:00:14,264 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利威化饼干草莓味115g@ -> 115*None, 包装数量=115 +2025-12-12 11:00:14,264 - app.core.excel.processor - INFO - 从商品名称推断规格: 亨裕饼朱古力味饼干186g -> 186*None, 包装数量=186 +2025-12-12 11:00:14,267 - app.core.excel.processor - INFO - 从商品名称推断规格: 亨裕早茶饼干110g -> 110*None, 包装数量=110 +2025-12-12 11:00:14,267 - app.core.excel.processor - INFO - 从商品名称推断规格: 趣多多香浓巧克力味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:00:14,270 - app.core.excel.processor - INFO - 从商品名称推断规格: 趣多多缤纷逗巧克力85g@ -> 85*None, 包装数量=85 +2025-12-12 11:00:14,270 - app.core.excel.processor - INFO - 从商品名称推断规格: 米老头雪花煎卷椰奶味150g@ -> 150*None, 包装数量=150 +2025-12-12 11:00:14,273 - app.core.excel.processor - INFO - 从商品名称推断规格: 金富士牛乳饼干香浓牛奶味130g@ -> 130*None, 包装数量=130 +2025-12-12 11:00:14,275 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利果乐果香蓝莓味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:00:14,276 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利果乐果香草莓味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:00:14,277 - app.core.excel.processor - INFO - 从商品名称推断规格: 旺旺仙贝52g@ -> 52*None, 包装数量=52 +2025-12-12 11:00:14,277 - app.core.excel.processor - INFO - 从商品名称推断规格: 旺旺雪饼84g@ -> 84*None, 包装数量=84 +2025-12-12 11:00:14,277 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园蛋黄派230g@ -> 230*None, 包装数量=230 +2025-12-12 11:00:14,281 - app.core.excel.processor - INFO - 从商品名称推断规格: 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None, 包装数量=22 +2025-12-12 11:00:14,284 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔手撕肉干麻辣味10g@ -> 10*None, 包装数量=10 +2025-12-12 11:00:14,286 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔手撕肉干香辣味10g@ -> 10*None, 包装数量=10 +2025-12-12 11:00:14,342 - app.core.excel.processor - INFO - 从商品名称推断规格: 登荣香辣爽口鸡23g -> 23*None, 包装数量=23 +2025-12-12 11:00:14,342 - app.core.excel.processor - INFO - 从商品名称推断规格: 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None, 包装数量=12 +2025-12-12 11:00:14,347 - app.core.excel.processor - INFO - 从商品名称推断规格: 味芝元洞庭鱼排香辣味26g -> 26*None, 包装数量=26 +2025-12-12 11:00:14,349 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔小鱼麻辣小鱼12g@ -> 12*None, 包装数量=12 +2025-12-12 11:00:14,351 - app.core.excel.processor - INFO - 从商品名称推断规格: 缺牙齿素牛肚香辣味16g -> 16*None, 包装数量=16 +2025-12-12 11:00:14,353 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事青柠味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:00:14,353 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事黄瓜味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:00:14,353 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事德克萨斯烧烤味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:00:14,358 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事薯片经典原味23g(串串装)@ -> 23*None, 包装数量=23 +2025-12-12 11:00:14,359 - app.core.excel.processor - INFO - 提取到 51 个商品信息 +2025-12-12 11:00:14,362 - app.core.excel.processor - INFO - 开始处理51 个产品信息 +2025-12-12 11:00:14,362 - app.core.excel.processor - INFO - 处理商品: 条码=6954767432076, 数量=48.0, 单价=55.68, 是否赠品=False +2025-12-12 11:00:14,366 - app.core.excel.processor - INFO - 发现正常商品:条码6954767432076, 数量=48.0, 单价=55.68 +2025-12-12 11:00:14,366 - app.core.excel.processor - INFO - 处理商品: 条码=6954767433073, 数量=8.0, 单价=44.32, 是否赠品=False +2025-12-12 11:00:14,366 - app.core.excel.processor - INFO - 发现正常商品:条码6954767433073, 数量=8.0, 单价=44.32 +2025-12-12 11:00:14,366 - app.core.excel.processor - INFO - 处理商品: 条码=6901285992933, 数量=40.0, 单价=21.52, 是否赠品=False +2025-12-12 11:00:14,366 - app.core.excel.processor - INFO - 发现正常商品:条码6901285992933, 数量=40.0, 单价=21.52 +2025-12-12 11:00:14,367 - app.core.excel.processor - INFO - 处理商品: 条码=6901285991530, 数量=8.0, 单价=26.08, 是否赠品=False +2025-12-12 11:00:14,368 - app.core.excel.processor - INFO - 发现正常商品:条码6901285991530, 数量=8.0, 单价=26.08 +2025-12-12 11:00:14,368 - app.core.excel.processor - INFO - 处理商品: 条码=6901285991271, 数量=60.0, 单价=24.6, 是否赠品=False +2025-12-12 11:00:14,368 - app.core.excel.processor - INFO - 发现正常商品:条码6901285991271, 数量=60.0, 单价=24.6 +2025-12-12 11:00:14,369 - app.core.excel.processor - INFO - 处理商品: 条码=6920584471017, 数量=12.0, 单价=54.0, 是否赠品=False +2025-12-12 11:00:14,369 - app.core.excel.processor - INFO - 发现正常商品:条码6920584471017, 数量=12.0, 单价=54.0 +2025-12-12 11:00:14,369 - app.core.excel.processor - INFO - 处理商品: 条码=6901668934925, 数量=5.0, 单价=6.5, 是否赠品=False +2025-12-12 11:00:14,369 - app.core.excel.processor - INFO - 发现正常商品:条码6901668934925, 数量=5.0, 单价=6.5 +2025-12-12 11:00:14,369 - app.core.excel.processor - INFO - 处理商品: 条码=6901668054715, 数量=4.0, 单价=3.6, 是否赠品=False +2025-12-12 11:00:14,370 - app.core.excel.processor - INFO - 发现正常商品:条码6901668054715, 数量=4.0, 单价=3.6 +2025-12-12 11:00:14,370 - app.core.excel.processor - INFO - 处理商品: 条码=6901668053916, 数量=3.0, 单价=3.6, 是否赠品=False +2025-12-12 11:00:14,370 - app.core.excel.processor - INFO - 发现正常商品:条码6901668053916, 数量=3.0, 单价=3.6 +2025-12-12 11:00:14,370 - app.core.excel.processor - INFO - 处理商品: 条码=6920907800616, 数量=4.0, 单价=3.0, 是否赠品=False +2025-12-12 11:00:14,371 - app.core.excel.processor - INFO - 发现正常商品:条码6920907800616, 数量=4.0, 单价=3.0 +2025-12-12 11:00:14,371 - app.core.excel.processor - INFO - 处理商品: 条码=6935855700383, 数量=8.0, 单价=38.0, 是否赠品=False +2025-12-12 11:00:14,371 - app.core.excel.processor - INFO - 发现正常商品:条码6935855700383, 数量=8.0, 单价=38.0 +2025-12-12 11:00:14,371 - app.core.excel.processor - INFO - 处理商品: 条码=6925683200957, 数量=8.0, 单价=28.0, 是否赠品=False +2025-12-12 11:00:14,372 - app.core.excel.processor - INFO - 发现正常商品:条码6925683200957, 数量=8.0, 单价=28.0 +2025-12-12 11:00:14,372 - app.core.excel.processor - INFO - 处理商品: 条码=6901845044027, 数量=4.0, 单价=5.55, 是否赠品=False +2025-12-12 11:00:14,372 - app.core.excel.processor - INFO - 发现正常商品:条码6901845044027, 数量=4.0, 单价=5.55 +2025-12-12 11:00:14,372 - app.core.excel.processor - INFO - 处理商品: 条码=6901845040968, 数量=5.0, 单价=5.55, 是否赠品=False +2025-12-12 11:00:14,372 - app.core.excel.processor - INFO - 发现正常商品:条码6901845040968, 数量=5.0, 单价=5.55 +2025-12-12 11:00:14,372 - app.core.excel.processor - INFO - 处理商品: 条码=6901668935649, 数量=6.0, 单价=1.99, 是否赠品=False +2025-12-12 11:00:14,372 - app.core.excel.processor - INFO - 发现正常商品:条码6901668935649, 数量=6.0, 单价=1.99 +2025-12-12 11:00:14,372 - app.core.excel.processor - INFO - 处理商品: 条码=6901668935663, 数量=5.0, 单价=1.99, 是否赠品=False +2025-12-12 11:00:14,372 - app.core.excel.processor - INFO - 发现正常商品:条码6901668935663, 数量=5.0, 单价=1.99 +2025-12-12 11:00:14,372 - app.core.excel.processor - INFO - 处理商品: 条码=6947929617534, 数量=4.0, 单价=2.66, 是否赠品=False +2025-12-12 11:00:14,372 - app.core.excel.processor - INFO - 发现正常商品:条码6947929617534, 数量=4.0, 单价=2.66 +2025-12-12 11:00:14,376 - app.core.excel.processor - INFO - 处理商品: 条码=6947929617138, 数量=4.0, 单价=2.66, 是否赠品=False +2025-12-12 11:00:14,376 - app.core.excel.processor - INFO - 发现正常商品:条码6947929617138, 数量=4.0, 单价=2.66 +2025-12-12 11:00:14,376 - app.core.excel.processor - INFO - 处理商品: 条码=6901668200013, 数量=3.0, 单价=3.5, 是否赠品=False +2025-12-12 11:00:14,376 - app.core.excel.processor - INFO - 发现正常商品:条码6901668200013, 数量=3.0, 单价=3.5 +2025-12-12 11:00:14,376 - app.core.excel.processor - INFO - 处理商品: 条码=6901668200303, 数量=3.0, 单价=3.5, 是否赠品=False +2025-12-12 11:00:14,376 - app.core.excel.processor - INFO - 发现正常商品:条码6901668200303, 数量=3.0, 单价=3.5 +2025-12-12 11:00:14,378 - app.core.excel.processor - INFO - 处理商品: 条码=6911988005229, 数量=4.0, 单价=2.25, 是否赠品=False +2025-12-12 11:00:14,378 - app.core.excel.processor - INFO - 发现正常商品:条码6911988005229, 数量=4.0, 单价=2.25 +2025-12-12 11:00:14,378 - app.core.excel.processor - INFO - 处理商品: 条码=6911988000293, 数量=4.0, 单价=3.8, 是否赠品=False +2025-12-12 11:00:14,379 - app.core.excel.processor - INFO - 发现正常商品:条码6911988000293, 数量=4.0, 单价=3.8 +2025-12-12 11:00:14,379 - app.core.excel.processor - INFO - 处理商品: 条码=6911988000286, 数量=3.0, 单价=3.8, 是否赠品=False +2025-12-12 11:00:14,379 - app.core.excel.processor - INFO - 发现正常商品:条码6911988000286, 数量=3.0, 单价=3.8 +2025-12-12 11:00:14,379 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009777, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:00:14,380 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009777, 数量=3.0, 单价=2.85 +2025-12-12 11:00:14,380 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009760, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:00:14,380 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009760, 数量=3.0, 单价=2.85 +2025-12-12 11:00:14,381 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009784, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:00:14,381 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009784, 数量=3.0, 单价=2.85 +2025-12-12 11:00:14,381 - app.core.excel.processor - INFO - 处理商品: 条码=6901180581683, 数量=2.0, 单价=3.8, 是否赠品=False +2025-12-12 11:00:14,382 - app.core.excel.processor - INFO - 发现正常商品:条码6901180581683, 数量=2.0, 单价=3.8 +2025-12-12 11:00:14,382 - app.core.excel.processor - INFO - 处理商品: 条码=6932024200552, 数量=3.0, 单价=3.0, 是否赠品=False +2025-12-12 11:00:14,382 - app.core.excel.processor - INFO - 发现正常商品:条码6932024200552, 数量=3.0, 单价=3.0 +2025-12-12 11:00:14,382 - app.core.excel.processor - INFO - 处理商品: 条码=6932024200583, 数量=4.0, 单价=1.7, 是否赠品=False +2025-12-12 11:00:14,383 - app.core.excel.processor - INFO - 发现正常商品:条码6932024200583, 数量=4.0, 单价=1.7 +2025-12-12 11:00:14,383 - app.core.excel.processor - INFO - 处理商品: 条码=6901668936714, 数量=4.0, 单价=5.2, 是否赠品=False +2025-12-12 11:00:14,383 - app.core.excel.processor - INFO - 发现正常商品:条码6901668936714, 数量=4.0, 单价=5.2 +2025-12-12 11:00:14,383 - app.core.excel.processor - INFO - 处理商品: 条码=6901668062499, 数量=4.0, 单价=5.2, 是否赠品=False +2025-12-12 11:00:14,383 - app.core.excel.processor - INFO - 发现正常商品:条码6901668062499, 数量=4.0, 单价=5.2 +2025-12-12 11:00:14,383 - app.core.excel.processor - INFO - 处理商品: 条码=6925332600046, 数量=3.0, 单价=3.8, 是否赠品=False +2025-12-12 11:00:14,383 - app.core.excel.processor - INFO - 发现正常商品:条码6925332600046, 数量=3.0, 单价=3.8 +2025-12-12 11:00:14,383 - app.core.excel.processor - INFO - 处理商品: 条码=6921233904955, 数量=4.0, 单价=3.8, 是否赠品=False +2025-12-12 11:00:14,383 - app.core.excel.processor - INFO - 发现正常商品:条码6921233904955, 数量=4.0, 单价=3.8 +2025-12-12 11:00:14,383 - app.core.excel.processor - INFO - 处理商品: 条码=6901180993387, 数量=3.0, 单价=3.0, 是否赠品=False +2025-12-12 11:00:14,383 - app.core.excel.processor - INFO - 发现正常商品:条码6901180993387, 数量=3.0, 单价=3.0 +2025-12-12 11:00:14,383 - app.core.excel.processor - INFO - 处理商品: 条码=6901180993486, 数量=3.0, 单价=3.0, 是否赠品=False +2025-12-12 11:00:14,383 - app.core.excel.processor - INFO - 发现正常商品:条码6901180993486, 数量=3.0, 单价=3.0 +2025-12-12 11:00:14,383 - app.core.excel.processor - INFO - 处理商品: 条码=6920546800046, 数量=5.0, 单价=3.95, 是否赠品=False +2025-12-12 11:00:14,387 - app.core.excel.processor - INFO - 发现正常商品:条码6920546800046, 数量=5.0, 单价=3.95 +2025-12-12 11:00:14,387 - app.core.excel.processor - INFO - 处理商品: 条码=6920546800053, 数量=5.0, 单价=4.5, 是否赠品=False +2025-12-12 11:00:14,388 - app.core.excel.processor - INFO - 发现正常商品:条码6920546800053, 数量=5.0, 单价=4.5 +2025-12-12 11:00:14,388 - app.core.excel.processor - INFO - 处理商品: 条码=6911988006783, 数量=1.0, 单价=5.88, 是否赠品=False +2025-12-12 11:00:14,388 - app.core.excel.processor - INFO - 发现正常商品:条码6911988006783, 数量=1.0, 单价=5.88 +2025-12-12 11:00:14,388 - app.core.excel.processor - INFO - 处理商品: 条码=6971295190759, 数量=20.0, 单价=15.0, 是否赠品=False +2025-12-12 11:00:14,389 - app.core.excel.processor - INFO - 发现正常商品:条码6971295190759, 数量=20.0, 单价=15.0 +2025-12-12 11:00:14,389 - app.core.excel.processor - INFO - 处理商品: 条码=6951957217307, 数量=20.0, 单价=26.6, 是否赠品=False +2025-12-12 11:00:14,389 - app.core.excel.processor - INFO - 发现正常商品:条码6951957217307, 数量=20.0, 单价=26.6 +2025-12-12 11:00:14,389 - app.core.excel.processor - INFO - 处理商品: 条码=6951957215723, 数量=20.0, 单价=26.6, 是否赠品=False +2025-12-12 11:00:14,390 - app.core.excel.processor - INFO - 发现正常商品:条码6951957215723, 数量=20.0, 单价=26.6 +2025-12-12 11:00:14,390 - app.core.excel.processor - INFO - 处理商品: 条码=697753026007269253001004, 数量=50.0, 单价=17.5, 是否赠品=False +2025-12-12 11:00:14,390 - app.core.excel.processor - INFO - 发现正常商品:条码697753026007269253001004, 数量=50.0, 单价=17.5 +2025-12-12 11:00:14,391 - app.core.excel.processor - INFO - 处理商品: 条码=6922170800638, 数量=20.0, 单价=15.0, 是否赠品=False +2025-12-12 11:00:14,391 - app.core.excel.processor - INFO - 发现正常商品:条码6922170800638, 数量=20.0, 单价=15.0 +2025-12-12 11:00:14,391 - app.core.excel.processor - INFO - 处理商品: 条码=69029981, 数量=16.0, 单价=23.2, 是否赠品=False +2025-12-12 11:00:14,392 - app.core.excel.processor - INFO - 发现正常商品:条码69029981, 数量=16.0, 单价=23.2 +2025-12-12 11:00:14,392 - app.core.excel.processor - INFO - 处理商品: 条码=6936869215092, 数量=15.0, 单价=1.5, 是否赠品=False +2025-12-12 11:00:14,392 - app.core.excel.processor - INFO - 发现正常商品:条码6936869215092, 数量=15.0, 单价=1.5 +2025-12-12 11:00:14,392 - app.core.excel.processor - INFO - 处理商品: 条码=6951957205762, 数量=20.0, 单价=14.2, 是否赠品=False +2025-12-12 11:00:14,392 - app.core.excel.processor - INFO - 发现正常商品:条码6951957205762, 数量=20.0, 单价=14.2 +2025-12-12 11:00:14,392 - app.core.excel.processor - INFO - 处理商品: 条码=6976481800078, 数量=30.0, 单价=22.5, 是否赠品=False +2025-12-12 11:00:14,392 - app.core.excel.processor - INFO - 发现正常商品:条码6976481800078, 数量=30.0, 单价=22.5 +2025-12-12 11:00:14,392 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919266, 数量=5.0, 单价=4.79, 是否赠品=False +2025-12-12 11:00:14,392 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919266, 数量=5.0, 单价=4.79 +2025-12-12 11:00:14,392 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919259, 数量=5.0, 单价=4.79, 是否赠品=False +2025-12-12 11:00:14,392 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919259, 数量=5.0, 单价=4.79 +2025-12-12 11:00:14,392 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919228, 数量=3.0, 单价=4.79, 是否赠品=False +2025-12-12 11:00:14,392 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919228, 数量=3.0, 单价=4.79 +2025-12-12 11:00:14,392 - app.core.excel.processor - INFO - 处理商品: 条码=6924743928077, 数量=1.0, 单价=1.35, 是否赠品=False +2025-12-12 11:00:14,396 - app.core.excel.processor - INFO - 发现正常商品:条码6924743928077, 数量=1.0, 单价=1.35 +2025-12-12 11:00:14,396 - app.core.excel.processor - INFO - 分组后共51 个不同条码的商品 +2025-12-12 11:00:14,396 - app.core.excel.processor - INFO - 条码 6954767432076 处理结果:正常商品数量48.0,单价55.68,赠品数量0 +2025-12-12 11:00:14,396 - app.core.excel.processor - INFO - 条码 6954767433073 处理结果:正常商品数量8.0,单价44.32,赠品数量0 +2025-12-12 11:00:14,396 - app.core.excel.processor - INFO - 条码 6901285992933 处理结果:正常商品数量40.0,单价21.52,赠品数量0 +2025-12-12 11:00:14,396 - app.core.excel.processor - INFO - 条码 6901285991530 处理结果:正常商品数量8.0,单价26.08,赠品数量0 +2025-12-12 11:00:14,398 - app.core.excel.processor - INFO - 条码 6901285991271 处理结果:正常商品数量60.0,单价24.6,赠品数量0 +2025-12-12 11:00:14,398 - app.core.excel.processor - INFO - 条码 6920584471017 处理结果:正常商品数量12.0,单价54.0,赠品数量0 +2025-12-12 11:00:14,398 - app.core.excel.processor - INFO - 条码 6901668934925 处理结果:正常商品数量5.0,单价6.5,赠品数量0 +2025-12-12 11:00:14,398 - app.core.excel.processor - INFO - 条码 6901668054715 处理结果:正常商品数量4.0,单价3.6,赠品数量0 +2025-12-12 11:00:14,399 - app.core.excel.processor - INFO - 条码 6901668053916 处理结果:正常商品数量3.0,单价3.6,赠品数量0 +2025-12-12 11:00:14,399 - app.core.excel.processor - INFO - 条码 6920907800616 处理结果:正常商品数量4.0,单价3.0,赠品数量0 +2025-12-12 11:00:14,399 - app.core.excel.processor - INFO - 条码 6935855700383 处理结果:正常商品数量8.0,单价38.0,赠品数量0 +2025-12-12 11:00:14,400 - app.core.excel.processor - INFO - 条码 6925683200957 处理结果:正常商品数量8.0,单价28.0,赠品数量0 +2025-12-12 11:00:14,400 - app.core.excel.processor - INFO - 条码 6901845044027 处理结果:正常商品数量4.0,单价5.55,赠品数量0 +2025-12-12 11:00:14,400 - app.core.excel.processor - INFO - 条码 6901845040968 处理结果:正常商品数量5.0,单价5.55,赠品数量0 +2025-12-12 11:00:14,401 - app.core.excel.processor - INFO - 条码 6901668935649 处理结果:正常商品数量6.0,单价1.99,赠品数量0 +2025-12-12 11:00:14,401 - app.core.excel.processor - INFO - 条码 6901668935663 处理结果:正常商品数量5.0,单价1.99,赠品数量0 +2025-12-12 11:00:14,401 - app.core.excel.processor - INFO - 条码 6947929617534 处理结果:正常商品数量4.0,单价2.66,赠品数量0 +2025-12-12 11:00:14,402 - app.core.excel.processor - INFO - 条码 6947929617138 处理结果:正常商品数量4.0,单价2.66,赠品数量0 +2025-12-12 11:00:14,402 - app.core.excel.processor - INFO - 条码 6901668200013 处理结果:正常商品数量3.0,单价3.5,赠品数量0 +2025-12-12 11:00:14,402 - app.core.excel.processor - INFO - 条码 6901668200303 处理结果:正常商品数量3.0,单价3.5,赠品数量0 +2025-12-12 11:00:14,403 - app.core.excel.processor - INFO - 条码 6911988005229 处理结果:正常商品数量4.0,单价2.25,赠品数量0 +2025-12-12 11:00:14,403 - app.core.excel.processor - INFO - 条码 6911988000293 处理结果:正常商品数量4.0,单价3.8,赠品数量0 +2025-12-12 11:00:14,403 - app.core.excel.processor - INFO - 条码 6911988000286 处理结果:正常商品数量3.0,单价3.8,赠品数量0 +2025-12-12 11:00:14,404 - app.core.excel.processor - INFO - 条码 6911988009777 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:00:14,404 - app.core.excel.processor - INFO - 条码 6911988009760 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:00:14,404 - app.core.excel.processor - INFO - 条码 6911988009784 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:00:14,404 - app.core.excel.processor - INFO - 条码 6901180581683 处理结果:正常商品数量2.0,单价3.8,赠品数量0 +2025-12-12 11:00:14,405 - app.core.excel.processor - INFO - 条码 6932024200552 处理结果:正常商品数量3.0,单价3.0,赠品数量0 +2025-12-12 11:00:14,405 - app.core.excel.processor - INFO - 条码 6932024200583 处理结果:正常商品数量4.0,单价1.7,赠品数量0 +2025-12-12 11:00:14,405 - app.core.excel.processor - INFO - 条码 6901668936714 处理结果:正常商品数量4.0,单价5.2,赠品数量0 +2025-12-12 11:00:14,405 - app.core.excel.processor - INFO - 条码 6901668062499 处理结果:正常商品数量4.0,单价5.2,赠品数量0 +2025-12-12 11:00:14,405 - app.core.excel.processor - INFO - 条码 6925332600046 处理结果:正常商品数量3.0,单价3.8,赠品数量0 +2025-12-12 11:00:14,405 - app.core.excel.processor - INFO - 条码 6921233904955 处理结果:正常商品数量4.0,单价3.8,赠品数量0 +2025-12-12 11:00:14,405 - app.core.excel.processor - INFO - 条码 6901180993387 处理结果:正常商品数量3.0,单价3.0,赠品数量0 +2025-12-12 11:00:14,405 - app.core.excel.processor - INFO - 条码 6901180993486 处理结果:正常商品数量3.0,单价3.0,赠品数量0 +2025-12-12 11:00:14,405 - app.core.excel.processor - INFO - 条码 6920546800046 处理结果:正常商品数量5.0,单价3.95,赠品数量0 +2025-12-12 11:00:14,408 - app.core.excel.processor - INFO - 条码 6920546800053 处理结果:正常商品数量5.0,单价4.5,赠品数量0 +2025-12-12 11:00:14,408 - app.core.excel.processor - INFO - 条码 6911988006783 处理结果:正常商品数量1.0,单价5.88,赠品数量0 +2025-12-12 11:00:14,408 - app.core.excel.processor - INFO - 条码 6971295190759 处理结果:正常商品数量20.0,单价15.0,赠品数量0 +2025-12-12 11:00:14,408 - app.core.excel.processor - INFO - 条码 6951957217307 处理结果:正常商品数量20.0,单价26.6,赠品数量0 +2025-12-12 11:00:14,409 - app.core.excel.processor - INFO - 条码 6951957215723 处理结果:正常商品数量20.0,单价26.6,赠品数量0 +2025-12-12 11:00:14,409 - app.core.excel.processor - INFO - 条码 697753026007269253001004 处理结果:正常商品数量50.0,单价17.5,赠品数量0 +2025-12-12 11:00:14,409 - app.core.excel.processor - INFO - 条码 6922170800638 处理结果:正常商品数量20.0,单价15.0,赠品数量0 +2025-12-12 11:00:14,410 - app.core.excel.processor - INFO - 条码 69029981 处理结果:正常商品数量16.0,单价23.2,赠品数量0 +2025-12-12 11:00:14,410 - app.core.excel.processor - INFO - 条码 6936869215092 处理结果:正常商品数量15.0,单价1.5,赠品数量0 +2025-12-12 11:00:14,410 - app.core.excel.processor - INFO - 条码 6951957205762 处理结果:正常商品数量20.0,单价14.2,赠品数量0 +2025-12-12 11:00:14,410 - app.core.excel.processor - INFO - 条码 6976481800078 处理结果:正常商品数量30.0,单价22.5,赠品数量0 +2025-12-12 11:00:14,411 - app.core.excel.processor - INFO - 条码 6924743919266 处理结果:正常商品数量5.0,单价4.79,赠品数量0 +2025-12-12 11:00:14,411 - app.core.excel.processor - INFO - 条码 6924743919259 处理结果:正常商品数量5.0,单价4.79,赠品数量0 +2025-12-12 11:00:14,411 - app.core.excel.processor - INFO - 条码 6924743919228 处理结果:正常商品数量3.0,单价4.79,赠品数量0 +2025-12-12 11:00:14,411 - app.core.excel.processor - INFO - 条码 6924743928077 处理结果:正常商品数量1.0,单价1.35,赠品数量0 +2025-12-12 11:00:14,420 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_蓉城易购-订单1765440157955.xls +2025-12-12 11:00:14,425 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_蓉城易购-订单1765440157955.xls +2025-12-12 11:13:15,277 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-12 11:13:15,277 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-12-12 11:13:15,285 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-12-12 11:13:15,289 - app.core.excel.processor - INFO - 开始处理Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx +2025-12-12 11:13:15,299 - app.core.excel.processor - INFO - 成功读取Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx, 共 58 行 +2025-12-12 11:13:15,304 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 75 +2025-12-12 11:13:15,305 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-12-12 11:13:15,312 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 57 行有效数据 +2025-12-12 11:13:15,316 - app.core.excel.processor - INFO - 找到部分匹配的条码列: 商品条码(小条码) (包含关键词: 条码) +2025-12-12 11:13:15,316 - app.core.excel.processor - INFO - 使用条码列: 商品条码(小条码) +2025-12-12 11:13:15,317 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-12-12 11:13:15,317 - app.core.excel.processor - INFO - 找到quantity列(部分匹配): 订购数量(小单位) +2025-12-12 11:13:15,318 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-12-12 11:13:15,318 - app.core.excel.processor - INFO - 找到price列(部分匹配): 单价(小单位) +2025-12-12 11:13:15,318 - app.core.excel.processor - INFO - 找到amount列(部分匹配): 优惠后金额(小单位) +2025-12-12 11:13:15,319 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '商品条码(小条码)', 'name': '商品名称', 'quantity': '订购数量(小单位)', 'unit': '单位', 'price': '单价(小单位)', 'amount': '优惠后金额(小单位)'} +2025-12-12 11:13:15,324 - app.core.excel.processor - INFO - 从商品名称推断规格: 雪碧2L@ -> 2L*1, 包装数量=1 +2025-12-12 11:13:15,325 - app.core.excel.processor - INFO - 根据规格推断单位: 2L*1 -> 单位=件 +2025-12-12 11:13:15,326 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝饮用纯净水2.08L@ -> 2.08L*1, 包装数量=1 +2025-12-12 11:13:15,330 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝纯净水4.5L@ -> 4.5L*1, 包装数量=1 +2025-12-12 11:13:15,331 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝饮用纯净水1.555L@ -> 1.555L*1, 包装数量=1 +2025-12-12 11:13:15,333 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥薄脆酸甜草莓味95g@ -> 95*None, 包装数量=95 +2025-12-12 11:13:15,337 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥杯奥草莓味55g@ -> 55*None, 包装数量=55 +2025-12-12 11:13:15,339 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥杯奥巧克力55g@ -> 55*None, 包装数量=55 +2025-12-12 11:13:15,341 - app.core.excel.processor - INFO - 从商品名称推断规格: 好丽友蛋黄派2P46g@ -> 46*None, 包装数量=46 +2025-12-12 11:13:15,344 - app.core.excel.processor - INFO - 从商品名称推断规格: 都市牧场爽口含片正梅味38g@ -> 38*None, 包装数量=38 +2025-12-12 11:13:15,346 - app.core.excel.processor - INFO - 从商品名称推断规格: 林振合维C果C软糖什锦味68g -> 68*None, 包装数量=68 +2025-12-12 11:13:15,348 - app.core.excel.processor - INFO - 从商品名称推断规格: 格力高百醇柠檬48g@ -> 48*None, 包装数量=48 +2025-12-12 11:13:15,350 - app.core.excel.processor - INFO - 从商品名称推断规格: 格力高百醇抹茶慕斯味48g@ -> 48*None, 包装数量=48 +2025-12-12 11:13:15,353 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥饼干经典原味48.5g@ -> 48.5*None, 包装数量=48 +2025-12-12 11:13:15,355 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None, 包装数量=48 +2025-12-12 11:13:15,357 - app.core.excel.processor - INFO - 从商品名称推断规格: 法丽兹曲奇芝士巧克力70g@ -> 70*None, 包装数量=70 +2025-12-12 11:13:15,359 - app.core.excel.processor - INFO - 从商品名称推断规格: 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:13:15,361 - app.core.excel.processor - INFO - 从商品名称推断规格: 太平梳打饼干奶盐味100g@ -> 100*None, 包装数量=100 +2025-12-12 11:13:15,363 - app.core.excel.processor - INFO - 从商品名称推断规格: 太平梳打饼干海苔味100g@ -> 100*None, 包装数量=100 +2025-12-12 11:13:15,363 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园手指饼115g@ -> 115*None, 包装数量=115 +2025-12-12 11:13:15,367 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点杏仁酥饼146g@ -> 146*None, 包装数量=146 +2025-12-12 11:13:15,370 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点核桃酥饼146g@ -> 146*None, 包装数量=146 +2025-12-12 11:13:15,372 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆腰果饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:13:15,373 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆杏仁饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:13:15,374 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆核桃饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:13:15,374 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利威化饼干草莓味115g@ -> 115*None, 包装数量=115 +2025-12-12 11:13:15,379 - app.core.excel.processor - INFO - 从商品名称推断规格: 亨裕饼朱古力味饼干186g -> 186*None, 包装数量=186 +2025-12-12 11:13:15,381 - app.core.excel.processor - INFO - 从商品名称推断规格: 亨裕早茶饼干110g -> 110*None, 包装数量=110 +2025-12-12 11:13:15,383 - app.core.excel.processor - INFO - 从商品名称推断规格: 趣多多香浓巧克力味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:13:15,385 - app.core.excel.processor - INFO - 从商品名称推断规格: 趣多多缤纷逗巧克力85g@ -> 85*None, 包装数量=85 +2025-12-12 11:13:15,388 - app.core.excel.processor - INFO - 从商品名称推断规格: 米老头雪花煎卷椰奶味150g@ -> 150*None, 包装数量=150 +2025-12-12 11:13:15,390 - app.core.excel.processor - INFO - 从商品名称推断规格: 金富士牛乳饼干香浓牛奶味130g@ -> 130*None, 包装数量=130 +2025-12-12 11:13:15,392 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利果乐果香蓝莓味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:13:15,393 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利果乐果香草莓味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:13:15,393 - app.core.excel.processor - INFO - 从商品名称推断规格: 旺旺仙贝52g@ -> 52*None, 包装数量=52 +2025-12-12 11:13:15,398 - app.core.excel.processor - INFO - 从商品名称推断规格: 旺旺雪饼84g@ -> 84*None, 包装数量=84 +2025-12-12 11:13:15,400 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园蛋黄派230g@ -> 230*None, 包装数量=230 +2025-12-12 11:13:15,402 - app.core.excel.processor - INFO - 从商品名称推断规格: 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None, 包装数量=22 +2025-12-12 11:13:15,403 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔手撕肉干麻辣味10g@ -> 10*None, 包装数量=10 +2025-12-12 11:13:15,404 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔手撕肉干香辣味10g@ -> 10*None, 包装数量=10 +2025-12-12 11:13:15,408 - app.core.excel.processor - INFO - 从商品名称推断规格: 登荣香辣爽口鸡23g -> 23*None, 包装数量=23 +2025-12-12 11:13:15,410 - app.core.excel.processor - INFO - 从商品名称推断规格: 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None, 包装数量=12 +2025-12-12 11:13:15,411 - app.core.excel.processor - INFO - 从商品名称推断规格: 味芝元洞庭鱼排香辣味26g -> 26*None, 包装数量=26 +2025-12-12 11:13:15,413 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔小鱼麻辣小鱼12g@ -> 12*None, 包装数量=12 +2025-12-12 11:13:15,413 - app.core.excel.processor - INFO - 从商品名称推断规格: 缺牙齿素牛肚香辣味16g -> 16*None, 包装数量=16 +2025-12-12 11:13:15,419 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事青柠味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:13:15,420 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事黄瓜味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:13:15,422 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事德克萨斯烧烤味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:13:15,423 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事薯片经典原味23g(串串装)@ -> 23*None, 包装数量=23 +2025-12-12 11:13:15,423 - app.core.excel.processor - INFO - 提取到 52 个商品信息 +2025-12-12 11:13:15,427 - app.core.excel.processor - INFO - 开始处理52 个产品信息 +2025-12-12 11:13:15,431 - app.core.excel.processor - INFO - 处理商品: 条码=6954767432076, 数量=48.0, 单价=55.68, 是否赠品=False +2025-12-12 11:13:15,431 - app.core.excel.processor - INFO - 发现正常商品:条码6954767432076, 数量=48.0, 单价=55.68 +2025-12-12 11:13:15,432 - app.core.excel.processor - INFO - 处理商品: 条码=6954767433073, 数量=8.0, 单价=44.32, 是否赠品=False +2025-12-12 11:13:15,432 - app.core.excel.processor - INFO - 发现正常商品:条码6954767433073, 数量=8.0, 单价=44.32 +2025-12-12 11:13:15,432 - app.core.excel.processor - INFO - 处理商品: 条码=6901285992933, 数量=40.0, 单价=21.52, 是否赠品=False +2025-12-12 11:13:15,433 - app.core.excel.processor - INFO - 发现正常商品:条码6901285992933, 数量=40.0, 单价=21.52 +2025-12-12 11:13:15,433 - app.core.excel.processor - INFO - 处理商品: 条码=6901285991530, 数量=8.0, 单价=26.08, 是否赠品=False +2025-12-12 11:13:15,433 - app.core.excel.processor - INFO - 发现正常商品:条码6901285991530, 数量=8.0, 单价=26.08 +2025-12-12 11:13:15,434 - app.core.excel.processor - INFO - 处理商品: 条码=6901285991271, 数量=60.0, 单价=24.6, 是否赠品=False +2025-12-12 11:13:15,434 - app.core.excel.processor - INFO - 发现正常商品:条码6901285991271, 数量=60.0, 单价=24.6 +2025-12-12 11:13:15,434 - app.core.excel.processor - INFO - 处理商品: 条码=6920584471017, 数量=12.0, 单价=54.0, 是否赠品=False +2025-12-12 11:13:15,434 - app.core.excel.processor - INFO - 发现正常商品:条码6920584471017, 数量=12.0, 单价=54.0 +2025-12-12 11:13:15,435 - app.core.excel.processor - INFO - 处理商品: 条码=6901668934925, 数量=5.0, 单价=6.5, 是否赠品=False +2025-12-12 11:13:15,435 - app.core.excel.processor - INFO - 发现正常商品:条码6901668934925, 数量=5.0, 单价=6.5 +2025-12-12 11:13:15,435 - app.core.excel.processor - INFO - 处理商品: 条码=6901668054715, 数量=4.0, 单价=3.6, 是否赠品=False +2025-12-12 11:13:15,435 - app.core.excel.processor - INFO - 发现正常商品:条码6901668054715, 数量=4.0, 单价=3.6 +2025-12-12 11:13:15,436 - app.core.excel.processor - INFO - 处理商品: 条码=6901668053916, 数量=3.0, 单价=3.6, 是否赠品=False +2025-12-12 11:13:15,436 - app.core.excel.processor - INFO - 发现正常商品:条码6901668053916, 数量=3.0, 单价=3.6 +2025-12-12 11:13:15,436 - app.core.excel.processor - INFO - 处理商品: 条码=6920907800616, 数量=4.0, 单价=3.0, 是否赠品=False +2025-12-12 11:13:15,437 - app.core.excel.processor - INFO - 发现正常商品:条码6920907800616, 数量=4.0, 单价=3.0 +2025-12-12 11:13:15,438 - app.core.excel.processor - INFO - 处理商品: 条码=6935855700383, 数量=8.0, 单价=38.0, 是否赠品=False +2025-12-12 11:13:15,438 - app.core.excel.processor - INFO - 发现正常商品:条码6935855700383, 数量=8.0, 单价=38.0 +2025-12-12 11:13:15,438 - app.core.excel.processor - INFO - 处理商品: 条码=6925683200957, 数量=8.0, 单价=28.0, 是否赠品=False +2025-12-12 11:13:15,438 - app.core.excel.processor - INFO - 发现正常商品:条码6925683200957, 数量=8.0, 单价=28.0 +2025-12-12 11:13:15,438 - app.core.excel.processor - INFO - 处理商品: 条码=6901845044027, 数量=4.0, 单价=5.55, 是否赠品=False +2025-12-12 11:13:15,439 - app.core.excel.processor - INFO - 发现正常商品:条码6901845044027, 数量=4.0, 单价=5.55 +2025-12-12 11:13:15,439 - app.core.excel.processor - INFO - 处理商品: 条码=6901845040968, 数量=5.0, 单价=5.55, 是否赠品=False +2025-12-12 11:13:15,439 - app.core.excel.processor - INFO - 发现正常商品:条码6901845040968, 数量=5.0, 单价=5.55 +2025-12-12 11:13:15,439 - app.core.excel.processor - INFO - 处理商品: 条码=6901668935649, 数量=6.0, 单价=1.99, 是否赠品=False +2025-12-12 11:13:15,439 - app.core.excel.processor - INFO - 发现正常商品:条码6901668935649, 数量=6.0, 单价=1.99 +2025-12-12 11:13:15,440 - app.core.excel.processor - INFO - 处理商品: 条码=6901668935663, 数量=5.0, 单价=1.99, 是否赠品=False +2025-12-12 11:13:15,440 - app.core.excel.processor - INFO - 发现正常商品:条码6901668935663, 数量=5.0, 单价=1.99 +2025-12-12 11:13:15,440 - app.core.excel.processor - INFO - 处理商品: 条码=6947929617534, 数量=4.0, 单价=2.66, 是否赠品=False +2025-12-12 11:13:15,441 - app.core.excel.processor - INFO - 发现正常商品:条码6947929617534, 数量=4.0, 单价=2.66 +2025-12-12 11:13:15,442 - app.core.excel.processor - INFO - 处理商品: 条码=6947929617138, 数量=4.0, 单价=2.66, 是否赠品=False +2025-12-12 11:13:15,442 - app.core.excel.processor - INFO - 发现正常商品:条码6947929617138, 数量=4.0, 单价=2.66 +2025-12-12 11:13:15,442 - app.core.excel.processor - INFO - 处理商品: 条码=6901668200013, 数量=3.0, 单价=3.5, 是否赠品=False +2025-12-12 11:13:15,442 - app.core.excel.processor - INFO - 发现正常商品:条码6901668200013, 数量=3.0, 单价=3.5 +2025-12-12 11:13:15,442 - app.core.excel.processor - INFO - 处理商品: 条码=6901668200303, 数量=3.0, 单价=3.5, 是否赠品=False +2025-12-12 11:13:15,442 - app.core.excel.processor - INFO - 发现正常商品:条码6901668200303, 数量=3.0, 单价=3.5 +2025-12-12 11:13:15,442 - app.core.excel.processor - INFO - 处理商品: 条码=6911988005229, 数量=4.0, 单价=2.25, 是否赠品=False +2025-12-12 11:13:15,442 - app.core.excel.processor - INFO - 发现正常商品:条码6911988005229, 数量=4.0, 单价=2.25 +2025-12-12 11:13:15,442 - app.core.excel.processor - INFO - 处理商品: 条码=6911988000293, 数量=4.0, 单价=3.8, 是否赠品=False +2025-12-12 11:13:15,442 - app.core.excel.processor - INFO - 发现正常商品:条码6911988000293, 数量=4.0, 单价=3.8 +2025-12-12 11:13:15,442 - app.core.excel.processor - INFO - 处理商品: 条码=6911988000286, 数量=3.0, 单价=3.8, 是否赠品=False +2025-12-12 11:13:15,442 - app.core.excel.processor - INFO - 发现正常商品:条码6911988000286, 数量=3.0, 单价=3.8 +2025-12-12 11:13:15,442 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009777, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:13:15,442 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009777, 数量=3.0, 单价=2.85 +2025-12-12 11:13:15,442 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009760, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:13:15,446 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009760, 数量=3.0, 单价=2.85 +2025-12-12 11:13:15,446 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009784, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:13:15,446 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009784, 数量=3.0, 单价=2.85 +2025-12-12 11:13:15,447 - app.core.excel.processor - INFO - 处理商品: 条码=6901180581683, 数量=2.0, 单价=3.8, 是否赠品=False +2025-12-12 11:13:15,447 - app.core.excel.processor - INFO - 发现正常商品:条码6901180581683, 数量=2.0, 单价=3.8 +2025-12-12 11:13:15,447 - app.core.excel.processor - INFO - 处理商品: 条码=6932024200552, 数量=3.0, 单价=3.0, 是否赠品=False +2025-12-12 11:13:15,447 - app.core.excel.processor - INFO - 发现正常商品:条码6932024200552, 数量=3.0, 单价=3.0 +2025-12-12 11:13:15,448 - app.core.excel.processor - INFO - 处理商品: 条码=6932024200583, 数量=4.0, 单价=1.7, 是否赠品=False +2025-12-12 11:13:15,448 - app.core.excel.processor - INFO - 发现正常商品:条码6932024200583, 数量=4.0, 单价=1.7 +2025-12-12 11:13:15,448 - app.core.excel.processor - INFO - 处理商品: 条码=6901668936714, 数量=4.0, 单价=5.2, 是否赠品=False +2025-12-12 11:13:15,448 - app.core.excel.processor - INFO - 发现正常商品:条码6901668936714, 数量=4.0, 单价=5.2 +2025-12-12 11:13:15,449 - app.core.excel.processor - INFO - 处理商品: 条码=6901668062499, 数量=4.0, 单价=5.2, 是否赠品=False +2025-12-12 11:13:15,449 - app.core.excel.processor - INFO - 发现正常商品:条码6901668062499, 数量=4.0, 单价=5.2 +2025-12-12 11:13:15,449 - app.core.excel.processor - INFO - 处理商品: 条码=6925332600046, 数量=3.0, 单价=3.8, 是否赠品=False +2025-12-12 11:13:15,449 - app.core.excel.processor - INFO - 发现正常商品:条码6925332600046, 数量=3.0, 单价=3.8 +2025-12-12 11:13:15,450 - app.core.excel.processor - INFO - 处理商品: 条码=6921233904955, 数量=4.0, 单价=3.8, 是否赠品=False +2025-12-12 11:13:15,450 - app.core.excel.processor - INFO - 发现正常商品:条码6921233904955, 数量=4.0, 单价=3.8 +2025-12-12 11:13:15,450 - app.core.excel.processor - INFO - 处理商品: 条码=6901180993387, 数量=3.0, 单价=3.0, 是否赠品=False +2025-12-12 11:13:15,450 - app.core.excel.processor - INFO - 发现正常商品:条码6901180993387, 数量=3.0, 单价=3.0 +2025-12-12 11:13:15,451 - app.core.excel.processor - INFO - 处理商品: 条码=6901180993486, 数量=3.0, 单价=3.0, 是否赠品=False +2025-12-12 11:13:15,451 - app.core.excel.processor - INFO - 发现正常商品:条码6901180993486, 数量=3.0, 单价=3.0 +2025-12-12 11:13:15,451 - app.core.excel.processor - INFO - 处理商品: 条码=6920546800046, 数量=5.0, 单价=3.95, 是否赠品=False +2025-12-12 11:13:15,452 - app.core.excel.processor - INFO - 发现正常商品:条码6920546800046, 数量=5.0, 单价=3.95 +2025-12-12 11:13:15,453 - app.core.excel.processor - INFO - 处理商品: 条码=6920546800053, 数量=5.0, 单价=4.5, 是否赠品=False +2025-12-12 11:13:15,453 - app.core.excel.processor - INFO - 发现正常商品:条码6920546800053, 数量=5.0, 单价=4.5 +2025-12-12 11:13:15,453 - app.core.excel.processor - INFO - 处理商品: 条码=6911988006783, 数量=1.0, 单价=5.88, 是否赠品=False +2025-12-12 11:13:15,453 - app.core.excel.processor - INFO - 发现正常商品:条码6911988006783, 数量=1.0, 单价=5.88 +2025-12-12 11:13:15,453 - app.core.excel.processor - INFO - 处理商品: 条码=6971295190759, 数量=20.0, 单价=15.0, 是否赠品=False +2025-12-12 11:13:15,453 - app.core.excel.processor - INFO - 发现正常商品:条码6971295190759, 数量=20.0, 单价=15.0 +2025-12-12 11:13:15,453 - app.core.excel.processor - INFO - 处理商品: 条码=6951957217307, 数量=20.0, 单价=26.6, 是否赠品=False +2025-12-12 11:13:15,453 - app.core.excel.processor - INFO - 发现正常商品:条码6951957217307, 数量=20.0, 单价=26.6 +2025-12-12 11:13:15,453 - app.core.excel.processor - INFO - 处理商品: 条码=6951957215723, 数量=20.0, 单价=26.6, 是否赠品=False +2025-12-12 11:13:15,456 - app.core.excel.processor - INFO - 发现正常商品:条码6951957215723, 数量=20.0, 单价=26.6 +2025-12-12 11:13:15,456 - app.core.excel.processor - INFO - 处理商品: 条码=6977530260072, 数量=25.0, 单价=17.5, 是否赠品=False +2025-12-12 11:13:15,456 - app.core.excel.processor - INFO - 发现正常商品:条码6977530260072, 数量=25.0, 单价=17.5 +2025-12-12 11:13:15,456 - app.core.excel.processor - INFO - 处理商品: 条码=6925300100400, 数量=25.0, 单价=17.5, 是否赠品=False +2025-12-12 11:13:15,456 - app.core.excel.processor - INFO - 发现正常商品:条码6925300100400, 数量=25.0, 单价=17.5 +2025-12-12 11:13:15,456 - app.core.excel.processor - INFO - 处理商品: 条码=6922170800638, 数量=20.0, 单价=15.0, 是否赠品=False +2025-12-12 11:13:15,457 - app.core.excel.processor - INFO - 发现正常商品:条码6922170800638, 数量=20.0, 单价=15.0 +2025-12-12 11:13:15,457 - app.core.excel.processor - INFO - 处理商品: 条码=690299810, 数量=16.0, 单价=23.2, 是否赠品=False +2025-12-12 11:13:15,457 - app.core.excel.processor - INFO - 发现正常商品:条码690299810, 数量=16.0, 单价=23.2 +2025-12-12 11:13:15,457 - app.core.excel.processor - INFO - 处理商品: 条码=6936869215092, 数量=15.0, 单价=1.5, 是否赠品=False +2025-12-12 11:13:15,458 - app.core.excel.processor - INFO - 发现正常商品:条码6936869215092, 数量=15.0, 单价=1.5 +2025-12-12 11:13:15,458 - app.core.excel.processor - INFO - 处理商品: 条码=6951957205762, 数量=20.0, 单价=14.2, 是否赠品=False +2025-12-12 11:13:15,458 - app.core.excel.processor - INFO - 发现正常商品:条码6951957205762, 数量=20.0, 单价=14.2 +2025-12-12 11:13:15,458 - app.core.excel.processor - INFO - 处理商品: 条码=6976481800078, 数量=30.0, 单价=22.5, 是否赠品=False +2025-12-12 11:13:15,459 - app.core.excel.processor - INFO - 发现正常商品:条码6976481800078, 数量=30.0, 单价=22.5 +2025-12-12 11:13:15,459 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919266, 数量=5.0, 单价=4.79, 是否赠品=False +2025-12-12 11:13:15,459 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919266, 数量=5.0, 单价=4.79 +2025-12-12 11:13:15,459 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919259, 数量=5.0, 单价=4.79, 是否赠品=False +2025-12-12 11:13:15,460 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919259, 数量=5.0, 单价=4.79 +2025-12-12 11:13:15,460 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919228, 数量=3.0, 单价=4.79, 是否赠品=False +2025-12-12 11:13:15,460 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919228, 数量=3.0, 单价=4.79 +2025-12-12 11:13:15,460 - app.core.excel.processor - INFO - 处理商品: 条码=6924743928077, 数量=1.0, 单价=1.35, 是否赠品=False +2025-12-12 11:13:15,460 - app.core.excel.processor - INFO - 发现正常商品:条码6924743928077, 数量=1.0, 单价=1.35 +2025-12-12 11:13:15,461 - app.core.excel.processor - INFO - 分组后共52 个不同条码的商品 +2025-12-12 11:13:15,461 - app.core.excel.processor - INFO - 条码 6954767432076 处理结果:正常商品数量48.0,单价55.68,赠品数量0 +2025-12-12 11:13:15,462 - app.core.excel.processor - INFO - 条码 6954767433073 处理结果:正常商品数量8.0,单价44.32,赠品数量0 +2025-12-12 11:13:15,462 - app.core.excel.processor - INFO - 条码 6901285992933 处理结果:正常商品数量40.0,单价21.52,赠品数量0 +2025-12-12 11:13:15,462 - app.core.excel.processor - INFO - 条码 6901285991530 处理结果:正常商品数量8.0,单价26.08,赠品数量0 +2025-12-12 11:13:15,462 - app.core.excel.processor - INFO - 条码 6901285991271 处理结果:正常商品数量60.0,单价24.6,赠品数量0 +2025-12-12 11:13:15,462 - app.core.excel.processor - INFO - 条码 6920584471017 处理结果:正常商品数量12.0,单价54.0,赠品数量0 +2025-12-12 11:13:15,462 - app.core.excel.processor - INFO - 条码 6901668934925 处理结果:正常商品数量5.0,单价6.5,赠品数量0 +2025-12-12 11:13:15,462 - app.core.excel.processor - INFO - 条码 6901668054715 处理结果:正常商品数量4.0,单价3.6,赠品数量0 +2025-12-12 11:13:15,462 - app.core.excel.processor - INFO - 条码 6901668053916 处理结果:正常商品数量3.0,单价3.6,赠品数量0 +2025-12-12 11:13:15,462 - app.core.excel.processor - INFO - 条码 6920907800616 处理结果:正常商品数量4.0,单价3.0,赠品数量0 +2025-12-12 11:13:15,462 - app.core.excel.processor - INFO - 条码 6935855700383 处理结果:正常商品数量8.0,单价38.0,赠品数量0 +2025-12-12 11:13:15,462 - app.core.excel.processor - INFO - 条码 6925683200957 处理结果:正常商品数量8.0,单价28.0,赠品数量0 +2025-12-12 11:13:15,462 - app.core.excel.processor - INFO - 条码 6901845044027 处理结果:正常商品数量4.0,单价5.55,赠品数量0 +2025-12-12 11:13:15,462 - app.core.excel.processor - INFO - 条码 6901845040968 处理结果:正常商品数量5.0,单价5.55,赠品数量0 +2025-12-12 11:13:15,462 - app.core.excel.processor - INFO - 条码 6901668935649 处理结果:正常商品数量6.0,单价1.99,赠品数量0 +2025-12-12 11:13:15,462 - app.core.excel.processor - INFO - 条码 6901668935663 处理结果:正常商品数量5.0,单价1.99,赠品数量0 +2025-12-12 11:13:15,466 - app.core.excel.processor - INFO - 条码 6947929617534 处理结果:正常商品数量4.0,单价2.66,赠品数量0 +2025-12-12 11:13:15,466 - app.core.excel.processor - INFO - 条码 6947929617138 处理结果:正常商品数量4.0,单价2.66,赠品数量0 +2025-12-12 11:13:15,466 - app.core.excel.processor - INFO - 条码 6901668200013 处理结果:正常商品数量3.0,单价3.5,赠品数量0 +2025-12-12 11:13:15,466 - app.core.excel.processor - INFO - 条码 6901668200303 处理结果:正常商品数量3.0,单价3.5,赠品数量0 +2025-12-12 11:13:15,466 - app.core.excel.processor - INFO - 条码 6911988005229 处理结果:正常商品数量4.0,单价2.25,赠品数量0 +2025-12-12 11:13:15,466 - app.core.excel.processor - INFO - 条码 6911988000293 处理结果:正常商品数量4.0,单价3.8,赠品数量0 +2025-12-12 11:13:15,467 - app.core.excel.processor - INFO - 条码 6911988000286 处理结果:正常商品数量3.0,单价3.8,赠品数量0 +2025-12-12 11:13:15,467 - app.core.excel.processor - INFO - 条码 6911988009777 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:13:15,467 - app.core.excel.processor - INFO - 条码 6911988009760 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:13:15,467 - app.core.excel.processor - INFO - 条码 6911988009784 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:13:15,468 - app.core.excel.processor - INFO - 条码 6901180581683 处理结果:正常商品数量2.0,单价3.8,赠品数量0 +2025-12-12 11:13:15,468 - app.core.excel.processor - INFO - 条码 6932024200552 处理结果:正常商品数量3.0,单价3.0,赠品数量0 +2025-12-12 11:13:15,468 - app.core.excel.processor - INFO - 条码 6932024200583 处理结果:正常商品数量4.0,单价1.7,赠品数量0 +2025-12-12 11:13:15,468 - app.core.excel.processor - INFO - 条码 6901668936714 处理结果:正常商品数量4.0,单价5.2,赠品数量0 +2025-12-12 11:13:15,468 - app.core.excel.processor - INFO - 条码 6901668062499 处理结果:正常商品数量4.0,单价5.2,赠品数量0 +2025-12-12 11:13:15,469 - app.core.excel.processor - INFO - 条码 6925332600046 处理结果:正常商品数量3.0,单价3.8,赠品数量0 +2025-12-12 11:13:15,469 - app.core.excel.processor - INFO - 条码 6921233904955 处理结果:正常商品数量4.0,单价3.8,赠品数量0 +2025-12-12 11:13:15,469 - app.core.excel.processor - INFO - 条码 6901180993387 处理结果:正常商品数量3.0,单价3.0,赠品数量0 +2025-12-12 11:13:15,469 - app.core.excel.processor - INFO - 条码 6901180993486 处理结果:正常商品数量3.0,单价3.0,赠品数量0 +2025-12-12 11:13:15,470 - app.core.excel.processor - INFO - 条码 6920546800046 处理结果:正常商品数量5.0,单价3.95,赠品数量0 +2025-12-12 11:13:15,470 - app.core.excel.processor - INFO - 条码 6920546800053 处理结果:正常商品数量5.0,单价4.5,赠品数量0 +2025-12-12 11:13:15,470 - app.core.excel.processor - INFO - 条码 6911988006783 处理结果:正常商品数量1.0,单价5.88,赠品数量0 +2025-12-12 11:13:15,470 - app.core.excel.processor - INFO - 条码 6971295190759 处理结果:正常商品数量20.0,单价15.0,赠品数量0 +2025-12-12 11:13:15,470 - app.core.excel.processor - INFO - 条码 6951957217307 处理结果:正常商品数量20.0,单价26.6,赠品数量0 +2025-12-12 11:13:15,470 - app.core.excel.processor - INFO - 条码 6951957215723 处理结果:正常商品数量20.0,单价26.6,赠品数量0 +2025-12-12 11:13:15,470 - app.core.excel.processor - INFO - 条码 6977530260072 处理结果:正常商品数量25.0,单价17.5,赠品数量0 +2025-12-12 11:13:15,472 - app.core.excel.processor - INFO - 条码 6925300100400 处理结果:正常商品数量25.0,单价17.5,赠品数量0 +2025-12-12 11:13:15,472 - app.core.excel.processor - INFO - 条码 6922170800638 处理结果:正常商品数量20.0,单价15.0,赠品数量0 +2025-12-12 11:13:15,472 - app.core.excel.processor - INFO - 条码 690299810 处理结果:正常商品数量16.0,单价23.2,赠品数量0 +2025-12-12 11:13:15,472 - app.core.excel.processor - INFO - 条码 6936869215092 处理结果:正常商品数量15.0,单价1.5,赠品数量0 +2025-12-12 11:13:15,473 - app.core.excel.processor - INFO - 条码 6951957205762 处理结果:正常商品数量20.0,单价14.2,赠品数量0 +2025-12-12 11:13:15,473 - app.core.excel.processor - INFO - 条码 6976481800078 处理结果:正常商品数量30.0,单价22.5,赠品数量0 +2025-12-12 11:13:15,473 - app.core.excel.processor - INFO - 条码 6924743919266 处理结果:正常商品数量5.0,单价4.79,赠品数量0 +2025-12-12 11:13:15,473 - app.core.excel.processor - INFO - 条码 6924743919259 处理结果:正常商品数量5.0,单价4.79,赠品数量0 +2025-12-12 11:13:15,474 - app.core.excel.processor - INFO - 条码 6924743919228 处理结果:正常商品数量3.0,单价4.79,赠品数量0 +2025-12-12 11:13:15,474 - app.core.excel.processor - INFO - 条码 6924743928077 处理结果:正常商品数量1.0,单价1.35,赠品数量0 +2025-12-12 11:13:15,477 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_蓉城易购-订单1765440157955.xls +2025-12-12 11:13:15,478 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_蓉城易购-订单1765440157955.xls +2025-12-12 11:22:25,990 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-12 11:22:25,990 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-12-12 11:22:25,990 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-12-12 11:22:25,990 - app.core.excel.processor - INFO - 开始处理Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx +2025-12-12 11:22:26,003 - app.core.excel.processor - INFO - 成功读取Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx, 共 57 行 +2025-12-12 11:22:26,006 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 75 +2025-12-12 11:22:26,006 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-12-12 11:22:26,018 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 56 行有效数据 +2025-12-12 11:22:26,018 - app.core.excel.processor - INFO - 找到部分匹配的条码列: 商品条码(小条码) (包含关键词: 条码) +2025-12-12 11:22:26,018 - app.core.excel.processor - INFO - 使用条码列: 商品条码(小条码) +2025-12-12 11:22:26,019 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-12-12 11:22:26,019 - app.core.excel.processor - INFO - 找到quantity列(部分匹配): 订购数量(小单位) +2025-12-12 11:22:26,020 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-12-12 11:22:26,020 - app.core.excel.processor - INFO - 找到price列(部分匹配): 单价(小单位) +2025-12-12 11:22:26,020 - app.core.excel.processor - INFO - 找到amount列(部分匹配): 优惠后金额(小单位) +2025-12-12 11:22:26,021 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '商品条码(小条码)', 'name': '商品名称', 'quantity': '订购数量(小单位)', 'unit': '单位', 'price': '单价(小单位)', 'amount': '优惠后金额(小单位)'} +2025-12-12 11:22:26,026 - app.core.excel.processor - INFO - 从商品名称推断规格: 雪碧2L@ -> 2L*1, 包装数量=1 +2025-12-12 11:22:26,026 - app.core.excel.processor - INFO - 根据规格推断单位: 2L*1 -> 单位=件 +2025-12-12 11:22:26,028 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝饮用纯净水2.08L@ -> 2.08L*1, 包装数量=1 +2025-12-12 11:22:26,031 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝纯净水4.5L@ -> 4.5L*1, 包装数量=1 +2025-12-12 11:22:26,033 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝饮用纯净水1.555L@ -> 1.555L*1, 包装数量=1 +2025-12-12 11:22:26,035 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥薄脆酸甜草莓味95g@ -> 95*None, 包装数量=95 +2025-12-12 11:22:26,037 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥杯奥草莓味55g@ -> 55*None, 包装数量=55 +2025-12-12 11:22:26,040 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥杯奥巧克力55g@ -> 55*None, 包装数量=55 +2025-12-12 11:22:26,042 - app.core.excel.processor - INFO - 从商品名称推断规格: 好丽友蛋黄派2P46g@ -> 46*None, 包装数量=46 +2025-12-12 11:22:26,043 - app.core.excel.processor - INFO - 从商品名称推断规格: 都市牧场爽口含片正梅味38g@ -> 38*None, 包装数量=38 +2025-12-12 11:22:26,046 - app.core.excel.processor - INFO - 从商品名称推断规格: 林振合维C果C软糖什锦味68g -> 68*None, 包装数量=68 +2025-12-12 11:22:26,048 - app.core.excel.processor - INFO - 从商品名称推断规格: 格力高百醇柠檬48g@ -> 48*None, 包装数量=48 +2025-12-12 11:22:26,050 - app.core.excel.processor - INFO - 从商品名称推断规格: 格力高百醇抹茶慕斯味48g@ -> 48*None, 包装数量=48 +2025-12-12 11:22:26,052 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥饼干经典原味48.5g@ -> 48.5*None, 包装数量=48 +2025-12-12 11:22:26,052 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None, 包装数量=48 +2025-12-12 11:22:26,056 - app.core.excel.processor - INFO - 从商品名称推断规格: 法丽兹曲奇芝士巧克力70g@ -> 70*None, 包装数量=70 +2025-12-12 11:22:26,058 - app.core.excel.processor - INFO - 从商品名称推断规格: 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:22:26,060 - app.core.excel.processor - INFO - 从商品名称推断规格: 太平梳打饼干奶盐味100g@ -> 100*None, 包装数量=100 +2025-12-12 11:22:26,061 - app.core.excel.processor - INFO - 从商品名称推断规格: 太平梳打饼干海苔味100g@ -> 100*None, 包装数量=100 +2025-12-12 11:22:26,065 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园手指饼115g@ -> 115*None, 包装数量=115 +2025-12-12 11:22:26,066 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点杏仁酥饼146g@ -> 146*None, 包装数量=146 +2025-12-12 11:22:26,068 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点核桃酥饼146g@ -> 146*None, 包装数量=146 +2025-12-12 11:22:26,070 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆腰果饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:22:26,072 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆杏仁饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:22:26,073 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆核桃饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:22:26,075 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利威化饼干草莓味115g@ -> 115*None, 包装数量=115 +2025-12-12 11:22:26,075 - app.core.excel.processor - INFO - 从商品名称推断规格: 亨裕饼朱古力味饼干186g -> 186*None, 包装数量=186 +2025-12-12 11:22:26,079 - app.core.excel.processor - INFO - 从商品名称推断规格: 亨裕早茶饼干110g -> 110*None, 包装数量=110 +2025-12-12 11:22:26,080 - app.core.excel.processor - INFO - 从商品名称推断规格: 趣多多香浓巧克力味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:22:26,081 - app.core.excel.processor - INFO - 从商品名称推断规格: 趣多多缤纷逗巧克力85g@ -> 85*None, 包装数量=85 +2025-12-12 11:22:26,083 - app.core.excel.processor - INFO - 从商品名称推断规格: 米老头雪花煎卷椰奶味150g@ -> 150*None, 包装数量=150 +2025-12-12 11:22:26,083 - app.core.excel.processor - INFO - 从商品名称推断规格: 金富士牛乳饼干香浓牛奶味130g@ -> 130*None, 包装数量=130 +2025-12-12 11:22:26,087 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利果乐果香蓝莓味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:22:26,089 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利果乐果香草莓味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:22:26,091 - app.core.excel.processor - INFO - 从商品名称推断规格: 旺旺仙贝52g@ -> 52*None, 包装数量=52 +2025-12-12 11:22:26,091 - app.core.excel.processor - INFO - 从商品名称推断规格: 旺旺雪饼84g@ -> 84*None, 包装数量=84 +2025-12-12 11:22:26,095 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园蛋黄派230g@ -> 230*None, 包装数量=230 +2025-12-12 11:22:26,097 - app.core.excel.processor - INFO - 从商品名称推断规格: 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None, 包装数量=22 +2025-12-12 11:22:26,099 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔手撕肉干麻辣味10g@ -> 10*None, 包装数量=10 +2025-12-12 11:22:26,100 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔手撕肉干香辣味10g@ -> 10*None, 包装数量=10 +2025-12-12 11:22:26,100 - app.core.excel.processor - INFO - 从商品名称推断规格: 登荣香辣爽口鸡23g -> 23*None, 包装数量=23 +2025-12-12 11:22:26,106 - app.core.excel.processor - INFO - 从商品名称推断规格: 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None, 包装数量=12 +2025-12-12 11:22:26,107 - app.core.excel.processor - INFO - 从商品名称推断规格: 味芝元洞庭鱼排香辣味26g -> 26*None, 包装数量=26 +2025-12-12 11:22:26,109 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔小鱼麻辣小鱼12g@ -> 12*None, 包装数量=12 +2025-12-12 11:22:26,110 - app.core.excel.processor - INFO - 从商品名称推断规格: 缺牙齿素牛肚香辣味16g -> 16*None, 包装数量=16 +2025-12-12 11:22:26,111 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事青柠味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:22:26,111 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事黄瓜味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:22:26,116 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事德克萨斯烧烤味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:22:26,118 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事薯片经典原味23g(串串装)@ -> 23*None, 包装数量=23 +2025-12-12 11:22:26,120 - app.core.excel.processor - INFO - 提取到 52 个商品信息 +2025-12-12 11:22:26,123 - app.core.excel.processor - INFO - 开始处理52 个产品信息 +2025-12-12 11:22:26,124 - app.core.excel.processor - INFO - 处理商品: 条码=6954767432076, 数量=48.0, 单价=55.68, 是否赠品=False +2025-12-12 11:22:26,124 - app.core.excel.processor - INFO - 发现正常商品:条码6954767432076, 数量=48.0, 单价=55.68 +2025-12-12 11:22:26,125 - app.core.excel.processor - INFO - 处理商品: 条码=6954767433073, 数量=8.0, 单价=44.32, 是否赠品=False +2025-12-12 11:22:26,125 - app.core.excel.processor - INFO - 发现正常商品:条码6954767433073, 数量=8.0, 单价=44.32 +2025-12-12 11:22:26,125 - app.core.excel.processor - INFO - 处理商品: 条码=6901285992933, 数量=40.0, 单价=21.52, 是否赠品=False +2025-12-12 11:22:26,126 - app.core.excel.processor - INFO - 发现正常商品:条码6901285992933, 数量=40.0, 单价=21.52 +2025-12-12 11:22:26,126 - app.core.excel.processor - INFO - 处理商品: 条码=6901285991530, 数量=8.0, 单价=26.08, 是否赠品=False +2025-12-12 11:22:26,126 - app.core.excel.processor - INFO - 发现正常商品:条码6901285991530, 数量=8.0, 单价=26.08 +2025-12-12 11:22:26,127 - app.core.excel.processor - INFO - 处理商品: 条码=6901285991271, 数量=60.0, 单价=24.6, 是否赠品=False +2025-12-12 11:22:26,127 - app.core.excel.processor - INFO - 发现正常商品:条码6901285991271, 数量=60.0, 单价=24.6 +2025-12-12 11:22:26,128 - app.core.excel.processor - INFO - 处理商品: 条码=6920584471017, 数量=12.0, 单价=54.0, 是否赠品=False +2025-12-12 11:22:26,128 - app.core.excel.processor - INFO - 发现正常商品:条码6920584471017, 数量=12.0, 单价=54.0 +2025-12-12 11:22:26,129 - app.core.excel.processor - INFO - 处理商品: 条码=6901668934925, 数量=5.0, 单价=6.5, 是否赠品=False +2025-12-12 11:22:26,129 - app.core.excel.processor - INFO - 发现正常商品:条码6901668934925, 数量=5.0, 单价=6.5 +2025-12-12 11:22:26,129 - app.core.excel.processor - INFO - 处理商品: 条码=6901668054715, 数量=4.0, 单价=3.6, 是否赠品=False +2025-12-12 11:22:26,130 - app.core.excel.processor - INFO - 发现正常商品:条码6901668054715, 数量=4.0, 单价=3.6 +2025-12-12 11:22:26,130 - app.core.excel.processor - INFO - 处理商品: 条码=6901668053916, 数量=3.0, 单价=3.6, 是否赠品=False +2025-12-12 11:22:26,130 - app.core.excel.processor - INFO - 发现正常商品:条码6901668053916, 数量=3.0, 单价=3.6 +2025-12-12 11:22:26,131 - app.core.excel.processor - INFO - 处理商品: 条码=6920907800616, 数量=4.0, 单价=3.0, 是否赠品=False +2025-12-12 11:22:26,131 - app.core.excel.processor - INFO - 发现正常商品:条码6920907800616, 数量=4.0, 单价=3.0 +2025-12-12 11:22:26,132 - app.core.excel.processor - INFO - 处理商品: 条码=6935855700383, 数量=8.0, 单价=38.0, 是否赠品=False +2025-12-12 11:22:26,132 - app.core.excel.processor - INFO - 发现正常商品:条码6935855700383, 数量=8.0, 单价=38.0 +2025-12-12 11:22:26,132 - app.core.excel.processor - INFO - 处理商品: 条码=6925683200957, 数量=8.0, 单价=28.0, 是否赠品=False +2025-12-12 11:22:26,132 - app.core.excel.processor - INFO - 发现正常商品:条码6925683200957, 数量=8.0, 单价=28.0 +2025-12-12 11:22:26,132 - app.core.excel.processor - INFO - 处理商品: 条码=6901845044027, 数量=4.0, 单价=5.55, 是否赠品=False +2025-12-12 11:22:26,132 - app.core.excel.processor - INFO - 发现正常商品:条码6901845044027, 数量=4.0, 单价=5.55 +2025-12-12 11:22:26,133 - app.core.excel.processor - INFO - 处理商品: 条码=6901845040968, 数量=5.0, 单价=5.55, 是否赠品=False +2025-12-12 11:22:26,133 - app.core.excel.processor - INFO - 发现正常商品:条码6901845040968, 数量=5.0, 单价=5.55 +2025-12-12 11:22:26,133 - app.core.excel.processor - INFO - 处理商品: 条码=6901668935649, 数量=6.0, 单价=1.99, 是否赠品=False +2025-12-12 11:22:26,133 - app.core.excel.processor - INFO - 发现正常商品:条码6901668935649, 数量=6.0, 单价=1.99 +2025-12-12 11:22:26,134 - app.core.excel.processor - INFO - 处理商品: 条码=6901668935663, 数量=5.0, 单价=1.99, 是否赠品=False +2025-12-12 11:22:26,134 - app.core.excel.processor - INFO - 发现正常商品:条码6901668935663, 数量=5.0, 单价=1.99 +2025-12-12 11:22:26,135 - app.core.excel.processor - INFO - 处理商品: 条码=6947929617534, 数量=4.0, 单价=2.66, 是否赠品=False +2025-12-12 11:22:26,135 - app.core.excel.processor - INFO - 发现正常商品:条码6947929617534, 数量=4.0, 单价=2.66 +2025-12-12 11:22:26,136 - app.core.excel.processor - INFO - 处理商品: 条码=6947929617138, 数量=4.0, 单价=2.66, 是否赠品=False +2025-12-12 11:22:26,136 - app.core.excel.processor - INFO - 发现正常商品:条码6947929617138, 数量=4.0, 单价=2.66 +2025-12-12 11:22:26,136 - app.core.excel.processor - INFO - 处理商品: 条码=6901668200013, 数量=3.0, 单价=3.5, 是否赠品=False +2025-12-12 11:22:26,136 - app.core.excel.processor - INFO - 发现正常商品:条码6901668200013, 数量=3.0, 单价=3.5 +2025-12-12 11:22:26,137 - app.core.excel.processor - INFO - 处理商品: 条码=6901668200303, 数量=3.0, 单价=3.5, 是否赠品=False +2025-12-12 11:22:26,137 - app.core.excel.processor - INFO - 发现正常商品:条码6901668200303, 数量=3.0, 单价=3.5 +2025-12-12 11:22:26,137 - app.core.excel.processor - INFO - 处理商品: 条码=6911988005229, 数量=4.0, 单价=2.25, 是否赠品=False +2025-12-12 11:22:26,137 - app.core.excel.processor - INFO - 发现正常商品:条码6911988005229, 数量=4.0, 单价=2.25 +2025-12-12 11:22:26,137 - app.core.excel.processor - INFO - 处理商品: 条码=6911988000293, 数量=4.0, 单价=3.8, 是否赠品=False +2025-12-12 11:22:26,137 - app.core.excel.processor - INFO - 发现正常商品:条码6911988000293, 数量=4.0, 单价=3.8 +2025-12-12 11:22:26,137 - app.core.excel.processor - INFO - 处理商品: 条码=6911988000286, 数量=3.0, 单价=3.8, 是否赠品=False +2025-12-12 11:22:26,137 - app.core.excel.processor - INFO - 发现正常商品:条码6911988000286, 数量=3.0, 单价=3.8 +2025-12-12 11:22:26,137 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009777, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:22:26,137 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009777, 数量=3.0, 单价=2.85 +2025-12-12 11:22:26,137 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009760, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:22:26,137 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009760, 数量=3.0, 单价=2.85 +2025-12-12 11:22:26,141 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009784, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:22:26,141 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009784, 数量=3.0, 单价=2.85 +2025-12-12 11:22:26,141 - app.core.excel.processor - INFO - 处理商品: 条码=6901180581683, 数量=2.0, 单价=3.8, 是否赠品=False +2025-12-12 11:22:26,141 - app.core.excel.processor - INFO - 发现正常商品:条码6901180581683, 数量=2.0, 单价=3.8 +2025-12-12 11:22:26,142 - app.core.excel.processor - INFO - 处理商品: 条码=6932024200552, 数量=3.0, 单价=3.0, 是否赠品=False +2025-12-12 11:22:26,142 - app.core.excel.processor - INFO - 发现正常商品:条码6932024200552, 数量=3.0, 单价=3.0 +2025-12-12 11:22:26,142 - app.core.excel.processor - INFO - 处理商品: 条码=6932024200583, 数量=4.0, 单价=1.7, 是否赠品=False +2025-12-12 11:22:26,143 - app.core.excel.processor - INFO - 发现正常商品:条码6932024200583, 数量=4.0, 单价=1.7 +2025-12-12 11:22:26,143 - app.core.excel.processor - INFO - 处理商品: 条码=6901668936714, 数量=4.0, 单价=5.2, 是否赠品=False +2025-12-12 11:22:26,143 - app.core.excel.processor - INFO - 发现正常商品:条码6901668936714, 数量=4.0, 单价=5.2 +2025-12-12 11:22:26,143 - app.core.excel.processor - INFO - 处理商品: 条码=6901668062499, 数量=4.0, 单价=5.2, 是否赠品=False +2025-12-12 11:22:26,144 - app.core.excel.processor - INFO - 发现正常商品:条码6901668062499, 数量=4.0, 单价=5.2 +2025-12-12 11:22:26,144 - app.core.excel.processor - INFO - 处理商品: 条码=6925332600046, 数量=3.0, 单价=3.8, 是否赠品=False +2025-12-12 11:22:26,144 - app.core.excel.processor - INFO - 发现正常商品:条码6925332600046, 数量=3.0, 单价=3.8 +2025-12-12 11:22:26,145 - app.core.excel.processor - INFO - 处理商品: 条码=6921233904955, 数量=4.0, 单价=3.8, 是否赠品=False +2025-12-12 11:22:26,145 - app.core.excel.processor - INFO - 发现正常商品:条码6921233904955, 数量=4.0, 单价=3.8 +2025-12-12 11:22:26,145 - app.core.excel.processor - INFO - 处理商品: 条码=6901180993387, 数量=3.0, 单价=3.0, 是否赠品=False +2025-12-12 11:22:26,145 - app.core.excel.processor - INFO - 发现正常商品:条码6901180993387, 数量=3.0, 单价=3.0 +2025-12-12 11:22:26,145 - app.core.excel.processor - INFO - 处理商品: 条码=6901180993486, 数量=3.0, 单价=3.0, 是否赠品=False +2025-12-12 11:22:26,145 - app.core.excel.processor - INFO - 发现正常商品:条码6901180993486, 数量=3.0, 单价=3.0 +2025-12-12 11:22:26,145 - app.core.excel.processor - INFO - 处理商品: 条码=6920546800046, 数量=5.0, 单价=3.95, 是否赠品=False +2025-12-12 11:22:26,145 - app.core.excel.processor - INFO - 发现正常商品:条码6920546800046, 数量=5.0, 单价=3.95 +2025-12-12 11:22:26,145 - app.core.excel.processor - INFO - 处理商品: 条码=6920546800053, 数量=5.0, 单价=4.5, 是否赠品=False +2025-12-12 11:22:26,145 - app.core.excel.processor - INFO - 发现正常商品:条码6920546800053, 数量=5.0, 单价=4.5 +2025-12-12 11:22:26,145 - app.core.excel.processor - INFO - 处理商品: 条码=6911988006783, 数量=1.0, 单价=5.88, 是否赠品=False +2025-12-12 11:22:26,145 - app.core.excel.processor - INFO - 发现正常商品:条码6911988006783, 数量=1.0, 单价=5.88 +2025-12-12 11:22:26,145 - app.core.excel.processor - INFO - 处理商品: 条码=6971295190759, 数量=20.0, 单价=15.0, 是否赠品=False +2025-12-12 11:22:26,145 - app.core.excel.processor - INFO - 发现正常商品:条码6971295190759, 数量=20.0, 单价=15.0 +2025-12-12 11:22:26,145 - app.core.excel.processor - INFO - 处理商品: 条码=6951957217307, 数量=20.0, 单价=26.6, 是否赠品=False +2025-12-12 11:22:26,149 - app.core.excel.processor - INFO - 发现正常商品:条码6951957217307, 数量=20.0, 单价=26.6 +2025-12-12 11:22:26,149 - app.core.excel.processor - INFO - 处理商品: 条码=6951957215723, 数量=20.0, 单价=26.6, 是否赠品=False +2025-12-12 11:22:26,149 - app.core.excel.processor - INFO - 发现正常商品:条码6951957215723, 数量=20.0, 单价=26.6 +2025-12-12 11:22:26,149 - app.core.excel.processor - INFO - 处理商品: 条码=6977530260072, 数量=25.0, 单价=17.5, 是否赠品=False +2025-12-12 11:22:26,149 - app.core.excel.processor - INFO - 发现正常商品:条码6977530260072, 数量=25.0, 单价=17.5 +2025-12-12 11:22:26,150 - app.core.excel.processor - INFO - 处理商品: 条码=6925300100400, 数量=25.0, 单价=17.5, 是否赠品=False +2025-12-12 11:22:26,151 - app.core.excel.processor - INFO - 发现正常商品:条码6925300100400, 数量=25.0, 单价=17.5 +2025-12-12 11:22:26,151 - app.core.excel.processor - INFO - 处理商品: 条码=6922170800638, 数量=20.0, 单价=15.0, 是否赠品=False +2025-12-12 11:22:26,151 - app.core.excel.processor - INFO - 发现正常商品:条码6922170800638, 数量=20.0, 单价=15.0 +2025-12-12 11:22:26,151 - app.core.excel.processor - INFO - 处理商品: 条码=690299810, 数量=16.0, 单价=23.2, 是否赠品=False +2025-12-12 11:22:26,152 - app.core.excel.processor - INFO - 发现正常商品:条码690299810, 数量=16.0, 单价=23.2 +2025-12-12 11:22:26,152 - app.core.excel.processor - INFO - 处理商品: 条码=6936869215092, 数量=15.0, 单价=1.5, 是否赠品=False +2025-12-12 11:22:26,152 - app.core.excel.processor - INFO - 发现正常商品:条码6936869215092, 数量=15.0, 单价=1.5 +2025-12-12 11:22:26,152 - app.core.excel.processor - INFO - 处理商品: 条码=6951957205762, 数量=20.0, 单价=14.2, 是否赠品=False +2025-12-12 11:22:26,153 - app.core.excel.processor - INFO - 发现正常商品:条码6951957205762, 数量=20.0, 单价=14.2 +2025-12-12 11:22:26,153 - app.core.excel.processor - INFO - 处理商品: 条码=6976481800078, 数量=30.0, 单价=22.5, 是否赠品=False +2025-12-12 11:22:26,153 - app.core.excel.processor - INFO - 发现正常商品:条码6976481800078, 数量=30.0, 单价=22.5 +2025-12-12 11:22:26,153 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919266, 数量=5.0, 单价=4.79, 是否赠品=False +2025-12-12 11:22:26,154 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919266, 数量=5.0, 单价=4.79 +2025-12-12 11:22:26,154 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919259, 数量=5.0, 单价=4.79, 是否赠品=False +2025-12-12 11:22:26,154 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919259, 数量=5.0, 单价=4.79 +2025-12-12 11:22:26,155 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919228, 数量=3.0, 单价=4.79, 是否赠品=False +2025-12-12 11:22:26,155 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919228, 数量=3.0, 单价=4.79 +2025-12-12 11:22:26,155 - app.core.excel.processor - INFO - 处理商品: 条码=6924743928077, 数量=1.0, 单价=1.35, 是否赠品=False +2025-12-12 11:22:26,155 - app.core.excel.processor - INFO - 发现正常商品:条码6924743928077, 数量=1.0, 单价=1.35 +2025-12-12 11:22:26,155 - app.core.excel.processor - INFO - 分组后共52 个不同条码的商品 +2025-12-12 11:22:26,155 - app.core.excel.processor - INFO - 条码 6954767432076 处理结果:正常商品数量48.0,单价55.68,赠品数量0 +2025-12-12 11:22:26,156 - app.core.excel.processor - INFO - 条码 6954767433073 处理结果:正常商品数量8.0,单价44.32,赠品数量0 +2025-12-12 11:22:26,156 - app.core.excel.processor - INFO - 条码 6901285992933 处理结果:正常商品数量40.0,单价21.52,赠品数量0 +2025-12-12 11:22:26,156 - app.core.excel.processor - INFO - 条码 6901285991530 处理结果:正常商品数量8.0,单价26.08,赠品数量0 +2025-12-12 11:22:26,156 - app.core.excel.processor - INFO - 条码 6901285991271 处理结果:正常商品数量60.0,单价24.6,赠品数量0 +2025-12-12 11:22:26,156 - app.core.excel.processor - INFO - 条码 6920584471017 处理结果:正常商品数量12.0,单价54.0,赠品数量0 +2025-12-12 11:22:26,156 - app.core.excel.processor - INFO - 条码 6901668934925 处理结果:正常商品数量5.0,单价6.5,赠品数量0 +2025-12-12 11:22:26,156 - app.core.excel.processor - INFO - 条码 6901668054715 处理结果:正常商品数量4.0,单价3.6,赠品数量0 +2025-12-12 11:22:26,156 - app.core.excel.processor - INFO - 条码 6901668053916 处理结果:正常商品数量3.0,单价3.6,赠品数量0 +2025-12-12 11:22:26,156 - app.core.excel.processor - INFO - 条码 6920907800616 处理结果:正常商品数量4.0,单价3.0,赠品数量0 +2025-12-12 11:22:26,156 - app.core.excel.processor - INFO - 条码 6935855700383 处理结果:正常商品数量8.0,单价38.0,赠品数量0 +2025-12-12 11:22:26,159 - app.core.excel.processor - INFO - 条码 6925683200957 处理结果:正常商品数量8.0,单价28.0,赠品数量0 +2025-12-12 11:22:26,159 - app.core.excel.processor - INFO - 条码 6901845044027 处理结果:正常商品数量4.0,单价5.55,赠品数量0 +2025-12-12 11:22:26,159 - app.core.excel.processor - INFO - 条码 6901845040968 处理结果:正常商品数量5.0,单价5.55,赠品数量0 +2025-12-12 11:22:26,159 - app.core.excel.processor - INFO - 条码 6901668935649 处理结果:正常商品数量6.0,单价1.99,赠品数量0 +2025-12-12 11:22:26,160 - app.core.excel.processor - INFO - 条码 6901668935663 处理结果:正常商品数量5.0,单价1.99,赠品数量0 +2025-12-12 11:22:26,160 - app.core.excel.processor - INFO - 条码 6947929617534 处理结果:正常商品数量4.0,单价2.66,赠品数量0 +2025-12-12 11:22:26,160 - app.core.excel.processor - INFO - 条码 6947929617138 处理结果:正常商品数量4.0,单价2.66,赠品数量0 +2025-12-12 11:22:26,161 - app.core.excel.processor - INFO - 条码 6901668200013 处理结果:正常商品数量3.0,单价3.5,赠品数量0 +2025-12-12 11:22:26,161 - app.core.excel.processor - INFO - 条码 6901668200303 处理结果:正常商品数量3.0,单价3.5,赠品数量0 +2025-12-12 11:22:26,161 - app.core.excel.processor - INFO - 条码 6911988005229 处理结果:正常商品数量4.0,单价2.25,赠品数量0 +2025-12-12 11:22:26,162 - app.core.excel.processor - INFO - 条码 6911988000293 处理结果:正常商品数量4.0,单价3.8,赠品数量0 +2025-12-12 11:22:26,162 - app.core.excel.processor - INFO - 条码 6911988000286 处理结果:正常商品数量3.0,单价3.8,赠品数量0 +2025-12-12 11:22:26,162 - app.core.excel.processor - INFO - 条码 6911988009777 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:22:26,162 - app.core.excel.processor - INFO - 条码 6911988009760 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:22:26,163 - app.core.excel.processor - INFO - 条码 6911988009784 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:22:26,163 - app.core.excel.processor - INFO - 条码 6901180581683 处理结果:正常商品数量2.0,单价3.8,赠品数量0 +2025-12-12 11:22:26,163 - app.core.excel.processor - INFO - 条码 6932024200552 处理结果:正常商品数量3.0,单价3.0,赠品数量0 +2025-12-12 11:22:26,164 - app.core.excel.processor - INFO - 条码 6932024200583 处理结果:正常商品数量4.0,单价1.7,赠品数量0 +2025-12-12 11:22:26,164 - app.core.excel.processor - INFO - 条码 6901668936714 处理结果:正常商品数量4.0,单价5.2,赠品数量0 +2025-12-12 11:22:26,164 - app.core.excel.processor - INFO - 条码 6901668062499 处理结果:正常商品数量4.0,单价5.2,赠品数量0 +2025-12-12 11:22:26,164 - app.core.excel.processor - INFO - 条码 6925332600046 处理结果:正常商品数量3.0,单价3.8,赠品数量0 +2025-12-12 11:22:26,165 - app.core.excel.processor - INFO - 条码 6921233904955 处理结果:正常商品数量4.0,单价3.8,赠品数量0 +2025-12-12 11:22:26,165 - app.core.excel.processor - INFO - 条码 6901180993387 处理结果:正常商品数量3.0,单价3.0,赠品数量0 +2025-12-12 11:22:26,165 - app.core.excel.processor - INFO - 条码 6901180993486 处理结果:正常商品数量3.0,单价3.0,赠品数量0 +2025-12-12 11:22:26,165 - app.core.excel.processor - INFO - 条码 6920546800046 处理结果:正常商品数量5.0,单价3.95,赠品数量0 +2025-12-12 11:22:26,166 - app.core.excel.processor - INFO - 条码 6920546800053 处理结果:正常商品数量5.0,单价4.5,赠品数量0 +2025-12-12 11:22:26,166 - app.core.excel.processor - INFO - 条码 6911988006783 处理结果:正常商品数量1.0,单价5.88,赠品数量0 +2025-12-12 11:22:26,166 - app.core.excel.processor - INFO - 条码 6971295190759 处理结果:正常商品数量20.0,单价15.0,赠品数量0 +2025-12-12 11:22:26,167 - app.core.excel.processor - INFO - 条码 6951957217307 处理结果:正常商品数量20.0,单价26.6,赠品数量0 +2025-12-12 11:22:26,167 - app.core.excel.processor - INFO - 条码 6951957215723 处理结果:正常商品数量20.0,单价26.6,赠品数量0 +2025-12-12 11:22:26,167 - app.core.excel.processor - INFO - 条码 6977530260072 处理结果:正常商品数量25.0,单价17.5,赠品数量0 +2025-12-12 11:22:26,167 - app.core.excel.processor - INFO - 条码 6925300100400 处理结果:正常商品数量25.0,单价17.5,赠品数量0 +2025-12-12 11:22:26,168 - app.core.excel.processor - INFO - 条码 6922170800638 处理结果:正常商品数量20.0,单价15.0,赠品数量0 +2025-12-12 11:22:26,168 - app.core.excel.processor - INFO - 条码 690299810 处理结果:正常商品数量16.0,单价23.2,赠品数量0 +2025-12-12 11:22:26,168 - app.core.excel.processor - INFO - 条码 6936869215092 处理结果:正常商品数量15.0,单价1.5,赠品数量0 +2025-12-12 11:22:26,169 - app.core.excel.processor - INFO - 条码 6951957205762 处理结果:正常商品数量20.0,单价14.2,赠品数量0 +2025-12-12 11:22:26,169 - app.core.excel.processor - INFO - 条码 6976481800078 处理结果:正常商品数量30.0,单价22.5,赠品数量0 +2025-12-12 11:22:26,170 - app.core.excel.processor - INFO - 条码 6924743919266 处理结果:正常商品数量5.0,单价4.79,赠品数量0 +2025-12-12 11:22:26,170 - app.core.excel.processor - INFO - 条码 6924743919259 处理结果:正常商品数量5.0,单价4.79,赠品数量0 +2025-12-12 11:22:26,170 - app.core.excel.processor - INFO - 条码 6924743919228 处理结果:正常商品数量3.0,单价4.79,赠品数量0 +2025-12-12 11:22:26,170 - app.core.excel.processor - INFO - 条码 6924743928077 处理结果:正常商品数量1.0,单价1.35,赠品数量0 +2025-12-12 11:22:26,173 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_蓉城易购-订单1765440157955.xls +2025-12-12 11:22:26,201 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_蓉城易购-订单1765440157955.xls +2025-12-12 11:32:26,690 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-12 11:32:26,690 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-12-12 11:32:26,694 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-12-12 11:32:26,696 - app.core.excel.processor - INFO - 开始处理Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx +2025-12-12 11:32:26,708 - app.core.excel.processor - INFO - 成功读取Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx, 共 57 行 +2025-12-12 11:32:26,711 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 75 +2025-12-12 11:32:26,711 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-12-12 11:32:26,717 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 56 行有效数据 +2025-12-12 11:32:26,717 - app.core.excel.processor - INFO - 找到部分匹配的条码列: 商品条码(小条码) (包含关键词: 条码) +2025-12-12 11:32:26,722 - app.core.excel.processor - INFO - 使用条码列: 商品条码(小条码) +2025-12-12 11:32:26,722 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-12-12 11:32:26,723 - app.core.excel.processor - INFO - 找到quantity列(部分匹配): 订购数量(小单位) +2025-12-12 11:32:26,723 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-12-12 11:32:26,724 - app.core.excel.processor - INFO - 找到price列(部分匹配): 单价(小单位) +2025-12-12 11:32:26,724 - app.core.excel.processor - INFO - 找到amount列(部分匹配): 优惠后金额(小单位) +2025-12-12 11:32:26,725 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '商品条码(小条码)', 'name': '商品名称', 'quantity': '订购数量(小单位)', 'unit': '单位', 'price': '单价(小单位)', 'amount': '优惠后金额(小单位)'} +2025-12-12 11:32:26,726 - app.core.excel.processor - INFO - 从商品名称推断规格: 雪碧2L@ -> 2L*1, 包装数量=1 +2025-12-12 11:32:26,726 - app.core.excel.processor - INFO - 根据规格推断单位: 2L*1 -> 单位=件 +2025-12-12 11:32:26,726 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝饮用纯净水2.08L@ -> 2.08L*1, 包装数量=1 +2025-12-12 11:32:26,730 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝纯净水4.5L@ -> 4.5L*1, 包装数量=1 +2025-12-12 11:32:26,733 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝饮用纯净水1.555L@ -> 1.555L*1, 包装数量=1 +2025-12-12 11:32:26,735 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥薄脆酸甜草莓味95g@ -> 95*None, 包装数量=95 +2025-12-12 11:32:26,736 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥杯奥草莓味55g@ -> 55*None, 包装数量=55 +2025-12-12 11:32:26,739 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥杯奥巧克力55g@ -> 55*None, 包装数量=55 +2025-12-12 11:32:26,739 - app.core.excel.processor - INFO - 从商品名称推断规格: 好丽友蛋黄派2P46g@ -> 46*None, 包装数量=46 +2025-12-12 11:32:26,743 - app.core.excel.processor - INFO - 从商品名称推断规格: 都市牧场爽口含片正梅味38g@ -> 38*None, 包装数量=38 +2025-12-12 11:32:26,745 - app.core.excel.processor - INFO - 从商品名称推断规格: 林振合维C果C软糖什锦味68g -> 68*None, 包装数量=68 +2025-12-12 11:32:26,746 - app.core.excel.processor - INFO - 从商品名称推断规格: 格力高百醇柠檬48g@ -> 48*None, 包装数量=48 +2025-12-12 11:32:26,748 - app.core.excel.processor - INFO - 从商品名称推断规格: 格力高百醇抹茶慕斯味48g@ -> 48*None, 包装数量=48 +2025-12-12 11:32:26,748 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥饼干经典原味48.5g@ -> 48.5*None, 包装数量=48 +2025-12-12 11:32:26,753 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None, 包装数量=48 +2025-12-12 11:32:26,755 - app.core.excel.processor - INFO - 从商品名称推断规格: 法丽兹曲奇芝士巧克力70g@ -> 70*None, 包装数量=70 +2025-12-12 11:32:26,757 - app.core.excel.processor - INFO - 从商品名称推断规格: 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:32:26,759 - app.core.excel.processor - INFO - 从商品名称推断规格: 太平梳打饼干奶盐味100g@ -> 100*None, 包装数量=100 +2025-12-12 11:32:26,761 - app.core.excel.processor - INFO - 从商品名称推断规格: 太平梳打饼干海苔味100g@ -> 100*None, 包装数量=100 +2025-12-12 11:32:26,763 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园手指饼115g@ -> 115*None, 包装数量=115 +2025-12-12 11:32:26,765 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点杏仁酥饼146g@ -> 146*None, 包装数量=146 +2025-12-12 11:32:26,768 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点核桃酥饼146g@ -> 146*None, 包装数量=146 +2025-12-12 11:32:26,770 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆腰果饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:32:26,771 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆杏仁饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:32:26,773 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆核桃饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:32:26,773 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利威化饼干草莓味115g@ -> 115*None, 包装数量=115 +2025-12-12 11:32:26,778 - app.core.excel.processor - INFO - 从商品名称推断规格: 亨裕饼朱古力味饼干186g -> 186*None, 包装数量=186 +2025-12-12 11:32:26,780 - app.core.excel.processor - INFO - 从商品名称推断规格: 亨裕早茶饼干110g -> 110*None, 包装数量=110 +2025-12-12 11:32:26,781 - app.core.excel.processor - INFO - 从商品名称推断规格: 趣多多香浓巧克力味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:32:26,781 - app.core.excel.processor - INFO - 从商品名称推断规格: 趣多多缤纷逗巧克力85g@ -> 85*None, 包装数量=85 +2025-12-12 11:32:26,785 - app.core.excel.processor - INFO - 从商品名称推断规格: 米老头雪花煎卷椰奶味150g@ -> 150*None, 包装数量=150 +2025-12-12 11:32:26,787 - app.core.excel.processor - INFO - 从商品名称推断规格: 金富士牛乳饼干香浓牛奶味130g@ -> 130*None, 包装数量=130 +2025-12-12 11:32:26,789 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利果乐果香蓝莓味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:32:26,791 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利果乐果香草莓味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:32:26,793 - app.core.excel.processor - INFO - 从商品名称推断规格: 旺旺仙贝52g@ -> 52*None, 包装数量=52 +2025-12-12 11:32:26,795 - app.core.excel.processor - INFO - 从商品名称推断规格: 旺旺雪饼84g@ -> 84*None, 包装数量=84 +2025-12-12 11:32:26,797 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园蛋黄派230g@ -> 230*None, 包装数量=230 +2025-12-12 11:32:26,799 - app.core.excel.processor - INFO - 从商品名称推断规格: 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None, 包装数量=22 +2025-12-12 11:32:26,800 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔手撕肉干麻辣味10g@ -> 10*None, 包装数量=10 +2025-12-12 11:32:26,802 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔手撕肉干香辣味10g@ -> 10*None, 包装数量=10 +2025-12-12 11:32:26,805 - app.core.excel.processor - INFO - 从商品名称推断规格: 登荣香辣爽口鸡23g -> 23*None, 包装数量=23 +2025-12-12 11:32:26,807 - app.core.excel.processor - INFO - 从商品名称推断规格: 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None, 包装数量=12 +2025-12-12 11:32:26,807 - app.core.excel.processor - INFO - 从商品名称推断规格: 味芝元洞庭鱼排香辣味26g -> 26*None, 包装数量=26 +2025-12-12 11:32:26,811 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔小鱼麻辣小鱼12g@ -> 12*None, 包装数量=12 +2025-12-12 11:32:26,813 - app.core.excel.processor - INFO - 从商品名称推断规格: 缺牙齿素牛肚香辣味16g -> 16*None, 包装数量=16 +2025-12-12 11:32:26,815 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事青柠味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:32:26,818 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事黄瓜味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:32:26,819 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事德克萨斯烧烤味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:32:26,821 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事薯片经典原味23g(串串装)@ -> 23*None, 包装数量=23 +2025-12-12 11:32:26,822 - app.core.excel.processor - INFO - 提取到 52 个商品信息 +2025-12-12 11:32:26,825 - app.core.excel.processor - INFO - 开始处理52 个产品信息 +2025-12-12 11:32:26,825 - app.core.excel.processor - INFO - 处理商品: 条码=6954767432076, 数量=48.0, 单价=55.68, 是否赠品=False +2025-12-12 11:32:26,825 - app.core.excel.processor - INFO - 发现正常商品:条码6954767432076, 数量=48.0, 单价=55.68 +2025-12-12 11:32:26,828 - app.core.excel.processor - INFO - 处理商品: 条码=6954767433073, 数量=8.0, 单价=44.32, 是否赠品=False +2025-12-12 11:32:26,828 - app.core.excel.processor - INFO - 发现正常商品:条码6954767433073, 数量=8.0, 单价=44.32 +2025-12-12 11:32:26,828 - app.core.excel.processor - INFO - 处理商品: 条码=6901285992933, 数量=40.0, 单价=21.52, 是否赠品=False +2025-12-12 11:32:26,829 - app.core.excel.processor - INFO - 发现正常商品:条码6901285992933, 数量=40.0, 单价=21.52 +2025-12-12 11:32:26,829 - app.core.excel.processor - INFO - 处理商品: 条码=6901285991530, 数量=8.0, 单价=26.08, 是否赠品=False +2025-12-12 11:32:26,829 - app.core.excel.processor - INFO - 发现正常商品:条码6901285991530, 数量=8.0, 单价=26.08 +2025-12-12 11:32:26,830 - app.core.excel.processor - INFO - 处理商品: 条码=6901285991271, 数量=60.0, 单价=24.6, 是否赠品=False +2025-12-12 11:32:26,830 - app.core.excel.processor - INFO - 发现正常商品:条码6901285991271, 数量=60.0, 单价=24.6 +2025-12-12 11:32:26,830 - app.core.excel.processor - INFO - 处理商品: 条码=6920584471017, 数量=12.0, 单价=54.0, 是否赠品=False +2025-12-12 11:32:26,831 - app.core.excel.processor - INFO - 发现正常商品:条码6920584471017, 数量=12.0, 单价=54.0 +2025-12-12 11:32:26,831 - app.core.excel.processor - INFO - 处理商品: 条码=6901668934925, 数量=5.0, 单价=6.5, 是否赠品=False +2025-12-12 11:32:26,831 - app.core.excel.processor - INFO - 发现正常商品:条码6901668934925, 数量=5.0, 单价=6.5 +2025-12-12 11:32:26,832 - app.core.excel.processor - INFO - 处理商品: 条码=6901668054715, 数量=4.0, 单价=3.6, 是否赠品=False +2025-12-12 11:32:26,832 - app.core.excel.processor - INFO - 发现正常商品:条码6901668054715, 数量=4.0, 单价=3.6 +2025-12-12 11:32:26,833 - app.core.excel.processor - INFO - 处理商品: 条码=6901668053916, 数量=3.0, 单价=3.6, 是否赠品=False +2025-12-12 11:32:26,833 - app.core.excel.processor - INFO - 发现正常商品:条码6901668053916, 数量=3.0, 单价=3.6 +2025-12-12 11:32:26,833 - app.core.excel.processor - INFO - 处理商品: 条码=6920907800616, 数量=4.0, 单价=3.0, 是否赠品=False +2025-12-12 11:32:26,833 - app.core.excel.processor - INFO - 发现正常商品:条码6920907800616, 数量=4.0, 单价=3.0 +2025-12-12 11:32:26,833 - app.core.excel.processor - INFO - 处理商品: 条码=6935855700383, 数量=8.0, 单价=38.0, 是否赠品=False +2025-12-12 11:32:26,833 - app.core.excel.processor - INFO - 发现正常商品:条码6935855700383, 数量=8.0, 单价=38.0 +2025-12-12 11:32:26,833 - app.core.excel.processor - INFO - 处理商品: 条码=6925683200957, 数量=8.0, 单价=28.0, 是否赠品=False +2025-12-12 11:32:26,833 - app.core.excel.processor - INFO - 发现正常商品:条码6925683200957, 数量=8.0, 单价=28.0 +2025-12-12 11:32:26,833 - app.core.excel.processor - INFO - 处理商品: 条码=6901845044027, 数量=4.0, 单价=5.55, 是否赠品=False +2025-12-12 11:32:26,833 - app.core.excel.processor - INFO - 发现正常商品:条码6901845044027, 数量=4.0, 单价=5.55 +2025-12-12 11:32:26,833 - app.core.excel.processor - INFO - 处理商品: 条码=6901845040968, 数量=5.0, 单价=5.55, 是否赠品=False +2025-12-12 11:32:26,833 - app.core.excel.processor - INFO - 发现正常商品:条码6901845040968, 数量=5.0, 单价=5.55 +2025-12-12 11:32:26,833 - app.core.excel.processor - INFO - 处理商品: 条码=6901668935649, 数量=6.0, 单价=1.99, 是否赠品=False +2025-12-12 11:32:26,833 - app.core.excel.processor - INFO - 发现正常商品:条码6901668935649, 数量=6.0, 单价=1.99 +2025-12-12 11:32:26,837 - app.core.excel.processor - INFO - 处理商品: 条码=6901668935663, 数量=5.0, 单价=1.99, 是否赠品=False +2025-12-12 11:32:26,837 - app.core.excel.processor - INFO - 发现正常商品:条码6901668935663, 数量=5.0, 单价=1.99 +2025-12-12 11:32:26,837 - app.core.excel.processor - INFO - 处理商品: 条码=6947929617534, 数量=4.0, 单价=2.66, 是否赠品=False +2025-12-12 11:32:26,837 - app.core.excel.processor - INFO - 发现正常商品:条码6947929617534, 数量=4.0, 单价=2.66 +2025-12-12 11:32:26,837 - app.core.excel.processor - INFO - 处理商品: 条码=6947929617138, 数量=4.0, 单价=2.66, 是否赠品=False +2025-12-12 11:32:26,837 - app.core.excel.processor - INFO - 发现正常商品:条码6947929617138, 数量=4.0, 单价=2.66 +2025-12-12 11:32:26,838 - app.core.excel.processor - INFO - 处理商品: 条码=6901668200013, 数量=3.0, 单价=3.5, 是否赠品=False +2025-12-12 11:32:26,838 - app.core.excel.processor - INFO - 发现正常商品:条码6901668200013, 数量=3.0, 单价=3.5 +2025-12-12 11:32:26,838 - app.core.excel.processor - INFO - 处理商品: 条码=6901668200303, 数量=3.0, 单价=3.5, 是否赠品=False +2025-12-12 11:32:26,838 - app.core.excel.processor - INFO - 发现正常商品:条码6901668200303, 数量=3.0, 单价=3.5 +2025-12-12 11:32:26,839 - app.core.excel.processor - INFO - 处理商品: 条码=6911988005229, 数量=4.0, 单价=2.25, 是否赠品=False +2025-12-12 11:32:26,839 - app.core.excel.processor - INFO - 发现正常商品:条码6911988005229, 数量=4.0, 单价=2.25 +2025-12-12 11:32:26,839 - app.core.excel.processor - INFO - 处理商品: 条码=6911988000293, 数量=4.0, 单价=3.8, 是否赠品=False +2025-12-12 11:32:26,840 - app.core.excel.processor - INFO - 发现正常商品:条码6911988000293, 数量=4.0, 单价=3.8 +2025-12-12 11:32:26,840 - app.core.excel.processor - INFO - 处理商品: 条码=6911988000286, 数量=3.0, 单价=3.8, 是否赠品=False +2025-12-12 11:32:26,840 - app.core.excel.processor - INFO - 发现正常商品:条码6911988000286, 数量=3.0, 单价=3.8 +2025-12-12 11:32:26,840 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009777, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:32:26,841 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009777, 数量=3.0, 单价=2.85 +2025-12-12 11:32:26,841 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009760, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:32:26,841 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009760, 数量=3.0, 单价=2.85 +2025-12-12 11:32:26,842 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009784, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:32:26,842 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009784, 数量=3.0, 单价=2.85 +2025-12-12 11:32:26,842 - app.core.excel.processor - INFO - 处理商品: 条码=6901180581683, 数量=2.0, 单价=3.8, 是否赠品=False +2025-12-12 11:32:26,842 - app.core.excel.processor - INFO - 发现正常商品:条码6901180581683, 数量=2.0, 单价=3.8 +2025-12-12 11:32:26,842 - app.core.excel.processor - INFO - 处理商品: 条码=6932024200552, 数量=3.0, 单价=3.0, 是否赠品=False +2025-12-12 11:32:26,842 - app.core.excel.processor - INFO - 发现正常商品:条码6932024200552, 数量=3.0, 单价=3.0 +2025-12-12 11:32:26,842 - app.core.excel.processor - INFO - 处理商品: 条码=6932024200583, 数量=4.0, 单价=1.7, 是否赠品=False +2025-12-12 11:32:26,842 - app.core.excel.processor - INFO - 发现正常商品:条码6932024200583, 数量=4.0, 单价=1.7 +2025-12-12 11:32:26,842 - app.core.excel.processor - INFO - 处理商品: 条码=6901668936714, 数量=4.0, 单价=5.2, 是否赠品=False +2025-12-12 11:32:26,842 - app.core.excel.processor - INFO - 发现正常商品:条码6901668936714, 数量=4.0, 单价=5.2 +2025-12-12 11:32:26,842 - app.core.excel.processor - INFO - 处理商品: 条码=6901668062499, 数量=4.0, 单价=5.2, 是否赠品=False +2025-12-12 11:32:26,842 - app.core.excel.processor - INFO - 发现正常商品:条码6901668062499, 数量=4.0, 单价=5.2 +2025-12-12 11:32:26,842 - app.core.excel.processor - INFO - 处理商品: 条码=6925332600046, 数量=3.0, 单价=3.8, 是否赠品=False +2025-12-12 11:32:26,846 - app.core.excel.processor - INFO - 发现正常商品:条码6925332600046, 数量=3.0, 单价=3.8 +2025-12-12 11:32:26,846 - app.core.excel.processor - INFO - 处理商品: 条码=6921233904955, 数量=4.0, 单价=3.8, 是否赠品=False +2025-12-12 11:32:26,846 - app.core.excel.processor - INFO - 发现正常商品:条码6921233904955, 数量=4.0, 单价=3.8 +2025-12-12 11:32:26,846 - app.core.excel.processor - INFO - 处理商品: 条码=6901180993387, 数量=3.0, 单价=3.0, 是否赠品=False +2025-12-12 11:32:26,847 - app.core.excel.processor - INFO - 发现正常商品:条码6901180993387, 数量=3.0, 单价=3.0 +2025-12-12 11:32:26,847 - app.core.excel.processor - INFO - 处理商品: 条码=6901180993486, 数量=3.0, 单价=3.0, 是否赠品=False +2025-12-12 11:32:26,847 - app.core.excel.processor - INFO - 发现正常商品:条码6901180993486, 数量=3.0, 单价=3.0 +2025-12-12 11:32:26,847 - app.core.excel.processor - INFO - 处理商品: 条码=6920546800046, 数量=5.0, 单价=3.95, 是否赠品=False +2025-12-12 11:32:26,848 - app.core.excel.processor - INFO - 发现正常商品:条码6920546800046, 数量=5.0, 单价=3.95 +2025-12-12 11:32:26,848 - app.core.excel.processor - INFO - 处理商品: 条码=6920546800053, 数量=5.0, 单价=4.5, 是否赠品=False +2025-12-12 11:32:26,848 - app.core.excel.processor - INFO - 发现正常商品:条码6920546800053, 数量=5.0, 单价=4.5 +2025-12-12 11:32:26,848 - app.core.excel.processor - INFO - 处理商品: 条码=6911988006783, 数量=1.0, 单价=5.88, 是否赠品=False +2025-12-12 11:32:26,848 - app.core.excel.processor - INFO - 发现正常商品:条码6911988006783, 数量=1.0, 单价=5.88 +2025-12-12 11:32:26,849 - app.core.excel.processor - INFO - 处理商品: 条码=6971295190759, 数量=20.0, 单价=15.0, 是否赠品=False +2025-12-12 11:32:26,849 - app.core.excel.processor - INFO - 发现正常商品:条码6971295190759, 数量=20.0, 单价=15.0 +2025-12-12 11:32:26,849 - app.core.excel.processor - INFO - 处理商品: 条码=6951957217307, 数量=20.0, 单价=26.6, 是否赠品=False +2025-12-12 11:32:26,849 - app.core.excel.processor - INFO - 发现正常商品:条码6951957217307, 数量=20.0, 单价=26.6 +2025-12-12 11:32:26,850 - app.core.excel.processor - INFO - 处理商品: 条码=6951957215723, 数量=20.0, 单价=26.6, 是否赠品=False +2025-12-12 11:32:26,850 - app.core.excel.processor - INFO - 发现正常商品:条码6951957215723, 数量=20.0, 单价=26.6 +2025-12-12 11:32:26,850 - app.core.excel.processor - INFO - 处理商品: 条码=6977530260072, 数量=25.0, 单价=17.5, 是否赠品=False +2025-12-12 11:32:26,850 - app.core.excel.processor - INFO - 发现正常商品:条码6977530260072, 数量=25.0, 单价=17.5 +2025-12-12 11:32:26,851 - app.core.excel.processor - INFO - 处理商品: 条码=6925300100400, 数量=25.0, 单价=17.5, 是否赠品=False +2025-12-12 11:32:26,851 - app.core.excel.processor - INFO - 发现正常商品:条码6925300100400, 数量=25.0, 单价=17.5 +2025-12-12 11:32:26,851 - app.core.excel.processor - INFO - 处理商品: 条码=6922170800638, 数量=20.0, 单价=15.0, 是否赠品=False +2025-12-12 11:32:26,852 - app.core.excel.processor - INFO - 发现正常商品:条码6922170800638, 数量=20.0, 单价=15.0 +2025-12-12 11:32:26,852 - app.core.excel.processor - INFO - 处理商品: 条码=690299810, 数量=16.0, 单价=23.2, 是否赠品=False +2025-12-12 11:32:26,852 - app.core.excel.processor - INFO - 发现正常商品:条码690299810, 数量=16.0, 单价=23.2 +2025-12-12 11:32:26,852 - app.core.excel.processor - INFO - 处理商品: 条码=6936869215092, 数量=15.0, 单价=1.5, 是否赠品=False +2025-12-12 11:32:26,852 - app.core.excel.processor - INFO - 发现正常商品:条码6936869215092, 数量=15.0, 单价=1.5 +2025-12-12 11:32:26,853 - app.core.excel.processor - INFO - 处理商品: 条码=6951957205762, 数量=20.0, 单价=14.2, 是否赠品=False +2025-12-12 11:32:26,853 - app.core.excel.processor - INFO - 发现正常商品:条码6951957205762, 数量=20.0, 单价=14.2 +2025-12-12 11:32:26,853 - app.core.excel.processor - INFO - 处理商品: 条码=6976481800078, 数量=30.0, 单价=22.5, 是否赠品=False +2025-12-12 11:32:26,853 - app.core.excel.processor - INFO - 发现正常商品:条码6976481800078, 数量=30.0, 单价=22.5 +2025-12-12 11:32:26,853 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919266, 数量=5.0, 单价=4.79, 是否赠品=False +2025-12-12 11:32:26,853 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919266, 数量=5.0, 单价=4.79 +2025-12-12 11:32:26,853 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919259, 数量=5.0, 单价=4.79, 是否赠品=False +2025-12-12 11:32:26,853 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919259, 数量=5.0, 单价=4.79 +2025-12-12 11:32:26,853 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919228, 数量=3.0, 单价=4.79, 是否赠品=False +2025-12-12 11:32:26,853 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919228, 数量=3.0, 单价=4.79 +2025-12-12 11:32:26,853 - app.core.excel.processor - INFO - 处理商品: 条码=6924743928077, 数量=1.0, 单价=1.35, 是否赠品=False +2025-12-12 11:32:26,853 - app.core.excel.processor - INFO - 发现正常商品:条码6924743928077, 数量=1.0, 单价=1.35 +2025-12-12 11:32:26,853 - app.core.excel.processor - INFO - 分组后共52 个不同条码的商品 +2025-12-12 11:32:26,853 - app.core.excel.processor - INFO - 条码 6954767432076 处理结果:正常商品数量48.0,单价55.68,赠品数量0 +2025-12-12 11:32:26,857 - app.core.excel.processor - INFO - 条码 6954767433073 处理结果:正常商品数量8.0,单价44.32,赠品数量0 +2025-12-12 11:32:26,858 - app.core.excel.processor - INFO - 条码 6901285992933 处理结果:正常商品数量40.0,单价21.52,赠品数量0 +2025-12-12 11:32:26,858 - app.core.excel.processor - INFO - 条码 6901285991530 处理结果:正常商品数量8.0,单价26.08,赠品数量0 +2025-12-12 11:32:26,858 - app.core.excel.processor - INFO - 条码 6901285991271 处理结果:正常商品数量60.0,单价24.6,赠品数量0 +2025-12-12 11:32:26,859 - app.core.excel.processor - INFO - 条码 6920584471017 处理结果:正常商品数量12.0,单价54.0,赠品数量0 +2025-12-12 11:32:26,859 - app.core.excel.processor - INFO - 条码 6901668934925 处理结果:正常商品数量5.0,单价6.5,赠品数量0 +2025-12-12 11:32:26,859 - app.core.excel.processor - INFO - 条码 6901668054715 处理结果:正常商品数量4.0,单价3.6,赠品数量0 +2025-12-12 11:32:26,859 - app.core.excel.processor - INFO - 条码 6901668053916 处理结果:正常商品数量3.0,单价3.6,赠品数量0 +2025-12-12 11:32:26,860 - app.core.excel.processor - INFO - 条码 6920907800616 处理结果:正常商品数量4.0,单价3.0,赠品数量0 +2025-12-12 11:32:26,860 - app.core.excel.processor - INFO - 条码 6935855700383 处理结果:正常商品数量8.0,单价38.0,赠品数量0 +2025-12-12 11:32:26,860 - app.core.excel.processor - INFO - 条码 6925683200957 处理结果:正常商品数量8.0,单价28.0,赠品数量0 +2025-12-12 11:32:26,860 - app.core.excel.processor - INFO - 条码 6901845044027 处理结果:正常商品数量4.0,单价5.55,赠品数量0 +2025-12-12 11:32:26,860 - app.core.excel.processor - INFO - 条码 6901845040968 处理结果:正常商品数量5.0,单价5.55,赠品数量0 +2025-12-12 11:32:26,860 - app.core.excel.processor - INFO - 条码 6901668935649 处理结果:正常商品数量6.0,单价1.99,赠品数量0 +2025-12-12 11:32:26,861 - app.core.excel.processor - INFO - 条码 6901668935663 处理结果:正常商品数量5.0,单价1.99,赠品数量0 +2025-12-12 11:32:26,861 - app.core.excel.processor - INFO - 条码 6947929617534 处理结果:正常商品数量4.0,单价2.66,赠品数量0 +2025-12-12 11:32:26,861 - app.core.excel.processor - INFO - 条码 6947929617138 处理结果:正常商品数量4.0,单价2.66,赠品数量0 +2025-12-12 11:32:26,862 - app.core.excel.processor - INFO - 条码 6901668200013 处理结果:正常商品数量3.0,单价3.5,赠品数量0 +2025-12-12 11:32:26,862 - app.core.excel.processor - INFO - 条码 6901668200303 处理结果:正常商品数量3.0,单价3.5,赠品数量0 +2025-12-12 11:32:26,863 - app.core.excel.processor - INFO - 条码 6911988005229 处理结果:正常商品数量4.0,单价2.25,赠品数量0 +2025-12-12 11:32:26,863 - app.core.excel.processor - INFO - 条码 6911988000293 处理结果:正常商品数量4.0,单价3.8,赠品数量0 +2025-12-12 11:32:26,863 - app.core.excel.processor - INFO - 条码 6911988000286 处理结果:正常商品数量3.0,单价3.8,赠品数量0 +2025-12-12 11:32:26,863 - app.core.excel.processor - INFO - 条码 6911988009777 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:32:26,863 - app.core.excel.processor - INFO - 条码 6911988009760 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:32:26,863 - app.core.excel.processor - INFO - 条码 6911988009784 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:32:26,863 - app.core.excel.processor - INFO - 条码 6901180581683 处理结果:正常商品数量2.0,单价3.8,赠品数量0 +2025-12-12 11:32:26,863 - app.core.excel.processor - INFO - 条码 6932024200552 处理结果:正常商品数量3.0,单价3.0,赠品数量0 +2025-12-12 11:32:26,863 - app.core.excel.processor - INFO - 条码 6932024200583 处理结果:正常商品数量4.0,单价1.7,赠品数量0 +2025-12-12 11:32:26,863 - app.core.excel.processor - INFO - 条码 6901668936714 处理结果:正常商品数量4.0,单价5.2,赠品数量0 +2025-12-12 11:32:26,866 - app.core.excel.processor - INFO - 条码 6901668062499 处理结果:正常商品数量4.0,单价5.2,赠品数量0 +2025-12-12 11:32:26,866 - app.core.excel.processor - INFO - 条码 6925332600046 处理结果:正常商品数量3.0,单价3.8,赠品数量0 +2025-12-12 11:32:26,866 - app.core.excel.processor - INFO - 条码 6921233904955 处理结果:正常商品数量4.0,单价3.8,赠品数量0 +2025-12-12 11:32:26,866 - app.core.excel.processor - INFO - 条码 6901180993387 处理结果:正常商品数量3.0,单价3.0,赠品数量0 +2025-12-12 11:32:26,866 - app.core.excel.processor - INFO - 条码 6901180993486 处理结果:正常商品数量3.0,单价3.0,赠品数量0 +2025-12-12 11:32:26,866 - app.core.excel.processor - INFO - 条码 6920546800046 处理结果:正常商品数量5.0,单价3.95,赠品数量0 +2025-12-12 11:32:26,867 - app.core.excel.processor - INFO - 条码 6920546800053 处理结果:正常商品数量5.0,单价4.5,赠品数量0 +2025-12-12 11:32:26,868 - app.core.excel.processor - INFO - 条码 6911988006783 处理结果:正常商品数量1.0,单价5.88,赠品数量0 +2025-12-12 11:32:26,868 - app.core.excel.processor - INFO - 条码 6971295190759 处理结果:正常商品数量20.0,单价15.0,赠品数量0 +2025-12-12 11:32:26,868 - app.core.excel.processor - INFO - 条码 6951957217307 处理结果:正常商品数量20.0,单价26.6,赠品数量0 +2025-12-12 11:32:26,869 - app.core.excel.processor - INFO - 条码 6951957215723 处理结果:正常商品数量20.0,单价26.6,赠品数量0 +2025-12-12 11:32:26,869 - app.core.excel.processor - INFO - 条码 6977530260072 处理结果:正常商品数量25.0,单价17.5,赠品数量0 +2025-12-12 11:32:26,869 - app.core.excel.processor - INFO - 条码 6925300100400 处理结果:正常商品数量25.0,单价17.5,赠品数量0 +2025-12-12 11:32:26,869 - app.core.excel.processor - INFO - 条码 6922170800638 处理结果:正常商品数量20.0,单价15.0,赠品数量0 +2025-12-12 11:32:26,870 - app.core.excel.processor - INFO - 条码 690299810 处理结果:正常商品数量16.0,单价23.2,赠品数量0 +2025-12-12 11:32:26,870 - app.core.excel.processor - INFO - 条码 6936869215092 处理结果:正常商品数量15.0,单价1.5,赠品数量0 +2025-12-12 11:32:26,870 - app.core.excel.processor - INFO - 条码 6951957205762 处理结果:正常商品数量20.0,单价14.2,赠品数量0 +2025-12-12 11:32:26,870 - app.core.excel.processor - INFO - 条码 6976481800078 处理结果:正常商品数量30.0,单价22.5,赠品数量0 +2025-12-12 11:32:26,871 - app.core.excel.processor - INFO - 条码 6924743919266 处理结果:正常商品数量5.0,单价4.79,赠品数量0 +2025-12-12 11:32:26,871 - app.core.excel.processor - INFO - 条码 6924743919259 处理结果:正常商品数量5.0,单价4.79,赠品数量0 +2025-12-12 11:32:26,871 - app.core.excel.processor - INFO - 条码 6924743919228 处理结果:正常商品数量3.0,单价4.79,赠品数量0 +2025-12-12 11:32:26,871 - app.core.excel.processor - INFO - 条码 6924743928077 处理结果:正常商品数量1.0,单价1.35,赠品数量0 +2025-12-12 11:32:26,873 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_蓉城易购-订单1765440157955.xls +2025-12-12 11:32:26,874 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_蓉城易购-订单1765440157955.xls +2025-12-12 11:34:40,235 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-12 11:34:40,235 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-12-12 11:34:40,235 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-12-12 11:34:40,241 - app.core.excel.processor - INFO - 开始处理Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx +2025-12-12 11:34:40,253 - app.core.excel.processor - INFO - 成功读取Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx, 共 58 行 +2025-12-12 11:34:40,255 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 75 +2025-12-12 11:34:40,255 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-12-12 11:34:40,267 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 57 行有效数据 +2025-12-12 11:34:40,268 - app.core.excel.processor - INFO - 找到部分匹配的条码列: 商品条码(小条码) (包含关键词: 条码) +2025-12-12 11:34:40,269 - app.core.excel.processor - INFO - 使用条码列: 商品条码(小条码) +2025-12-12 11:34:40,269 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-12-12 11:34:40,269 - app.core.excel.processor - INFO - 找到quantity列(部分匹配): 订购数量(小单位) +2025-12-12 11:34:40,270 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-12-12 11:34:40,270 - app.core.excel.processor - INFO - 找到price列(部分匹配): 单价(小单位) +2025-12-12 11:34:40,270 - app.core.excel.processor - INFO - 找到amount列(部分匹配): 优惠后金额(小单位) +2025-12-12 11:34:40,271 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '商品条码(小条码)', 'name': '商品名称', 'quantity': '订购数量(小单位)', 'unit': '单位', 'price': '单价(小单位)', 'amount': '优惠后金额(小单位)'} +2025-12-12 11:34:40,275 - app.core.excel.processor - INFO - 从商品名称推断规格: 雪碧2L@ -> 2L*1, 包装数量=1 +2025-12-12 11:34:40,277 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝饮用纯净水2.08L@ -> 2.08L*1, 包装数量=1 +2025-12-12 11:34:40,280 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝纯净水4.5L@ -> 4.5L*1, 包装数量=1 +2025-12-12 11:34:40,282 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝饮用纯净水1.555L@ -> 1.555L*1, 包装数量=1 +2025-12-12 11:34:40,284 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥薄脆酸甜草莓味95g@ -> 95*None, 包装数量=95 +2025-12-12 11:34:40,287 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥杯奥草莓味55g@ -> 55*None, 包装数量=55 +2025-12-12 11:34:40,289 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥杯奥巧克力55g@ -> 55*None, 包装数量=55 +2025-12-12 11:34:40,291 - app.core.excel.processor - INFO - 从商品名称推断规格: 好丽友蛋黄派2P46g@ -> 46*None, 包装数量=46 +2025-12-12 11:34:40,293 - app.core.excel.processor - INFO - 从商品名称推断规格: 都市牧场爽口含片正梅味38g@ -> 38*None, 包装数量=38 +2025-12-12 11:34:40,294 - app.core.excel.processor - INFO - 从商品名称推断规格: 林振合维C果C软糖什锦味68g -> 68*None, 包装数量=68 +2025-12-12 11:34:40,298 - app.core.excel.processor - INFO - 从商品名称推断规格: 格力高百醇柠檬48g@ -> 48*None, 包装数量=48 +2025-12-12 11:34:40,300 - app.core.excel.processor - INFO - 从商品名称推断规格: 格力高百醇抹茶慕斯味48g@ -> 48*None, 包装数量=48 +2025-12-12 11:34:40,302 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥饼干经典原味48.5g@ -> 48.5*None, 包装数量=48 +2025-12-12 11:34:40,304 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None, 包装数量=48 +2025-12-12 11:34:40,304 - app.core.excel.processor - INFO - 从商品名称推断规格: 法丽兹曲奇芝士巧克力70g@ -> 70*None, 包装数量=70 +2025-12-12 11:34:40,308 - app.core.excel.processor - INFO - 从商品名称推断规格: 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:34:40,310 - app.core.excel.processor - INFO - 从商品名称推断规格: 太平梳打饼干奶盐味100g@ -> 100*None, 包装数量=100 +2025-12-12 11:34:40,312 - app.core.excel.processor - INFO - 从商品名称推断规格: 太平梳打饼干海苔味100g@ -> 100*None, 包装数量=100 +2025-12-12 11:34:40,314 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园手指饼115g@ -> 115*None, 包装数量=115 +2025-12-12 11:34:40,315 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点杏仁酥饼146g@ -> 146*None, 包装数量=146 +2025-12-12 11:34:40,317 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点核桃酥饼146g@ -> 146*None, 包装数量=146 +2025-12-12 11:34:40,319 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆腰果饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:34:40,321 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆杏仁饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:34:40,324 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆核桃饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:34:40,325 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利威化饼干草莓味115g@ -> 115*None, 包装数量=115 +2025-12-12 11:34:40,325 - app.core.excel.processor - INFO - 从商品名称推断规格: 亨裕饼朱古力味饼干186g -> 186*None, 包装数量=186 +2025-12-12 11:34:40,329 - app.core.excel.processor - INFO - 从商品名称推断规格: 亨裕早茶饼干110g -> 110*None, 包装数量=110 +2025-12-12 11:34:40,331 - app.core.excel.processor - INFO - 从商品名称推断规格: 趣多多香浓巧克力味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:34:40,334 - app.core.excel.processor - INFO - 从商品名称推断规格: 趣多多缤纷逗巧克力85g@ -> 85*None, 包装数量=85 +2025-12-12 11:34:40,334 - app.core.excel.processor - INFO - 从商品名称推断规格: 米老头雪花煎卷椰奶味150g@ -> 150*None, 包装数量=150 +2025-12-12 11:34:40,338 - app.core.excel.processor - INFO - 从商品名称推断规格: 金富士牛乳饼干香浓牛奶味130g@ -> 130*None, 包装数量=130 +2025-12-12 11:34:40,340 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利果乐果香蓝莓味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:34:40,342 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利果乐果香草莓味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:34:40,345 - app.core.excel.processor - INFO - 从商品名称推断规格: 旺旺仙贝52g@ -> 52*None, 包装数量=52 +2025-12-12 11:34:40,347 - app.core.excel.processor - INFO - 从商品名称推断规格: 旺旺雪饼84g@ -> 84*None, 包装数量=84 +2025-12-12 11:34:40,349 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园蛋黄派230g@ -> 230*None, 包装数量=230 +2025-12-12 11:34:40,351 - app.core.excel.processor - INFO - 从商品名称推断规格: 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None, 包装数量=22 +2025-12-12 11:34:40,353 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔手撕肉干麻辣味10g@ -> 10*None, 包装数量=10 +2025-12-12 11:34:40,355 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔手撕肉干香辣味10g@ -> 10*None, 包装数量=10 +2025-12-12 11:34:40,357 - app.core.excel.processor - INFO - 从商品名称推断规格: 登荣香辣爽口鸡23g -> 23*None, 包装数量=23 +2025-12-12 11:34:40,360 - app.core.excel.processor - INFO - 从商品名称推断规格: 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None, 包装数量=12 +2025-12-12 11:34:40,361 - app.core.excel.processor - INFO - 从商品名称推断规格: 味芝元洞庭鱼排香辣味26g -> 26*None, 包装数量=26 +2025-12-12 11:34:40,364 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔小鱼麻辣小鱼12g@ -> 12*None, 包装数量=12 +2025-12-12 11:34:40,366 - app.core.excel.processor - INFO - 从商品名称推断规格: 缺牙齿素牛肚香辣味16g -> 16*None, 包装数量=16 +2025-12-12 11:34:40,368 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事青柠味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:34:40,370 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事黄瓜味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:34:40,371 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事德克萨斯烧烤味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:34:40,371 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事薯片经典原味23g(串串装)@ -> 23*None, 包装数量=23 +2025-12-12 11:34:40,376 - app.core.excel.processor - INFO - 提取到 52 个商品信息 +2025-12-12 11:34:40,380 - app.core.excel.processor - INFO - 开始处理52 个产品信息 +2025-12-12 11:34:40,380 - app.core.excel.processor - INFO - 处理商品: 条码=6954767432076, 数量=48.0, 单价=55.68, 是否赠品=False +2025-12-12 11:34:40,381 - app.core.excel.processor - INFO - 发现正常商品:条码6954767432076, 数量=48.0, 单价=55.68 +2025-12-12 11:34:40,381 - app.core.excel.processor - INFO - 处理商品: 条码=6954767433073, 数量=8.0, 单价=44.32, 是否赠品=False +2025-12-12 11:34:40,381 - app.core.excel.processor - INFO - 发现正常商品:条码6954767433073, 数量=8.0, 单价=44.32 +2025-12-12 11:34:40,382 - app.core.excel.processor - INFO - 处理商品: 条码=6901285992933, 数量=40.0, 单价=21.52, 是否赠品=False +2025-12-12 11:34:40,382 - app.core.excel.processor - INFO - 发现正常商品:条码6901285992933, 数量=40.0, 单价=21.52 +2025-12-12 11:34:40,383 - app.core.excel.processor - INFO - 处理商品: 条码=6901285991530, 数量=8.0, 单价=26.08, 是否赠品=False +2025-12-12 11:34:40,383 - app.core.excel.processor - INFO - 发现正常商品:条码6901285991530, 数量=8.0, 单价=26.08 +2025-12-12 11:34:40,383 - app.core.excel.processor - INFO - 处理商品: 条码=6901285991271, 数量=60.0, 单价=24.6, 是否赠品=False +2025-12-12 11:34:40,383 - app.core.excel.processor - INFO - 发现正常商品:条码6901285991271, 数量=60.0, 单价=24.6 +2025-12-12 11:34:40,384 - app.core.excel.processor - INFO - 处理商品: 条码=6920584471017, 数量=12.0, 单价=54.0, 是否赠品=False +2025-12-12 11:34:40,384 - app.core.excel.processor - INFO - 发现正常商品:条码6920584471017, 数量=12.0, 单价=54.0 +2025-12-12 11:34:40,385 - app.core.excel.processor - INFO - 处理商品: 条码=6901668934925, 数量=5.0, 单价=6.5, 是否赠品=False +2025-12-12 11:34:40,385 - app.core.excel.processor - INFO - 发现正常商品:条码6901668934925, 数量=5.0, 单价=6.5 +2025-12-12 11:34:40,385 - app.core.excel.processor - INFO - 处理商品: 条码=6901668054715, 数量=4.0, 单价=3.6, 是否赠品=False +2025-12-12 11:34:40,385 - app.core.excel.processor - INFO - 发现正常商品:条码6901668054715, 数量=4.0, 单价=3.6 +2025-12-12 11:34:40,386 - app.core.excel.processor - INFO - 处理商品: 条码=6901668053916, 数量=3.0, 单价=3.6, 是否赠品=False +2025-12-12 11:34:40,386 - app.core.excel.processor - INFO - 发现正常商品:条码6901668053916, 数量=3.0, 单价=3.6 +2025-12-12 11:34:40,386 - app.core.excel.processor - INFO - 处理商品: 条码=6920907800616, 数量=4.0, 单价=3.0, 是否赠品=False +2025-12-12 11:34:40,387 - app.core.excel.processor - INFO - 发现正常商品:条码6920907800616, 数量=4.0, 单价=3.0 +2025-12-12 11:34:40,387 - app.core.excel.processor - INFO - 处理商品: 条码=6935855700383, 数量=8.0, 单价=38.0, 是否赠品=False +2025-12-12 11:34:40,387 - app.core.excel.processor - INFO - 发现正常商品:条码6935855700383, 数量=8.0, 单价=38.0 +2025-12-12 11:34:40,388 - app.core.excel.processor - INFO - 处理商品: 条码=6925683200957, 数量=8.0, 单价=28.0, 是否赠品=False +2025-12-12 11:34:40,388 - app.core.excel.processor - INFO - 发现正常商品:条码6925683200957, 数量=8.0, 单价=28.0 +2025-12-12 11:34:40,388 - app.core.excel.processor - INFO - 处理商品: 条码=6901845044027, 数量=4.0, 单价=5.55, 是否赠品=False +2025-12-12 11:34:40,388 - app.core.excel.processor - INFO - 发现正常商品:条码6901845044027, 数量=4.0, 单价=5.55 +2025-12-12 11:34:40,389 - app.core.excel.processor - INFO - 处理商品: 条码=6901845040968, 数量=5.0, 单价=5.55, 是否赠品=False +2025-12-12 11:34:40,389 - app.core.excel.processor - INFO - 发现正常商品:条码6901845040968, 数量=5.0, 单价=5.55 +2025-12-12 11:34:40,389 - app.core.excel.processor - INFO - 处理商品: 条码=6901668935649, 数量=6.0, 单价=1.99, 是否赠品=False +2025-12-12 11:34:40,389 - app.core.excel.processor - INFO - 发现正常商品:条码6901668935649, 数量=6.0, 单价=1.99 +2025-12-12 11:34:40,390 - app.core.excel.processor - INFO - 处理商品: 条码=6901668935663, 数量=5.0, 单价=1.99, 是否赠品=False +2025-12-12 11:34:40,390 - app.core.excel.processor - INFO - 发现正常商品:条码6901668935663, 数量=5.0, 单价=1.99 +2025-12-12 11:34:40,390 - app.core.excel.processor - INFO - 处理商品: 条码=6947929617534, 数量=4.0, 单价=2.66, 是否赠品=False +2025-12-12 11:34:40,390 - app.core.excel.processor - INFO - 发现正常商品:条码6947929617534, 数量=4.0, 单价=2.66 +2025-12-12 11:34:40,391 - app.core.excel.processor - INFO - 处理商品: 条码=6947929617138, 数量=4.0, 单价=2.66, 是否赠品=False +2025-12-12 11:34:40,391 - app.core.excel.processor - INFO - 发现正常商品:条码6947929617138, 数量=4.0, 单价=2.66 +2025-12-12 11:34:40,391 - app.core.excel.processor - INFO - 处理商品: 条码=6901668200013, 数量=3.0, 单价=3.5, 是否赠品=False +2025-12-12 11:34:40,392 - app.core.excel.processor - INFO - 发现正常商品:条码6901668200013, 数量=3.0, 单价=3.5 +2025-12-12 11:34:40,392 - app.core.excel.processor - INFO - 处理商品: 条码=6901668200303, 数量=3.0, 单价=3.5, 是否赠品=False +2025-12-12 11:34:40,392 - app.core.excel.processor - INFO - 发现正常商品:条码6901668200303, 数量=3.0, 单价=3.5 +2025-12-12 11:34:40,392 - app.core.excel.processor - INFO - 处理商品: 条码=6911988005229, 数量=4.0, 单价=2.25, 是否赠品=False +2025-12-12 11:34:40,393 - app.core.excel.processor - INFO - 发现正常商品:条码6911988005229, 数量=4.0, 单价=2.25 +2025-12-12 11:34:40,393 - app.core.excel.processor - INFO - 处理商品: 条码=6911988000293, 数量=4.0, 单价=3.8, 是否赠品=False +2025-12-12 11:34:40,393 - app.core.excel.processor - INFO - 发现正常商品:条码6911988000293, 数量=4.0, 单价=3.8 +2025-12-12 11:34:40,394 - app.core.excel.processor - INFO - 处理商品: 条码=6911988000286, 数量=3.0, 单价=3.8, 是否赠品=False +2025-12-12 11:34:40,394 - app.core.excel.processor - INFO - 发现正常商品:条码6911988000286, 数量=3.0, 单价=3.8 +2025-12-12 11:34:40,395 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009777, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:34:40,395 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009777, 数量=3.0, 单价=2.85 +2025-12-12 11:34:40,395 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009760, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:34:40,396 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009760, 数量=3.0, 单价=2.85 +2025-12-12 11:34:40,396 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009784, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:34:40,396 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009784, 数量=3.0, 单价=2.85 +2025-12-12 11:34:40,396 - app.core.excel.processor - INFO - 处理商品: 条码=6901180581683, 数量=2.0, 单价=3.8, 是否赠品=False +2025-12-12 11:34:40,396 - app.core.excel.processor - INFO - 发现正常商品:条码6901180581683, 数量=2.0, 单价=3.8 +2025-12-12 11:34:40,396 - app.core.excel.processor - INFO - 处理商品: 条码=6932024200552, 数量=3.0, 单价=3.0, 是否赠品=False +2025-12-12 11:34:40,396 - app.core.excel.processor - INFO - 发现正常商品:条码6932024200552, 数量=3.0, 单价=3.0 +2025-12-12 11:34:40,396 - app.core.excel.processor - INFO - 处理商品: 条码=6932024200583, 数量=4.0, 单价=1.7, 是否赠品=False +2025-12-12 11:34:40,396 - app.core.excel.processor - INFO - 发现正常商品:条码6932024200583, 数量=4.0, 单价=1.7 +2025-12-12 11:34:40,396 - app.core.excel.processor - INFO - 处理商品: 条码=6901668936714, 数量=4.0, 单价=5.2, 是否赠品=False +2025-12-12 11:34:40,396 - app.core.excel.processor - INFO - 发现正常商品:条码6901668936714, 数量=4.0, 单价=5.2 +2025-12-12 11:34:40,396 - app.core.excel.processor - INFO - 处理商品: 条码=6901668062499, 数量=4.0, 单价=5.2, 是否赠品=False +2025-12-12 11:34:40,399 - app.core.excel.processor - INFO - 发现正常商品:条码6901668062499, 数量=4.0, 单价=5.2 +2025-12-12 11:34:40,399 - app.core.excel.processor - INFO - 处理商品: 条码=6925332600046, 数量=3.0, 单价=3.8, 是否赠品=False +2025-12-12 11:34:40,399 - app.core.excel.processor - INFO - 发现正常商品:条码6925332600046, 数量=3.0, 单价=3.8 +2025-12-12 11:34:40,400 - app.core.excel.processor - INFO - 处理商品: 条码=6921233904955, 数量=4.0, 单价=3.8, 是否赠品=False +2025-12-12 11:34:40,400 - app.core.excel.processor - INFO - 发现正常商品:条码6921233904955, 数量=4.0, 单价=3.8 +2025-12-12 11:34:40,400 - app.core.excel.processor - INFO - 处理商品: 条码=6901180993387, 数量=3.0, 单价=3.0, 是否赠品=False +2025-12-12 11:34:40,401 - app.core.excel.processor - INFO - 发现正常商品:条码6901180993387, 数量=3.0, 单价=3.0 +2025-12-12 11:34:40,401 - app.core.excel.processor - INFO - 处理商品: 条码=6901180993486, 数量=3.0, 单价=3.0, 是否赠品=False +2025-12-12 11:34:40,401 - app.core.excel.processor - INFO - 发现正常商品:条码6901180993486, 数量=3.0, 单价=3.0 +2025-12-12 11:34:40,401 - app.core.excel.processor - INFO - 处理商品: 条码=6920546800046, 数量=5.0, 单价=3.95, 是否赠品=False +2025-12-12 11:34:40,402 - app.core.excel.processor - INFO - 发现正常商品:条码6920546800046, 数量=5.0, 单价=3.95 +2025-12-12 11:34:40,402 - app.core.excel.processor - INFO - 处理商品: 条码=6920546800053, 数量=5.0, 单价=4.5, 是否赠品=False +2025-12-12 11:34:40,402 - app.core.excel.processor - INFO - 发现正常商品:条码6920546800053, 数量=5.0, 单价=4.5 +2025-12-12 11:34:40,403 - app.core.excel.processor - INFO - 处理商品: 条码=6911988006783, 数量=1.0, 单价=5.88, 是否赠品=False +2025-12-12 11:34:40,403 - app.core.excel.processor - INFO - 发现正常商品:条码6911988006783, 数量=1.0, 单价=5.88 +2025-12-12 11:34:40,403 - app.core.excel.processor - INFO - 处理商品: 条码=6971295190759, 数量=20.0, 单价=15.0, 是否赠品=False +2025-12-12 11:34:40,404 - app.core.excel.processor - INFO - 发现正常商品:条码6971295190759, 数量=20.0, 单价=15.0 +2025-12-12 11:34:40,404 - app.core.excel.processor - INFO - 处理商品: 条码=6951957217307, 数量=20.0, 单价=26.6, 是否赠品=False +2025-12-12 11:34:40,404 - app.core.excel.processor - INFO - 发现正常商品:条码6951957217307, 数量=20.0, 单价=26.6 +2025-12-12 11:34:40,405 - app.core.excel.processor - INFO - 处理商品: 条码=6951957215723, 数量=20.0, 单价=26.6, 是否赠品=False +2025-12-12 11:34:40,405 - app.core.excel.processor - INFO - 发现正常商品:条码6951957215723, 数量=20.0, 单价=26.6 +2025-12-12 11:34:40,405 - app.core.excel.processor - INFO - 处理商品: 条码=6977530260072, 数量=25.0, 单价=17.5, 是否赠品=False +2025-12-12 11:34:40,405 - app.core.excel.processor - INFO - 发现正常商品:条码6977530260072, 数量=25.0, 单价=17.5 +2025-12-12 11:34:40,405 - app.core.excel.processor - INFO - 处理商品: 条码=6925300100400, 数量=25.0, 单价=17.5, 是否赠品=False +2025-12-12 11:34:40,405 - app.core.excel.processor - INFO - 发现正常商品:条码6925300100400, 数量=25.0, 单价=17.5 +2025-12-12 11:34:40,405 - app.core.excel.processor - INFO - 处理商品: 条码=6922170800638, 数量=20.0, 单价=15.0, 是否赠品=False +2025-12-12 11:34:40,405 - app.core.excel.processor - INFO - 发现正常商品:条码6922170800638, 数量=20.0, 单价=15.0 +2025-12-12 11:34:40,405 - app.core.excel.processor - INFO - 处理商品: 条码=690299810, 数量=16.0, 单价=23.2, 是否赠品=False +2025-12-12 11:34:40,408 - app.core.excel.processor - INFO - 发现正常商品:条码690299810, 数量=16.0, 单价=23.2 +2025-12-12 11:34:40,408 - app.core.excel.processor - INFO - 处理商品: 条码=6936869215092, 数量=15.0, 单价=1.5, 是否赠品=False +2025-12-12 11:34:40,408 - app.core.excel.processor - INFO - 发现正常商品:条码6936869215092, 数量=15.0, 单价=1.5 +2025-12-12 11:34:40,408 - app.core.excel.processor - INFO - 处理商品: 条码=6951957205762, 数量=20.0, 单价=14.2, 是否赠品=False +2025-12-12 11:34:40,409 - app.core.excel.processor - INFO - 发现正常商品:条码6951957205762, 数量=20.0, 单价=14.2 +2025-12-12 11:34:40,409 - app.core.excel.processor - INFO - 处理商品: 条码=6976481800078, 数量=30.0, 单价=22.5, 是否赠品=False +2025-12-12 11:34:40,409 - app.core.excel.processor - INFO - 发现正常商品:条码6976481800078, 数量=30.0, 单价=22.5 +2025-12-12 11:34:40,409 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919266, 数量=5.0, 单价=4.79, 是否赠品=False +2025-12-12 11:34:40,411 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919266, 数量=5.0, 单价=4.79 +2025-12-12 11:34:40,411 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919259, 数量=5.0, 单价=4.79, 是否赠品=False +2025-12-12 11:34:40,411 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919259, 数量=5.0, 单价=4.79 +2025-12-12 11:34:40,411 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919228, 数量=3.0, 单价=4.79, 是否赠品=False +2025-12-12 11:34:40,411 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919228, 数量=3.0, 单价=4.79 +2025-12-12 11:34:40,411 - app.core.excel.processor - INFO - 处理商品: 条码=6924743928077, 数量=1.0, 单价=1.35, 是否赠品=False +2025-12-12 11:34:40,412 - app.core.excel.processor - INFO - 发现正常商品:条码6924743928077, 数量=1.0, 单价=1.35 +2025-12-12 11:34:40,412 - app.core.excel.processor - INFO - 分组后共52 个不同条码的商品 +2025-12-12 11:34:40,412 - app.core.excel.processor - INFO - 条码 6954767432076 处理结果:正常商品数量48.0,单价55.68,赠品数量0 +2025-12-12 11:34:40,413 - app.core.excel.processor - INFO - 条码 6954767433073 处理结果:正常商品数量8.0,单价44.32,赠品数量0 +2025-12-12 11:34:40,413 - app.core.excel.processor - INFO - 条码 6901285992933 处理结果:正常商品数量40.0,单价21.52,赠品数量0 +2025-12-12 11:34:40,413 - app.core.excel.processor - INFO - 条码 6901285991530 处理结果:正常商品数量8.0,单价26.08,赠品数量0 +2025-12-12 11:34:40,414 - app.core.excel.processor - INFO - 条码 6901285991271 处理结果:正常商品数量60.0,单价24.6,赠品数量0 +2025-12-12 11:34:40,414 - app.core.excel.processor - INFO - 条码 6920584471017 处理结果:正常商品数量12.0,单价54.0,赠品数量0 +2025-12-12 11:34:40,414 - app.core.excel.processor - INFO - 条码 6901668934925 处理结果:正常商品数量5.0,单价6.5,赠品数量0 +2025-12-12 11:34:40,414 - app.core.excel.processor - INFO - 条码 6901668054715 处理结果:正常商品数量4.0,单价3.6,赠品数量0 +2025-12-12 11:34:40,414 - app.core.excel.processor - INFO - 条码 6901668053916 处理结果:正常商品数量3.0,单价3.6,赠品数量0 +2025-12-12 11:34:40,414 - app.core.excel.processor - INFO - 条码 6920907800616 处理结果:正常商品数量4.0,单价3.0,赠品数量0 +2025-12-12 11:34:40,414 - app.core.excel.processor - INFO - 条码 6935855700383 处理结果:正常商品数量8.0,单价38.0,赠品数量0 +2025-12-12 11:34:40,414 - app.core.excel.processor - INFO - 条码 6925683200957 处理结果:正常商品数量8.0,单价28.0,赠品数量0 +2025-12-12 11:34:40,414 - app.core.excel.processor - INFO - 条码 6901845044027 处理结果:正常商品数量4.0,单价5.55,赠品数量0 +2025-12-12 11:34:40,414 - app.core.excel.processor - INFO - 条码 6901845040968 处理结果:正常商品数量5.0,单价5.55,赠品数量0 +2025-12-12 11:34:40,414 - app.core.excel.processor - INFO - 条码 6901668935649 处理结果:正常商品数量6.0,单价1.99,赠品数量0 +2025-12-12 11:34:40,418 - app.core.excel.processor - INFO - 条码 6901668935663 处理结果:正常商品数量5.0,单价1.99,赠品数量0 +2025-12-12 11:34:40,418 - app.core.excel.processor - INFO - 条码 6947929617534 处理结果:正常商品数量4.0,单价2.66,赠品数量0 +2025-12-12 11:34:40,418 - app.core.excel.processor - INFO - 条码 6947929617138 处理结果:正常商品数量4.0,单价2.66,赠品数量0 +2025-12-12 11:34:40,418 - app.core.excel.processor - INFO - 条码 6901668200013 处理结果:正常商品数量3.0,单价3.5,赠品数量0 +2025-12-12 11:34:40,418 - app.core.excel.processor - INFO - 条码 6901668200303 处理结果:正常商品数量3.0,单价3.5,赠品数量0 +2025-12-12 11:34:40,418 - app.core.excel.processor - INFO - 条码 6911988005229 处理结果:正常商品数量4.0,单价2.25,赠品数量0 +2025-12-12 11:34:40,419 - app.core.excel.processor - INFO - 条码 6911988000293 处理结果:正常商品数量4.0,单价3.8,赠品数量0 +2025-12-12 11:34:40,420 - app.core.excel.processor - INFO - 条码 6911988000286 处理结果:正常商品数量3.0,单价3.8,赠品数量0 +2025-12-12 11:34:40,420 - app.core.excel.processor - INFO - 条码 6911988009777 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:34:40,420 - app.core.excel.processor - INFO - 条码 6911988009760 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:34:40,420 - app.core.excel.processor - INFO - 条码 6911988009784 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:34:40,421 - app.core.excel.processor - INFO - 条码 6901180581683 处理结果:正常商品数量2.0,单价3.8,赠品数量0 +2025-12-12 11:34:40,421 - app.core.excel.processor - INFO - 条码 6932024200552 处理结果:正常商品数量3.0,单价3.0,赠品数量0 +2025-12-12 11:34:40,421 - app.core.excel.processor - INFO - 条码 6932024200583 处理结果:正常商品数量4.0,单价1.7,赠品数量0 +2025-12-12 11:34:40,421 - app.core.excel.processor - INFO - 条码 6901668936714 处理结果:正常商品数量4.0,单价5.2,赠品数量0 +2025-12-12 11:34:40,422 - app.core.excel.processor - INFO - 条码 6901668062499 处理结果:正常商品数量4.0,单价5.2,赠品数量0 +2025-12-12 11:34:40,422 - app.core.excel.processor - INFO - 条码 6925332600046 处理结果:正常商品数量3.0,单价3.8,赠品数量0 +2025-12-12 11:34:40,422 - app.core.excel.processor - INFO - 条码 6921233904955 处理结果:正常商品数量4.0,单价3.8,赠品数量0 +2025-12-12 11:34:40,422 - app.core.excel.processor - INFO - 条码 6901180993387 处理结果:正常商品数量3.0,单价3.0,赠品数量0 +2025-12-12 11:34:40,423 - app.core.excel.processor - INFO - 条码 6901180993486 处理结果:正常商品数量3.0,单价3.0,赠品数量0 +2025-12-12 11:34:40,423 - app.core.excel.processor - INFO - 条码 6920546800046 处理结果:正常商品数量5.0,单价3.95,赠品数量0 +2025-12-12 11:34:40,423 - app.core.excel.processor - INFO - 条码 6920546800053 处理结果:正常商品数量5.0,单价4.5,赠品数量0 +2025-12-12 11:34:40,423 - app.core.excel.processor - INFO - 条码 6911988006783 处理结果:正常商品数量1.0,单价5.88,赠品数量0 +2025-12-12 11:34:40,424 - app.core.excel.processor - INFO - 条码 6971295190759 处理结果:正常商品数量20.0,单价15.0,赠品数量0 +2025-12-12 11:34:40,424 - app.core.excel.processor - INFO - 条码 6951957217307 处理结果:正常商品数量20.0,单价26.6,赠品数量0 +2025-12-12 11:34:40,424 - app.core.excel.processor - INFO - 条码 6951957215723 处理结果:正常商品数量20.0,单价26.6,赠品数量0 +2025-12-12 11:34:40,424 - app.core.excel.processor - INFO - 条码 6977530260072 处理结果:正常商品数量25.0,单价17.5,赠品数量0 +2025-12-12 11:34:40,424 - app.core.excel.processor - INFO - 条码 6925300100400 处理结果:正常商品数量25.0,单价17.5,赠品数量0 +2025-12-12 11:34:40,424 - app.core.excel.processor - INFO - 条码 6922170800638 处理结果:正常商品数量20.0,单价15.0,赠品数量0 +2025-12-12 11:34:40,424 - app.core.excel.processor - INFO - 条码 690299810 处理结果:正常商品数量16.0,单价23.2,赠品数量0 +2025-12-12 11:34:40,424 - app.core.excel.processor - INFO - 条码 6936869215092 处理结果:正常商品数量15.0,单价1.5,赠品数量0 +2025-12-12 11:34:40,424 - app.core.excel.processor - INFO - 条码 6951957205762 处理结果:正常商品数量20.0,单价14.2,赠品数量0 +2025-12-12 11:34:40,424 - app.core.excel.processor - INFO - 条码 6976481800078 处理结果:正常商品数量30.0,单价22.5,赠品数量0 +2025-12-12 11:34:40,424 - app.core.excel.processor - INFO - 条码 6924743919266 处理结果:正常商品数量5.0,单价4.79,赠品数量0 +2025-12-12 11:34:40,424 - app.core.excel.processor - INFO - 条码 6924743919259 处理结果:正常商品数量5.0,单价4.79,赠品数量0 +2025-12-12 11:34:40,424 - app.core.excel.processor - INFO - 条码 6924743919228 处理结果:正常商品数量3.0,单价4.79,赠品数量0 +2025-12-12 11:34:40,424 - app.core.excel.processor - INFO - 条码 6924743928077 处理结果:正常商品数量1.0,单价1.35,赠品数量0 +2025-12-12 11:34:40,428 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_蓉城易购-订单1765440157955.xls +2025-12-12 11:34:40,456 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_蓉城易购-订单1765440157955.xls +2025-12-12 11:38:53,256 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-12 11:38:53,256 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-12-12 11:38:53,256 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-12-12 11:38:53,260 - app.core.excel.processor - INFO - 开始处理Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx +2025-12-12 11:38:53,272 - app.core.excel.processor - INFO - 成功读取Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx, 共 58 行 +2025-12-12 11:38:53,275 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 75 +2025-12-12 11:38:53,275 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-12-12 11:38:53,286 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 57 行有效数据 +2025-12-12 11:38:53,288 - app.core.excel.processor - INFO - 找到部分匹配的条码列: 商品条码(小条码) (包含关键词: 条码) +2025-12-12 11:38:53,288 - app.core.excel.processor - INFO - 使用条码列: 商品条码(小条码) +2025-12-12 11:38:53,288 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-12-12 11:38:53,289 - app.core.excel.processor - INFO - 找到quantity列(部分匹配): 订购数量(小单位) +2025-12-12 11:38:53,289 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-12-12 11:38:53,290 - app.core.excel.processor - INFO - 找到price列(部分匹配): 单价(小单位) +2025-12-12 11:38:53,290 - app.core.excel.processor - INFO - 找到amount列(部分匹配): 优惠后金额(小单位) +2025-12-12 11:38:53,290 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '商品条码(小条码)', 'name': '商品名称', 'quantity': '订购数量(小单位)', 'unit': '单位', 'price': '单价(小单位)', 'amount': '优惠后金额(小单位)'} +2025-12-12 11:38:53,294 - app.core.excel.processor - INFO - 从商品名称推断规格: 雪碧2L@ -> 2L*1, 包装数量=1 +2025-12-12 11:38:53,298 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝饮用纯净水2.08L@ -> 2.08L*1, 包装数量=1 +2025-12-12 11:38:53,301 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝纯净水4.5L@ -> 4.5L*1, 包装数量=1 +2025-12-12 11:38:53,303 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝饮用纯净水1.555L@ -> 1.555L*1, 包装数量=1 +2025-12-12 11:38:53,306 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥薄脆酸甜草莓味95g@ -> 95*None, 包装数量=95 +2025-12-12 11:38:53,307 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥杯奥草莓味55g@ -> 55*None, 包装数量=55 +2025-12-12 11:38:53,307 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥杯奥巧克力55g@ -> 55*None, 包装数量=55 +2025-12-12 11:38:53,313 - app.core.excel.processor - INFO - 从商品名称推断规格: 好丽友蛋黄派2P46g@ -> 46*None, 包装数量=46 +2025-12-12 11:38:53,315 - app.core.excel.processor - INFO - 从商品名称推断规格: 都市牧场爽口含片正梅味38g@ -> 38*None, 包装数量=38 +2025-12-12 11:38:53,317 - app.core.excel.processor - INFO - 从商品名称推断规格: 林振合维C果C软糖什锦味68g -> 68*None, 包装数量=68 +2025-12-12 11:38:53,321 - app.core.excel.processor - INFO - 从商品名称推断规格: 格力高百醇柠檬48g@ -> 48*None, 包装数量=48 +2025-12-12 11:38:53,323 - app.core.excel.processor - INFO - 从商品名称推断规格: 格力高百醇抹茶慕斯味48g@ -> 48*None, 包装数量=48 +2025-12-12 11:38:53,325 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥饼干经典原味48.5g@ -> 48.5*None, 包装数量=48 +2025-12-12 11:38:53,328 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None, 包装数量=48 +2025-12-12 11:38:53,330 - app.core.excel.processor - INFO - 从商品名称推断规格: 法丽兹曲奇芝士巧克力70g@ -> 70*None, 包装数量=70 +2025-12-12 11:38:53,332 - app.core.excel.processor - INFO - 从商品名称推断规格: 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:38:53,335 - app.core.excel.processor - INFO - 从商品名称推断规格: 太平梳打饼干奶盐味100g@ -> 100*None, 包装数量=100 +2025-12-12 11:38:53,337 - app.core.excel.processor - INFO - 从商品名称推断规格: 太平梳打饼干海苔味100g@ -> 100*None, 包装数量=100 +2025-12-12 11:38:53,339 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园手指饼115g@ -> 115*None, 包装数量=115 +2025-12-12 11:38:53,342 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点杏仁酥饼146g@ -> 146*None, 包装数量=146 +2025-12-12 11:38:53,345 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点核桃酥饼146g@ -> 146*None, 包装数量=146 +2025-12-12 11:38:53,347 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆腰果饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:38:53,350 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆杏仁饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:38:53,352 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆核桃饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:38:53,353 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利威化饼干草莓味115g@ -> 115*None, 包装数量=115 +2025-12-12 11:38:53,355 - app.core.excel.processor - INFO - 从商品名称推断规格: 亨裕饼朱古力味饼干186g -> 186*None, 包装数量=186 +2025-12-12 11:38:53,358 - app.core.excel.processor - INFO - 从商品名称推断规格: 亨裕早茶饼干110g -> 110*None, 包装数量=110 +2025-12-12 11:38:53,359 - app.core.excel.processor - INFO - 从商品名称推断规格: 趣多多香浓巧克力味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:38:53,361 - app.core.excel.processor - INFO - 从商品名称推断规格: 趣多多缤纷逗巧克力85g@ -> 85*None, 包装数量=85 +2025-12-12 11:38:53,362 - app.core.excel.processor - INFO - 从商品名称推断规格: 米老头雪花煎卷椰奶味150g@ -> 150*None, 包装数量=150 +2025-12-12 11:38:53,366 - app.core.excel.processor - INFO - 从商品名称推断规格: 金富士牛乳饼干香浓牛奶味130g@ -> 130*None, 包装数量=130 +2025-12-12 11:38:53,367 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利果乐果香蓝莓味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:38:53,369 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利果乐果香草莓味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:38:53,371 - app.core.excel.processor - INFO - 从商品名称推断规格: 旺旺仙贝52g@ -> 52*None, 包装数量=52 +2025-12-12 11:38:53,372 - app.core.excel.processor - INFO - 从商品名称推断规格: 旺旺雪饼84g@ -> 84*None, 包装数量=84 +2025-12-12 11:38:53,372 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园蛋黄派230g@ -> 230*None, 包装数量=230 +2025-12-12 11:38:53,376 - app.core.excel.processor - INFO - 从商品名称推断规格: 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None, 包装数量=22 +2025-12-12 11:38:53,379 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔手撕肉干麻辣味10g@ -> 10*None, 包装数量=10 +2025-12-12 11:38:53,381 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔手撕肉干香辣味10g@ -> 10*None, 包装数量=10 +2025-12-12 11:38:53,385 - app.core.excel.processor - INFO - 从商品名称推断规格: 登荣香辣爽口鸡23g -> 23*None, 包装数量=23 +2025-12-12 11:38:53,387 - app.core.excel.processor - INFO - 从商品名称推断规格: 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None, 包装数量=12 +2025-12-12 11:38:53,389 - app.core.excel.processor - INFO - 从商品名称推断规格: 味芝元洞庭鱼排香辣味26g -> 26*None, 包装数量=26 +2025-12-12 11:38:53,391 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔小鱼麻辣小鱼12g@ -> 12*None, 包装数量=12 +2025-12-12 11:38:53,393 - app.core.excel.processor - INFO - 从商品名称推断规格: 缺牙齿素牛肚香辣味16g -> 16*None, 包装数量=16 +2025-12-12 11:38:53,395 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事青柠味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:38:53,397 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事黄瓜味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:38:53,398 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事德克萨斯烧烤味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:38:53,399 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事薯片经典原味23g(串串装)@ -> 23*None, 包装数量=23 +2025-12-12 11:38:53,399 - app.core.excel.processor - INFO - 提取到 52 个商品信息 +2025-12-12 11:38:53,406 - app.core.excel.processor - INFO - 开始处理52 个产品信息 +2025-12-12 11:38:53,406 - app.core.excel.processor - INFO - 处理商品: 条码=6954767432076, 数量=48.0, 单价=55.68, 是否赠品=False +2025-12-12 11:38:53,407 - app.core.excel.processor - INFO - 发现正常商品:条码6954767432076, 数量=48.0, 单价=55.68 +2025-12-12 11:38:53,408 - app.core.excel.processor - INFO - 处理商品: 条码=6954767433073, 数量=8.0, 单价=44.32, 是否赠品=False +2025-12-12 11:38:53,408 - app.core.excel.processor - INFO - 发现正常商品:条码6954767433073, 数量=8.0, 单价=44.32 +2025-12-12 11:38:53,408 - app.core.excel.processor - INFO - 处理商品: 条码=6901285992933, 数量=40.0, 单价=21.52, 是否赠品=False +2025-12-12 11:38:53,408 - app.core.excel.processor - INFO - 发现正常商品:条码6901285992933, 数量=40.0, 单价=21.52 +2025-12-12 11:38:53,409 - app.core.excel.processor - INFO - 处理商品: 条码=6901285991530, 数量=8.0, 单价=26.08, 是否赠品=False +2025-12-12 11:38:53,409 - app.core.excel.processor - INFO - 发现正常商品:条码6901285991530, 数量=8.0, 单价=26.08 +2025-12-12 11:38:53,409 - app.core.excel.processor - INFO - 处理商品: 条码=6901285991271, 数量=60.0, 单价=24.6, 是否赠品=False +2025-12-12 11:38:53,410 - app.core.excel.processor - INFO - 发现正常商品:条码6901285991271, 数量=60.0, 单价=24.6 +2025-12-12 11:38:53,410 - app.core.excel.processor - INFO - 处理商品: 条码=6920584471017, 数量=12.0, 单价=54.0, 是否赠品=False +2025-12-12 11:38:53,411 - app.core.excel.processor - INFO - 发现正常商品:条码6920584471017, 数量=12.0, 单价=54.0 +2025-12-12 11:38:53,411 - app.core.excel.processor - INFO - 处理商品: 条码=6901668934925, 数量=5.0, 单价=6.5, 是否赠品=False +2025-12-12 11:38:53,411 - app.core.excel.processor - INFO - 发现正常商品:条码6901668934925, 数量=5.0, 单价=6.5 +2025-12-12 11:38:53,412 - app.core.excel.processor - INFO - 处理商品: 条码=6901668054715, 数量=4.0, 单价=3.6, 是否赠品=False +2025-12-12 11:38:53,412 - app.core.excel.processor - INFO - 发现正常商品:条码6901668054715, 数量=4.0, 单价=3.6 +2025-12-12 11:38:53,412 - app.core.excel.processor - INFO - 处理商品: 条码=6901668053916, 数量=3.0, 单价=3.6, 是否赠品=False +2025-12-12 11:38:53,413 - app.core.excel.processor - INFO - 发现正常商品:条码6901668053916, 数量=3.0, 单价=3.6 +2025-12-12 11:38:53,413 - app.core.excel.processor - INFO - 处理商品: 条码=6920907800616, 数量=4.0, 单价=3.0, 是否赠品=False +2025-12-12 11:38:53,413 - app.core.excel.processor - INFO - 发现正常商品:条码6920907800616, 数量=4.0, 单价=3.0 +2025-12-12 11:38:53,414 - app.core.excel.processor - INFO - 处理商品: 条码=6935855700383, 数量=8.0, 单价=38.0, 是否赠品=False +2025-12-12 11:38:53,414 - app.core.excel.processor - INFO - 发现正常商品:条码6935855700383, 数量=8.0, 单价=38.0 +2025-12-12 11:38:53,414 - app.core.excel.processor - INFO - 处理商品: 条码=6925683200957, 数量=8.0, 单价=28.0, 是否赠品=False +2025-12-12 11:38:53,414 - app.core.excel.processor - INFO - 发现正常商品:条码6925683200957, 数量=8.0, 单价=28.0 +2025-12-12 11:38:53,415 - app.core.excel.processor - INFO - 处理商品: 条码=6901845044027, 数量=4.0, 单价=5.55, 是否赠品=False +2025-12-12 11:38:53,415 - app.core.excel.processor - INFO - 发现正常商品:条码6901845044027, 数量=4.0, 单价=5.55 +2025-12-12 11:38:53,415 - app.core.excel.processor - INFO - 处理商品: 条码=6901845040968, 数量=5.0, 单价=5.55, 是否赠品=False +2025-12-12 11:38:53,416 - app.core.excel.processor - INFO - 发现正常商品:条码6901845040968, 数量=5.0, 单价=5.55 +2025-12-12 11:38:53,416 - app.core.excel.processor - INFO - 处理商品: 条码=6901668935649, 数量=6.0, 单价=1.99, 是否赠品=False +2025-12-12 11:38:53,417 - app.core.excel.processor - INFO - 发现正常商品:条码6901668935649, 数量=6.0, 单价=1.99 +2025-12-12 11:38:53,417 - app.core.excel.processor - INFO - 处理商品: 条码=6901668935663, 数量=5.0, 单价=1.99, 是否赠品=False +2025-12-12 11:38:53,418 - app.core.excel.processor - INFO - 发现正常商品:条码6901668935663, 数量=5.0, 单价=1.99 +2025-12-12 11:38:53,418 - app.core.excel.processor - INFO - 处理商品: 条码=6947929617534, 数量=4.0, 单价=2.66, 是否赠品=False +2025-12-12 11:38:53,418 - app.core.excel.processor - INFO - 发现正常商品:条码6947929617534, 数量=4.0, 单价=2.66 +2025-12-12 11:38:53,419 - app.core.excel.processor - INFO - 处理商品: 条码=6947929617138, 数量=4.0, 单价=2.66, 是否赠品=False +2025-12-12 11:38:53,419 - app.core.excel.processor - INFO - 发现正常商品:条码6947929617138, 数量=4.0, 单价=2.66 +2025-12-12 11:38:53,419 - app.core.excel.processor - INFO - 处理商品: 条码=6901668200013, 数量=3.0, 单价=3.5, 是否赠品=False +2025-12-12 11:38:53,420 - app.core.excel.processor - INFO - 发现正常商品:条码6901668200013, 数量=3.0, 单价=3.5 +2025-12-12 11:38:53,420 - app.core.excel.processor - INFO - 处理商品: 条码=6901668200303, 数量=3.0, 单价=3.5, 是否赠品=False +2025-12-12 11:38:53,420 - app.core.excel.processor - INFO - 发现正常商品:条码6901668200303, 数量=3.0, 单价=3.5 +2025-12-12 11:38:53,420 - app.core.excel.processor - INFO - 处理商品: 条码=6911988005229, 数量=4.0, 单价=2.25, 是否赠品=False +2025-12-12 11:38:53,420 - app.core.excel.processor - INFO - 发现正常商品:条码6911988005229, 数量=4.0, 单价=2.25 +2025-12-12 11:38:53,420 - app.core.excel.processor - INFO - 处理商品: 条码=6911988000293, 数量=4.0, 单价=3.8, 是否赠品=False +2025-12-12 11:38:53,420 - app.core.excel.processor - INFO - 发现正常商品:条码6911988000293, 数量=4.0, 单价=3.8 +2025-12-12 11:38:53,420 - app.core.excel.processor - INFO - 处理商品: 条码=6911988000286, 数量=3.0, 单价=3.8, 是否赠品=False +2025-12-12 11:38:53,420 - app.core.excel.processor - INFO - 发现正常商品:条码6911988000286, 数量=3.0, 单价=3.8 +2025-12-12 11:38:53,420 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009777, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:38:53,422 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009777, 数量=3.0, 单价=2.85 +2025-12-12 11:38:53,423 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009760, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:38:53,423 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009760, 数量=3.0, 单价=2.85 +2025-12-12 11:38:53,423 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009784, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:38:53,424 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009784, 数量=3.0, 单价=2.85 +2025-12-12 11:38:53,424 - app.core.excel.processor - INFO - 处理商品: 条码=6901180581683, 数量=2.0, 单价=3.8, 是否赠品=False +2025-12-12 11:38:53,424 - app.core.excel.processor - INFO - 发现正常商品:条码6901180581683, 数量=2.0, 单价=3.8 +2025-12-12 11:38:53,425 - app.core.excel.processor - INFO - 处理商品: 条码=6932024200552, 数量=3.0, 单价=3.0, 是否赠品=False +2025-12-12 11:38:53,425 - app.core.excel.processor - INFO - 发现正常商品:条码6932024200552, 数量=3.0, 单价=3.0 +2025-12-12 11:38:53,425 - app.core.excel.processor - INFO - 处理商品: 条码=6932024200583, 数量=4.0, 单价=1.7, 是否赠品=False +2025-12-12 11:38:53,425 - app.core.excel.processor - INFO - 发现正常商品:条码6932024200583, 数量=4.0, 单价=1.7 +2025-12-12 11:38:53,426 - app.core.excel.processor - INFO - 处理商品: 条码=6901668936714, 数量=4.0, 单价=5.2, 是否赠品=False +2025-12-12 11:38:53,426 - app.core.excel.processor - INFO - 发现正常商品:条码6901668936714, 数量=4.0, 单价=5.2 +2025-12-12 11:38:53,426 - app.core.excel.processor - INFO - 处理商品: 条码=6901668062499, 数量=4.0, 单价=5.2, 是否赠品=False +2025-12-12 11:38:53,426 - app.core.excel.processor - INFO - 发现正常商品:条码6901668062499, 数量=4.0, 单价=5.2 +2025-12-12 11:38:53,427 - app.core.excel.processor - INFO - 处理商品: 条码=6925332600046, 数量=3.0, 单价=3.8, 是否赠品=False +2025-12-12 11:38:53,427 - app.core.excel.processor - INFO - 发现正常商品:条码6925332600046, 数量=3.0, 单价=3.8 +2025-12-12 11:38:53,427 - app.core.excel.processor - INFO - 处理商品: 条码=6921233904955, 数量=4.0, 单价=3.8, 是否赠品=False +2025-12-12 11:38:53,427 - app.core.excel.processor - INFO - 发现正常商品:条码6921233904955, 数量=4.0, 单价=3.8 +2025-12-12 11:38:53,427 - app.core.excel.processor - INFO - 处理商品: 条码=6901180993387, 数量=3.0, 单价=3.0, 是否赠品=False +2025-12-12 11:38:53,428 - app.core.excel.processor - INFO - 发现正常商品:条码6901180993387, 数量=3.0, 单价=3.0 +2025-12-12 11:38:53,428 - app.core.excel.processor - INFO - 处理商品: 条码=6901180993486, 数量=3.0, 单价=3.0, 是否赠品=False +2025-12-12 11:38:53,428 - app.core.excel.processor - INFO - 发现正常商品:条码6901180993486, 数量=3.0, 单价=3.0 +2025-12-12 11:38:53,428 - app.core.excel.processor - INFO - 处理商品: 条码=6920546800046, 数量=5.0, 单价=3.95, 是否赠品=False +2025-12-12 11:38:53,429 - app.core.excel.processor - INFO - 发现正常商品:条码6920546800046, 数量=5.0, 单价=3.95 +2025-12-12 11:38:53,429 - app.core.excel.processor - INFO - 处理商品: 条码=6920546800053, 数量=5.0, 单价=4.5, 是否赠品=False +2025-12-12 11:38:53,429 - app.core.excel.processor - INFO - 发现正常商品:条码6920546800053, 数量=5.0, 单价=4.5 +2025-12-12 11:38:53,429 - app.core.excel.processor - INFO - 处理商品: 条码=6911988006783, 数量=1.0, 单价=5.88, 是否赠品=False +2025-12-12 11:38:53,429 - app.core.excel.processor - INFO - 发现正常商品:条码6911988006783, 数量=1.0, 单价=5.88 +2025-12-12 11:38:53,429 - app.core.excel.processor - INFO - 处理商品: 条码=6971295190759, 数量=20.0, 单价=15.0, 是否赠品=False +2025-12-12 11:38:53,429 - app.core.excel.processor - INFO - 发现正常商品:条码6971295190759, 数量=20.0, 单价=15.0 +2025-12-12 11:38:53,429 - app.core.excel.processor - INFO - 处理商品: 条码=6951957217307, 数量=20.0, 单价=26.6, 是否赠品=False +2025-12-12 11:38:53,429 - app.core.excel.processor - INFO - 发现正常商品:条码6951957217307, 数量=20.0, 单价=26.6 +2025-12-12 11:38:53,429 - app.core.excel.processor - INFO - 处理商品: 条码=6951957215723, 数量=20.0, 单价=26.6, 是否赠品=False +2025-12-12 11:38:53,429 - app.core.excel.processor - INFO - 发现正常商品:条码6951957215723, 数量=20.0, 单价=26.6 +2025-12-12 11:38:53,432 - app.core.excel.processor - INFO - 处理商品: 条码=6977530260072, 数量=25.0, 单价=17.5, 是否赠品=False +2025-12-12 11:38:53,432 - app.core.excel.processor - INFO - 发现正常商品:条码6977530260072, 数量=25.0, 单价=17.5 +2025-12-12 11:38:53,433 - app.core.excel.processor - INFO - 处理商品: 条码=6925300100400, 数量=25.0, 单价=17.5, 是否赠品=False +2025-12-12 11:38:53,433 - app.core.excel.processor - INFO - 发现正常商品:条码6925300100400, 数量=25.0, 单价=17.5 +2025-12-12 11:38:53,433 - app.core.excel.processor - INFO - 处理商品: 条码=6922170800638, 数量=20.0, 单价=15.0, 是否赠品=False +2025-12-12 11:38:53,433 - app.core.excel.processor - INFO - 发现正常商品:条码6922170800638, 数量=20.0, 单价=15.0 +2025-12-12 11:38:53,434 - app.core.excel.processor - INFO - 处理商品: 条码=690299810, 数量=16.0, 单价=23.2, 是否赠品=False +2025-12-12 11:38:53,434 - app.core.excel.processor - INFO - 发现正常商品:条码690299810, 数量=16.0, 单价=23.2 +2025-12-12 11:38:53,434 - app.core.excel.processor - INFO - 处理商品: 条码=6936869215092, 数量=15.0, 单价=1.5, 是否赠品=False +2025-12-12 11:38:53,435 - app.core.excel.processor - INFO - 发现正常商品:条码6936869215092, 数量=15.0, 单价=1.5 +2025-12-12 11:38:53,435 - app.core.excel.processor - INFO - 处理商品: 条码=6951957205762, 数量=20.0, 单价=14.2, 是否赠品=False +2025-12-12 11:38:53,435 - app.core.excel.processor - INFO - 发现正常商品:条码6951957205762, 数量=20.0, 单价=14.2 +2025-12-12 11:38:53,435 - app.core.excel.processor - INFO - 处理商品: 条码=6976481800078, 数量=30.0, 单价=22.5, 是否赠品=False +2025-12-12 11:38:53,436 - app.core.excel.processor - INFO - 发现正常商品:条码6976481800078, 数量=30.0, 单价=22.5 +2025-12-12 11:38:53,436 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919266, 数量=5.0, 单价=4.79, 是否赠品=False +2025-12-12 11:38:53,436 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919266, 数量=5.0, 单价=4.79 +2025-12-12 11:38:53,437 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919259, 数量=5.0, 单价=4.79, 是否赠品=False +2025-12-12 11:38:53,437 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919259, 数量=5.0, 单价=4.79 +2025-12-12 11:38:53,437 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919228, 数量=3.0, 单价=4.79, 是否赠品=False +2025-12-12 11:38:53,437 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919228, 数量=3.0, 单价=4.79 +2025-12-12 11:38:53,437 - app.core.excel.processor - INFO - 处理商品: 条码=6924743928077, 数量=1.0, 单价=1.35, 是否赠品=False +2025-12-12 11:38:53,437 - app.core.excel.processor - INFO - 发现正常商品:条码6924743928077, 数量=1.0, 单价=1.35 +2025-12-12 11:38:53,437 - app.core.excel.processor - INFO - 分组后共52 个不同条码的商品 +2025-12-12 11:38:53,437 - app.core.excel.processor - INFO - 条码 6954767432076 处理结果:正常商品数量48.0,单价55.68,赠品数量0 +2025-12-12 11:38:53,437 - app.core.excel.processor - INFO - 条码 6954767433073 处理结果:正常商品数量8.0,单价44.32,赠品数量0 +2025-12-12 11:38:53,437 - app.core.excel.processor - INFO - 条码 6901285992933 处理结果:正常商品数量40.0,单价21.52,赠品数量0 +2025-12-12 11:38:53,437 - app.core.excel.processor - INFO - 条码 6901285991530 处理结果:正常商品数量8.0,单价26.08,赠品数量0 +2025-12-12 11:38:53,440 - app.core.excel.processor - INFO - 条码 6901285991271 处理结果:正常商品数量60.0,单价24.6,赠品数量0 +2025-12-12 11:38:53,440 - app.core.excel.processor - INFO - 条码 6920584471017 处理结果:正常商品数量12.0,单价54.0,赠品数量0 +2025-12-12 11:38:53,440 - app.core.excel.processor - INFO - 条码 6901668934925 处理结果:正常商品数量5.0,单价6.5,赠品数量0 +2025-12-12 11:38:53,441 - app.core.excel.processor - INFO - 条码 6901668054715 处理结果:正常商品数量4.0,单价3.6,赠品数量0 +2025-12-12 11:38:53,441 - app.core.excel.processor - INFO - 条码 6901668053916 处理结果:正常商品数量3.0,单价3.6,赠品数量0 +2025-12-12 11:38:53,441 - app.core.excel.processor - INFO - 条码 6920907800616 处理结果:正常商品数量4.0,单价3.0,赠品数量0 +2025-12-12 11:38:53,441 - app.core.excel.processor - INFO - 条码 6935855700383 处理结果:正常商品数量8.0,单价38.0,赠品数量0 +2025-12-12 11:38:53,443 - app.core.excel.processor - INFO - 条码 6925683200957 处理结果:正常商品数量8.0,单价28.0,赠品数量0 +2025-12-12 11:38:53,443 - app.core.excel.processor - INFO - 条码 6901845044027 处理结果:正常商品数量4.0,单价5.55,赠品数量0 +2025-12-12 11:38:53,443 - app.core.excel.processor - INFO - 条码 6901845040968 处理结果:正常商品数量5.0,单价5.55,赠品数量0 +2025-12-12 11:38:53,444 - app.core.excel.processor - INFO - 条码 6901668935649 处理结果:正常商品数量6.0,单价1.99,赠品数量0 +2025-12-12 11:38:53,444 - app.core.excel.processor - INFO - 条码 6901668935663 处理结果:正常商品数量5.0,单价1.99,赠品数量0 +2025-12-12 11:38:53,444 - app.core.excel.processor - INFO - 条码 6947929617534 处理结果:正常商品数量4.0,单价2.66,赠品数量0 +2025-12-12 11:38:53,444 - app.core.excel.processor - INFO - 条码 6947929617138 处理结果:正常商品数量4.0,单价2.66,赠品数量0 +2025-12-12 11:38:53,445 - app.core.excel.processor - INFO - 条码 6901668200013 处理结果:正常商品数量3.0,单价3.5,赠品数量0 +2025-12-12 11:38:53,445 - app.core.excel.processor - INFO - 条码 6901668200303 处理结果:正常商品数量3.0,单价3.5,赠品数量0 +2025-12-12 11:38:53,445 - app.core.excel.processor - INFO - 条码 6911988005229 处理结果:正常商品数量4.0,单价2.25,赠品数量0 +2025-12-12 11:38:53,446 - app.core.excel.processor - INFO - 条码 6911988000293 处理结果:正常商品数量4.0,单价3.8,赠品数量0 +2025-12-12 11:38:53,446 - app.core.excel.processor - INFO - 条码 6911988000286 处理结果:正常商品数量3.0,单价3.8,赠品数量0 +2025-12-12 11:38:53,446 - app.core.excel.processor - INFO - 条码 6911988009777 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:38:53,447 - app.core.excel.processor - INFO - 条码 6911988009760 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:38:53,447 - app.core.excel.processor - INFO - 条码 6911988009784 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:38:53,447 - app.core.excel.processor - INFO - 条码 6901180581683 处理结果:正常商品数量2.0,单价3.8,赠品数量0 +2025-12-12 11:38:53,448 - app.core.excel.processor - INFO - 条码 6932024200552 处理结果:正常商品数量3.0,单价3.0,赠品数量0 +2025-12-12 11:38:53,448 - app.core.excel.processor - INFO - 条码 6932024200583 处理结果:正常商品数量4.0,单价1.7,赠品数量0 +2025-12-12 11:38:53,448 - app.core.excel.processor - INFO - 条码 6901668936714 处理结果:正常商品数量4.0,单价5.2,赠品数量0 +2025-12-12 11:38:53,448 - app.core.excel.processor - INFO - 条码 6901668062499 处理结果:正常商品数量4.0,单价5.2,赠品数量0 +2025-12-12 11:38:53,448 - app.core.excel.processor - INFO - 条码 6925332600046 处理结果:正常商品数量3.0,单价3.8,赠品数量0 +2025-12-12 11:38:53,448 - app.core.excel.processor - INFO - 条码 6921233904955 处理结果:正常商品数量4.0,单价3.8,赠品数量0 +2025-12-12 11:38:53,448 - app.core.excel.processor - INFO - 条码 6901180993387 处理结果:正常商品数量3.0,单价3.0,赠品数量0 +2025-12-12 11:38:53,448 - app.core.excel.processor - INFO - 条码 6901180993486 处理结果:正常商品数量3.0,单价3.0,赠品数量0 +2025-12-12 11:38:53,448 - app.core.excel.processor - INFO - 条码 6920546800046 处理结果:正常商品数量5.0,单价3.95,赠品数量0 +2025-12-12 11:38:53,448 - app.core.excel.processor - INFO - 条码 6920546800053 处理结果:正常商品数量5.0,单价4.5,赠品数量0 +2025-12-12 11:38:53,448 - app.core.excel.processor - INFO - 条码 6911988006783 处理结果:正常商品数量1.0,单价5.88,赠品数量0 +2025-12-12 11:38:53,448 - app.core.excel.processor - INFO - 条码 6971295190759 处理结果:正常商品数量20.0,单价15.0,赠品数量0 +2025-12-12 11:38:53,448 - app.core.excel.processor - INFO - 条码 6951957217307 处理结果:正常商品数量20.0,单价26.6,赠品数量0 +2025-12-12 11:38:53,448 - app.core.excel.processor - INFO - 条码 6951957215723 处理结果:正常商品数量20.0,单价26.6,赠品数量0 +2025-12-12 11:38:53,452 - app.core.excel.processor - INFO - 条码 6977530260072 处理结果:正常商品数量25.0,单价17.5,赠品数量0 +2025-12-12 11:38:53,452 - app.core.excel.processor - INFO - 条码 6925300100400 处理结果:正常商品数量25.0,单价17.5,赠品数量0 +2025-12-12 11:38:53,452 - app.core.excel.processor - INFO - 条码 6922170800638 处理结果:正常商品数量20.0,单价15.0,赠品数量0 +2025-12-12 11:38:53,452 - app.core.excel.processor - INFO - 条码 690299810 处理结果:正常商品数量16.0,单价23.2,赠品数量0 +2025-12-12 11:38:53,452 - app.core.excel.processor - INFO - 条码 6936869215092 处理结果:正常商品数量15.0,单价1.5,赠品数量0 +2025-12-12 11:38:53,452 - app.core.excel.processor - INFO - 条码 6951957205762 处理结果:正常商品数量20.0,单价14.2,赠品数量0 +2025-12-12 11:38:53,453 - app.core.excel.processor - INFO - 条码 6976481800078 处理结果:正常商品数量30.0,单价22.5,赠品数量0 +2025-12-12 11:38:53,453 - app.core.excel.processor - INFO - 条码 6924743919266 处理结果:正常商品数量5.0,单价4.79,赠品数量0 +2025-12-12 11:38:53,453 - app.core.excel.processor - INFO - 条码 6924743919259 处理结果:正常商品数量5.0,单价4.79,赠品数量0 +2025-12-12 11:38:53,454 - app.core.excel.processor - INFO - 条码 6924743919228 处理结果:正常商品数量3.0,单价4.79,赠品数量0 +2025-12-12 11:38:53,454 - app.core.excel.processor - INFO - 条码 6924743928077 处理结果:正常商品数量1.0,单价1.35,赠品数量0 +2025-12-12 11:38:53,457 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_蓉城易购-订单1765440157955.xls +2025-12-12 11:38:53,458 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_蓉城易购-订单1765440157955.xls +2025-12-12 11:49:38,203 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-12 11:49:38,203 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-12-12 11:49:38,203 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-12-12 11:49:38,206 - app.core.excel.processor - INFO - 开始处理Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx +2025-12-12 11:49:38,217 - app.core.excel.processor - INFO - 成功读取Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx, 共 58 行 +2025-12-12 11:49:38,217 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 75 +2025-12-12 11:49:38,221 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-12-12 11:49:38,231 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 57 行有效数据 +2025-12-12 11:49:38,233 - app.core.excel.processor - INFO - 找到部分匹配的条码列: 商品条码(小条码) (包含关键词: 条码) +2025-12-12 11:49:38,233 - app.core.excel.processor - INFO - 使用条码列: 商品条码(小条码) +2025-12-12 11:49:38,234 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-12-12 11:49:38,234 - app.core.excel.processor - INFO - 找到quantity列(部分匹配): 订购数量(小单位) +2025-12-12 11:49:38,234 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-12-12 11:49:38,235 - app.core.excel.processor - INFO - 找到price列(部分匹配): 单价(小单位) +2025-12-12 11:49:38,235 - app.core.excel.processor - INFO - 找到amount列(部分匹配): 优惠后金额(小单位) +2025-12-12 11:49:38,235 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '商品条码(小条码)', 'name': '商品名称', 'quantity': '订购数量(小单位)', 'unit': '单位', 'price': '单价(小单位)', 'amount': '优惠后金额(小单位)'} +2025-12-12 11:49:38,240 - app.core.excel.processor - INFO - 从商品名称推断规格: 雪碧2L@ -> 2L*1, 包装数量=1 +2025-12-12 11:49:38,243 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝饮用纯净水2.08L@ -> 2.08L*1, 包装数量=1 +2025-12-12 11:49:38,245 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝纯净水4.5L@ -> 4.5L*1, 包装数量=1 +2025-12-12 11:49:38,245 - app.core.excel.processor - INFO - 从商品名称推断规格: 怡宝饮用纯净水1.555L@ -> 1.555L*1, 包装数量=1 +2025-12-12 11:49:38,250 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥薄脆酸甜草莓味95g@ -> 95*None, 包装数量=95 +2025-12-12 11:49:38,253 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥杯奥草莓味55g@ -> 55*None, 包装数量=55 +2025-12-12 11:49:38,255 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥杯奥巧克力55g@ -> 55*None, 包装数量=55 +2025-12-12 11:49:38,256 - app.core.excel.processor - INFO - 从商品名称推断规格: 好丽友蛋黄派2P46g@ -> 46*None, 包装数量=46 +2025-12-12 11:49:38,259 - app.core.excel.processor - INFO - 从商品名称推断规格: 都市牧场爽口含片正梅味38g@ -> 38*None, 包装数量=38 +2025-12-12 11:49:38,260 - app.core.excel.processor - INFO - 从商品名称推断规格: 林振合维C果C软糖什锦味68g -> 68*None, 包装数量=68 +2025-12-12 11:49:38,260 - app.core.excel.processor - INFO - 从商品名称推断规格: 格力高百醇柠檬48g@ -> 48*None, 包装数量=48 +2025-12-12 11:49:38,264 - app.core.excel.processor - INFO - 从商品名称推断规格: 格力高百醇抹茶慕斯味48g@ -> 48*None, 包装数量=48 +2025-12-12 11:49:38,266 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥饼干经典原味48.5g@ -> 48.5*None, 包装数量=48 +2025-12-12 11:49:38,268 - app.core.excel.processor - INFO - 从商品名称推断规格: 奥利奥饼干浓醇巧克力味48.5g@ -> 48.5*None, 包装数量=48 +2025-12-12 11:49:38,270 - app.core.excel.processor - INFO - 从商品名称推断规格: 法丽兹曲奇芝士巧克力70g@ -> 70*None, 包装数量=70 +2025-12-12 11:49:38,272 - app.core.excel.processor - INFO - 从商品名称推断规格: 法丽兹曲奇香草柠檬巧克力味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:49:38,274 - app.core.excel.processor - INFO - 从商品名称推断规格: 太平梳打饼干奶盐味100g@ -> 100*None, 包装数量=100 +2025-12-12 11:49:38,275 - app.core.excel.processor - INFO - 从商品名称推断规格: 太平梳打饼干海苔味100g@ -> 100*None, 包装数量=100 +2025-12-12 11:49:38,275 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园手指饼115g@ -> 115*None, 包装数量=115 +2025-12-12 11:49:38,279 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点杏仁酥饼146g@ -> 146*None, 包装数量=146 +2025-12-12 11:49:38,281 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点核桃酥饼146g@ -> 146*None, 包装数量=146 +2025-12-12 11:49:38,284 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆腰果饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:49:38,285 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆杏仁饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:49:38,285 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园好吃点香脆核桃饼108g@ -> 108*None, 包装数量=108 +2025-12-12 11:49:38,289 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利威化饼干草莓味115g@ -> 115*None, 包装数量=115 +2025-12-12 11:49:38,293 - app.core.excel.processor - INFO - 从商品名称推断规格: 亨裕饼朱古力味饼干186g -> 186*None, 包装数量=186 +2025-12-12 11:49:38,295 - app.core.excel.processor - INFO - 从商品名称推断规格: 亨裕早茶饼干110g -> 110*None, 包装数量=110 +2025-12-12 11:49:38,296 - app.core.excel.processor - INFO - 从商品名称推断规格: 趣多多香浓巧克力味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:49:38,298 - app.core.excel.processor - INFO - 从商品名称推断规格: 趣多多缤纷逗巧克力85g@ -> 85*None, 包装数量=85 +2025-12-12 11:49:38,301 - app.core.excel.processor - INFO - 从商品名称推断规格: 米老头雪花煎卷椰奶味150g@ -> 150*None, 包装数量=150 +2025-12-12 11:49:38,303 - app.core.excel.processor - INFO - 从商品名称推断规格: 金富士牛乳饼干香浓牛奶味130g@ -> 130*None, 包装数量=130 +2025-12-12 11:49:38,305 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利果乐果香蓝莓味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:49:38,305 - app.core.excel.processor - INFO - 从商品名称推断规格: 嘉士利果乐果香草莓味85g@ -> 85*None, 包装数量=85 +2025-12-12 11:49:38,309 - app.core.excel.processor - INFO - 从商品名称推断规格: 旺旺仙贝52g@ -> 52*None, 包装数量=52 +2025-12-12 11:49:38,310 - app.core.excel.processor - INFO - 从商品名称推断规格: 旺旺雪饼84g@ -> 84*None, 包装数量=84 +2025-12-12 11:49:38,312 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园蛋黄派230g@ -> 230*None, 包装数量=230 +2025-12-12 11:49:38,313 - app.core.excel.processor - INFO - 从商品名称推断规格: 豆多奇鹌鹑蛋豆干烧烤味22g -> 22*None, 包装数量=22 +2025-12-12 11:49:38,315 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔手撕肉干麻辣味10g@ -> 10*None, 包装数量=10 +2025-12-12 11:49:38,349 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔手撕肉干香辣味10g@ -> 10*None, 包装数量=10 +2025-12-12 11:49:38,353 - app.core.excel.processor - INFO - 从商品名称推断规格: 登荣香辣爽口鸡23g -> 23*None, 包装数量=23 +2025-12-12 11:49:38,356 - app.core.excel.processor - INFO - 从商品名称推断规格: 德芙脆香米脆米心牛奶巧克力12g@ -> 12*None, 包装数量=12 +2025-12-12 11:49:38,358 - app.core.excel.processor - INFO - 从商品名称推断规格: 味芝元洞庭鱼排香辣味26g -> 26*None, 包装数量=26 +2025-12-12 11:49:38,360 - app.core.excel.processor - INFO - 从商品名称推断规格: 劲仔小鱼麻辣小鱼12g@ -> 12*None, 包装数量=12 +2025-12-12 11:49:38,362 - app.core.excel.processor - INFO - 从商品名称推断规格: 缺牙齿素牛肚香辣味16g -> 16*None, 包装数量=16 +2025-12-12 11:49:38,364 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事青柠味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:49:38,366 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事黄瓜味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:49:38,368 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事德克萨斯烧烤味70g@ -> 70*None, 包装数量=70 +2025-12-12 11:49:38,368 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事薯片经典原味23g(串串装)@ -> 23*None, 包装数量=23 +2025-12-12 11:49:38,371 - app.core.excel.processor - INFO - 提取到 52 个商品信息 +2025-12-12 11:49:38,375 - app.core.excel.processor - INFO - 开始处理52 个产品信息 +2025-12-12 11:49:38,376 - app.core.excel.processor - INFO - 处理商品: 条码=6954767432076, 数量=48.0, 单价=2.2, 是否赠品=False +2025-12-12 11:49:38,376 - app.core.excel.processor - INFO - 发现正常商品:条码6954767432076, 数量=48.0, 单价=2.2 +2025-12-12 11:49:38,377 - app.core.excel.processor - INFO - 处理商品: 条码=6954767433073, 数量=8.0, 单价=5.26, 是否赠品=False +2025-12-12 11:49:38,377 - app.core.excel.processor - INFO - 发现正常商品:条码6954767433073, 数量=8.0, 单价=5.26 +2025-12-12 11:49:38,377 - app.core.excel.processor - INFO - 处理商品: 条码=6901285992933, 数量=40.0, 单价=2.56, 是否赠品=False +2025-12-12 11:49:38,378 - app.core.excel.processor - INFO - 发现正常商品:条码6901285992933, 数量=40.0, 单价=2.56 +2025-12-12 11:49:38,378 - app.core.excel.processor - INFO - 处理商品: 条码=6901285991530, 数量=8.0, 单价=6.19, 是否赠品=False +2025-12-12 11:49:38,378 - app.core.excel.processor - INFO - 发现正常商品:条码6901285991530, 数量=8.0, 单价=6.19 +2025-12-12 11:49:38,378 - app.core.excel.processor - INFO - 处理商品: 条码=6901285991271, 数量=60.0, 单价=1.95, 是否赠品=False +2025-12-12 11:49:38,379 - app.core.excel.processor - INFO - 发现正常商品:条码6901285991271, 数量=60.0, 单价=1.95 +2025-12-12 11:49:38,379 - app.core.excel.processor - INFO - 处理商品: 条码=6920584471017, 数量=12.0, 单价=4.27, 是否赠品=False +2025-12-12 11:49:38,380 - app.core.excel.processor - INFO - 发现正常商品:条码6920584471017, 数量=12.0, 单价=4.27 +2025-12-12 11:49:38,380 - app.core.excel.processor - INFO - 处理商品: 条码=6901668934925, 数量=5.0, 单价=5.66, 是否赠品=False +2025-12-12 11:49:38,380 - app.core.excel.processor - INFO - 发现正常商品:条码6901668934925, 数量=5.0, 单价=5.66 +2025-12-12 11:49:38,381 - app.core.excel.processor - INFO - 处理商品: 条码=6901668054715, 数量=4.0, 单价=3.42, 是否赠品=False +2025-12-12 11:49:38,381 - app.core.excel.processor - INFO - 发现正常商品:条码6901668054715, 数量=4.0, 单价=3.42 +2025-12-12 11:49:38,381 - app.core.excel.processor - INFO - 处理商品: 条码=6901668053916, 数量=3.0, 单价=3.42, 是否赠品=False +2025-12-12 11:49:38,381 - app.core.excel.processor - INFO - 发现正常商品:条码6901668053916, 数量=3.0, 单价=3.42 +2025-12-12 11:49:38,381 - app.core.excel.processor - INFO - 处理商品: 条码=6920907800616, 数量=4.0, 单价=2.85, 是否赠品=False +2025-12-12 11:49:38,381 - app.core.excel.processor - INFO - 发现正常商品:条码6920907800616, 数量=4.0, 单价=2.85 +2025-12-12 11:49:38,382 - app.core.excel.processor - INFO - 处理商品: 条码=6935855700383, 数量=8.0, 单价=4.51, 是否赠品=False +2025-12-12 11:49:38,382 - app.core.excel.processor - INFO - 发现正常商品:条码6935855700383, 数量=8.0, 单价=4.51 +2025-12-12 11:49:38,382 - app.core.excel.processor - INFO - 处理商品: 条码=6925683200957, 数量=8.0, 单价=3.32, 是否赠品=False +2025-12-12 11:49:38,383 - app.core.excel.processor - INFO - 发现正常商品:条码6925683200957, 数量=8.0, 单价=3.32 +2025-12-12 11:49:38,383 - app.core.excel.processor - INFO - 处理商品: 条码=6901845044027, 数量=4.0, 单价=5.27, 是否赠品=False +2025-12-12 11:49:38,383 - app.core.excel.processor - INFO - 发现正常商品:条码6901845044027, 数量=4.0, 单价=5.27 +2025-12-12 11:49:38,383 - app.core.excel.processor - INFO - 处理商品: 条码=6901845040968, 数量=5.0, 单价=5.27, 是否赠品=False +2025-12-12 11:49:38,383 - app.core.excel.processor - INFO - 发现正常商品:条码6901845040968, 数量=5.0, 单价=5.27 +2025-12-12 11:49:38,383 - app.core.excel.processor - INFO - 处理商品: 条码=6901668935649, 数量=6.0, 单价=1.89, 是否赠品=False +2025-12-12 11:49:38,383 - app.core.excel.processor - INFO - 发现正常商品:条码6901668935649, 数量=6.0, 单价=1.89 +2025-12-12 11:49:38,383 - app.core.excel.processor - INFO - 处理商品: 条码=6901668935663, 数量=5.0, 单价=1.89, 是否赠品=False +2025-12-12 11:49:38,383 - app.core.excel.processor - INFO - 发现正常商品:条码6901668935663, 数量=5.0, 单价=1.89 +2025-12-12 11:49:38,383 - app.core.excel.processor - INFO - 处理商品: 条码=6947929617534, 数量=4.0, 单价=2.53, 是否赠品=False +2025-12-12 11:49:38,386 - app.core.excel.processor - INFO - 发现正常商品:条码6947929617534, 数量=4.0, 单价=2.53 +2025-12-12 11:49:38,387 - app.core.excel.processor - INFO - 处理商品: 条码=6947929617138, 数量=4.0, 单价=2.53, 是否赠品=False +2025-12-12 11:49:38,387 - app.core.excel.processor - INFO - 发现正常商品:条码6947929617138, 数量=4.0, 单价=2.53 +2025-12-12 11:49:38,387 - app.core.excel.processor - INFO - 处理商品: 条码=6901668200013, 数量=3.0, 单价=3.05, 是否赠品=False +2025-12-12 11:49:38,388 - app.core.excel.processor - INFO - 发现正常商品:条码6901668200013, 数量=3.0, 单价=3.05 +2025-12-12 11:49:38,388 - app.core.excel.processor - INFO - 处理商品: 条码=6901668200303, 数量=3.0, 单价=3.05, 是否赠品=False +2025-12-12 11:49:38,388 - app.core.excel.processor - INFO - 发现正常商品:条码6901668200303, 数量=3.0, 单价=3.05 +2025-12-12 11:49:38,388 - app.core.excel.processor - INFO - 处理商品: 条码=6911988005229, 数量=4.0, 单价=2.14, 是否赠品=False +2025-12-12 11:49:38,389 - app.core.excel.processor - INFO - 发现正常商品:条码6911988005229, 数量=4.0, 单价=2.14 +2025-12-12 11:49:38,389 - app.core.excel.processor - INFO - 处理商品: 条码=6911988000293, 数量=4.0, 单价=3.61, 是否赠品=False +2025-12-12 11:49:38,389 - app.core.excel.processor - INFO - 发现正常商品:条码6911988000293, 数量=4.0, 单价=3.61 +2025-12-12 11:49:38,390 - app.core.excel.processor - INFO - 处理商品: 条码=6911988000286, 数量=3.0, 单价=3.61, 是否赠品=False +2025-12-12 11:49:38,390 - app.core.excel.processor - INFO - 发现正常商品:条码6911988000286, 数量=3.0, 单价=3.61 +2025-12-12 11:49:38,390 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009777, 数量=3.0, 单价=2.71, 是否赠品=False +2025-12-12 11:49:38,391 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009777, 数量=3.0, 单价=2.71 +2025-12-12 11:49:38,391 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009760, 数量=3.0, 单价=2.71, 是否赠品=False +2025-12-12 11:49:38,391 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009760, 数量=3.0, 单价=2.71 +2025-12-12 11:49:38,391 - app.core.excel.processor - INFO - 处理商品: 条码=6911988009784, 数量=3.0, 单价=2.71, 是否赠品=False +2025-12-12 11:49:38,392 - app.core.excel.processor - INFO - 发现正常商品:条码6911988009784, 数量=3.0, 单价=2.71 +2025-12-12 11:49:38,392 - app.core.excel.processor - INFO - 处理商品: 条码=6901180581683, 数量=2.0, 单价=3.61, 是否赠品=False +2025-12-12 11:49:38,392 - app.core.excel.processor - INFO - 发现正常商品:条码6901180581683, 数量=2.0, 单价=3.61 +2025-12-12 11:49:38,393 - app.core.excel.processor - INFO - 处理商品: 条码=6932024200552, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:49:38,393 - app.core.excel.processor - INFO - 发现正常商品:条码6932024200552, 数量=3.0, 单价=2.85 +2025-12-12 11:49:38,393 - app.core.excel.processor - INFO - 处理商品: 条码=6932024200583, 数量=4.0, 单价=1.61, 是否赠品=False +2025-12-12 11:49:38,393 - app.core.excel.processor - INFO - 发现正常商品:条码6932024200583, 数量=4.0, 单价=1.61 +2025-12-12 11:49:38,393 - app.core.excel.processor - INFO - 处理商品: 条码=6901668936714, 数量=4.0, 单价=4.52, 是否赠品=False +2025-12-12 11:49:38,393 - app.core.excel.processor - INFO - 发现正常商品:条码6901668936714, 数量=4.0, 单价=4.52 +2025-12-12 11:49:38,395 - app.core.excel.processor - INFO - 处理商品: 条码=6901668062499, 数量=4.0, 单价=4.52, 是否赠品=False +2025-12-12 11:49:38,395 - app.core.excel.processor - INFO - 发现正常商品:条码6901668062499, 数量=4.0, 单价=4.52 +2025-12-12 11:49:38,395 - app.core.excel.processor - INFO - 处理商品: 条码=6925332600046, 数量=3.0, 单价=3.61, 是否赠品=False +2025-12-12 11:49:38,395 - app.core.excel.processor - INFO - 发现正常商品:条码6925332600046, 数量=3.0, 单价=3.61 +2025-12-12 11:49:38,395 - app.core.excel.processor - INFO - 处理商品: 条码=6921233904955, 数量=4.0, 单价=3.61, 是否赠品=False +2025-12-12 11:49:38,395 - app.core.excel.processor - INFO - 发现正常商品:条码6921233904955, 数量=4.0, 单价=3.61 +2025-12-12 11:49:38,396 - app.core.excel.processor - INFO - 处理商品: 条码=6901180993387, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:49:38,396 - app.core.excel.processor - INFO - 发现正常商品:条码6901180993387, 数量=3.0, 单价=2.85 +2025-12-12 11:49:38,397 - app.core.excel.processor - INFO - 处理商品: 条码=6901180993486, 数量=3.0, 单价=2.85, 是否赠品=False +2025-12-12 11:49:38,397 - app.core.excel.processor - INFO - 发现正常商品:条码6901180993486, 数量=3.0, 单价=2.85 +2025-12-12 11:49:38,397 - app.core.excel.processor - INFO - 处理商品: 条码=6920546800046, 数量=5.0, 单价=3.75, 是否赠品=False +2025-12-12 11:49:38,398 - app.core.excel.processor - INFO - 发现正常商品:条码6920546800046, 数量=5.0, 单价=3.75 +2025-12-12 11:49:38,398 - app.core.excel.processor - INFO - 处理商品: 条码=6920546800053, 数量=5.0, 单价=4.27, 是否赠品=False +2025-12-12 11:49:38,398 - app.core.excel.processor - INFO - 发现正常商品:条码6920546800053, 数量=5.0, 单价=4.27 +2025-12-12 11:49:38,398 - app.core.excel.processor - INFO - 处理商品: 条码=6911988006783, 数量=1.0, 单价=5.59, 是否赠品=False +2025-12-12 11:49:38,399 - app.core.excel.processor - INFO - 发现正常商品:条码6911988006783, 数量=1.0, 单价=5.59 +2025-12-12 11:49:38,399 - app.core.excel.processor - INFO - 处理商品: 条码=6971295190759, 数量=20.0, 单价=0.71, 是否赠品=False +2025-12-12 11:49:38,399 - app.core.excel.processor - INFO - 发现正常商品:条码6971295190759, 数量=20.0, 单价=0.71 +2025-12-12 11:49:38,400 - app.core.excel.processor - INFO - 处理商品: 条码=6951957217307, 数量=20.0, 单价=1.26, 是否赠品=False +2025-12-12 11:49:38,400 - app.core.excel.processor - INFO - 发现正常商品:条码6951957217307, 数量=20.0, 单价=1.26 +2025-12-12 11:49:38,400 - app.core.excel.processor - INFO - 处理商品: 条码=6951957215723, 数量=20.0, 单价=1.26, 是否赠品=False +2025-12-12 11:49:38,400 - app.core.excel.processor - INFO - 发现正常商品:条码6951957215723, 数量=20.0, 单价=1.26 +2025-12-12 11:49:38,400 - app.core.excel.processor - INFO - 处理商品: 条码=6977530260072, 数量=25.0, 单价=0.33, 是否赠品=False +2025-12-12 11:49:38,400 - app.core.excel.processor - INFO - 发现正常商品:条码6977530260072, 数量=25.0, 单价=0.33 +2025-12-12 11:49:38,401 - app.core.excel.processor - INFO - 处理商品: 条码=6925300100400, 数量=25.0, 单价=0.33, 是否赠品=False +2025-12-12 11:49:38,401 - app.core.excel.processor - INFO - 发现正常商品:条码6925300100400, 数量=25.0, 单价=0.33 +2025-12-12 11:49:38,401 - app.core.excel.processor - INFO - 处理商品: 条码=6922170800638, 数量=20.0, 单价=0.71, 是否赠品=False +2025-12-12 11:49:38,402 - app.core.excel.processor - INFO - 发现正常商品:条码6922170800638, 数量=20.0, 单价=0.71 +2025-12-12 11:49:38,402 - app.core.excel.processor - INFO - 处理商品: 条码=690299810, 数量=16.0, 单价=1.38, 是否赠品=False +2025-12-12 11:49:38,402 - app.core.excel.processor - INFO - 发现正常商品:条码690299810, 数量=16.0, 单价=1.38 +2025-12-12 11:49:38,402 - app.core.excel.processor - INFO - 处理商品: 条码=6936869215092, 数量=15.0, 单价=1.42, 是否赠品=False +2025-12-12 11:49:38,403 - app.core.excel.processor - INFO - 发现正常商品:条码6936869215092, 数量=15.0, 单价=1.42 +2025-12-12 11:49:38,403 - app.core.excel.processor - INFO - 处理商品: 条码=6951957205762, 数量=20.0, 单价=0.67, 是否赠品=False +2025-12-12 11:49:38,403 - app.core.excel.processor - INFO - 发现正常商品:条码6951957205762, 数量=20.0, 单价=0.67 +2025-12-12 11:49:38,403 - app.core.excel.processor - INFO - 处理商品: 条码=6976481800078, 数量=30.0, 单价=0.71, 是否赠品=False +2025-12-12 11:49:38,404 - app.core.excel.processor - INFO - 发现正常商品:条码6976481800078, 数量=30.0, 单价=0.71 +2025-12-12 11:49:38,404 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919266, 数量=5.0, 单价=4.55, 是否赠品=False +2025-12-12 11:49:38,404 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919266, 数量=5.0, 单价=4.55 +2025-12-12 11:49:38,404 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919259, 数量=5.0, 单价=4.55, 是否赠品=False +2025-12-12 11:49:38,405 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919259, 数量=5.0, 单价=4.55 +2025-12-12 11:49:38,406 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919228, 数量=3.0, 单价=4.55, 是否赠品=False +2025-12-12 11:49:38,406 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919228, 数量=3.0, 单价=4.55 +2025-12-12 11:49:38,406 - app.core.excel.processor - INFO - 处理商品: 条码=6924743928077, 数量=1.0, 单价=1.35, 是否赠品=False +2025-12-12 11:49:38,406 - app.core.excel.processor - INFO - 发现正常商品:条码6924743928077, 数量=1.0, 单价=1.35 +2025-12-12 11:49:38,406 - app.core.excel.processor - INFO - 分组后共52 个不同条码的商品 +2025-12-12 11:49:38,406 - app.core.excel.processor - INFO - 条码 6954767432076 处理结果:正常商品数量48.0,单价2.2,赠品数量0 +2025-12-12 11:49:38,406 - app.core.excel.processor - INFO - 条码 6954767433073 处理结果:正常商品数量8.0,单价5.26,赠品数量0 +2025-12-12 11:49:38,406 - app.core.excel.processor - INFO - 条码 6901285992933 处理结果:正常商品数量40.0,单价2.56,赠品数量0 +2025-12-12 11:49:38,406 - app.core.excel.processor - INFO - 条码 6901285991530 处理结果:正常商品数量8.0,单价6.19,赠品数量0 +2025-12-12 11:49:38,406 - app.core.excel.processor - INFO - 条码 6901285991271 处理结果:正常商品数量60.0,单价1.95,赠品数量0 +2025-12-12 11:49:38,406 - app.core.excel.processor - INFO - 条码 6920584471017 处理结果:正常商品数量12.0,单价4.27,赠品数量0 +2025-12-12 11:49:38,409 - app.core.excel.processor - INFO - 条码 6901668934925 处理结果:正常商品数量5.0,单价5.66,赠品数量0 +2025-12-12 11:49:38,409 - app.core.excel.processor - INFO - 条码 6901668054715 处理结果:正常商品数量4.0,单价3.42,赠品数量0 +2025-12-12 11:49:38,409 - app.core.excel.processor - INFO - 条码 6901668053916 处理结果:正常商品数量3.0,单价3.42,赠品数量0 +2025-12-12 11:49:38,410 - app.core.excel.processor - INFO - 条码 6920907800616 处理结果:正常商品数量4.0,单价2.85,赠品数量0 +2025-12-12 11:49:38,410 - app.core.excel.processor - INFO - 条码 6935855700383 处理结果:正常商品数量8.0,单价4.51,赠品数量0 +2025-12-12 11:49:38,410 - app.core.excel.processor - INFO - 条码 6925683200957 处理结果:正常商品数量8.0,单价3.32,赠品数量0 +2025-12-12 11:49:38,410 - app.core.excel.processor - INFO - 条码 6901845044027 处理结果:正常商品数量4.0,单价5.27,赠品数量0 +2025-12-12 11:49:38,410 - app.core.excel.processor - INFO - 条码 6901845040968 处理结果:正常商品数量5.0,单价5.27,赠品数量0 +2025-12-12 11:49:38,412 - app.core.excel.processor - INFO - 条码 6901668935649 处理结果:正常商品数量6.0,单价1.89,赠品数量0 +2025-12-12 11:49:38,412 - app.core.excel.processor - INFO - 条码 6901668935663 处理结果:正常商品数量5.0,单价1.89,赠品数量0 +2025-12-12 11:49:38,412 - app.core.excel.processor - INFO - 条码 6947929617534 处理结果:正常商品数量4.0,单价2.53,赠品数量0 +2025-12-12 11:49:38,412 - app.core.excel.processor - INFO - 条码 6947929617138 处理结果:正常商品数量4.0,单价2.53,赠品数量0 +2025-12-12 11:49:38,413 - app.core.excel.processor - INFO - 条码 6901668200013 处理结果:正常商品数量3.0,单价3.05,赠品数量0 +2025-12-12 11:49:38,413 - app.core.excel.processor - INFO - 条码 6901668200303 处理结果:正常商品数量3.0,单价3.05,赠品数量0 +2025-12-12 11:49:38,413 - app.core.excel.processor - INFO - 条码 6911988005229 处理结果:正常商品数量4.0,单价2.14,赠品数量0 +2025-12-12 11:49:38,414 - app.core.excel.processor - INFO - 条码 6911988000293 处理结果:正常商品数量4.0,单价3.61,赠品数量0 +2025-12-12 11:49:38,414 - app.core.excel.processor - INFO - 条码 6911988000286 处理结果:正常商品数量3.0,单价3.61,赠品数量0 +2025-12-12 11:49:38,414 - app.core.excel.processor - INFO - 条码 6911988009777 处理结果:正常商品数量3.0,单价2.71,赠品数量0 +2025-12-12 11:49:38,414 - app.core.excel.processor - INFO - 条码 6911988009760 处理结果:正常商品数量3.0,单价2.71,赠品数量0 +2025-12-12 11:49:38,415 - app.core.excel.processor - INFO - 条码 6911988009784 处理结果:正常商品数量3.0,单价2.71,赠品数量0 +2025-12-12 11:49:38,415 - app.core.excel.processor - INFO - 条码 6901180581683 处理结果:正常商品数量2.0,单价3.61,赠品数量0 +2025-12-12 11:49:38,415 - app.core.excel.processor - INFO - 条码 6932024200552 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:49:38,416 - app.core.excel.processor - INFO - 条码 6932024200583 处理结果:正常商品数量4.0,单价1.61,赠品数量0 +2025-12-12 11:49:38,416 - app.core.excel.processor - INFO - 条码 6901668936714 处理结果:正常商品数量4.0,单价4.52,赠品数量0 +2025-12-12 11:49:38,416 - app.core.excel.processor - INFO - 条码 6901668062499 处理结果:正常商品数量4.0,单价4.52,赠品数量0 +2025-12-12 11:49:38,416 - app.core.excel.processor - INFO - 条码 6925332600046 处理结果:正常商品数量3.0,单价3.61,赠品数量0 +2025-12-12 11:49:38,417 - app.core.excel.processor - INFO - 条码 6921233904955 处理结果:正常商品数量4.0,单价3.61,赠品数量0 +2025-12-12 11:49:38,417 - app.core.excel.processor - INFO - 条码 6901180993387 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:49:38,417 - app.core.excel.processor - INFO - 条码 6901180993486 处理结果:正常商品数量3.0,单价2.85,赠品数量0 +2025-12-12 11:49:38,417 - app.core.excel.processor - INFO - 条码 6920546800046 处理结果:正常商品数量5.0,单价3.75,赠品数量0 +2025-12-12 11:49:38,417 - app.core.excel.processor - INFO - 条码 6920546800053 处理结果:正常商品数量5.0,单价4.27,赠品数量0 +2025-12-12 11:49:38,417 - app.core.excel.processor - INFO - 条码 6911988006783 处理结果:正常商品数量1.0,单价5.59,赠品数量0 +2025-12-12 11:49:38,417 - app.core.excel.processor - INFO - 条码 6971295190759 处理结果:正常商品数量20.0,单价0.71,赠品数量0 +2025-12-12 11:49:38,417 - app.core.excel.processor - INFO - 条码 6951957217307 处理结果:正常商品数量20.0,单价1.26,赠品数量0 +2025-12-12 11:49:38,417 - app.core.excel.processor - INFO - 条码 6951957215723 处理结果:正常商品数量20.0,单价1.26,赠品数量0 +2025-12-12 11:49:38,417 - app.core.excel.processor - INFO - 条码 6977530260072 处理结果:正常商品数量25.0,单价0.33,赠品数量0 +2025-12-12 11:49:38,417 - app.core.excel.processor - INFO - 条码 6925300100400 处理结果:正常商品数量25.0,单价0.33,赠品数量0 +2025-12-12 11:49:38,417 - app.core.excel.processor - INFO - 条码 6922170800638 处理结果:正常商品数量20.0,单价0.71,赠品数量0 +2025-12-12 11:49:38,417 - app.core.excel.processor - INFO - 条码 690299810 处理结果:正常商品数量16.0,单价1.38,赠品数量0 +2025-12-12 11:49:38,417 - app.core.excel.processor - INFO - 条码 6936869215092 处理结果:正常商品数量15.0,单价1.42,赠品数量0 +2025-12-12 11:49:38,421 - app.core.excel.processor - INFO - 条码 6951957205762 处理结果:正常商品数量20.0,单价0.67,赠品数量0 +2025-12-12 11:49:38,422 - app.core.excel.processor - INFO - 条码 6976481800078 处理结果:正常商品数量30.0,单价0.71,赠品数量0 +2025-12-12 11:49:38,422 - app.core.excel.processor - INFO - 条码 6924743919266 处理结果:正常商品数量5.0,单价4.55,赠品数量0 +2025-12-12 11:49:38,422 - app.core.excel.processor - INFO - 条码 6924743919259 处理结果:正常商品数量5.0,单价4.55,赠品数量0 +2025-12-12 11:49:38,423 - app.core.excel.processor - INFO - 条码 6924743919228 处理结果:正常商品数量3.0,单价4.55,赠品数量0 +2025-12-12 11:49:38,423 - app.core.excel.processor - INFO - 条码 6924743928077 处理结果:正常商品数量1.0,单价1.35,赠品数量0 +2025-12-12 11:49:38,426 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_蓉城易购-订单1765440157955.xls +2025-12-12 11:49:38,427 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_蓉城易购-订单1765440157955.xls +2025-12-12 12:30:07,696 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-12 12:30:07,696 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-12-12 12:30:07,698 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-12-12 12:30:07,700 - app.core.excel.processor - INFO - 开始处理Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765513775092.xlsx +2025-12-12 12:30:07,708 - app.core.excel.processor - INFO - 成功读取Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765513775092.xlsx, 共 66 行 +2025-12-12 12:30:07,712 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 75 +2025-12-12 12:30:07,712 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-12-12 12:30:07,723 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 65 行有效数据 +2025-12-12 12:30:07,726 - app.core.excel.processor - INFO - 找到部分匹配的条码列: 商品条码(小条码) (包含关键词: 条码) +2025-12-12 12:30:07,726 - app.core.excel.processor - INFO - 使用条码列: 商品条码(小条码) +2025-12-12 12:30:07,726 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-12-12 12:30:07,726 - app.core.excel.processor - INFO - 找到quantity列(部分匹配): 订购数量(小单位) +2025-12-12 12:30:07,726 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-12-12 12:30:07,726 - app.core.excel.processor - INFO - 找到price列(部分匹配): 单价(小单位) +2025-12-12 12:30:07,726 - app.core.excel.processor - INFO - 找到amount列(部分匹配): 优惠后金额(小单位) +2025-12-12 12:30:07,726 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '商品条码(小条码)', 'name': '商品名称', 'quantity': '订购数量(小单位)', 'unit': '单位', 'price': '单价(小单位)', 'amount': '优惠后金额(小单位)'} +2025-12-12 12:30:07,726 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事墨西哥鸡汁番茄味70g@ -> 70*None, 包装数量=70 +2025-12-12 12:30:07,730 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事美国经典原味70g@ -> 70*None, 包装数量=70 +2025-12-12 12:30:07,730 - app.core.excel.processor - INFO - 从商品名称推断规格: 子弟原切马铃薯片清怡黄瓜味95g@ -> 95*None, 包装数量=95 +2025-12-12 12:30:07,734 - app.core.excel.processor - INFO - 从商品名称推断规格: 子弟原切马铃薯片美滋番茄味95g@ -> 95*None, 包装数量=95 +2025-12-12 12:30:07,734 - app.core.excel.processor - INFO - 从商品名称推断规格: 子弟原切马铃薯片经典麻辣味95g@ -> 95*None, 包装数量=95 +2025-12-12 12:30:07,738 - app.core.excel.processor - INFO - 从商品名称推断规格: 子弟原切马铃薯片劲爆麻辣味95g@ -> 95*None, 包装数量=95 +2025-12-12 12:30:07,738 - app.core.excel.processor - INFO - 从商品名称推断规格: 飘零大叔香辣猪肉脯50g@ -> 50*None, 包装数量=50 +2025-12-12 12:30:07,742 - app.core.excel.processor - INFO - 从商品名称推断规格: 飘零大叔川味烤香肠香辣味65g@ -> 65*None, 包装数量=65 +2025-12-12 12:30:07,742 - app.core.excel.processor - INFO - 从商品名称推断规格: 川牛娃老成都五香牛肉干60g -> 60*None, 包装数量=60 +2025-12-12 12:30:07,742 - app.core.excel.processor - INFO - 从商品名称推断规格: 王小卤虎皮凤爪卤香味 105g@ -> 105*None, 包装数量=105 +2025-12-12 12:30:07,746 - app.core.excel.processor - INFO - 从商品名称推断规格: 王小卤虎皮凤爪火锅味105g@ -> 105*None, 包装数量=105 +2025-12-12 12:30:07,746 - app.core.excel.processor - INFO - 从商品名称推断规格: 四味王酱鸭脖猛辣味60g@ -> 60*None, 包装数量=60 +2025-12-12 12:30:07,750 - app.core.excel.processor - INFO - 从商品名称推断规格: 四味王酱鸭脖微辣味60g@ -> 60*None, 包装数量=60 +2025-12-12 12:30:07,753 - app.core.excel.processor - INFO - 从商品名称推断规格: 麦得赞盐焗烤腿90g -> 90*None, 包装数量=90 +2025-12-12 12:30:07,754 - app.core.excel.processor - INFO - 从商品名称推断规格: 杨记老卤双爪多味70g -> 70*None, 包装数量=70 +2025-12-12 12:30:07,756 - app.core.excel.processor - INFO - 从商品名称推断规格: 逍遥嘴花椒鸡味180g -> 180*None, 包装数量=180 +2025-12-12 12:30:07,758 - app.core.excel.processor - INFO - 从商品名称推断规格: 茂林炭烤鱿鱼丝60g -> 60*None, 包装数量=60 +2025-12-12 12:30:07,759 - app.core.excel.processor - INFO - 从商品名称推断规格: 金满福手工辣条素龙虾味152g -> 152*None, 包装数量=152 +2025-12-12 12:30:07,759 - app.core.excel.processor - INFO - 从商品名称推断规格: 卫龙大面筋102g@ -> 102*None, 包装数量=102 +2025-12-12 12:30:07,763 - app.core.excel.processor - INFO - 从商品名称推断规格: 麻辣王子地道辣条很麻很辣73g -> 73*None, 包装数量=73 +2025-12-12 12:30:07,763 - app.core.excel.processor - INFO - 从商品名称推断规格: 麻辣王子地道辣条微麻微辣73g -> 73*None, 包装数量=73 +2025-12-12 12:30:07,767 - app.core.excel.processor - INFO - 从商品名称推断规格: 展华大辣棒麻辣牛肉味138g -> 138*None, 包装数量=138 +2025-12-12 12:30:07,767 - app.core.excel.processor - INFO - 从商品名称推断规格: 徐福记米果卷香烤牛排90g@ -> 90*None, 包装数量=90 +2025-12-12 12:30:07,767 - app.core.excel.processor - INFO - 从商品名称推断规格: 徐福记米果卷奶油玉米90g@ -> 90*None, 包装数量=90 +2025-12-12 12:30:07,771 - app.core.excel.processor - INFO - 从商品名称推断规格: 登荣素口水鸡65g -> 65*None, 包装数量=65 +2025-12-12 12:30:07,771 - app.core.excel.processor - INFO - 从商品名称推断规格: 太哥辣白菜味调味面制品58g -> 58*None, 包装数量=58 +2025-12-12 12:30:07,775 - app.core.excel.processor - INFO - 从商品名称推断规格: 小渝儿泡椒牛板筋泡椒80g@ -> 80*None, 包装数量=80 +2025-12-12 12:30:07,775 - app.core.excel.processor - INFO - 从商品名称推断规格: 小渝儿泡椒臭干子泡椒80g@ -> 80*None, 包装数量=80 +2025-12-12 12:30:07,779 - app.core.excel.processor - INFO - 从商品名称推断规格: 郎阿哥牛羊配辣味90g -> 90*None, 包装数量=90 +2025-12-12 12:30:07,779 - app.core.excel.processor - INFO - 从商品名称推断规格: 卫龙大面筋106g@ -> 106*None, 包装数量=106 +2025-12-12 12:30:07,779 - app.core.excel.processor - INFO - 从商品名称推断规格: 小滑头薄片(经典)72g -> 72*None, 包装数量=72 +2025-12-12 12:30:07,784 - app.core.excel.processor - INFO - 从商品名称推断规格: 溜溜梅西梅60g@ -> 60*None, 包装数量=60 +2025-12-12 12:30:07,786 - app.core.excel.processor - INFO - 从商品名称推断规格: 溜溜梅清梅60g@ -> 60*None, 包装数量=60 +2025-12-12 12:30:07,788 - app.core.excel.processor - INFO - 从商品名称推断规格: 溜溜梅雪梅60g@ -> 60*None, 包装数量=60 +2025-12-12 12:30:07,788 - app.core.excel.processor - INFO - 从商品名称推断规格: 溜溜梅西梅160g@ -> 160*None, 包装数量=160 +2025-12-12 12:30:07,791 - app.core.excel.processor - INFO - 从商品名称推断规格: 溜溜梅清梅160g@ -> 160*None, 包装数量=160 +2025-12-12 12:30:07,791 - app.core.excel.processor - INFO - 从商品名称推断规格: 溜溜梅杨梅50g@ -> 50*None, 包装数量=50 +2025-12-12 12:30:07,795 - app.core.excel.processor - INFO - 从商品名称推断规格: 天马达利雪梅65g -> 65*None, 包装数量=65 +2025-12-12 12:30:07,795 - app.core.excel.processor - INFO - 从商品名称推断规格: 必吃客雪花山楂条142g -> 142*None, 包装数量=142 +2025-12-12 12:30:07,799 - app.core.excel.processor - INFO - 从商品名称推断规格: 必吃客零售瓶红薯果脯140g -> 140*None, 包装数量=140 +2025-12-12 12:30:07,799 - app.core.excel.processor - INFO - 从商品名称推断规格: 75g旺宝香蕉脆片 -> 75*None, 包装数量=75 +2025-12-12 12:30:07,799 - app.core.excel.processor - INFO - 从商品名称推断规格: 旺宝开心果100g -> 100*None, 包装数量=100 +2025-12-12 12:30:07,803 - app.core.excel.processor - INFO - 从商品名称推断规格: 金枣庄阿胶枣200g -> 200*None, 包装数量=200 +2025-12-12 12:30:07,803 - app.core.excel.processor - INFO - 从商品名称推断规格: 大白兔奶糖114g@ -> 114*None, 包装数量=114 +2025-12-12 12:30:07,807 - app.core.excel.processor - INFO - 从商品名称推断规格: 佳宝无核葡萄干90g -> 90*None, 包装数量=90 +2025-12-12 12:30:07,807 - app.core.excel.processor - INFO - 从商品名称推断规格: 老程华甲级杂糖140g -> 140*None, 包装数量=140 +2025-12-12 12:30:07,811 - app.core.excel.processor - INFO - 从商品名称推断规格: 飘零大叔香卤铁蛋88g@ -> 88*None, 包装数量=88 +2025-12-12 12:30:07,811 - app.core.excel.processor - INFO - 从商品名称推断规格: 80g调皮猴鹌鹑蛋(麻辣味) -> 80*None, 包装数量=80 +2025-12-12 12:30:07,815 - app.core.excel.processor - INFO - 从商品名称推断规格: 有友卤香鸡翅120g@ -> 120*None, 包装数量=120 +2025-12-12 12:30:07,817 - app.core.excel.processor - INFO - 从商品名称推断规格: 125g千百度卤香鸡翅(五香味) -> 125*None, 包装数量=125 +2025-12-12 12:30:07,819 - app.core.excel.processor - INFO - 从商品名称推断规格: 逍遥派盐焗鸡腿100g -> 100*None, 包装数量=100 +2025-12-12 12:30:07,821 - app.core.excel.processor - INFO - 从商品名称推断规格: 周小贱功夫鸭脖疯狂香辣味55g -> 55*None, 包装数量=55 +2025-12-12 12:30:07,821 - app.core.excel.processor - INFO - 从商品名称推断规格: 好巴食豆腐干麻辣味涨95g -> 95*None, 包装数量=95 +2025-12-12 12:30:07,821 - app.core.excel.processor - INFO - 从商品名称推断规格: 好巴食豆腐干烧烤味涨95g -> 95*None, 包装数量=95 +2025-12-12 12:30:07,825 - app.core.excel.processor - INFO - 从商品名称推断规格: 好巴食南溪豆干五香味涨95g -> 95*None, 包装数量=95 +2025-12-12 12:30:07,825 - app.core.excel.processor - INFO - 从商品名称推断规格: 香香嘴卤制豆腐干香辣味80g@ -> 80*None, 包装数量=80 +2025-12-12 12:30:07,829 - app.core.excel.processor - INFO - 从商品名称推断规格: 老灶煮花生130g -> 130*None, 包装数量=130 +2025-12-12 12:30:07,829 - app.core.excel.processor - INFO - 从商品名称推断规格: 老灶花生292g -> 292*None, 包装数量=292 +2025-12-12 12:30:07,833 - app.core.excel.processor - INFO - 从商品名称推断规格: 老灶花生186g -> 186*None, 包装数量=186 +2025-12-12 12:30:07,833 - app.core.excel.processor - INFO - 从商品名称推断规格: 洽洽奶香瓜子285g@ -> 285*None, 包装数量=285 +2025-12-12 12:30:07,833 - app.core.excel.processor - INFO - 提取到 60 个商品信息 +2025-12-12 12:30:07,837 - app.core.excel.processor - INFO - 开始处理60 个产品信息 +2025-12-12 12:30:07,837 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919242, 数量=5.0, 单价=4.55, 是否赠品=False +2025-12-12 12:30:07,837 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919242, 数量=5.0, 单价=4.55 +2025-12-12 12:30:07,837 - app.core.excel.processor - INFO - 处理商品: 条码=6924743919211, 数量=3.0, 单价=4.55, 是否赠品=False +2025-12-12 12:30:07,837 - app.core.excel.processor - INFO - 发现正常商品:条码6924743919211, 数量=3.0, 单价=4.55 +2025-12-12 12:30:07,841 - app.core.excel.processor - INFO - 处理商品: 条码=6922222020038, 数量=6.0, 单价=5.32, 是否赠品=False +2025-12-12 12:30:07,841 - app.core.excel.processor - INFO - 发现正常商品:条码6922222020038, 数量=6.0, 单价=5.32 +2025-12-12 12:30:07,841 - app.core.excel.processor - INFO - 处理商品: 条码=6922222020267, 数量=6.0, 单价=5.32, 是否赠品=False +2025-12-12 12:30:07,841 - app.core.excel.processor - INFO - 发现正常商品:条码6922222020267, 数量=6.0, 单价=5.32 +2025-12-12 12:30:07,841 - app.core.excel.processor - INFO - 处理商品: 条码=6922222021868, 数量=6.0, 单价=5.32, 是否赠品=False +2025-12-12 12:30:07,841 - app.core.excel.processor - INFO - 发现正常商品:条码6922222021868, 数量=6.0, 单价=5.32 +2025-12-12 12:30:07,841 - app.core.excel.processor - INFO - 处理商品: 条码=6922222098952, 数量=6.0, 单价=5.32, 是否赠品=False +2025-12-12 12:30:07,841 - app.core.excel.processor - INFO - 发现正常商品:条码6922222098952, 数量=6.0, 单价=5.32 +2025-12-12 12:30:07,841 - app.core.excel.processor - INFO - 处理商品: 条码=6953663016052, 数量=4.0, 单价=5.46, 是否赠品=False +2025-12-12 12:30:07,841 - app.core.excel.processor - INFO - 发现正常商品:条码6953663016052, 数量=4.0, 单价=5.46 +2025-12-12 12:30:07,841 - app.core.excel.processor - INFO - 处理商品: 条码=6953663027102, 数量=4.0, 单价=6.77, 是否赠品=False +2025-12-12 12:30:07,841 - app.core.excel.processor - INFO - 发现正常商品:条码6953663027102, 数量=4.0, 单价=6.77 +2025-12-12 12:30:07,841 - app.core.excel.processor - INFO - 处理商品: 条码=6924128100227, 数量=4.0, 单价=9.03, 是否赠品=False +2025-12-12 12:30:07,841 - app.core.excel.processor - INFO - 发现正常商品:条码6924128100227, 数量=4.0, 单价=9.03 +2025-12-12 12:30:07,841 - app.core.excel.processor - INFO - 处理商品: 条码=6972636670213, 数量=3.0, 单价=10.36, 是否赠品=False +2025-12-12 12:30:07,845 - app.core.excel.processor - INFO - 发现正常商品:条码6972636670213, 数量=3.0, 单价=10.36 +2025-12-12 12:30:07,845 - app.core.excel.processor - INFO - 处理商品: 条码=6972636670602, 数量=2.0, 单价=10.36, 是否赠品=False +2025-12-12 12:30:07,845 - app.core.excel.processor - INFO - 发现正常商品:条码6972636670602, 数量=2.0, 单价=10.36 +2025-12-12 12:30:07,845 - app.core.excel.processor - INFO - 处理商品: 条码=6946296590051, 数量=2.0, 单价=4.66, 是否赠品=False +2025-12-12 12:30:07,845 - app.core.excel.processor - INFO - 发现正常商品:条码6946296590051, 数量=2.0, 单价=4.66 +2025-12-12 12:30:07,845 - app.core.excel.processor - INFO - 处理商品: 条码=6946296501576, 数量=3.0, 单价=4.66, 是否赠品=False +2025-12-12 12:30:07,845 - app.core.excel.processor - INFO - 发现正常商品:条码6946296501576, 数量=3.0, 单价=4.66 +2025-12-12 12:30:07,847 - app.core.excel.processor - INFO - 处理商品: 条码=6970660432425, 数量=4.0, 单价=3.71, 是否赠品=False +2025-12-12 12:30:07,847 - app.core.excel.processor - INFO - 发现正常商品:条码6970660432425, 数量=4.0, 单价=3.71 +2025-12-12 12:30:07,847 - app.core.excel.processor - INFO - 处理商品: 条码=6970813651017, 数量=4.0, 单价=3.8, 是否赠品=False +2025-12-12 12:30:07,847 - app.core.excel.processor - INFO - 发现正常商品:条码6970813651017, 数量=4.0, 单价=3.8 +2025-12-12 12:30:07,848 - app.core.excel.processor - INFO - 处理商品: 条码=6957845201106, 数量=6.0, 单价=2.85, 是否赠品=False +2025-12-12 12:30:07,848 - app.core.excel.processor - INFO - 发现正常商品:条码6957845201106, 数量=6.0, 单价=2.85 +2025-12-12 12:30:07,848 - app.core.excel.processor - INFO - 处理商品: 条码=6920713212641, 数量=5.0, 单价=8.46, 是否赠品=False +2025-12-12 12:30:07,848 - app.core.excel.processor - INFO - 发现正常商品:条码6920713212641, 数量=5.0, 单价=8.46 +2025-12-12 12:30:07,848 - app.core.excel.processor - INFO - 处理商品: 条码=6924050713793, 数量=4.0, 单价=2.95, 是否赠品=False +2025-12-12 12:30:07,848 - app.core.excel.processor - INFO - 发现正常商品:条码6924050713793, 数量=4.0, 单价=2.95 +2025-12-12 12:30:07,848 - app.core.excel.processor - INFO - 处理商品: 条码=6935284499995, 数量=6.0, 单价=2.58, 是否赠品=False +2025-12-12 12:30:07,848 - app.core.excel.processor - INFO - 发现正常商品:条码6935284499995, 数量=6.0, 单价=2.58 +2025-12-12 12:30:07,848 - app.core.excel.processor - INFO - 处理商品: 条码=6930487920796, 数量=5.0, 单价=3.61, 是否赠品=False +2025-12-12 12:30:07,848 - app.core.excel.processor - INFO - 发现正常商品:条码6930487920796, 数量=5.0, 单价=3.61 +2025-12-12 12:30:07,848 - app.core.excel.processor - INFO - 处理商品: 条码=6930487920802, 数量=6.0, 单价=3.61, 是否赠品=False +2025-12-12 12:30:07,848 - app.core.excel.processor - INFO - 发现正常商品:条码6930487920802, 数量=6.0, 单价=3.61 +2025-12-12 12:30:07,848 - app.core.excel.processor - INFO - 处理商品: 条码=6975319460583, 数量=6.0, 单价=2.95, 是否赠品=False +2025-12-12 12:30:07,851 - app.core.excel.processor - INFO - 发现正常商品:条码6975319460583, 数量=6.0, 单价=2.95 +2025-12-12 12:30:07,851 - app.core.excel.processor - INFO - 处理商品: 条码=6914782202504, 数量=2.0, 单价=4.62, 是否赠品=False +2025-12-12 12:30:07,851 - app.core.excel.processor - INFO - 发现正常商品:条码6914782202504, 数量=2.0, 单价=4.62 +2025-12-12 12:30:07,851 - app.core.excel.processor - INFO - 处理商品: 条码=6914782202498, 数量=2.0, 单价=4.62, 是否赠品=False +2025-12-12 12:30:07,851 - app.core.excel.processor - INFO - 发现正常商品:条码6914782202498, 数量=2.0, 单价=4.62 +2025-12-12 12:30:07,851 - app.core.excel.processor - INFO - 处理商品: 条码=6922170800072, 数量=4.0, 单价=1.52, 是否赠品=False +2025-12-12 12:30:07,851 - app.core.excel.processor - INFO - 发现正常商品:条码6922170800072, 数量=4.0, 单价=1.52 +2025-12-12 12:30:07,851 - app.core.excel.processor - INFO - 处理商品: 条码=6977164310136, 数量=10.0, 单价=1.43, 是否赠品=False +2025-12-12 12:30:07,851 - app.core.excel.processor - INFO - 发现正常商品:条码6977164310136, 数量=10.0, 单价=1.43 +2025-12-12 12:30:07,851 - app.core.excel.processor - INFO - 处理商品: 条码=6944204200535, 数量=4.0, 单价=1.38, 是否赠品=False +2025-12-12 12:30:07,851 - app.core.excel.processor - INFO - 发现正常商品:条码6944204200535, 数量=4.0, 单价=1.38 +2025-12-12 12:30:07,851 - app.core.excel.processor - INFO - 处理商品: 条码=6944204200313, 数量=6.0, 单价=1.22, 是否赠品=False +2025-12-12 12:30:07,851 - app.core.excel.processor - INFO - 发现正常商品:条码6944204200313, 数量=6.0, 单价=1.22 +2025-12-12 12:30:07,851 - app.core.excel.processor - INFO - 处理商品: 条码=6974107050067, 数量=6.0, 单价=2.09, 是否赠品=False +2025-12-12 12:30:07,851 - app.core.excel.processor - INFO - 发现正常商品:条码6974107050067, 数量=6.0, 单价=2.09 +2025-12-12 12:30:07,851 - app.core.excel.processor - INFO - 处理商品: 条码=6935284412918, 数量=5.0, 单价=3.13, 是否赠品=False +2025-12-12 12:30:07,851 - app.core.excel.processor - INFO - 发现正常商品:条码6935284412918, 数量=5.0, 单价=3.13 +2025-12-12 12:30:07,855 - app.core.excel.processor - INFO - 处理商品: 条码=6928822302901, 数量=5.0, 单价=1.43, 是否赠品=False +2025-12-12 12:30:07,855 - app.core.excel.processor - INFO - 发现正常商品:条码6928822302901, 数量=5.0, 单价=1.43 +2025-12-12 12:30:07,855 - app.core.excel.processor - INFO - 处理商品: 条码=6952480069692, 数量=4.0, 单价=3.61, 是否赠品=False +2025-12-12 12:30:07,855 - app.core.excel.processor - INFO - 发现正常商品:条码6952480069692, 数量=4.0, 单价=3.61 +2025-12-12 12:30:07,855 - app.core.excel.processor - INFO - 处理商品: 条码=6923976113137, 数量=3.0, 单价=3.61, 是否赠品=False +2025-12-12 12:30:07,855 - app.core.excel.processor - INFO - 发现正常商品:条码6923976113137, 数量=3.0, 单价=3.61 +2025-12-12 12:30:07,855 - app.core.excel.processor - INFO - 处理商品: 条码=6923976111171, 数量=5.0, 单价=3.61, 是否赠品=False +2025-12-12 12:30:07,855 - app.core.excel.processor - INFO - 发现正常商品:条码6923976111171, 数量=5.0, 单价=3.61 +2025-12-12 12:30:07,855 - app.core.excel.processor - INFO - 处理商品: 条码=6952480069678, 数量=3.0, 单价=8.55, 是否赠品=False +2025-12-12 12:30:07,855 - app.core.excel.processor - INFO - 发现正常商品:条码6952480069678, 数量=3.0, 单价=8.55 +2025-12-12 12:30:07,855 - app.core.excel.processor - INFO - 处理商品: 条码=6923976110136, 数量=3.0, 单价=8.55, 是否赠品=False +2025-12-12 12:30:07,855 - app.core.excel.processor - INFO - 发现正常商品:条码6923976110136, 数量=3.0, 单价=8.55 +2025-12-12 12:30:07,855 - app.core.excel.processor - INFO - 处理商品: 条码=6952480080536, 数量=3.0, 单价=3.61, 是否赠品=False +2025-12-12 12:30:07,855 - app.core.excel.processor - INFO - 发现正常商品:条码6952480080536, 数量=3.0, 单价=3.61 +2025-12-12 12:30:07,855 - app.core.excel.processor - INFO - 处理商品: 条码=6905175015139, 数量=3.0, 单价=2.38, 是否赠品=False +2025-12-12 12:30:07,855 - app.core.excel.processor - INFO - 发现正常商品:条码6905175015139, 数量=3.0, 单价=2.38 +2025-12-12 12:30:07,855 - app.core.excel.processor - INFO - 处理商品: 条码=6921757581809, 数量=5.0, 单价=3.9, 是否赠品=False +2025-12-12 12:30:07,859 - app.core.excel.processor - INFO - 发现正常商品:条码6921757581809, 数量=5.0, 单价=3.9 +2025-12-12 12:30:07,859 - app.core.excel.processor - INFO - 处理商品: 条码=6921757586118, 数量=3.0, 单价=3.99, 是否赠品=False +2025-12-12 12:30:07,859 - app.core.excel.processor - INFO - 发现正常商品:条码6921757586118, 数量=3.0, 单价=3.99 +2025-12-12 12:30:07,859 - app.core.excel.processor - INFO - 处理商品: 条码=6972780130373, 数量=3.0, 单价=3.04, 是否赠品=False +2025-12-12 12:30:07,859 - app.core.excel.processor - INFO - 发现正常商品:条码6972780130373, 数量=3.0, 单价=3.04 +2025-12-12 12:30:07,859 - app.core.excel.processor - INFO - 处理商品: 条码=6940764201050, 数量=3.0, 单价=9.98, 是否赠品=False +2025-12-12 12:30:07,859 - app.core.excel.processor - INFO - 发现正常商品:条码6940764201050, 数量=3.0, 单价=9.98 +2025-12-12 12:30:07,859 - app.core.excel.processor - INFO - 处理商品: 条码=6940369900105, 数量=3.0, 单价=2.52, 是否赠品=False +2025-12-12 12:30:07,859 - app.core.excel.processor - INFO - 发现正常商品:条码6940369900105, 数量=3.0, 单价=2.52 +2025-12-12 12:30:07,859 - app.core.excel.processor - INFO - 处理商品: 条码=6922024730029, 数量=3.0, 单价=5.69, 是否赠品=False +2025-12-12 12:30:07,859 - app.core.excel.processor - INFO - 发现正常商品:条码6922024730029, 数量=3.0, 单价=5.69 +2025-12-12 12:30:07,859 - app.core.excel.processor - INFO - 处理商品: 条码=6901097790178, 数量=4.0, 单价=3.33, 是否赠品=False +2025-12-12 12:30:07,859 - app.core.excel.processor - INFO - 发现正常商品:条码6901097790178, 数量=4.0, 单价=3.33 +2025-12-12 12:30:07,859 - app.core.excel.processor - INFO - 处理商品: 条码=6938270511220, 数量=3.0, 单价=3.42, 是否赠品=False +2025-12-12 12:30:07,859 - app.core.excel.processor - INFO - 发现正常商品:条码6938270511220, 数量=3.0, 单价=3.42 +2025-12-12 12:30:07,859 - app.core.excel.processor - INFO - 处理商品: 条码=6953663018964, 数量=3.0, 单价=5.15, 是否赠品=False +2025-12-12 12:30:07,863 - app.core.excel.processor - INFO - 发现正常商品:条码6953663018964, 数量=3.0, 单价=5.15 +2025-12-12 12:30:07,863 - app.core.excel.processor - INFO - 处理商品: 条码=6938830600159, 数量=3.0, 单价=2.38, 是否赠品=False +2025-12-12 12:30:07,863 - app.core.excel.processor - INFO - 发现正常商品:条码6938830600159, 数量=3.0, 单价=2.38 +2025-12-12 12:30:07,863 - app.core.excel.processor - INFO - 处理商品: 条码=6922145850118, 数量=3.0, 单价=12.35, 是否赠品=False +2025-12-12 12:30:07,863 - app.core.excel.processor - INFO - 发现正常商品:条码6922145850118, 数量=3.0, 单价=12.35 +2025-12-12 12:30:07,863 - app.core.excel.processor - INFO - 处理商品: 条码=6925998800286, 数量=3.0, 单价=11.6, 是否赠品=False +2025-12-12 12:30:07,863 - app.core.excel.processor - INFO - 发现正常商品:条码6925998800286, 数量=3.0, 单价=11.6 +2025-12-12 12:30:07,863 - app.core.excel.processor - INFO - 处理商品: 条码=6933811920318, 数量=3.0, 单价=8.27, 是否赠品=False +2025-12-12 12:30:07,863 - app.core.excel.processor - INFO - 发现正常商品:条码6933811920318, 数量=3.0, 单价=8.27 +2025-12-12 12:30:07,863 - app.core.excel.processor - INFO - 处理商品: 条码=6972158461153, 数量=6.0, 单价=4.28, 是否赠品=False +2025-12-12 12:30:07,863 - app.core.excel.processor - INFO - 发现正常商品:条码6972158461153, 数量=6.0, 单价=4.28 +2025-12-12 12:30:07,863 - app.core.excel.processor - INFO - 处理商品: 条码=6927849460571, 数量=4.0, 单价=3.33, 是否赠品=False +2025-12-12 12:30:07,863 - app.core.excel.processor - INFO - 发现正常商品:条码6927849460571, 数量=4.0, 单价=3.33 +2025-12-12 12:30:07,863 - app.core.excel.processor - INFO - 处理商品: 条码=6927849460601, 数量=3.0, 单价=3.33, 是否赠品=False +2025-12-12 12:30:07,863 - app.core.excel.processor - INFO - 发现正常商品:条码6927849460601, 数量=3.0, 单价=3.33 +2025-12-12 12:30:07,863 - app.core.excel.processor - INFO - 处理商品: 条码=6927849460595, 数量=5.0, 单价=3.33, 是否赠品=False +2025-12-12 12:30:07,863 - app.core.excel.processor - INFO - 发现正常商品:条码6927849460595, 数量=5.0, 单价=3.33 +2025-12-12 12:30:07,867 - app.core.excel.processor - INFO - 处理商品: 条码=6923696800645, 数量=5.0, 单价=2.66, 是否赠品=False +2025-12-12 12:30:07,867 - app.core.excel.processor - INFO - 发现正常商品:条码6923696800645, 数量=5.0, 单价=2.66 +2025-12-12 12:30:07,867 - app.core.excel.processor - INFO - 处理商品: 条码=6938029400607, 数量=5.0, 单价=3.5, 是否赠品=False +2025-12-12 12:30:07,867 - app.core.excel.processor - INFO - 发现正常商品:条码6938029400607, 数量=5.0, 单价=3.5 +2025-12-12 12:30:07,867 - app.core.excel.processor - INFO - 处理商品: 条码=6938029400126, 数量=5.0, 单价=6.63, 是否赠品=False +2025-12-12 12:30:07,867 - app.core.excel.processor - INFO - 发现正常商品:条码6938029400126, 数量=5.0, 单价=6.63 +2025-12-12 12:30:07,867 - app.core.excel.processor - INFO - 处理商品: 条码=6938029400096, 数量=8.0, 单价=4.9, 是否赠品=False +2025-12-12 12:30:07,867 - app.core.excel.processor - INFO - 发现正常商品:条码6938029400096, 数量=8.0, 单价=4.9 +2025-12-12 12:30:07,867 - app.core.excel.processor - INFO - 处理商品: 条码=6924187824959, 数量=5.0, 单价=9.63, 是否赠品=False +2025-12-12 12:30:07,867 - app.core.excel.processor - INFO - 发现正常商品:条码6924187824959, 数量=5.0, 单价=9.63 +2025-12-12 12:30:07,867 - app.core.excel.processor - INFO - 分组后共60 个不同条码的商品 +2025-12-12 12:30:07,867 - app.core.excel.processor - INFO - 条码 6924743919242 处理结果:正常商品数量5.0,单价4.55,赠品数量0 +2025-12-12 12:30:07,867 - app.core.excel.processor - INFO - 条码 6924743919211 处理结果:正常商品数量3.0,单价4.55,赠品数量0 +2025-12-12 12:30:07,867 - app.core.excel.processor - INFO - 条码 6922222020038 处理结果:正常商品数量6.0,单价5.32,赠品数量0 +2025-12-12 12:30:07,867 - app.core.excel.processor - INFO - 条码 6922222020267 处理结果:正常商品数量6.0,单价5.32,赠品数量0 +2025-12-12 12:30:07,867 - app.core.excel.processor - INFO - 条码 6922222021868 处理结果:正常商品数量6.0,单价5.32,赠品数量0 +2025-12-12 12:30:07,867 - app.core.excel.processor - INFO - 条码 6922222098952 处理结果:正常商品数量6.0,单价5.32,赠品数量0 +2025-12-12 12:30:07,871 - app.core.excel.processor - INFO - 条码 6953663016052 处理结果:正常商品数量4.0,单价5.46,赠品数量0 +2025-12-12 12:30:07,871 - app.core.excel.processor - INFO - 条码 6953663027102 处理结果:正常商品数量4.0,单价6.77,赠品数量0 +2025-12-12 12:30:07,871 - app.core.excel.processor - INFO - 条码 6924128100227 处理结果:正常商品数量4.0,单价9.03,赠品数量0 +2025-12-12 12:30:07,871 - app.core.excel.processor - INFO - 条码 6972636670213 处理结果:正常商品数量3.0,单价10.36,赠品数量0 +2025-12-12 12:30:07,871 - app.core.excel.processor - INFO - 条码 6972636670602 处理结果:正常商品数量2.0,单价10.36,赠品数量0 +2025-12-12 12:30:07,871 - app.core.excel.processor - INFO - 条码 6946296590051 处理结果:正常商品数量2.0,单价4.66,赠品数量0 +2025-12-12 12:30:07,871 - app.core.excel.processor - INFO - 条码 6946296501576 处理结果:正常商品数量3.0,单价4.66,赠品数量0 +2025-12-12 12:30:07,871 - app.core.excel.processor - INFO - 条码 6970660432425 处理结果:正常商品数量4.0,单价3.71,赠品数量0 +2025-12-12 12:30:07,871 - app.core.excel.processor - INFO - 条码 6970813651017 处理结果:正常商品数量4.0,单价3.8,赠品数量0 +2025-12-12 12:30:07,871 - app.core.excel.processor - INFO - 条码 6957845201106 处理结果:正常商品数量6.0,单价2.85,赠品数量0 +2025-12-12 12:30:07,871 - app.core.excel.processor - INFO - 条码 6920713212641 处理结果:正常商品数量5.0,单价8.46,赠品数量0 +2025-12-12 12:30:07,871 - app.core.excel.processor - INFO - 条码 6924050713793 处理结果:正常商品数量4.0,单价2.95,赠品数量0 +2025-12-12 12:30:07,871 - app.core.excel.processor - INFO - 条码 6935284499995 处理结果:正常商品数量6.0,单价2.58,赠品数量0 +2025-12-12 12:30:07,871 - app.core.excel.processor - INFO - 条码 6930487920796 处理结果:正常商品数量5.0,单价3.61,赠品数量0 +2025-12-12 12:30:07,871 - app.core.excel.processor - INFO - 条码 6930487920802 处理结果:正常商品数量6.0,单价3.61,赠品数量0 +2025-12-12 12:30:07,871 - app.core.excel.processor - INFO - 条码 6975319460583 处理结果:正常商品数量6.0,单价2.95,赠品数量0 +2025-12-12 12:30:07,871 - app.core.excel.processor - INFO - 条码 6914782202504 处理结果:正常商品数量2.0,单价4.62,赠品数量0 +2025-12-12 12:30:07,871 - app.core.excel.processor - INFO - 条码 6914782202498 处理结果:正常商品数量2.0,单价4.62,赠品数量0 +2025-12-12 12:30:07,875 - app.core.excel.processor - INFO - 条码 6922170800072 处理结果:正常商品数量4.0,单价1.52,赠品数量0 +2025-12-12 12:30:07,875 - app.core.excel.processor - INFO - 条码 6977164310136 处理结果:正常商品数量10.0,单价1.43,赠品数量0 +2025-12-12 12:30:07,875 - app.core.excel.processor - INFO - 条码 6944204200535 处理结果:正常商品数量4.0,单价1.38,赠品数量0 +2025-12-12 12:30:07,875 - app.core.excel.processor - INFO - 条码 6944204200313 处理结果:正常商品数量6.0,单价1.22,赠品数量0 +2025-12-12 12:30:07,875 - app.core.excel.processor - INFO - 条码 6974107050067 处理结果:正常商品数量6.0,单价2.09,赠品数量0 +2025-12-12 12:30:07,875 - app.core.excel.processor - INFO - 条码 6935284412918 处理结果:正常商品数量5.0,单价3.13,赠品数量0 +2025-12-12 12:30:07,875 - app.core.excel.processor - INFO - 条码 6928822302901 处理结果:正常商品数量5.0,单价1.43,赠品数量0 +2025-12-12 12:30:07,875 - app.core.excel.processor - INFO - 条码 6952480069692 处理结果:正常商品数量4.0,单价3.61,赠品数量0 +2025-12-12 12:30:07,875 - app.core.excel.processor - INFO - 条码 6923976113137 处理结果:正常商品数量3.0,单价3.61,赠品数量0 +2025-12-12 12:30:07,875 - app.core.excel.processor - INFO - 条码 6923976111171 处理结果:正常商品数量5.0,单价3.61,赠品数量0 +2025-12-12 12:30:07,878 - app.core.excel.processor - INFO - 条码 6952480069678 处理结果:正常商品数量3.0,单价8.55,赠品数量0 +2025-12-12 12:30:07,878 - app.core.excel.processor - INFO - 条码 6923976110136 处理结果:正常商品数量3.0,单价8.55,赠品数量0 +2025-12-12 12:30:07,878 - app.core.excel.processor - INFO - 条码 6952480080536 处理结果:正常商品数量3.0,单价3.61,赠品数量0 +2025-12-12 12:30:07,878 - app.core.excel.processor - INFO - 条码 6905175015139 处理结果:正常商品数量3.0,单价2.38,赠品数量0 +2025-12-12 12:30:07,878 - app.core.excel.processor - INFO - 条码 6921757581809 处理结果:正常商品数量5.0,单价3.9,赠品数量0 +2025-12-12 12:30:07,879 - app.core.excel.processor - INFO - 条码 6921757586118 处理结果:正常商品数量3.0,单价3.99,赠品数量0 +2025-12-12 12:30:07,879 - app.core.excel.processor - INFO - 条码 6972780130373 处理结果:正常商品数量3.0,单价3.04,赠品数量0 +2025-12-12 12:30:07,879 - app.core.excel.processor - INFO - 条码 6940764201050 处理结果:正常商品数量3.0,单价9.98,赠品数量0 +2025-12-12 12:30:07,879 - app.core.excel.processor - INFO - 条码 6940369900105 处理结果:正常商品数量3.0,单价2.52,赠品数量0 +2025-12-12 12:30:07,880 - app.core.excel.processor - INFO - 条码 6922024730029 处理结果:正常商品数量3.0,单价5.69,赠品数量0 +2025-12-12 12:30:07,880 - app.core.excel.processor - INFO - 条码 6901097790178 处理结果:正常商品数量4.0,单价3.33,赠品数量0 +2025-12-12 12:30:07,880 - app.core.excel.processor - INFO - 条码 6938270511220 处理结果:正常商品数量3.0,单价3.42,赠品数量0 +2025-12-12 12:30:07,880 - app.core.excel.processor - INFO - 条码 6953663018964 处理结果:正常商品数量3.0,单价5.15,赠品数量0 +2025-12-12 12:30:07,881 - app.core.excel.processor - INFO - 条码 6938830600159 处理结果:正常商品数量3.0,单价2.38,赠品数量0 +2025-12-12 12:30:07,881 - app.core.excel.processor - INFO - 条码 6922145850118 处理结果:正常商品数量3.0,单价12.35,赠品数量0 +2025-12-12 12:30:07,881 - app.core.excel.processor - INFO - 条码 6925998800286 处理结果:正常商品数量3.0,单价11.6,赠品数量0 +2025-12-12 12:30:07,881 - app.core.excel.processor - INFO - 条码 6933811920318 处理结果:正常商品数量3.0,单价8.27,赠品数量0 +2025-12-12 12:30:07,882 - app.core.excel.processor - INFO - 条码 6972158461153 处理结果:正常商品数量6.0,单价4.28,赠品数量0 +2025-12-12 12:30:07,882 - app.core.excel.processor - INFO - 条码 6927849460571 处理结果:正常商品数量4.0,单价3.33,赠品数量0 +2025-12-12 12:30:07,882 - app.core.excel.processor - INFO - 条码 6927849460601 处理结果:正常商品数量3.0,单价3.33,赠品数量0 +2025-12-12 12:30:07,882 - app.core.excel.processor - INFO - 条码 6927849460595 处理结果:正常商品数量5.0,单价3.33,赠品数量0 +2025-12-12 12:30:07,882 - app.core.excel.processor - INFO - 条码 6923696800645 处理结果:正常商品数量5.0,单价2.66,赠品数量0 +2025-12-12 12:30:07,882 - app.core.excel.processor - INFO - 条码 6938029400607 处理结果:正常商品数量5.0,单价3.5,赠品数量0 +2025-12-12 12:30:07,882 - app.core.excel.processor - INFO - 条码 6938029400126 处理结果:正常商品数量5.0,单价6.63,赠品数量0 +2025-12-12 12:30:07,882 - app.core.excel.processor - INFO - 条码 6938029400096 处理结果:正常商品数量8.0,单价4.9,赠品数量0 +2025-12-12 12:30:07,882 - app.core.excel.processor - INFO - 条码 6924187824959 处理结果:正常商品数量5.0,单价9.63,赠品数量0 +2025-12-12 12:30:07,886 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_蓉城易购-订单1765513775092.xls +2025-12-12 12:30:07,886 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_蓉城易购-订单1765513775092.xls +2025-12-12 12:32:20,577 - app.core.excel.processor - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-12 12:32:20,578 - app.core.excel.processor - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-12-12 12:32:20,578 - app.core.excel.processor - INFO - 初始化ExcelProcessor完成,模板文件: templates/银豹-采购单模板.xls +2025-12-12 12:32:20,581 - app.core.excel.processor - INFO - 开始处理Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765513867817.xlsx +2025-12-12 12:32:20,587 - app.core.excel.processor - INFO - 成功读取Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765513867817.xlsx, 共 39 行 +2025-12-12 12:32:20,592 - app.core.excel.processor - INFO - 找到可能的表头行: 第1行,评分: 75 +2025-12-12 12:32:20,592 - app.core.excel.processor - INFO - 识别到表头在第 1 行 +2025-12-12 12:32:20,600 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 38 行有效数据 +2025-12-12 12:32:20,602 - app.core.excel.processor - INFO - 找到部分匹配的条码列: 商品条码(小条码) (包含关键词: 条码) +2025-12-12 12:32:20,602 - app.core.excel.processor - INFO - 使用条码列: 商品条码(小条码) +2025-12-12 12:32:20,603 - app.core.excel.processor - INFO - 找到name列: 商品名称 +2025-12-12 12:32:20,603 - app.core.excel.processor - INFO - 找到quantity列(部分匹配): 订购数量(小单位) +2025-12-12 12:32:20,603 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-12-12 12:32:20,603 - app.core.excel.processor - INFO - 找到price列(部分匹配): 单价(小单位) +2025-12-12 12:32:20,603 - app.core.excel.processor - INFO - 找到amount列(部分匹配): 优惠后金额(小单位) +2025-12-12 12:32:20,603 - app.core.excel.processor - INFO - 检测到列映射: {'barcode': '商品条码(小条码)', 'name': '商品名称', 'quantity': '订购数量(小单位)', 'unit': '单位', 'price': '单价(小单位)', 'amount': '优惠后金额(小单位)'} +2025-12-12 12:32:20,606 - app.core.excel.processor - INFO - 从商品名称推断规格: 洽洽香瓜子260g@ -> 260*None, 包装数量=260 +2025-12-12 12:32:20,606 - app.core.excel.processor - INFO - 从商品名称推断规格: 洽洽香瓜子200g@ -> 200*None, 包装数量=200 +2025-12-12 12:32:20,610 - app.core.excel.processor - INFO - 从商品名称推断规格: 洽洽香瓜子160g@ -> 160*None, 包装数量=160 +2025-12-12 12:32:20,610 - app.core.excel.processor - INFO - 从商品名称推断规格: 洽洽香瓜子110g@ -> 110*None, 包装数量=110 +2025-12-12 12:32:20,614 - app.core.excel.processor - INFO - 从商品名称推断规格: 洽洽原香瓜子142g@ -> 142*None, 包装数量=142 +2025-12-12 12:32:20,614 - app.core.excel.processor - INFO - 从商品名称推断规格: 徽记生瓜子涨115g -> 115*None, 包装数量=115 +2025-12-12 12:32:20,619 - app.core.excel.processor - INFO - 从商品名称推断规格: 徽记煮瓜子涨140g -> 140*None, 包装数量=140 +2025-12-12 12:32:20,619 - app.core.excel.processor - INFO - 从商品名称推断规格: 洽洽瓜子山核桃108g@ -> 108*None, 包装数量=108 +2025-12-12 12:32:20,622 - app.core.excel.processor - INFO - 从商品名称推断规格: 洽洽瓜子焦糖味88g@ -> 88*None, 包装数量=88 +2025-12-12 12:32:20,622 - app.core.excel.processor - INFO - 从商品名称推断规格: 百世兴酒鬼花生原味100g -> 100*None, 包装数量=100 +2025-12-12 12:32:20,626 - app.core.excel.processor - INFO - 从商品名称推断规格: 百世兴酒鬼花生80g -> 80*None, 包装数量=80 +2025-12-12 12:32:20,629 - app.core.excel.processor - INFO - 从商品名称推断规格: 老程华怪味胡豆140g -> 140*None, 包装数量=140 +2025-12-12 12:32:20,630 - app.core.excel.processor - INFO - 从商品名称推断规格: 老程华重庆怪味胡豆190g -> 190*None, 包装数量=190 +2025-12-12 12:32:20,630 - app.core.excel.processor - INFO - 从商品名称推断规格: 甘源瓜子仁蟹黄味75g@ -> 75*None, 包装数量=75 +2025-12-12 12:32:20,635 - app.core.excel.processor - INFO - 从商品名称推断规格: 甘源青豌豆蒜香味75g@ -> 75*None, 包装数量=75 +2025-12-12 12:32:20,635 - app.core.excel.processor - INFO - 从商品名称推断规格: 素味居泡山椒笋尖100g -> 100*None, 包装数量=100 +2025-12-12 12:32:20,639 - app.core.excel.processor - INFO - 从商品名称推断规格: 卧龙酥脆小麻花烧烤味138g -> 138*None, 包装数量=138 +2025-12-12 12:32:20,639 - app.core.excel.processor - INFO - 从商品名称推断规格: 川洋黑米锅巴香葱味82g@ -> 82*None, 包装数量=82 +2025-12-12 12:32:20,643 - app.core.excel.processor - INFO - 从商品名称推断规格: 寻唐记锅巴牛肉味70g -> 70*None, 包装数量=70 +2025-12-12 12:32:20,643 - app.core.excel.processor - INFO - 从商品名称推断规格: 吴氏远久肥肠酥192g -> 192*None, 包装数量=192 +2025-12-12 12:32:20,647 - app.core.excel.processor - INFO - 从商品名称推断规格: 吴氏远久猫耳朵192g -> 192*None, 包装数量=192 +2025-12-12 12:32:20,647 - app.core.excel.processor - INFO - 从商品名称推断规格: 吴氏远久麻辣鱼卷192g -> 192*None, 包装数量=192 +2025-12-12 12:32:20,651 - app.core.excel.processor - INFO - 从商品名称推断规格: 盼盼薯片100g@ -> 100*None, 包装数量=100 +2025-12-12 12:32:20,651 - app.core.excel.processor - INFO - 从商品名称推断规格: 盼盼金虾条分享装烤肉味75g@ -> 75*None, 包装数量=75 +2025-12-12 12:32:20,655 - app.core.excel.processor - INFO - 从商品名称推断规格: 30g东莱泡椒鸡蛋 -> 30*None, 包装数量=30 +2025-12-12 12:32:20,655 - app.core.excel.processor - INFO - 从商品名称推断规格: 30g东莱卤鸡蛋 -> 30*None, 包装数量=30 +2025-12-12 12:32:20,659 - app.core.excel.processor - INFO - 从商品名称推断规格: 达利园可比克听装薯片番茄味45g@ -> 45*None, 包装数量=45 +2025-12-12 12:32:20,661 - app.core.excel.processor - INFO - 从商品名称推断规格: 乐事无限嗞嗞烤肉味90g@ -> 90*None, 包装数量=90 +2025-12-12 12:32:20,663 - app.core.excel.processor - INFO - 从商品名称推断规格: 贤哥每日杂粮36g@ -> 36*None, 包装数量=36 +2025-12-12 12:32:20,665 - app.core.excel.processor - INFO - 从商品名称推断规格: 狗牙儿披萨卷香辣味188g@ -> 188*None, 包装数量=188 +2025-12-12 12:32:20,665 - app.core.excel.processor - INFO - 从商品名称推断规格: 滇二娃土豆片麻辣味40g -> 40*None, 包装数量=40 +2025-12-12 12:32:20,668 - app.core.excel.processor - INFO - 从商品名称推断规格: 脆升升薯片蜂蜜黄油味60g@ -> 60*None, 包装数量=60 +2025-12-12 12:32:20,668 - app.core.excel.processor - INFO - 从商品名称推断规格: 娃哈哈纯净水1.5L@ -> 1.5L*1, 包装数量=1 +2025-12-12 12:32:20,672 - app.core.excel.processor - INFO - 提取到 33 个商品信息 +2025-12-12 12:32:20,676 - app.core.excel.processor - INFO - 开始处理33 个产品信息 +2025-12-12 12:32:20,676 - app.core.excel.processor - INFO - 处理商品: 条码=6924187821644, 数量=5.0, 单价=8.6, 是否赠品=False +2025-12-12 12:32:20,676 - app.core.excel.processor - INFO - 发现正常商品:条码6924187821644, 数量=5.0, 单价=8.6 +2025-12-12 12:32:20,676 - app.core.excel.processor - INFO - 处理商品: 条码=6924187832657, 数量=5.0, 单价=6.35, 是否赠品=False +2025-12-12 12:32:20,676 - app.core.excel.processor - INFO - 发现正常商品:条码6924187832657, 数量=5.0, 单价=6.35 +2025-12-12 12:32:20,676 - app.core.excel.processor - INFO - 处理商品: 条码=6924187820067, 数量=3.0, 单价=5.35, 是否赠品=False +2025-12-12 12:32:20,676 - app.core.excel.processor - INFO - 发现正常商品:条码6924187820067, 数量=3.0, 单价=5.35 +2025-12-12 12:32:20,676 - app.core.excel.processor - INFO - 处理商品: 条码=6924187834781, 数量=6.0, 单价=3.56, 是否赠品=False +2025-12-12 12:32:20,676 - app.core.excel.processor - INFO - 发现正常商品:条码6924187834781, 数量=6.0, 单价=3.56 +2025-12-12 12:32:20,676 - app.core.excel.processor - INFO - 处理商品: 条码=6924187828759, 数量=5.0, 单价=5.35, 是否赠品=False +2025-12-12 12:32:20,680 - app.core.excel.processor - INFO - 发现正常商品:条码6924187828759, 数量=5.0, 单价=5.35 +2025-12-12 12:32:20,681 - app.core.excel.processor - INFO - 处理商品: 条码=6927849455553, 数量=5.0, 单价=4.11, 是否赠品=False +2025-12-12 12:32:20,681 - app.core.excel.processor - INFO - 发现正常商品:条码6927849455553, 数量=5.0, 单价=4.11 +2025-12-12 12:32:20,681 - app.core.excel.processor - INFO - 处理商品: 条码=6927849433339, 数量=3.0, 单价=4.68, 是否赠品=False +2025-12-12 12:32:20,681 - app.core.excel.processor - INFO - 发现正常商品:条码6927849433339, 数量=3.0, 单价=4.68 +2025-12-12 12:32:20,681 - app.core.excel.processor - INFO - 处理商品: 条码=6924187851184, 数量=3.0, 单价=5.08, 是否赠品=False +2025-12-12 12:32:20,681 - app.core.excel.processor - INFO - 发现正常商品:条码6924187851184, 数量=3.0, 单价=5.08 +2025-12-12 12:32:20,683 - app.core.excel.processor - INFO - 处理商品: 条码=6924187872035, 数量=6.0, 单价=4.59, 是否赠品=False +2025-12-12 12:32:20,683 - app.core.excel.processor - INFO - 发现正常商品:条码6924187872035, 数量=6.0, 单价=4.59 +2025-12-12 12:32:20,683 - app.core.excel.processor - INFO - 处理商品: 条码=6942910308187, 数量=5.0, 单价=3.82, 是否赠品=False +2025-12-12 12:32:20,683 - app.core.excel.processor - INFO - 发现正常商品:条码6942910308187, 数量=5.0, 单价=3.82 +2025-12-12 12:32:20,683 - app.core.excel.processor - INFO - 处理商品: 条码=6942910300693, 数量=3.0, 单价=3.34, 是否赠品=False +2025-12-12 12:32:20,683 - app.core.excel.processor - INFO - 发现正常商品:条码6942910300693, 数量=3.0, 单价=3.34 +2025-12-12 12:32:20,685 - app.core.excel.processor - INFO - 处理商品: 条码=6938270511244, 数量=5.0, 单价=3.06, 是否赠品=False +2025-12-12 12:32:20,685 - app.core.excel.processor - INFO - 发现正常商品:条码6938270511244, 数量=5.0, 单价=3.06 +2025-12-12 12:32:20,685 - app.core.excel.processor - INFO - 处理商品: 条码=6938270511886, 数量=5.0, 单价=3.92, 是否赠品=False +2025-12-12 12:32:20,685 - app.core.excel.processor - INFO - 发现正常商品:条码6938270511886, 数量=5.0, 单价=3.92 +2025-12-12 12:32:20,685 - app.core.excel.processor - INFO - 处理商品: 条码=6940188803618, 数量=3.0, 单价=3.06, 是否赠品=False +2025-12-12 12:32:20,685 - app.core.excel.processor - INFO - 发现正常商品:条码6940188803618, 数量=3.0, 单价=3.06 +2025-12-12 12:32:20,685 - app.core.excel.processor - INFO - 处理商品: 条码=6940188804066, 数量=5.0, 单价=3.06, 是否赠品=False +2025-12-12 12:32:20,685 - app.core.excel.processor - INFO - 发现正常商品:条码6940188804066, 数量=5.0, 单价=3.06 +2025-12-12 12:32:20,685 - app.core.excel.processor - INFO - 处理商品: 条码=6940509101737, 数量=5.0, 单价=2.73, 是否赠品=False +2025-12-12 12:32:20,685 - app.core.excel.processor - INFO - 发现正常商品:条码6940509101737, 数量=5.0, 单价=2.73 +2025-12-12 12:32:20,685 - app.core.excel.processor - INFO - 处理商品: 条码=6931286064292, 数量=5.0, 单价=4.01, 是否赠品=False +2025-12-12 12:32:20,685 - app.core.excel.processor - INFO - 发现正常商品:条码6931286064292, 数量=5.0, 单价=4.01 +2025-12-12 12:32:20,685 - app.core.excel.processor - INFO - 处理商品: 条码=6933280900828, 数量=3.0, 单价=2.45, 是否赠品=False +2025-12-12 12:32:20,689 - app.core.excel.processor - INFO - 发现正常商品:条码6933280900828, 数量=3.0, 单价=2.45 +2025-12-12 12:32:20,689 - app.core.excel.processor - INFO - 处理商品: 条码=6932459700894, 数量=5.0, 单价=1.91, 是否赠品=False +2025-12-12 12:32:20,689 - app.core.excel.processor - INFO - 发现正常商品:条码6932459700894, 数量=5.0, 单价=1.91 +2025-12-12 12:32:20,689 - app.core.excel.processor - INFO - 处理商品: 条码=6933319064019, 数量=5.0, 单价=2.77, 是否赠品=False +2025-12-12 12:32:20,689 - app.core.excel.processor - INFO - 发现正常商品:条码6933319064019, 数量=5.0, 单价=2.77 +2025-12-12 12:32:20,690 - app.core.excel.processor - INFO - 处理商品: 条码=6933319064002, 数量=5.0, 单价=2.77, 是否赠品=False +2025-12-12 12:32:20,690 - app.core.excel.processor - INFO - 发现正常商品:条码6933319064002, 数量=5.0, 单价=2.77 +2025-12-12 12:32:20,690 - app.core.excel.processor - INFO - 处理商品: 条码=6933319064101, 数量=5.0, 单价=2.77, 是否赠品=False +2025-12-12 12:32:20,691 - app.core.excel.processor - INFO - 发现正常商品:条码6933319064101, 数量=5.0, 单价=2.77 +2025-12-12 12:32:20,691 - app.core.excel.processor - INFO - 处理商品: 条码=6920912340602, 数量=5.0, 单价=2.63, 是否赠品=False +2025-12-12 12:32:20,691 - app.core.excel.processor - INFO - 发现正常商品:条码6920912340602, 数量=5.0, 单价=2.63 +2025-12-12 12:32:20,691 - app.core.excel.processor - INFO - 处理商品: 条码=6928402011667, 数量=5.0, 单价=2.39, 是否赠品=False +2025-12-12 12:32:20,691 - app.core.excel.processor - INFO - 发现正常商品:条码6928402011667, 数量=5.0, 单价=2.39 +2025-12-12 12:32:20,691 - app.core.excel.processor - INFO - 处理商品: 条码=6923512599517, 数量=10.0, 单价=1.08, 是否赠品=False +2025-12-12 12:32:20,691 - app.core.excel.processor - INFO - 发现正常商品:条码6923512599517, 数量=10.0, 单价=1.08 +2025-12-12 12:32:20,691 - app.core.excel.processor - INFO - 处理商品: 条码=6923512599043, 数量=10.0, 单价=1.08, 是否赠品=False +2025-12-12 12:32:20,691 - app.core.excel.processor - INFO - 发现正常商品:条码6923512599043, 数量=10.0, 单价=1.08 +2025-12-12 12:32:20,691 - app.core.excel.processor - INFO - 处理商品: 条码=6911988006523, 数量=3.0, 单价=2.72, 是否赠品=False +2025-12-12 12:32:20,691 - app.core.excel.processor - INFO - 发现正常商品:条码6911988006523, 数量=3.0, 单价=2.72 +2025-12-12 12:32:20,691 - app.core.excel.processor - INFO - 处理商品: 条码=6924743927902, 数量=3.0, 单价=6.21, 是否赠品=False +2025-12-12 12:32:20,691 - app.core.excel.processor - INFO - 发现正常商品:条码6924743927902, 数量=3.0, 单价=6.21 +2025-12-12 12:32:20,691 - app.core.excel.processor - INFO - 处理商品: 条码=6959836918147, 数量=30.0, 单价=0.66, 是否赠品=False +2025-12-12 12:32:20,691 - app.core.excel.processor - INFO - 发现正常商品:条码6959836918147, 数量=30.0, 单价=0.66 +2025-12-12 12:32:20,691 - app.core.excel.processor - INFO - 处理商品: 条码=6938803994766, 数量=5.0, 单价=4.2, 是否赠品=False +2025-12-12 12:32:20,695 - app.core.excel.processor - INFO - 发现正常商品:条码6938803994766, 数量=5.0, 单价=4.2 +2025-12-12 12:32:20,696 - app.core.excel.processor - INFO - 处理商品: 条码=6975795361022, 数量=6.0, 单价=1.72, 是否赠品=False +2025-12-12 12:32:20,696 - app.core.excel.processor - INFO - 发现正常商品:条码6975795361022, 数量=6.0, 单价=1.72 +2025-12-12 12:32:20,696 - app.core.excel.processor - INFO - 处理商品: 条码=6937439913981, 数量=5.0, 单价=4.59, 是否赠品=False +2025-12-12 12:32:20,696 - app.core.excel.processor - INFO - 发现正常商品:条码6937439913981, 数量=5.0, 单价=4.59 +2025-12-12 12:32:20,696 - app.core.excel.processor - INFO - 处理商品: 条码=6902083881412, 数量=48.0, 单价=2.1, 是否赠品=False +2025-12-12 12:32:20,696 - app.core.excel.processor - INFO - 发现正常商品:条码6902083881412, 数量=48.0, 单价=2.1 +2025-12-12 12:32:20,696 - app.core.excel.processor - INFO - 分组后共33 个不同条码的商品 +2025-12-12 12:32:20,696 - app.core.excel.processor - INFO - 条码 6924187821644 处理结果:正常商品数量5.0,单价8.6,赠品数量0 +2025-12-12 12:32:20,696 - app.core.excel.processor - INFO - 条码 6924187832657 处理结果:正常商品数量5.0,单价6.35,赠品数量0 +2025-12-12 12:32:20,696 - app.core.excel.processor - INFO - 条码 6924187820067 处理结果:正常商品数量3.0,单价5.35,赠品数量0 +2025-12-12 12:32:20,696 - app.core.excel.processor - INFO - 条码 6924187834781 处理结果:正常商品数量6.0,单价3.56,赠品数量0 +2025-12-12 12:32:20,696 - app.core.excel.processor - INFO - 条码 6924187828759 处理结果:正常商品数量5.0,单价5.35,赠品数量0 +2025-12-12 12:32:20,696 - app.core.excel.processor - INFO - 条码 6927849455553 处理结果:正常商品数量5.0,单价4.11,赠品数量0 +2025-12-12 12:32:20,696 - app.core.excel.processor - INFO - 条码 6927849433339 处理结果:正常商品数量3.0,单价4.68,赠品数量0 +2025-12-12 12:32:20,699 - app.core.excel.processor - INFO - 条码 6924187851184 处理结果:正常商品数量3.0,单价5.08,赠品数量0 +2025-12-12 12:32:20,699 - app.core.excel.processor - INFO - 条码 6924187872035 处理结果:正常商品数量6.0,单价4.59,赠品数量0 +2025-12-12 12:32:20,699 - app.core.excel.processor - INFO - 条码 6942910308187 处理结果:正常商品数量5.0,单价3.82,赠品数量0 +2025-12-12 12:32:20,699 - app.core.excel.processor - INFO - 条码 6942910300693 处理结果:正常商品数量3.0,单价3.34,赠品数量0 +2025-12-12 12:32:20,699 - app.core.excel.processor - INFO - 条码 6938270511244 处理结果:正常商品数量5.0,单价3.06,赠品数量0 +2025-12-12 12:32:20,699 - app.core.excel.processor - INFO - 条码 6938270511886 处理结果:正常商品数量5.0,单价3.92,赠品数量0 +2025-12-12 12:32:20,699 - app.core.excel.processor - INFO - 条码 6940188803618 处理结果:正常商品数量3.0,单价3.06,赠品数量0 +2025-12-12 12:32:20,699 - app.core.excel.processor - INFO - 条码 6940188804066 处理结果:正常商品数量5.0,单价3.06,赠品数量0 +2025-12-12 12:32:20,699 - app.core.excel.processor - INFO - 条码 6940509101737 处理结果:正常商品数量5.0,单价2.73,赠品数量0 +2025-12-12 12:32:20,699 - app.core.excel.processor - INFO - 条码 6931286064292 处理结果:正常商品数量5.0,单价4.01,赠品数量0 +2025-12-12 12:32:20,699 - app.core.excel.processor - INFO - 条码 6933280900828 处理结果:正常商品数量3.0,单价2.45,赠品数量0 +2025-12-12 12:32:20,699 - app.core.excel.processor - INFO - 条码 6932459700894 处理结果:正常商品数量5.0,单价1.91,赠品数量0 +2025-12-12 12:32:20,699 - app.core.excel.processor - INFO - 条码 6933319064019 处理结果:正常商品数量5.0,单价2.77,赠品数量0 +2025-12-12 12:32:20,699 - app.core.excel.processor - INFO - 条码 6933319064002 处理结果:正常商品数量5.0,单价2.77,赠品数量0 +2025-12-12 12:32:20,699 - app.core.excel.processor - INFO - 条码 6933319064101 处理结果:正常商品数量5.0,单价2.77,赠品数量0 +2025-12-12 12:32:20,703 - app.core.excel.processor - INFO - 条码 6920912340602 处理结果:正常商品数量5.0,单价2.63,赠品数量0 +2025-12-12 12:32:20,703 - app.core.excel.processor - INFO - 条码 6928402011667 处理结果:正常商品数量5.0,单价2.39,赠品数量0 +2025-12-12 12:32:20,703 - app.core.excel.processor - INFO - 条码 6923512599517 处理结果:正常商品数量10.0,单价1.08,赠品数量0 +2025-12-12 12:32:20,703 - app.core.excel.processor - INFO - 条码 6923512599043 处理结果:正常商品数量10.0,单价1.08,赠品数量0 +2025-12-12 12:32:20,703 - app.core.excel.processor - INFO - 条码 6911988006523 处理结果:正常商品数量3.0,单价2.72,赠品数量0 +2025-12-12 12:32:20,703 - app.core.excel.processor - INFO - 条码 6924743927902 处理结果:正常商品数量3.0,单价6.21,赠品数量0 +2025-12-12 12:32:20,703 - app.core.excel.processor - INFO - 条码 6959836918147 处理结果:正常商品数量30.0,单价0.66,赠品数量0 +2025-12-12 12:32:20,703 - app.core.excel.processor - INFO - 条码 6938803994766 处理结果:正常商品数量5.0,单价4.2,赠品数量0 +2025-12-12 12:32:20,703 - app.core.excel.processor - INFO - 条码 6975795361022 处理结果:正常商品数量6.0,单价1.72,赠品数量0 +2025-12-12 12:32:20,703 - app.core.excel.processor - INFO - 条码 6937439913981 处理结果:正常商品数量5.0,单价4.59,赠品数量0 +2025-12-12 12:32:20,703 - app.core.excel.processor - INFO - 条码 6902083881412 处理结果:正常商品数量48.0,单价2.1,赠品数量0 +2025-12-12 12:32:20,707 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_蓉城易购-订单1765513867817.xls +2025-12-12 12:32:20,707 - app.core.excel.processor - INFO - 采购单已保存到: data/result\采购单_蓉城易购-订单1765513867817.xls diff --git a/logs/app.core.excel.validators.log b/logs/app.core.excel.validators.log index be4d49d..a63271c 100644 --- a/logs/app.core.excel.validators.log +++ b/logs/app.core.excel.validators.log @@ -4881,3 +4881,497 @@ 2025-11-15 18:01:52,653 - app.core.excel.validators - WARNING - 数量验证失败: 数量必须大于0,当前值: 0.0 2025-11-15 18:01:52,732 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 2025-11-15 18:01:52,748 - app.core.excel.validators - WARNING - 数量验证失败: 数量必须大于0,当前值: 0.0 +2025-11-16 14:25:56,005 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 14:25:56,091 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 14:25:56,161 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 14:25:56,222 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 14:25:56,287 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 14:25:56,350 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 14:25:56,426 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 14:25:56,490 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 14:59:35,461 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 14:59:35,464 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 14:59:35,467 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 14:59:35,469 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 14:59:35,472 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 14:59:35,475 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 14:59:35,478 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 14:59:35,481 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:03:21,917 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:03:21,920 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:03:21,923 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:03:21,925 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:03:21,928 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:03:21,930 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:03:21,932 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:03:21,935 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:08:33,568 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:08:33,572 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:08:33,575 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:08:33,577 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:08:33,579 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:08:33,582 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:08:33,584 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:08:33,586 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:11:11,648 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:11:11,726 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:11:11,790 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:13:49,833 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:13:49,913 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:13:50,010 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:13:50,083 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:13:50,192 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:13:50,303 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:15:38,242 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:15:38,321 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:15:38,401 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:15:38,466 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-16 15:15:38,542 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:36:13,651 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:36:13,707 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:36:13,749 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:36:13,793 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:36:13,849 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:36:42,467 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:36:42,536 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:36:42,612 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:36:42,687 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:36:42,773 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:42:26,275 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:42:26,316 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:42:26,374 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:42:26,426 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:42:26,481 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:44:11,681 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:44:11,745 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:44:11,818 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:44:11,888 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:44:11,969 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:47:04,472 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:47:04,540 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:47:04,611 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:47:04,697 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:47:04,784 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:56:30,851 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:56:31,004 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:56:31,061 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:56:31,123 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-11-20 18:56:31,185 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-01 22:21:10,895 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-01 22:21:10,914 - app.core.excel.validators - WARNING - 数量验证失败: 数量必须大于0,当前值: 0.0 +2025-12-01 22:21:11,006 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-01 22:21:11,025 - app.core.excel.validators - WARNING - 数量验证失败: 数量必须大于0,当前值: 0.0 +2025-12-01 22:21:11,117 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-01 22:21:11,126 - app.core.excel.validators - WARNING - 数量验证失败: 数量必须大于0,当前值: 0.0 +2025-12-01 22:21:11,221 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-01 22:21:11,229 - app.core.excel.validators - WARNING - 数量验证失败: 数量必须大于0,当前值: 0.0 +2025-12-01 22:21:11,323 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-01 22:21:11,343 - app.core.excel.validators - WARNING - 数量验证失败: 数量必须大于0,当前值: 0.0 +2025-12-01 22:21:11,464 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-01 22:21:11,486 - app.core.excel.validators - WARNING - 数量验证失败: 数量必须大于0,当前值: 0.0 +2025-12-01 22:21:11,560 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-01 22:21:11,579 - app.core.excel.validators - WARNING - 数量验证失败: 数量必须大于0,当前值: 0.0 +2025-12-01 22:21:11,649 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-01 22:21:11,668 - app.core.excel.validators - WARNING - 数量验证失败: 数量必须大于0,当前值: 0.0 +2025-12-12 11:00:14,287 - app.core.excel.validators - INFO - 修正条码长度: 从26位截断到24位 +2025-12-12 11:00:14,338 - app.core.excel.validators - WARNING - 条码长度异常: 697753026007269253001004, 长度=24 +2025-12-12 11:00:14,342 - app.core.excel.validators - WARNING - 条码验证失败: 条码长度异常: 697753026007269253001004, 长度=24 +2025-12-12 11:13:15,322 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,325 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,326 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,330 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,331 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,333 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,333 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,337 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,339 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,341 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,344 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,346 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,348 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,351 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,353 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,355 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,357 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,359 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,361 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,363 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,363 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,367 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,370 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,372 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,374 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,374 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,374 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,379 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,381 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,384 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,386 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,388 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,390 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,392 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,393 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,393 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,398 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,400 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,402 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,404 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,404 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,404 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,404 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,408 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,412 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,413 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,417 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,419 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,421 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,423 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:13:15,423 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,023 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,026 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,029 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,031 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,033 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,034 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,035 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,038 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,040 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,042 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,045 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,047 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,049 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,050 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,052 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,052 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,056 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,058 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,061 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,061 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,065 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,066 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,068 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,070 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,072 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,073 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,075 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,075 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,079 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,080 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,082 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,083 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,086 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,087 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,089 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,091 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,091 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,096 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,098 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,099 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,100 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,100 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,100 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,104 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,108 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,109 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,111 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,111 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,111 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,117 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:22:26,118 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,725 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,726 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,726 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,730 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,733 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,733 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,735 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,736 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,739 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,742 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,743 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,745 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,746 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,748 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,748 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,753 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,756 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,757 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,759 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,761 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,765 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,767 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,768 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,770 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,772 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,773 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,773 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,778 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,780 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,781 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,781 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,785 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,787 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,789 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,792 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,793 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,795 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,797 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,799 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,801 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,802 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,803 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,804 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,805 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,807 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,812 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,813 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,815 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,818 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,820 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:32:26,821 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,273 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,275 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,278 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,280 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,282 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,283 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,285 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,287 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,289 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,291 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,294 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,294 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,298 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,300 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,302 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,304 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,304 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,308 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,310 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,312 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,314 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,315 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,317 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,320 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,321 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,324 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,325 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,325 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,329 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,331 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,334 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,334 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,338 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,340 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,343 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,345 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,347 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,349 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,351 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,353 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,355 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,356 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,356 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,357 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,362 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,365 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,367 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,369 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,370 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,371 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:34:40,374 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,290 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,294 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,299 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,301 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,303 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,304 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,307 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,307 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,311 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,313 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,315 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,317 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,321 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,324 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,326 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,328 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,331 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,332 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,335 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,338 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,340 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,343 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,345 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,348 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,350 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,352 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,354 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,355 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,358 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,359 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,361 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,362 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,366 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,367 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,369 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,371 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,372 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,372 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,376 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,379 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,382 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,383 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,383 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,385 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,389 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,391 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,394 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,395 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,397 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,399 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:38:53,399 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,238 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,240 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,243 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,245 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,245 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,248 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,251 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,253 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,255 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,257 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,259 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,260 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,260 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,264 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,266 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,268 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,270 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,272 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,274 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,275 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,275 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,280 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,282 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,284 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,285 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,285 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,289 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,293 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,295 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,296 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,298 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,301 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,303 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,305 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,305 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,309 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,310 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,312 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,314 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,316 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,349 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,349 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,353 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,353 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,358 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,360 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,362 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,364 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,366 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,368 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 11:49:38,368 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,726 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,730 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,730 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,734 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,734 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,738 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,738 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,742 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,742 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,742 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,746 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,746 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,750 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,753 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,755 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,756 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,758 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,759 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,759 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,763 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,763 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,767 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,767 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,771 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,771 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,771 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,775 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,775 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,779 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,779 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,779 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,784 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,786 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,788 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,788 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,791 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,791 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,795 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,795 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,799 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,799 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,799 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,803 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,803 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,807 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,807 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,811 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,811 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,816 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,818 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,819 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,821 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,821 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,825 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,825 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,825 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,829 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,829 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,833 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:30:07,833 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,606 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,606 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,610 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,610 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,614 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,614 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,619 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,619 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,622 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,622 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,626 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,629 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,630 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,630 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,635 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,635 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,639 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,639 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,643 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,643 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,647 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,647 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,651 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,651 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,655 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,655 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,660 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,662 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,663 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,665 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,668 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,668 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 +2025-12-12 12:32:20,668 - app.core.excel.validators - INFO - 修正条码长度: 从14位截断到13位 diff --git a/logs/app.core.ocr.baidu_ocr.log b/logs/app.core.ocr.baidu_ocr.log index 7023616..5acb4a9 100644 --- a/logs/app.core.ocr.baidu_ocr.log +++ b/logs/app.core.ocr.baidu_ocr.log @@ -14,3 +14,8 @@ 2025-11-15 16:39:06,073 - app.core.ocr.baidu_ocr - INFO - 成功获取访问令牌 2025-11-15 17:28:47,324 - app.core.ocr.baidu_ocr - INFO - 成功获取访问令牌 2025-11-15 18:00:04,623 - app.core.ocr.baidu_ocr - INFO - 成功获取访问令牌 +2025-11-16 12:50:38,921 - app.core.ocr.baidu_ocr - INFO - 成功获取访问令牌 +2025-11-16 15:11:07,710 - app.core.ocr.baidu_ocr - INFO - 成功获取访问令牌 +2025-11-16 15:13:47,756 - app.core.ocr.baidu_ocr - INFO - 成功获取访问令牌 +2025-11-16 15:15:36,568 - app.core.ocr.baidu_ocr - INFO - 成功获取访问令牌 +2025-12-01 22:21:09,536 - app.core.ocr.baidu_ocr - INFO - 成功获取访问令牌 diff --git a/logs/app.core.ocr.table_ocr.log b/logs/app.core.ocr.table_ocr.log index f7be42f..66cfac7 100644 --- a/logs/app.core.ocr.table_ocr.log +++ b/logs/app.core.ocr.table_ocr.log @@ -268,3 +268,133 @@ 2025-11-15 18:00:04,278 - app.core.ocr.table_ocr - INFO - 开始处理图片: data/input\微信图片_20251114131924_600_278.jpg 2025-11-15 18:00:05,870 - app.core.ocr.table_ocr - INFO - 图片处理成功: data/input\微信图片_20251114131924_600_278.jpg, 输出文件: data/output\微信图片_20251114131924_600_278.xlsx 2025-11-15 18:00:05,872 - app.core.ocr.table_ocr - INFO - 所有图片处理完成, 总计: 1, 成功: 1 +2025-11-16 11:23:59,369 - app.core.ocr.table_ocr - INFO - 使用输入目录: E:\2025Code\python\orc-order-v2\data\input +2025-11-16 11:23:59,369 - app.core.ocr.table_ocr - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 11:23:59,369 - app.core.ocr.table_ocr - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 11:23:59,369 - app.core.ocr.table_ocr - INFO - 允许的文件类型: ['.jpg', '.jpeg', '.png', '.bmp'] +2025-11-16 11:23:59,369 - app.core.ocr.table_ocr - INFO - 初始化OCRProcessor完成:输入目录=data/input, 输出目录=data/output +2025-11-16 11:26:06,790 - app.core.ocr.table_ocr - INFO - 使用输入目录: E:\2025Code\python\orc-order-v2\data\input +2025-11-16 11:26:06,791 - app.core.ocr.table_ocr - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 11:26:06,791 - app.core.ocr.table_ocr - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 11:26:06,791 - app.core.ocr.table_ocr - INFO - 允许的文件类型: ['.jpg', '.jpeg', '.png', '.bmp'] +2025-11-16 11:26:06,792 - app.core.ocr.table_ocr - INFO - 初始化OCRProcessor完成:输入目录=data/input, 输出目录=data/output +2025-11-16 12:50:38,502 - app.core.ocr.table_ocr - INFO - 使用输入目录: E:\2025Code\python\orc-order-v2\data\input +2025-11-16 12:50:38,503 - app.core.ocr.table_ocr - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 12:50:38,504 - app.core.ocr.table_ocr - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 12:50:38,506 - app.core.ocr.table_ocr - INFO - 允许的文件类型: ['.jpg', '.jpeg', '.png', '.bmp'] +2025-11-16 12:50:38,508 - app.core.ocr.table_ocr - INFO - 初始化OCRProcessor完成:输入目录=data/input, 输出目录=data/output +2025-11-16 12:50:38,541 - app.core.ocr.table_ocr - INFO - 找到 1 个图片文件,其中 1 个未处理 +2025-11-16 12:50:38,550 - app.core.ocr.table_ocr - INFO - 处理批次 1/1: 1 个文件 +2025-11-16 12:50:38,560 - app.core.ocr.table_ocr - INFO - 开始处理图片: data/input\微信图片_20251115212128_148_108.jpg +2025-11-16 12:50:40,143 - app.core.ocr.table_ocr - INFO - 图片处理成功: data/input\微信图片_20251115212128_148_108.jpg, 输出文件: data/output\微信图片_20251115212128_148_108.xlsx +2025-11-16 12:50:40,149 - app.core.ocr.table_ocr - INFO - 所有图片处理完成, 总计: 1, 成功: 1 +2025-11-16 12:51:06,904 - app.core.ocr.table_ocr - INFO - 使用输入目录: E:\2025Code\python\orc-order-v2\data\input +2025-11-16 12:51:06,906 - app.core.ocr.table_ocr - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 12:51:06,906 - app.core.ocr.table_ocr - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 12:51:06,906 - app.core.ocr.table_ocr - INFO - 允许的文件类型: ['.jpg', '.jpeg', '.png', '.bmp'] +2025-11-16 12:51:06,907 - app.core.ocr.table_ocr - INFO - 初始化OCRProcessor完成:输入目录=data/input, 输出目录=data/output +2025-11-16 13:03:10,557 - app.core.ocr.table_ocr - INFO - 使用输入目录: E:\2025Code\python\orc-order-v2\data\input +2025-11-16 13:03:10,557 - app.core.ocr.table_ocr - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 13:03:10,557 - app.core.ocr.table_ocr - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 13:03:10,558 - app.core.ocr.table_ocr - INFO - 允许的文件类型: ['.jpg', '.jpeg', '.png', '.bmp'] +2025-11-16 13:03:10,558 - app.core.ocr.table_ocr - INFO - 初始化OCRProcessor完成:输入目录=data/input, 输出目录=data/output +2025-11-16 13:03:10,578 - app.core.ocr.table_ocr - INFO - 使用输入目录: E:\2025Code\python\orc-order-v2\data\input +2025-11-16 13:03:10,578 - app.core.ocr.table_ocr - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 13:03:10,579 - app.core.ocr.table_ocr - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 13:03:10,579 - app.core.ocr.table_ocr - INFO - 允许的文件类型: ['.jpg', '.jpeg', '.png', '.bmp'] +2025-11-16 13:03:10,580 - app.core.ocr.table_ocr - INFO - 初始化OCRProcessor完成:输入目录=data/input, 输出目录=data/output +2025-11-16 13:18:18,243 - app.core.ocr.table_ocr - INFO - 使用输入目录: E:\2025Code\python\orc-order-v2\data\input +2025-11-16 13:18:18,243 - app.core.ocr.table_ocr - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 13:18:18,244 - app.core.ocr.table_ocr - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 13:18:18,244 - app.core.ocr.table_ocr - INFO - 允许的文件类型: ['.jpg', '.jpeg', '.png', '.bmp'] +2025-11-16 13:18:18,244 - app.core.ocr.table_ocr - INFO - 初始化OCRProcessor完成:输入目录=data/input, 输出目录=data/output +2025-11-16 13:18:18,265 - app.core.ocr.table_ocr - INFO - 使用输入目录: E:\2025Code\python\orc-order-v2\data\input +2025-11-16 13:18:18,265 - app.core.ocr.table_ocr - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 13:18:18,266 - app.core.ocr.table_ocr - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 13:18:18,266 - app.core.ocr.table_ocr - INFO - 允许的文件类型: ['.jpg', '.jpeg', '.png', '.bmp'] +2025-11-16 13:18:18,267 - app.core.ocr.table_ocr - INFO - 初始化OCRProcessor完成:输入目录=data/input, 输出目录=data/output +2025-11-16 13:51:09,012 - app.core.ocr.table_ocr - INFO - 使用输入目录: E:\2025Code\python\orc-order-v2\data\input +2025-11-16 13:51:09,013 - app.core.ocr.table_ocr - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 13:51:09,013 - app.core.ocr.table_ocr - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 13:51:09,013 - app.core.ocr.table_ocr - INFO - 允许的文件类型: ['.jpg', '.jpeg', '.png', '.bmp'] +2025-11-16 13:51:09,014 - app.core.ocr.table_ocr - INFO - 初始化OCRProcessor完成:输入目录=data/input, 输出目录=data/output +2025-11-16 14:39:42,975 - app.core.ocr.table_ocr - INFO - 使用输入目录: E:\2025Code\python\orc-order-v2\data\input +2025-11-16 14:39:42,976 - app.core.ocr.table_ocr - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 14:39:42,976 - app.core.ocr.table_ocr - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 14:39:42,976 - app.core.ocr.table_ocr - INFO - 允许的文件类型: ['.jpg', '.jpeg', '.png', '.bmp'] +2025-11-16 14:39:42,977 - app.core.ocr.table_ocr - INFO - 初始化OCRProcessor完成:输入目录=data/input, 输出目录=data/output +2025-11-16 14:39:42,990 - app.core.ocr.table_ocr - INFO - 使用输入目录: E:\2025Code\python\orc-order-v2\data\input +2025-11-16 14:39:42,991 - app.core.ocr.table_ocr - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 14:39:42,991 - app.core.ocr.table_ocr - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 14:39:42,991 - app.core.ocr.table_ocr - INFO - 允许的文件类型: ['.jpg', '.jpeg', '.png', '.bmp'] +2025-11-16 14:39:42,992 - app.core.ocr.table_ocr - INFO - 初始化OCRProcessor完成:输入目录=data/input, 输出目录=data/output +2025-11-16 15:11:05,478 - app.core.ocr.table_ocr - INFO - 使用输入目录: E:\2025Code\python\orc-order-v2\data\input +2025-11-16 15:11:05,485 - app.core.ocr.table_ocr - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 15:11:05,487 - app.core.ocr.table_ocr - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 15:11:05,489 - app.core.ocr.table_ocr - INFO - 允许的文件类型: ['.jpg', '.jpeg', '.png', '.bmp'] +2025-11-16 15:11:05,498 - app.core.ocr.table_ocr - INFO - 初始化OCRProcessor完成:输入目录=data/input, 输出目录=data/output +2025-11-16 15:11:05,536 - app.core.ocr.table_ocr - INFO - 找到 2 个图片文件,其中 1 个未处理 +2025-11-16 15:11:05,549 - app.core.ocr.table_ocr - INFO - 处理批次 1/1: 1 个文件 +2025-11-16 15:11:05,571 - app.core.ocr.table_ocr - INFO - 开始处理图片: data/input\微信图片_20251116151001_152_108.jpg +2025-11-16 15:11:08,994 - app.core.ocr.table_ocr - INFO - 图片处理成功: data/input\微信图片_20251116151001_152_108.jpg, 输出文件: data/output\微信图片_20251116151001_152_108.xlsx +2025-11-16 15:11:08,995 - app.core.ocr.table_ocr - INFO - 所有图片处理完成, 总计: 1, 成功: 1 +2025-11-16 15:13:47,370 - app.core.ocr.table_ocr - INFO - 使用输入目录: E:\2025Code\python\orc-order-v2\data\input +2025-11-16 15:13:47,372 - app.core.ocr.table_ocr - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 15:13:47,375 - app.core.ocr.table_ocr - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 15:13:47,381 - app.core.ocr.table_ocr - INFO - 允许的文件类型: ['.jpg', '.jpeg', '.png', '.bmp'] +2025-11-16 15:13:47,383 - app.core.ocr.table_ocr - INFO - 初始化OCRProcessor完成:输入目录=data/input, 输出目录=data/output +2025-11-16 15:13:47,457 - app.core.ocr.table_ocr - INFO - 找到 3 个图片文件,其中 1 个未处理 +2025-11-16 15:13:47,470 - app.core.ocr.table_ocr - INFO - 处理批次 1/1: 1 个文件 +2025-11-16 15:13:47,510 - app.core.ocr.table_ocr - INFO - 开始处理图片: data/input\微信图片_20251116151334_153_108.jpg +2025-11-16 15:13:49,392 - app.core.ocr.table_ocr - INFO - 图片处理成功: data/input\微信图片_20251116151334_153_108.jpg, 输出文件: data/output\微信图片_20251116151334_153_108.xlsx +2025-11-16 15:13:49,397 - app.core.ocr.table_ocr - INFO - 所有图片处理完成, 总计: 1, 成功: 1 +2025-11-16 15:15:36,173 - app.core.ocr.table_ocr - INFO - 使用输入目录: E:\2025Code\python\orc-order-v2\data\input +2025-11-16 15:15:36,173 - app.core.ocr.table_ocr - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-16 15:15:36,174 - app.core.ocr.table_ocr - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-16 15:15:36,175 - app.core.ocr.table_ocr - INFO - 允许的文件类型: ['.jpg', '.jpeg', '.png', '.bmp'] +2025-11-16 15:15:36,177 - app.core.ocr.table_ocr - INFO - 初始化OCRProcessor完成:输入目录=data/input, 输出目录=data/output +2025-11-16 15:15:36,243 - app.core.ocr.table_ocr - INFO - 找到 1 个图片文件,其中 1 个未处理 +2025-11-16 15:15:36,257 - app.core.ocr.table_ocr - INFO - 处理批次 1/1: 1 个文件 +2025-11-16 15:15:36,299 - app.core.ocr.table_ocr - INFO - 开始处理图片: data/input\微信图片_20251116151514_154_108.jpg +2025-11-16 15:15:37,808 - app.core.ocr.table_ocr - INFO - 图片处理成功: data/input\微信图片_20251116151514_154_108.jpg, 输出文件: data/output\微信图片_20251116151514_154_108.xlsx +2025-11-16 15:15:37,809 - app.core.ocr.table_ocr - INFO - 所有图片处理完成, 总计: 1, 成功: 1 +2025-11-20 18:44:11,080 - app.core.ocr.table_ocr - INFO - 使用输入目录: E:\2025Code\python\orc-order-v2\data\input +2025-11-20 18:44:11,083 - app.core.ocr.table_ocr - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-20 18:44:11,087 - app.core.ocr.table_ocr - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-20 18:44:11,089 - app.core.ocr.table_ocr - INFO - 允许的文件类型: ['.jpg', '.jpeg', '.png', '.bmp'] +2025-11-20 18:44:11,094 - app.core.ocr.table_ocr - INFO - 初始化OCRProcessor完成:输入目录=data/input, 输出目录=data/output +2025-11-20 18:44:11,194 - app.core.ocr.table_ocr - INFO - 找到 1 个图片文件,其中 1 个未处理 +2025-11-20 18:44:11,216 - app.core.ocr.table_ocr - INFO - 处理批次 1/1: 1 个文件 +2025-11-20 18:44:11,261 - app.core.ocr.table_ocr - INFO - 开始处理图片: data/input\微信图片_20251116151514_154_108.jpg +2025-11-20 18:44:11,261 - app.core.ocr.table_ocr - INFO - 已存在对应的Excel文件,跳过处理: 微信图片_20251116151514_154_108.jpg -> 微信图片_20251116151514_154_108.xlsx +2025-11-20 18:44:11,295 - app.core.ocr.table_ocr - INFO - 所有图片处理完成, 总计: 1, 成功: 1 +2025-11-20 18:47:03,864 - app.core.ocr.table_ocr - INFO - 使用输入目录: E:\2025Code\python\orc-order-v2\data\input +2025-11-20 18:47:03,867 - app.core.ocr.table_ocr - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-20 18:47:03,867 - app.core.ocr.table_ocr - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-20 18:47:03,869 - app.core.ocr.table_ocr - INFO - 允许的文件类型: ['.jpg', '.jpeg', '.png', '.bmp'] +2025-11-20 18:47:03,871 - app.core.ocr.table_ocr - INFO - 初始化OCRProcessor完成:输入目录=data/input, 输出目录=data/output +2025-11-20 18:47:03,990 - app.core.ocr.table_ocr - INFO - 找到 1 个图片文件,其中 1 个未处理 +2025-11-20 18:47:04,011 - app.core.ocr.table_ocr - INFO - 处理批次 1/1: 1 个文件 +2025-11-20 18:47:04,048 - app.core.ocr.table_ocr - INFO - 开始处理图片: data/input\微信图片_20251116151514_154_108.jpg +2025-11-20 18:47:04,058 - app.core.ocr.table_ocr - INFO - 已存在对应的Excel文件,跳过处理: 微信图片_20251116151514_154_108.jpg -> 微信图片_20251116151514_154_108.xlsx +2025-11-20 18:47:04,080 - app.core.ocr.table_ocr - INFO - 所有图片处理完成, 总计: 1, 成功: 1 +2025-11-20 18:56:30,283 - app.core.ocr.table_ocr - INFO - 使用输入目录: E:\2025Code\python\orc-order-v2\data\input +2025-11-20 18:56:30,284 - app.core.ocr.table_ocr - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-11-20 18:56:30,287 - app.core.ocr.table_ocr - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-11-20 18:56:30,289 - app.core.ocr.table_ocr - INFO - 允许的文件类型: ['.jpg', '.jpeg', '.png', '.bmp'] +2025-11-20 18:56:30,291 - app.core.ocr.table_ocr - INFO - 初始化OCRProcessor完成:输入目录=data/input, 输出目录=data/output +2025-11-20 18:56:30,417 - app.core.ocr.table_ocr - INFO - 找到 1 个图片文件,其中 1 个未处理 +2025-11-20 18:56:30,439 - app.core.ocr.table_ocr - INFO - 处理批次 1/1: 1 个文件 +2025-11-20 18:56:30,483 - app.core.ocr.table_ocr - INFO - 开始处理图片: data/input\微信图片_20251116151514_154_108.jpg +2025-11-20 18:56:30,483 - app.core.ocr.table_ocr - INFO - 已存在对应的Excel文件,跳过处理: 微信图片_20251116151514_154_108.jpg -> 微信图片_20251116151514_154_108.xlsx +2025-11-20 18:56:30,495 - app.core.ocr.table_ocr - INFO - 所有图片处理完成, 总计: 1, 成功: 1 +2025-12-01 22:21:09,028 - app.core.ocr.table_ocr - INFO - 使用输入目录: E:\2025Code\python\orc-order-v2\data\input +2025-12-01 22:21:09,043 - app.core.ocr.table_ocr - INFO - 使用输出目录: E:\2025Code\python\orc-order-v2\data\output +2025-12-01 22:21:09,046 - app.core.ocr.table_ocr - INFO - 使用临时目录: E:\2025Code\python\orc-order-v2\data\temp +2025-12-01 22:21:09,048 - app.core.ocr.table_ocr - INFO - 允许的文件类型: ['.jpg', '.jpeg', '.png', '.bmp'] +2025-12-01 22:21:09,052 - app.core.ocr.table_ocr - INFO - 初始化OCRProcessor完成:输入目录=data/input, 输出目录=data/output +2025-12-01 22:21:09,173 - app.core.ocr.table_ocr - INFO - 找到 1 个图片文件,其中 1 个未处理 +2025-12-01 22:21:09,198 - app.core.ocr.table_ocr - INFO - 处理批次 1/1: 1 个文件 +2025-12-01 22:21:09,246 - app.core.ocr.table_ocr - INFO - 开始处理图片: data/input\微信图片_20251201221738_176_108.jpg +2025-12-01 22:21:10,536 - app.core.ocr.table_ocr - INFO - 图片处理成功: data/input\微信图片_20251201221738_176_108.jpg, 输出文件: data/output\微信图片_20251201221738_176_108.xlsx +2025-12-01 22:21:10,538 - app.core.ocr.table_ocr - INFO - 所有图片处理完成, 总计: 1, 成功: 1 diff --git a/logs/app.core.utils.file_utils.log b/logs/app.core.utils.file_utils.log index 43e2835..0898a20 100644 --- a/logs/app.core.utils.file_utils.log +++ b/logs/app.core.utils.file_utils.log @@ -1 +1,4 @@ 2025-11-14 21:55:05,688 - app.core.utils.file_utils - WARNING - 未在目录 data/output 中找到符合条件的文件 +2025-11-16 10:48:45,595 - app.core.utils.file_utils - WARNING - 未在目录 data/output 中找到符合条件的文件 +2025-11-16 10:48:45,656 - app.core.utils.file_utils - WARNING - 未在目录 data/output 中找到符合条件的文件 +2025-11-16 10:56:22,516 - app.core.utils.file_utils - WARNING - 未在目录 data/output 中找到符合条件的文件 diff --git a/logs/app.services.ocr_service.log b/logs/app.services.ocr_service.log index d9e21d9..b903bfb 100644 --- a/logs/app.services.ocr_service.log +++ b/logs/app.services.ocr_service.log @@ -535,3 +535,55 @@ 2025-11-15 18:00:04,120 - app.services.ocr_service - INFO - OCRService初始化完成 2025-11-15 18:00:04,212 - app.services.ocr_service - INFO - OCRService.batch_process被调用,转发到process_images_batch 2025-11-15 18:00:04,213 - app.services.ocr_service - INFO - OCRService开始批量处理图片, batch_size=None, max_workers=None +2025-11-16 11:23:59,366 - app.services.ocr_service - INFO - 初始化OCRService +2025-11-16 11:23:59,369 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-11-16 11:26:06,789 - app.services.ocr_service - INFO - 初始化OCRService +2025-11-16 11:26:06,792 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-11-16 12:50:38,497 - app.services.ocr_service - INFO - 初始化OCRService +2025-11-16 12:50:38,510 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-11-16 12:50:38,512 - app.services.ocr_service - INFO - OCRService.batch_process被调用,转发到process_images_batch +2025-11-16 12:50:38,524 - app.services.ocr_service - INFO - OCRService开始批量处理图片, batch_size=None, max_workers=None +2025-11-16 12:51:06,904 - app.services.ocr_service - INFO - 初始化OCRService +2025-11-16 12:51:06,907 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-11-16 13:03:10,556 - app.services.ocr_service - INFO - 初始化OCRService +2025-11-16 13:03:10,559 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-11-16 13:03:10,577 - app.services.ocr_service - INFO - 初始化OCRService +2025-11-16 13:03:10,580 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-11-16 13:18:18,242 - app.services.ocr_service - INFO - 初始化OCRService +2025-11-16 13:18:18,246 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-11-16 13:18:18,264 - app.services.ocr_service - INFO - 初始化OCRService +2025-11-16 13:18:18,267 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-11-16 13:51:09,011 - app.services.ocr_service - INFO - 初始化OCRService +2025-11-16 13:51:09,014 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-11-16 14:39:42,974 - app.services.ocr_service - INFO - 初始化OCRService +2025-11-16 14:39:42,977 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-11-16 14:39:42,990 - app.services.ocr_service - INFO - 初始化OCRService +2025-11-16 14:39:42,993 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-11-16 15:11:05,474 - app.services.ocr_service - INFO - 初始化OCRService +2025-11-16 15:11:05,507 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-11-16 15:11:05,514 - app.services.ocr_service - INFO - OCRService.batch_process被调用,转发到process_images_batch +2025-11-16 15:11:05,525 - app.services.ocr_service - INFO - OCRService开始批量处理图片, batch_size=None, max_workers=None +2025-11-16 15:13:47,369 - app.services.ocr_service - INFO - 初始化OCRService +2025-11-16 15:13:47,385 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-11-16 15:13:47,444 - app.services.ocr_service - INFO - OCRService.batch_process被调用,转发到process_images_batch +2025-11-16 15:13:47,445 - app.services.ocr_service - INFO - OCRService开始批量处理图片, batch_size=None, max_workers=None +2025-11-16 15:15:36,170 - app.services.ocr_service - INFO - 初始化OCRService +2025-11-16 15:15:36,181 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-11-16 15:15:36,232 - app.services.ocr_service - INFO - OCRService.batch_process被调用,转发到process_images_batch +2025-11-16 15:15:36,232 - app.services.ocr_service - INFO - OCRService开始批量处理图片, batch_size=None, max_workers=None +2025-11-20 18:44:11,053 - app.services.ocr_service - INFO - 初始化OCRService +2025-11-20 18:44:11,098 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-11-20 18:44:11,171 - app.services.ocr_service - INFO - OCRService.batch_process被调用,转发到process_images_batch +2025-11-20 18:44:11,173 - app.services.ocr_service - INFO - OCRService开始批量处理图片, batch_size=None, max_workers=None +2025-11-20 18:47:03,863 - app.services.ocr_service - INFO - 初始化OCRService +2025-11-20 18:47:03,876 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-11-20 18:47:03,967 - app.services.ocr_service - INFO - OCRService.batch_process被调用,转发到process_images_batch +2025-11-20 18:47:03,967 - app.services.ocr_service - INFO - OCRService开始批量处理图片, batch_size=None, max_workers=None +2025-11-20 18:56:30,280 - app.services.ocr_service - INFO - 初始化OCRService +2025-11-20 18:56:30,296 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-11-20 18:56:30,390 - app.services.ocr_service - INFO - OCRService.batch_process被调用,转发到process_images_batch +2025-11-20 18:56:30,399 - app.services.ocr_service - INFO - OCRService开始批量处理图片, batch_size=None, max_workers=None +2025-12-01 22:21:09,016 - app.services.ocr_service - INFO - 初始化OCRService +2025-12-01 22:21:09,058 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-12-01 22:21:09,151 - app.services.ocr_service - INFO - OCRService.batch_process被调用,转发到process_images_batch +2025-12-01 22:21:09,161 - app.services.ocr_service - INFO - OCRService开始批量处理图片, batch_size=None, max_workers=None diff --git a/logs/app.services.order_service.log b/logs/app.services.order_service.log index 3351d91..f7bf6bd 100644 --- a/logs/app.services.order_service.log +++ b/logs/app.services.order_service.log @@ -591,3 +591,100 @@ 2025-11-15 18:01:51,643 - app.services.order_service - INFO - 初始化OrderService 2025-11-15 18:01:51,715 - app.services.order_service - INFO - OrderService初始化完成 2025-11-15 18:01:51,763 - app.services.order_service - INFO - OrderService开始处理最新Excel文件 +2025-11-16 10:48:45,445 - app.services.order_service - INFO - 初始化OrderService +2025-11-16 10:48:45,564 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-16 10:48:45,630 - app.services.order_service - INFO - OrderService开始处理最新Excel文件 +2025-11-16 10:56:22,512 - app.services.order_service - INFO - 初始化OrderService +2025-11-16 10:56:22,516 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-16 11:23:59,369 - app.services.order_service - INFO - 初始化OrderService +2025-11-16 11:23:59,374 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-16 11:26:06,793 - app.services.order_service - INFO - 初始化OrderService +2025-11-16 11:26:06,795 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-16 12:51:06,907 - app.services.order_service - INFO - 初始化OrderService +2025-11-16 12:51:06,910 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-16 13:03:10,559 - app.services.order_service - INFO - 初始化OrderService +2025-11-16 13:03:10,563 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-16 13:03:10,580 - app.services.order_service - INFO - 初始化OrderService +2025-11-16 13:03:10,584 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-16 13:18:18,246 - app.services.order_service - INFO - 初始化OrderService +2025-11-16 13:18:18,248 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-16 13:18:18,268 - app.services.order_service - INFO - 初始化OrderService +2025-11-16 13:18:18,271 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-16 13:51:09,015 - app.services.order_service - INFO - 初始化OrderService +2025-11-16 13:51:09,018 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-16 14:25:50,009 - app.services.order_service - INFO - 初始化OrderService +2025-11-16 14:25:50,033 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-16 14:25:50,107 - app.services.order_service - INFO - OrderService开始处理最新Excel文件 +2025-11-16 14:25:55,548 - app.services.order_service - INFO - 初始化OrderService +2025-11-16 14:25:55,619 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-16 14:25:55,699 - app.services.order_service - INFO - OrderService开始处理最新Excel文件 +2025-11-16 14:39:42,977 - app.services.order_service - INFO - 初始化OrderService +2025-11-16 14:39:42,981 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-16 14:39:42,993 - app.services.order_service - INFO - 初始化OrderService +2025-11-16 14:39:42,996 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-16 14:59:35,433 - app.services.order_service - INFO - 初始化OrderService +2025-11-16 14:59:35,437 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-16 14:59:35,437 - app.services.order_service - INFO - OrderService开始处理指定Excel文件: E:/2025Code/python/orc-order-v2/data/output/微信图片_20251115212128_148_108.xlsx +2025-11-16 15:03:21,889 - app.services.order_service - INFO - 初始化OrderService +2025-11-16 15:03:21,893 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-16 15:03:21,894 - app.services.order_service - INFO - OrderService开始处理指定Excel文件: E:/2025Code/python/orc-order-v2/data/output/微信图片_20251115212128_148_108.xlsx +2025-11-16 15:08:33,542 - app.services.order_service - INFO - 初始化OrderService +2025-11-16 15:08:33,546 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-16 15:08:33,546 - app.services.order_service - INFO - OrderService开始处理指定Excel文件: E:/2025Code/python/orc-order-v2/data/output/微信图片_20251115212128_148_108.xlsx +2025-11-16 15:11:11,179 - app.services.order_service - INFO - 初始化OrderService +2025-11-16 15:11:11,268 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-16 15:11:11,345 - app.services.order_service - INFO - OrderService开始处理最新Excel文件 +2025-11-16 15:13:47,387 - app.services.order_service - INFO - 初始化OrderService +2025-11-16 15:13:47,411 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-16 15:13:49,534 - app.services.order_service - INFO - OrderService开始处理最新Excel文件 +2025-11-16 15:15:36,186 - app.services.order_service - INFO - 初始化OrderService +2025-11-16 15:15:36,205 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-16 15:15:37,909 - app.services.order_service - INFO - OrderService开始处理最新Excel文件 +2025-11-20 18:36:13,245 - app.services.order_service - INFO - 初始化OrderService +2025-11-20 18:36:13,299 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-20 18:36:13,371 - app.services.order_service - INFO - OrderService开始处理最新Excel文件 +2025-11-20 18:36:42,069 - app.services.order_service - INFO - 初始化OrderService +2025-11-20 18:36:42,111 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-20 18:36:42,174 - app.services.order_service - INFO - OrderService开始处理最新Excel文件 +2025-11-20 18:42:25,860 - app.services.order_service - INFO - 初始化OrderService +2025-11-20 18:42:25,947 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-20 18:42:26,024 - app.services.order_service - INFO - OrderService开始处理最新Excel文件 +2025-11-20 18:44:11,101 - app.services.order_service - INFO - 初始化OrderService +2025-11-20 18:44:11,134 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-20 18:44:11,376 - app.services.order_service - INFO - OrderService开始处理最新Excel文件 +2025-11-20 18:47:03,878 - app.services.order_service - INFO - 初始化OrderService +2025-11-20 18:47:03,927 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-20 18:47:04,166 - app.services.order_service - INFO - OrderService开始处理最新Excel文件 +2025-11-20 18:56:30,301 - app.services.order_service - INFO - 初始化OrderService +2025-11-20 18:56:30,361 - app.services.order_service - INFO - OrderService初始化完成 +2025-11-20 18:56:30,593 - app.services.order_service - INFO - OrderService开始处理最新Excel文件 +2025-12-01 22:21:09,063 - app.services.order_service - INFO - 初始化OrderService +2025-12-01 22:21:09,121 - app.services.order_service - INFO - OrderService初始化完成 +2025-12-01 22:21:10,614 - app.services.order_service - INFO - OrderService开始处理最新Excel文件 +2025-12-12 11:00:14,048 - app.services.order_service - INFO - 初始化OrderService +2025-12-12 11:00:14,096 - app.services.order_service - INFO - OrderService初始化完成 +2025-12-12 11:00:14,097 - app.services.order_service - INFO - OrderService开始处理指定Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx +2025-12-12 11:13:15,273 - app.services.order_service - INFO - 初始化OrderService +2025-12-12 11:13:15,288 - app.services.order_service - INFO - OrderService初始化完成 +2025-12-12 11:13:15,289 - app.services.order_service - INFO - OrderService开始处理指定Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx +2025-12-12 11:22:25,989 - app.services.order_service - INFO - 初始化OrderService +2025-12-12 11:22:25,990 - app.services.order_service - INFO - OrderService初始化完成 +2025-12-12 11:22:25,990 - app.services.order_service - INFO - OrderService开始处理指定Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx +2025-12-12 11:32:26,688 - app.services.order_service - INFO - 初始化OrderService +2025-12-12 11:32:26,694 - app.services.order_service - INFO - OrderService初始化完成 +2025-12-12 11:32:26,696 - app.services.order_service - INFO - OrderService开始处理指定Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx +2025-12-12 11:34:40,235 - app.services.order_service - INFO - 初始化OrderService +2025-12-12 11:34:40,238 - app.services.order_service - INFO - OrderService初始化完成 +2025-12-12 11:34:40,238 - app.services.order_service - INFO - OrderService开始处理指定Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx +2025-12-12 11:38:53,256 - app.services.order_service - INFO - 初始化OrderService +2025-12-12 11:38:53,260 - app.services.order_service - INFO - OrderService初始化完成 +2025-12-12 11:38:53,260 - app.services.order_service - INFO - OrderService开始处理指定Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx +2025-12-12 11:49:38,202 - app.services.order_service - INFO - 初始化OrderService +2025-12-12 11:49:38,203 - app.services.order_service - INFO - OrderService初始化完成 +2025-12-12 11:49:38,206 - app.services.order_service - INFO - OrderService开始处理指定Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765440157955.xlsx +2025-12-12 12:30:07,696 - app.services.order_service - INFO - 初始化OrderService +2025-12-12 12:30:07,700 - app.services.order_service - INFO - OrderService初始化完成 +2025-12-12 12:30:07,700 - app.services.order_service - INFO - OrderService开始处理指定Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765513775092.xlsx +2025-12-12 12:32:20,576 - app.services.order_service - INFO - 初始化OrderService +2025-12-12 12:32:20,579 - app.services.order_service - INFO - OrderService初始化完成 +2025-12-12 12:32:20,579 - app.services.order_service - INFO - OrderService开始处理指定Excel文件: E:\2025Code\python\orc-order-v2\data\output\蓉城易购-订单1765513867817.xlsx diff --git a/templates/商品资料.xlsx b/templates/商品资料.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5ff919d4d4310f11e5106f7e3e84be9ced3fa5f9 GIT binary patch literal 788274 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

eo?cTZYsC?t8e`;Qv!BTKs0qj$Q2n>f5c44 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

x;t8}3fI63uO~MU^K2+yzsXQw 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 z z@0B!a^6-jTZEYCI{=**{ph+n90a2PI+)r6yb+3L}BC-0pUHh-w)~Nnwkxm0SoM9rx z=aJX6k+|d(q|`>Ry9Zig))M5EEY}JiIW(K#V}~3piy-YG2S_{T2b-RN<*3xjzGV04 zSRnTQ@MKVH))F6bv|srH#3c-xSyqlu4I^a6lqIHFS@$&U)O&(wsKMQ`3fUP z+gjDP9c@z-{r{>l4f*Kw=)gpy3p7<+{H$C*w40Uil%V2wQ>3f(UR&#VFynj4?UA+?z#RO%22q3U@W z9{>SG9QnQ$GFQF=j-g?xQTexF0Ui_` z#N$(YcW@|0?{S1{)GfRhHm0n1>RW#D9JFjgDVsSiJ4wIy-U%Y}?b0gm8wa3h( z1lGT0{Sun1?`zq-Vyyovij|a^nwZM@CcRq}_!~50u~RcM=A`IexNDM2jvXe+A%pPu zlTI<8&(TpO)Y0ATT^0h$LP;@->3a4zW`|AFXRMiP?H@s|a6Z1<*X`VS!~&#g7Gi~{ zz#h=?m0Yxuh{2Gv$8_aAWVDfHH1_i<&s0dd(b%%yFPtYnJt2tV9y&s0t%4*fj~Dyb zANKMQmR`92>e)rrr4BkY%wiD-i^Migaqlo3kH78h|6XRirC+-%Yz?)u zW$)RyCG{$Lu@T;nSz~O_6#J^(OMWc0M-E9xZ-z#K<;cL@nYa03RUTYyXmmx8g%t#3&^3{c0%pJ0?0OiSer#G?e#&_>7?jVaIO@iB}Yb1RV=o zcaU+eQa7}wk`x3sSX4HcoA!N=ZnfHS2^a|z$$M46 z&4i^&xqI*izub*w3+y3juD`=(044@yM$>pYm**Rc)*A_QP{%jhRX!|M(kxEZdc77+ z-6H3-mTmQ*q1l&A^`RRcjk39MIexMfEz0LVzGb~%N1tP(6Wp@i&Cm=En9GFr^HQq* z)-P;Bx3aUK5eS&PX-SUmMtF@4sZ-(<1oX3hEK42MxnIAokCa?2Q?Qb4eZWCklxn{p zH8_)rL9&M}Mf3Byj$b-h=?tWGUV@bng`q;gTpC>D-%`T$rG7DbIHShIBg!O}d5i&% zoUEF@wWtFJhu35$><9f$Mb?>3hjH5??SAUU`pyY)Sww2DL6V^1T3WC~~bf9}fxA7#m54ffjx}RuB%U!U7mfd9iFGSjNoR@@>hraZ>&KL zKPmpJx*^XE(c7ofMKG`YcYcHk3xs;fCqcRAv70UEcSEC{9k*OG?& zPOSK26ok}zPgNTubNL}?Rf@`( z;o2E~5?-18oBs@$UJ7d5+wWI&rTnu86ro>HyU(C@(~L(mb!5JaM2Buo-zT{@*I6M! zF1iMSztk5B)+#a8!I2w(o(21Jo$T0LWF8r!L#fFxrknWbE{ReXoaJHGX4i>~?b^sn z9tB2E>Q$pLvEKZY3YYc9FO!nY2b5L*=-Bwv@Rm>tW}f_h?T&`vjP{>*f~n$NA$_CT zE(~gaChqF2)r4RSMvN4UGzxgVY8mG?3+qN`=aVILSE2j6i@i88Yt)f;fmxVCr|UUz zM@4}gb;S>~B0tV&wwm@D2@-De*U z`)m*~5Yw0{5bnn8lk|q@RZWP?r1K$7#g<~e0ATuQ9T4f}2IB+;amw%eZk!<^#a79A z?90?7b(fwQSEzsg)f@o{zEJ6= zrtbBIU!t94Z+}g;Rr=(y-Sfp%pyT0{PT5lsZ2I0ZP3A%RPUK+wllgWTG`^d zCvC=sEb`-icef1fn>=^`=K#I25&&hU42q-(ZiNVrW&IjzL~?#)G-Sn+pv<3mse&MX zPdG}%oPimB?M7odBJ_NS$|?-M_xa4`rH{%;L>=)brc>Y*ck>GTUVWdacFGLBTz==w zKB}uZ8In3dP>Wlb#KSz9tJ4v?NK{GB+!q)IePTm#VSN z0(fp%_aw;nP`$qmJN)&j&tQwq-B2WQT{>mCaXeqfw-h#rC$>DAf|hzoj;pM_KB>yO zKuBe`^VMq{(ykE*AeP7qoN(&3=CLB!&&<-eVGfQoF1JA`qjZzsiCL!g17oE)sfg^2 zyL;`t*;Kt|s^>XA75&o-Q3fsnXw#2mK_}vv3=CK=uRN56IP*jDy-Bk7SL+QEqw2hb_XPZ2J9HY#9YcY-YhXc9R90(t__b89#NWNK`fw zRguu@%@Tt}z~Q&*jZvE+(vr@zd>*a0`@&9uh;O=_Am+ew0K8Q(6CeynHck~n&(d3L zLn~GIBEt;FZe-V_q}Yz;JRbs&qM zr6BmD{%!?V_I&S#g}e)m^IURn2q0hCX~2qvM%FrYuc_+0%!E9i9(Z6!C7AB zTL?%tiMer%P3Bh0X6*4%N3*N?~xV?{ws$!RaUcIHtC4kG_+dPtiMjQqK!MW&;xHu$K!ieNE z996WrI<<~_ue$;B``E?QmYQz|>(K%~_S*qJ)*e|eV!#d7dn7j21?%wnPS&748d zD%|Ln8s5S3ivV3ykvvq->o^rqZ-g-yI?Kmw|5oQjTx2PtIdFw%7}`ft3ZG_2wP3<6 zbNa*!$%noe$dbbcOFHi^`2m)EEH;J(vQuf#D7^lR?fX8{fV4*J{y!IgJpeOZkDg*410e^%~eW^sn8c<-Lw?=bT$&0j^A=%ZiyAaIo8V`2I z65-RVeT|)Oj%tYO)ITo-EGBla*q^<{n%9CdTCgqney^jajm1$Q+vCQL#Vi;H<~PzY zOX2kzGEN`Sgo&jBXIc0$$xeOIa}XtdTfqsU-K0s7i6QO6W#VgZxr5!qqu$g$#C19_ zIYX=3*f>E{-Ue82M$-&<#5|Gcx}W{B=a$q_77Ze~Dl6^)IhnNQ44<=`} z@h7<1p!b!9qF+X{qR?O#9jsA0=9U;-@Jl$6noXjbZzQ2Hb!1X7I3 zM^Vu7n4a-$h@yEXOH>l8S5qtT)+^YUn2OvlH|dmVW01W6uC38Gu3!aDH^)wq3$1P} zr)K{l+g|F3Bi#$VCwqWvo+#$L6&jZp8&{s!HdG+xTcF(FVt9{|`_wFOsu80z;=tL+ zjlXC4BZ>*|2&!4aJMFuxVE#0s)PIDSnn%Z_F{;ZOCq0Oh9Rck3I?FDM`(nC7|D!GG zf0h>4*oEsQ1ue;ASfa20`T6vVr4yJCe=n%c`3(dqNOCQoL5R&A(s(@B>Q)>9e}m1F zmo(SZtcKi9!~?c4dDV);!sy*u0SbP5*y?U$c_QBGhq)SlsH|!JVB;aU3*u8|9{V6n z7}{~7ii);ZJdY54haUZ8Vh{t;R*KBSCjD9TT&bT*-nf9QHLmvd1daHcM;WAGw|F8x zI6D?P*v1}xU~U6FKjFdoM=T%QbRl;mBCzP&B*K?ZS4!Vt30DAJ|6m@g@3wwAVMtkzIJN93NLP5)wp1Z(z;ze zcsrz*q75ixKDuZ~nWsnyo9+T(iC|0`DFGCCj2s*nZ2&ANj=x2k)S@eCApEA_0E74M zC@>*ep@toI*>?6@kO1teB~RwpXWk%Vu?HC;Ly z^M2M4BbsSYeuD%tijHmSEQOV$O*Tu@uG1y+rF&z$uC008+g6}snuhpjOUcx|!Gy2^ zPt2~O_M9^mEQ*M!?dSv{HXoO#VuPH z-Vw;U?8pu&JSK2vzki`X;_L){*MxJ3StFICshSLf{V07P8c}r&uroxkp2Q+x=yGn~ z^~P|rzsW!vjLZ#FnMT%W2oCOgQ&nlC0-Db?p2$rK1mdDELR?gyzH_^>GF7UeTK+FM zC^RfhC?=PW3_2?l(5D2pc;cUoxWW4{^10?|ZX5DW$s_c?#a~XThk%?Un~7Np@(LrX zymra2_q)uWht=4EO1tPwod-j~!JNVpFDC6rE{0&NOvDkCPz;p#G=+Dg9Qa&;sOv$j zq}fbiRF!PbmClO^l#e4@jPaQ_(7y*_)B3j18CBY(Tuj7){@1~r{AW^RG%ZYLAnFF3}#2#wii0{QI9ll zeUWPjyG_bt;JpfDMW(x7IFg=lj5(lv?n=0I59idc{Jc~hQ8Ky~n}(sbaEX4q0&=sq zLX(@H5D!@3U|jrlBlp2rqNbYddzShWHz-{!_j^r*pXq7|7DYGii>g^oC0-lY9*YSm z&vRZ?Hu|vTf*l{YR=K!rNkg*5%KHVG$_(DaA<%z=b~q6ym)4ThhwjN)(<_2e*DZww zT@Xj!{jxWEO56j>7iRE==?|F~gh^UGZIAo5tH!5=C_CL~!nBqM~ZR#9uI5=)!C6?aX#^hp=-3E~vM0pym~hi#s&v{TG~ZLOB~ z2g3On8L{#oiSCn>b_K}?3X;zRHgfHhP>HF<^ZU~<=-YN>tz|#94J~lyJArGz-YU&y z3&M(J-+r*G0AnnwOPF;hDCqDE>+POqK~|CH4su)3Vd^RIZVsk&P6b^N*rA-y{S5 z?EasGr<6Jdni`kR-MQx?Z{o1u1zIBXMF*%>cIk_a6z0`~_yc+di)OeL;m+6*S*}5o zH;s;j+y*4Kg{VKWSu@uqMf`l@_4bL&E0(rZkO=+5e|XGz3W&CJ+WAcU%;C2&NXjz1 zkiobE0{XL6a&LC=Ryk|RpYcIYZQ4sBc1XK%d3ljmoY_8;h+WsL?ihFS7W zr0V#;lmMnv7+Ai-N|_K}hI3XLp;Eu~b=D7`9hK04e@l6iKZ?odA;mVJ^3(__Py2xA z8583>w=c6f^gg~PT`$qzH#{!u${IaVDJvuk~IHf<0&8%sdFwRG6pKp;U2Fyh% zAnynXW|Eo95bFxgQ1KOxek9~_KnaXVGiXbMQK1UTN0JcY!<9VGnwh)@JZWc~^LzYc zL&xh^*Cs0wXqSlN#=BZz0U(C$h~9pVCBnA`7rFcVC)IinPb@3e_Y@0+QGz5Ky?;ss zz?31!DKL+DW8+7m_LsD2_S-mo(~jfX<{xiymH%~OVCv^hERDiijuA9|bBh+T6a=op zQV59!;9P_c8fD>^TZ0D@$>$m#`G;sOCX5jeUP;7&T7i+C^P}g|s%7a)?Sd_l|7UNu zM3A|U6(KTr{@=A6XB}}zYFvVC|NNbB=sl}$Nz3CYYyj**foY{y0;pzi1NtQ`5tc1d zhgo#@aS;}Ba3n63J^oxHbEq3Z^n7N08|%esyq%2_0_x$|Q5Hn0zHli78x8hyb|@02IkhMd_bmF%aZp^5{ zCNte>JJ+fit@u-00%!E}FO31TMjZGZ)rwV#aJ;u`^!;38x646a<+oBhT51PVb}aw3 zw!7c<-^FfkU$y&)2?l(ylT2FdfDDR$={j37+!^upw5AG+&7BDs9qigW;QoU>@l>|+ zu7KyCzxlZ8#iT?cs$N#^C8YMe;b7J|7>v`&=8EK6A{_!Mft1q4PM182%-OM`fb|fd zMq(db4`Lsuih<6?!m9svJ}jdFy)Zx))I36rAh-Qjeh*@1`U&2>qp9l?#{Jc&J(=^W zOJ}%Td(M2;{_F#`2U;Anz?z&R1h7XiE2Pg_`v+14vqHgYfD|!ih5p;` zU=nRwFe+-Xw)}a#3i@hF`HJ=9R->0Tz;TH1*w$$s7pye;Qa>zWF}ql{q2X}!Bk-X> z9EavfJCdkOuT}m>z#j?SC!)0!KD}*^;Q}!N7igRN;^Ahq8RHJ^J}gXiS-*Hz$H}j9 z6bcT2H`*Cel`^~t4oDZSdI`p8F~166B5bZYFSS$Ltho7iVyXM=0uLEwEn1TS(0tffW_X7*`n{i|InpWc8*rSyU%PLr$~#pG!0m;YCwZezDqt`o@~2hW zpmx%wO!@BU=}maD@|7J=B8Mq+pGLe*yJ@LaZM&8_n(2m2O@l8Ln#gl1DC_47aIs&s zlj=vFYrK;lLJzvGAa*1*^B)%%SE)U0nAk?rI z_}pFy3qTp@*dcS%itUpG$NyfQ?ajTl^Le~I{KI1VgT+P{DNvlHO%+nWe2?F97hJqU z#(oS*E>)5x%V6Sd+kZvxd*4&zZv(t`H+z>CUQss_V3frTck6!L33mnCm>TBsiP+Yy zkqFGS-rBg<98>kwQEaS1_cxgS^9zi21vI{~Mcke8+4cW?3dX6ei74Dv!I$D!QjczIhSFKo}Qs_{K&ekf+DRfID1^6SJ1V$Pmop3KoX@ua0o6gjqtxs#_-(DAkc zTZi0RL!Hl`*YF(Nxo6aRtmHVh^>LSHW~=hu5KR!m4`|mcGsg!1 z1kmz$t8{X`*cP*WGxN-KnvjNhZo3l0)`piB?X>nSFb-F6IdT zM7XE+Mrg$(NrIPQu<-iYN&tH2o(M<`cuvRfJDPkz98DAr*WK&+2Ff7Ph|mY2_upoRc6aSQNH%g%}}vs5B;Y00b0vlEGz zTf;+U&ze%zgVESS5%9^Y>_4gritc)!$ zgE2wli6@haJo)KI(9;h$N%V#1kRnJ~RJtM4TfRc%*LrMO%o8v{J4-2?^o!ukwM)x9 zCym-?tNGj%UkO!Z!gLy#)_qv<e=SAju}pKxsxk(NcN5+u9glCwBHW~%Yr21AIKC> zgxvaFRso8xwr;BCG2oe5AY4JY5FlrB-)QTvMO3!^^bWy}MRnx#1 zF%xT%Yh?hwVw(NRUL<1GbodoW$>>)X_O!?w@k;oO_pf1vjLiZdRoPt$=c7-)HwHiD zaDEZn`L}qk<6)Jv+tL&0WG@vk9u3Sswhg(kOcb)z>>I`_lXbxpy%nB9D?b$K^B6E8 ztszudek?fb1IGIR{f}IqRNopj4aS~q5Nqr9K9G!;MJ2ekmohNpKlc`Zdh4wH})Hh68pRMewb0s?40v`{F|u6bVu;1N6`u3x*3% z=Vn|Zfp%51u9*pUc4JojdB(@-;hfhXCXhCzDeH1dQy_()O#4YeMBM?->I2wEX)reg zO%!2m*)sm&4KX2iivz|t;CCLW;oAiIvIHJMi`g&?Ynt2R%2XFC{;61Ta7JUmIHPsR zg3`&;KqAhQdHz3p+do-LGF^~iC*X4Hn%_rnoS0wxsTJk&`OILqsd#xkuEe$C#rZ>8 zi|$n{j4hhE{QY>PSSj7ka_idL{SgJTJ=-y%fEhH^~}FNE#h+&pSS)jxl+-~^ueYzVHyda zc6im&k3GOu<+|6`OL(1KErCpfKv(;;-(b;`xzgLkNp^WJC-{Rj2%1B}B0TI;%Kw`k z;^~nr`Qq}7-s&8qgq-{3an{79cA2P$944b<KFosR`hMt_p5TCuil zYUtW8gk5@*yhQeu&=yN8_(~=gGoz(edq*@?V-V;>b&D@#wV&xn4d#Bxyq1TKL@O~c z*Dp^P(BgI$*PO!Z@w6Z}s_YZoS1zS@z33T}+hhQ8uR* zcGpz6-pi^t;&VA(MSbW3QRu503y=z^AKl!@)S9Brrj92~5n;@txR>UpO47dh-&QfB zql&v8iqwMzv9>J`uc;FHgjrKBf-g;on;R{J&EOel{iuFsV(V_D?pMC+8){(IToX>S zyF+g)b1VsDhf9qgk9hWY|MQc2_U!+p8*1>A8tLYuvfSglXQ+Pj2aRk$xWdT=9=tlu z-di7xns?-)jK*eER|t!`)$AGb)2fnW9 sj{P!cGM7h`w~973xX>!MlKHIQ&}Ij* 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ⅇ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%0Akwo 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%0AxY?GudpG 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 PQ9= 2: + try: + q_total = float(row.get(qty_col, 0) or 0) + except Exception: + q_total = 0 + if q_total > 0: + n = len(parts) + base = int(q_total) // n if q_total.is_integer() else q_total / n + remainder = int(q_total) % n if q_total.is_integer() else 0 + for i, bc in enumerate(parts): + new_row = row.copy() + new_row[bc_col] = bc + q_each = base + (1 if remainder > 0 and i < remainder else 0) + new_row[qty_col] = q_each + if up_col and amt_col: + try: + upv = float(new_row.get(up_col, 0) or 0) + new_row[amt_col] = upv * float(q_each) + except Exception: + pass + rows.append(new_row) + else: + # 无法分配数量,保留原行 + rows.append(row) + else: + rows.append(row) + else: + rows.append(row) + df2 = pd.DataFrame(rows) + except Exception: + pass base = os.path.basename(src_path) inter_name = f"蓉城易购_处理后_{base}" inter_path = os.path.join(out_dir, inter_name) @@ -1654,6 +1764,10 @@ def process_rongcheng_yigou_with_status(log_widget, status_bar): if result: add_to_log(log_widget, "Excel普通处理完成\n", "success") add_recent_file(result) + try: + validate_unit_price_against_item_data(result, log_widget) + except Exception: + pass open_result_directory_from_settings() reporter.set("处理完成", 100) else: @@ -1719,6 +1833,10 @@ def process_excel_file_with_status(log_widget, status_bar): add_recent_file(result) except Exception: pass + try: + validate_unit_price_against_item_data(result, log_widget) + except Exception: + pass pass else: add_to_log(log_widget, "Excel文件处理失败\n", "error") @@ -1762,7 +1880,12 @@ def main(): settings = load_user_settings() global THEME_MODE THEME_MODE = settings.get('theme_mode', THEME_MODE) - root.title("益选-OCR订单处理系统 by 欢欢欢") + try: + cfg_for_title = ConfigManager() + ver = cfg_for_title.get('App','version', fallback='dev') + root.title(f"益选-OCR订单处理系统 v{ver} by 欢欢欢") + except Exception: + root.title("益选-OCR订单处理系统 by 欢欢欢") default_size = settings.get('window_size', "900x600") root.geometry("900x600") settings['window_size'] = "900x600" @@ -2043,7 +2166,7 @@ def main(): create_modern_button( core_row1, "单个识别", - lambda: open_input_directory_from_settings(), + lambda: process_single_image_with_status(log_text, status_bar), "primary", px_width=72, px_height=32 @@ -2128,6 +2251,7 @@ def main(): px_width=72, px_height=32 ).pack(side=tk.LEFT, padx=(3, 0)) + # 列映射向导与模板管理入口已移至右侧系统设置区 # 工具功能区 tools_section = tk.LabelFrame( @@ -2245,6 +2369,228 @@ def main(): + def open_validation_panel(log_widget): + try: + import json + import pandas as pd + import xlrd + dlg = tk.Toplevel() + dlg.title("验证匹配") + dlg.geometry("900x680") + center_window(dlg) + try: + dlg.lift() + dlg.attributes('-topmost', True) + dlg.after(200, lambda: dlg.attributes('-topmost', False)) + dlg.focus_force() + except Exception: + pass + outer = ttk.Frame(dlg) + outer.pack(fill=tk.BOTH, expand=True) + canvas = tk.Canvas(outer) + vsb = ttk.Scrollbar(outer, orient='vertical', command=canvas.yview) + canvas.configure(yscrollcommand=vsb.set) + canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + vsb.pack(side=tk.RIGHT, fill=tk.Y) + frame = ttk.Frame(canvas) + canvas.create_window((0,0), window=frame, anchor='nw') + frame.bind("", lambda e: canvas.configure(scrollregion=canvas.bbox("all"))) + cfg_path = os.path.join("config","suppliers_config.json") + suppliers = [] + data_cfg = {"suppliers": []} + try: + if os.path.exists(cfg_path): + with open(cfg_path,'r',encoding='utf-8') as f: + data_cfg = json.load(f) + suppliers = [s.get('name','') for s in data_cfg.get('suppliers',[])] + except Exception: + pass + row1 = ttk.Frame(frame) + row1.pack(fill=tk.X, pady=6) + ttk.Label(row1, text="供应商").pack(side=tk.LEFT) + sup_var = tk.StringVar() + ttk.Combobox(row1, textvariable=sup_var, state='readonly', values=suppliers).pack(side=tk.LEFT, padx=6) + row2 = ttk.Frame(frame) + row2.pack(fill=tk.X, pady=6) + ttk.Label(row2, text="原始文件").pack(side=tk.LEFT) + orig_var = tk.StringVar() + ttk.Entry(row2, textvariable=orig_var).pack(side=tk.LEFT, fill=tk.X, expand=True, padx=6) + ttk.Button(row2, text="浏览", command=lambda: orig_var.set(filedialog.askopenfilename(title="选择原始Excel", filetypes=[("Excel","*.xlsx *.xls")]) or orig_var.get())).pack(side=tk.LEFT) + row3 = ttk.Frame(frame) + row3.pack(fill=tk.X, pady=6) + ttk.Label(row3, text="期望结果").pack(side=tk.LEFT) + expect_var = tk.StringVar() + ttk.Entry(row3, textvariable=expect_var).pack(side=tk.LEFT, fill=tk.X, expand=True, padx=6) + ttk.Button(row3, text="浏览", command=lambda: expect_var.set(filedialog.askopenfilename(title="选择期望结果", filetypes=[("Excel","*.xls *.xlsx")]) or expect_var.get())).pack(side=tk.LEFT) + act_row = ttk.Frame(frame) + act_row.pack(fill=tk.X, pady=8) + result_text = scrolledtext.ScrolledText(frame, height=6) + result_text.pack(fill=tk.BOTH, expand=True) + diff_box = ttk.Frame(frame) + diff_box.pack(fill=tk.BOTH, expand=True, pady=6) + diff_tree = ttk.Treeview(diff_box, show='headings', height=12) + diff_tree.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + diff_scroll_x = ttk.Scrollbar(frame, orient='horizontal', command=diff_tree.xview) + diff_tree.configure(xscrollcommand=diff_scroll_x.set) + diff_scroll_x.pack(fill=tk.X) + suggestions_cache = [] + def _read_df(path): + ap = os.path.abspath(path) + if ap.lower().endswith('.xlsx'): + return pd.read_excel(ap, engine='openpyxl') + else: + return pd.read_excel(ap, engine='xlrd') + def _run_validation(): + try: + import numpy as np + from app.services.order_service import OrderService + supplier = sup_var.get() + orig = orig_var.get().strip() + expect = expect_var.get().strip() + if not supplier or not orig or not expect: + messagebox.showwarning("提示","请选择供应商、原始文件与期望结果") + return + service = OrderService() + out_path = service.process_excel(orig, progress_cb=lambda p: None) + df_actual = _read_df(out_path) + df_expect = _read_df(expect) + keys = None + if 'barcode' in df_actual.columns and 'barcode' in df_expect.columns: + keys = 'barcode' + elif '条码' in df_actual.columns and '条码' in df_expect.columns: + keys = '条码' + elif 'name' in df_actual.columns and 'name' in df_expect.columns: + keys = 'name' + records = [] + mismatches = 0 + if keys: + a = df_actual.set_index(keys) + e = df_expect.set_index(keys) + idx_union = list(set(a.index.tolist()) | set(e.index.tolist())) + for k in idx_union: + ra = a.loc[k] if k in a.index else None + rexp = e.loc[k] if k in e.index else None + for f in ['barcode','name','specification','quantity','unit','unit_price','total_price']: + va = ra.get(f) if (ra is not None and f in a.columns) else None + ve = rexp.get(f) if (rexp is not None and f in e.columns) else None + if va is None and ve is None: + continue + def _norm(v): + try: + return float(v) + except Exception: + return str(v) if v is not None else '' + if _norm(va) != _norm(ve): + records.append([str(k), f, str(ve), str(va)]) + mismatches += 1 + else: + for i in range(min(len(df_actual), len(df_expect))): + for f in ['barcode','name','specification','quantity','unit','unit_price','total_price']: + va = df_actual.iloc[i].get(f) if f in df_actual.columns else None + ve = df_expect.iloc[i].get(f) if f in df_expect.columns else None + if va is None and ve is None: + continue + def _norm(v): + try: + return float(v) + except Exception: + return str(v) if v is not None else '' + if _norm(va) != _norm(ve): + records.append([str(i), f, str(ve), str(va)]) + mismatches += 1 + diff_tree['columns'] = ['key','field','expected','actual'] + for c in ['key','field','expected','actual']: + diff_tree.heading(c, text=c) + diff_tree.column(c, width=160, stretch=True) + for iid in diff_tree.get_children(): + diff_tree.delete(iid) + for row in records: + diff_tree.insert('', tk.END, values=row) + result_text.configure(state=tk.NORMAL) + result_text.delete(1.0, tk.END) + result_text.insert(tk.END, f"差异条目: {mismatches}\n") + suggestions = [] + try: + unit_vals = df_actual.get('unit') if 'unit' in df_actual.columns else pd.Series([]) + bad_units = unit_vals.astype(str).isin(['箱','件','提','盒']).sum() + if bad_units > 0: + suggestions.append({"type":"normalize_unit","target":"unit","map":{"箱":"件","提":"件","盒":"件"}}) + except Exception: + pass + try: + qty = pd.to_numeric(df_actual.get('quantity'), errors='coerce') if 'quantity' in df_actual.columns else pd.Series([]) + missing_qty = int(qty.isna().sum()) if not qty.empty else 0 + if missing_qty > 0: + cols = df_actual.columns.tolist() + src = None + for cand in ['订单数量','订购量','订货数量']: + if cand in cols: + src = cand + break + if src: + suggestions.append({"type":"split_quantity_unit","source":src}) + except Exception: + pass + try: + spec = df_actual.get('specification') if 'specification' in df_actual.columns else pd.Series([]) + missing_spec = int(spec.isna().sum()) if not spec.empty else 0 + if missing_spec > 0: + suggestions.append({"type":"extract_spec_from_name","source":"name"}) + except Exception: + pass + try: + up = pd.to_numeric(df_actual.get('unit_price'), errors='coerce').fillna(0) if 'unit_price' in df_actual.columns else pd.Series([]) + tp = pd.to_numeric(df_actual.get('total_price'), errors='coerce').fillna(0) if 'total_price' in df_actual.columns else pd.Series([]) + qty = pd.to_numeric(df_actual.get('quantity'), errors='coerce').fillna(np.nan) if 'quantity' in df_actual.columns else pd.Series([]) + if not qty.empty and not up.empty and not tp.empty: + need_compute = ((qty.isna()) & (up > 0) & (tp > 0)).sum() + if need_compute > 0: + suggestions.append({"type":"compute_quantity_from_total"}) + except Exception: + pass + suggestions_cache.clear() + suggestions_cache.extend(suggestions) + if suggestions: + result_text.insert(tk.END, f"建议: {json.dumps(suggestions, ensure_ascii=False)}\n") + result_text.configure(state=tk.DISABLED) + except Exception as e: + messagebox.showerror("验证失败", str(e)) + def _apply_suggestions(): + try: + supplier = sup_var.get() + if not supplier: + return + if os.path.exists(cfg_path): + with open(cfg_path,'r',encoding='utf-8') as f: + data = json.load(f) + for s in data.get('suppliers',[]): + if s.get('name') == supplier: + rules = s.get('rules', []) + for sug in suggestions_cache: + exists = any(r.get('type') == sug.get('type') for r in rules) + if not exists: + rules.append(sug) + s['rules'] = rules + d = s.get('dictionary') or {} + d.setdefault('unit_synonyms', {"箱":"件","提":"件","盒":"件","瓶":"瓶"}) + d.setdefault('pack_multipliers', {"件":24,"箱":24,"提":12,"盒":10}) + s['dictionary'] = d + break + with open(cfg_path,'w',encoding='utf-8') as f: + json.dump(data,f,ensure_ascii=False,indent=2) + result_text.configure(state=tk.NORMAL) + result_text.insert(tk.END, "已应用建议并保存配置\n") + result_text.configure(state=tk.DISABLED) + else: + messagebox.showwarning("提示","配置文件不存在") + except Exception as e: + messagebox.showerror("应用失败", str(e)) + ttk.Button(act_row, text="运行验证", command=_run_validation).pack(side=tk.LEFT) + ttk.Button(act_row, text="应用建议", command=_apply_suggestions).pack(side=tk.LEFT, padx=6) + ttk.Button(act_row, text="关闭", command=dlg.destroy).pack(side=tk.RIGHT) + except Exception as e: + messagebox.showerror("验证匹配错误", str(e)) + # 系统设置区 settings_section = tk.LabelFrame( right_panel_content, @@ -2262,6 +2608,10 @@ def main(): create_modern_button(settings_buttons_frame, "系统设置", lambda: show_config_dialog(root, ConfigManager()), "primary", px_width=132, px_height=32).pack(anchor='w', pady=3) create_modern_button(settings_buttons_frame, "条码映射", lambda: edit_barcode_mappings(log_text), "primary", px_width=132, px_height=32).pack(anchor='w', pady=3) create_modern_button(settings_buttons_frame, "支持类型", lambda: show_supported_processors(log_text), "primary", px_width=132, px_height=32).pack(anchor='w', pady=3) + create_modern_button(settings_buttons_frame, "列映射向导", lambda: open_column_mapping_wizard_alt(log_text), "primary", px_width=132, px_height=32).pack(anchor='w', pady=3) + create_modern_button(settings_buttons_frame, "供应商管理", lambda: open_supplier_manager(log_text), "primary", px_width=132, px_height=32).pack(anchor='w', pady=3) + create_modern_button(settings_buttons_frame, "模板管理", lambda: open_template_manager(log_text), "primary", px_width=132, px_height=32).pack(anchor='w', pady=3) + create_modern_button(settings_buttons_frame, "验证匹配", lambda: open_validation_panel(log_text), "primary", px_width=132, px_height=32).pack(anchor='w', pady=3) @@ -2351,6 +2701,10 @@ def process_dropped_file(log_widget, status_bar, file_path): if result: add_to_log(log_widget, "Excel文件处理完成\n", "success") add_recent_file(result) + try: + validate_unit_price_against_item_data(result, log_widget) + except Exception: + pass else: add_to_log(log_widget, "Excel文件处理失败\n", "error") finally: @@ -2372,6 +2726,62 @@ def select_excel_file(log_widget): "选择Excel文件" ) +def validate_unit_price_against_item_data(result_path: str, log_widget=None): + try: + import pandas as pd + import os + def _read_df(path): + ap = os.path.abspath(path) + if ap.lower().endswith('.xlsx'): + return pd.read_excel(ap, engine='openpyxl') + else: + return pd.read_excel(ap, engine='xlrd') + item_path = os.path.join('templates', '商品资料.xlsx') + if not os.path.exists(item_path): + return + df_item = _read_df(item_path) + df_res = _read_df(result_path) + def _find_col(df, candidates, contains=None): + cols = list(df.columns) + for c in candidates: + if c in cols: + return c + if contains: + for c in cols: + if contains in str(c): + return c + return None + item_barcode_col = _find_col(df_item, ['商品条码','商品条码(小条码)','条码','barcode'], contains='条码') + item_price_col = _find_col(df_item, ['进货价','进货价(必填)'], contains='进货价') + res_barcode_col = _find_col(df_res, ['条码','barcode'], contains='条码') + res_price_col = _find_col(df_res, ['采购单价','unit_price','单价'], contains='单价') + if not all([item_barcode_col, item_price_col, res_barcode_col, res_price_col]): + return + item_map = df_item[[item_barcode_col, item_price_col]].dropna() + item_map[item_price_col] = pd.to_numeric(item_map[item_price_col], errors='coerce') + item_map = item_map.dropna() + imap = dict(zip(item_map[item_barcode_col].astype(str).str.strip(), item_map[item_price_col])) + df_res['_bc_'] = df_res[res_barcode_col].astype(str).str.strip() + df_res['_res_price_'] = pd.to_numeric(df_res[res_price_col], errors='coerce') + df_res['_item_price_'] = df_res['_bc_'].map(imap) + df_check = df_res.dropna(subset=['_res_price_','_item_price_']) + df_check['_diff_'] = (df_check['_res_price_'] - df_check['_item_price_']).abs() + bad = df_check[df_check['_diff_'] > 1.0] + if not bad.empty: + lines = [] + for i in range(min(len(bad), 10)): + r = bad.iloc[i] + lines.append(f"条码 {r['_bc_']}: 采购单价={r['_res_price_']} vs 进货价={r['_item_price_']} 差异={r['_diff_']:.2f}") + import tkinter.messagebox as mb + mb.showwarning("单价校验提示", f"存在{len(bad)}条单价与商品资料进货价差异超过1元:\n" + "\n".join(lines)) + if log_widget is not None: + add_to_log(log_widget, f"单价校验发现{len(bad)}条差异>1元\n", "warning") + else: + if log_widget is not None: + add_to_log(log_widget, "单价校验通过(差异<=1元)\n", "success") + except Exception: + pass + def clean_cache(log_widget): """清除处理缓存""" try: @@ -2488,6 +2898,1308 @@ def show_supported_processors(log_widget): except Exception as e: add_to_log(log_widget, f"显示处理器类型出错: {str(e)}\n", "error") +def safe_open_validation_panel(log_widget): + try: + if 'open_validation_panel' in globals() and callable(globals()['open_validation_panel']): + return globals()['open_validation_panel'](log_widget) + else: + messagebox.showwarning("提示", "验证面板功能尚未加载,请重启程序后重试") + except Exception as e: + messagebox.showerror("错误", str(e)) + +def open_supplier_manager(log_widget): + try: + import json + dlg = tk.Toplevel() + dlg.title("供应商管理") + dlg.geometry("900x700") + center_window(dlg) + try: + dlg.lift() + dlg.attributes('-topmost', True) + dlg.after(200, lambda: dlg.attributes('-topmost', False)) + dlg.focus_force() + except Exception: + pass + cfg_path = os.path.join("config","suppliers_config.json") + data = {"suppliers": []} + if os.path.exists(cfg_path): + with open(cfg_path,'r',encoding='utf-8') as f: + data = json.load(f) + outer = ttk.Frame(dlg) + outer.pack(fill=tk.BOTH, expand=True) + canvas = tk.Canvas(outer) + vsb = ttk.Scrollbar(outer, orient='vertical', command=canvas.yview) + canvas.configure(yscrollcommand=vsb.set) + canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + vsb.pack(side=tk.RIGHT, fill=tk.Y) + container = ttk.Frame(canvas) + canvas.create_window((0,0), window=container, anchor='nw') + def _on_container_config(evt): + try: + canvas.configure(scrollregion=canvas.bbox("all")) + except Exception: + pass + container.bind("", _on_container_config) + def _on_mousewheel(event): + try: + delta = -1 * int(event.delta / 120) + canvas.yview_scroll(delta, "units") + except Exception: + pass + dlg.bind("", _on_mousewheel) + # inner padding + inner = ttk.Frame(container) + inner.pack(fill=tk.BOTH, expand=True, padx=12, pady=12) + container = inner + container.columnconfigure(0, weight=1) + container.columnconfigure(1, weight=3) + left = ttk.Frame(container) + left.grid(row=0, column=0, sticky='nsew', padx=(0,8)) + right = ttk.Frame(container) + right.grid(row=0, column=1, sticky='nsew') + sup_list = tk.Listbox(left, height=20) + sup_list.pack(fill=tk.BOTH, expand=True) + btns = ttk.Frame(left) + btns.pack(fill=tk.X, pady=6) + def refresh_list(selected_idx=0): + sup_list.delete(0, tk.END) + for s in data.get('suppliers',[]): + sup_list.insert(tk.END, s.get('name','')) + try: + sup_list.select_clear(0, tk.END) + sup_list.select_set(selected_idx) + except Exception: + pass + def new_supplier(): + data.setdefault('suppliers', []).append({ + 'name': '新供应商', + 'description': '', + 'filename_patterns': [], + 'content_indicators': [], + 'column_mapping': {}, + 'header_row': 0, + 'rules': [], + 'dictionary': { + 'ignore_words': [], + 'unit_synonyms': {}, + 'pack_multipliers': {}, + 'name_patterns': [], + 'default_unit': '瓶', + 'default_package_quantity': 1 + }, + 'output_templates': ['templates/银豹-采购单模板.xls'], + 'current_template_index': 0 + }) + refresh_list(len(data['suppliers'])-1) + load_selected() + def copy_supplier(): + sel = sup_list.curselection() + if not sel: + return + idx = sel[0] + import copy + src = data['suppliers'][idx] + cp = copy.deepcopy(src) + cp['name'] = src.get('name','') + '_副本' + data['suppliers'].append(cp) + refresh_list(len(data['suppliers'])-1) + def delete_supplier(): + sel = sup_list.curselection() + if not sel: + return + idx = sel[0] + if 0 <= idx < len(data['suppliers']): + del data['suppliers'][idx] + refresh_list(max(0, idx-1)) + ttk.Button(btns, text="新建", command=new_supplier).pack(side=tk.LEFT) + ttk.Button(btns, text="复制", command=copy_supplier).pack(side=tk.LEFT, padx=6) + ttk.Button(btns, text="删除", command=delete_supplier).pack(side=tk.LEFT) + nb = ttk.Notebook(right) + nb.pack(fill=tk.BOTH, expand=True) + basic_tab = ttk.Frame(nb) + map_tab = ttk.Frame(nb) + rule_tab = ttk.Frame(nb) + tpl_tab = ttk.Frame(nb) + nb.add(basic_tab, text="基本信息") + nb.add(map_tab, text="列映射与表头") + nb.add(rule_tab, text="规则与词典") + nb.add(tpl_tab, text="模板管理") + name_var = tk.StringVar() + desc_var = tk.StringVar() + header_row_var = tk.StringVar() + ttk.Label(basic_tab, text="名称").pack(anchor='w') + ttk.Entry(basic_tab, textvariable=name_var).pack(fill=tk.X, pady=4) + ttk.Label(basic_tab, text="描述").pack(anchor='w') + ttk.Entry(basic_tab, textvariable=desc_var).pack(fill=tk.X, pady=4) + ttk.Label(basic_tab, text="文件名模式(每行一条)").pack(anchor='w') + fp_text = scrolledtext.ScrolledText(basic_tab, height=4) + fp_text.pack(fill=tk.BOTH, pady=4) + ttk.Label(basic_tab, text="内容指示词(每行一条)").pack(anchor='w') + ci_text = scrolledtext.ScrolledText(basic_tab, height=4) + ci_text.pack(fill=tk.BOTH, pady=4) + ttk.Label(basic_tab, text="表头行号(从1开始)").pack(anchor='w') + ttk.Entry(basic_tab, textvariable=header_row_var).pack(fill=tk.X, pady=4) + ttk.Button(map_tab, text="打开列映射向导", command=lambda: open_column_mapping_wizard_alt(log_widget, name_var.get())).pack(anchor='w', pady=6) + ttk.Label(rule_tab, text="忽略词(每行一条)").pack(anchor='w') + ignore_words_text = scrolledtext.ScrolledText(rule_tab, height=4) + ignore_words_text.pack(fill=tk.BOTH, pady=4) + ttk.Label(rule_tab, text="单位同义词(JSON)").pack(anchor='w') + unit_synonyms_var = tk.StringVar(value='{}') + ttk.Entry(rule_tab, textvariable=unit_synonyms_var).pack(fill=tk.X, pady=4) + ttk.Label(rule_tab, text="包装倍数(JSON)").pack(anchor='w') + pack_multipliers_var = tk.StringVar(value='{}') + ttk.Entry(rule_tab, textvariable=pack_multipliers_var).pack(fill=tk.X, pady=4) + ttk.Label(rule_tab, text="名称正则(每行一条)").pack(anchor='w') + name_patterns_text = scrolledtext.ScrolledText(rule_tab, height=4) + name_patterns_text.pack(fill=tk.BOTH, pady=4) + ttk.Label(rule_tab, text="默认单位").pack(anchor='w') + default_unit_var = tk.StringVar(value='瓶') + ttk.Entry(rule_tab, textvariable=default_unit_var).pack(fill=tk.X, pady=4) + ttk.Label(rule_tab, text="默认包装数量").pack(anchor='w') + default_pq_var = tk.StringVar(value='1') + ttk.Entry(rule_tab, textvariable=default_pq_var).pack(fill=tk.X, pady=4) + ttk.Label(rule_tab, text="规则预设").pack(anchor='w') + rule_preset_var = tk.StringVar() + rule_presets = { + "基础拆分与推断": [ + {"type": "split_quantity_unit", "source": "quantity"}, + {"type": "extract_spec_from_name", "source": "name"}, + {"type": "normalize_unit", "target": "unit", "map": {"箱": "件", "提": "件", "盒": "件"}}, + {"type": "compute_quantity_from_total"}, + {"type": "mark_gift"}, + {"type": "fill_missing", "fills": {"unit": "瓶"}} + ] + } + ttk.Combobox(rule_tab, textvariable=rule_preset_var, state='readonly', values=list(rule_presets.keys())).pack(fill=tk.X, pady=4) + rule_file_row = ttk.Frame(rule_tab) + rule_file_row.pack(fill=tk.X, pady=6) + ttk.Label(rule_file_row, text="选择Excel").pack(side=tk.LEFT) + rule_excel_var = tk.StringVar() + ttk.Entry(rule_file_row, textvariable=rule_excel_var).pack(side=tk.LEFT, fill=tk.X, expand=True, padx=6) + def _browse_rule_excel(): + p = filedialog.askopenfilename(title="选择Excel文件", filetypes=[("Excel","*.xlsx *.xls")]) + if p: + rule_excel_var.set(p) + ttk.Button(rule_file_row, text="浏览", command=_browse_rule_excel).pack(side=tk.LEFT) + # 加载列供来源/目标下拉选择 + rule_available_columns = [] + def _load_rule_columns(): + try: + import pandas as pd + p = rule_excel_var.get().strip() + if not p: + messagebox.showwarning("提示","请先选择Excel文件") + return + idx = None + try: + v = header_row_var.get().strip() + if v: + n = int(v) + if n > 0: + idx = n - 1 + except Exception: + pass + df = pd.read_excel(p, engine='openpyxl' if p.lower().endswith('.xlsx') else 'xlrd', header=idx if idx is not None else 0, nrows=5) + cols = [str(c) for c in list(df.columns)] + rule_available_columns.clear() + rule_available_columns.extend(cols) + messagebox.showinfo("成功", f"已加载列: {', '.join(cols)}") + _refresh_rule_params() + except Exception as e: + messagebox.showerror("加载失败", str(e)) + ttk.Button(rule_file_row, text="加载列", command=_load_rule_columns).pack(side=tk.LEFT, padx=6) + rule_preview_box = ttk.Frame(rule_tab) + rule_preview_box.pack(fill=tk.BOTH, expand=True, pady=6) + rule_left_tree = ttk.Treeview(rule_preview_box, show='headings', height=8) + rule_right_tree = ttk.Treeview(rule_preview_box, show='headings', height=8) + rule_left_tree.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + rule_right_tree.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + rule_scroll_x_row = ttk.Frame(rule_tab) + rule_scroll_x_row.pack(fill=tk.X) + rule_left_scroll_x = ttk.Scrollbar(rule_scroll_x_row, orient='horizontal', command=rule_left_tree.xview) + rule_right_scroll_x = ttk.Scrollbar(rule_scroll_x_row, orient='horizontal', command=rule_right_tree.xview) + rule_left_tree.configure(xscrollcommand=rule_left_scroll_x.set) + rule_right_tree.configure(xscrollcommand=rule_right_scroll_x.set) + rule_left_scroll_x.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=(0,3)) + rule_right_scroll_x.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=(3,0)) + rule_step_row = ttk.Frame(rule_tab) + rule_step_row.pack(fill=tk.X, pady=6) + ttk.Label(rule_step_row, text="预览步骤").pack(side=tk.LEFT) + rule_step_var = tk.StringVar() + rule_step_cb = ttk.Combobox(rule_step_row, textvariable=rule_step_var, state='readonly') + rule_step_cb.pack(side=tk.LEFT, padx=6) + diff_mode_var = tk.BooleanVar(value=False) + ttk.Checkbutton(rule_step_row, text="仅显示变化列", variable=diff_mode_var).pack(side=tk.LEFT, padx=6) + err_label = ttk.Label(rule_step_row, text="错误计数: -") + err_label.pack(side=tk.LEFT, padx=12) + rule_step_box = ttk.Frame(rule_tab) + rule_step_box.pack(fill=tk.BOTH, expand=True, pady=6) + rule_step_tree = ttk.Treeview(rule_step_box, show='headings', height=8) + rule_step_tree.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + rule_step_scroll_x = ttk.Scrollbar(rule_tab, orient='horizontal', command=rule_step_tree.xview) + rule_step_tree.configure(xscrollcommand=rule_step_scroll_x.set) + rule_step_scroll_x.pack(fill=tk.X) + def _build_rule_preview(): + try: + import pandas as pd + from app.core.handlers.rule_engine import apply_rules + p = rule_excel_var.get().strip() + if not p: + return + idx = None + try: + v = header_row_var.get().strip() + if v: + n = int(v) + if n > 0: + idx = n - 1 + except Exception: + pass + df = pd.read_excel(p, engine='openpyxl' if p.lower().endswith('.xlsx') else 'xlrd', header=idx if idx is not None else 0, nrows=50) + sel = sup_list.curselection() + cm = {} + rules_cur = [] + if sel: + s = data['suppliers'][sel[0]] + cm = s.get('column_mapping', {}) + rules_cur = s.get('rules', []) + rename_map = cm + df0 = df.rename(columns=rename_map) + dictionary = { + 'ignore_words': [w.strip() for w in ignore_words_text.get(1.0, tk.END).splitlines() if w.strip()], + 'unit_synonyms': json.loads(unit_synonyms_var.get() or '{}'), + 'pack_multipliers': json.loads(pack_multipliers_var.get() or '{}'), + 'name_patterns': [w.strip() for w in name_patterns_text.get(1.0, tk.END).splitlines() if w.strip()], + 'default_unit': default_unit_var.get().strip() or '瓶', + 'default_package_quantity': int(default_pq_var.get() or '1') + } + rules_use = rule_presets.get(rule_preset_var.get(), rules_cur or rule_presets["基础拆分与推断"]) + df1 = apply_rules(df0, rules_use, dictionary) + lcols = list(df0.columns) + rcols = list(df1.columns) + rule_left_tree['columns'] = lcols + rule_right_tree['columns'] = rcols + for c in lcols: + rule_left_tree.heading(c, text=c) + rule_left_tree.column(c, width=120, stretch=True) + for c in rcols: + rule_right_tree.heading(c, text=c) + rule_right_tree.column(c, width=120, stretch=True) + for iid in rule_left_tree.get_children(): + rule_left_tree.delete(iid) + for iid in rule_right_tree.get_children(): + rule_right_tree.delete(iid) + # Diff模式:仅显示变化列 + if diff_mode_var.get(): + changed_cols = [] + for c in set(lcols).intersection(set(rcols)): + try: + if not df0[c].equals(df1[c]): + changed_cols.append(c) + except Exception: + pass + lshow = [c for c in lcols if c in changed_cols] + rshow = [c for c in rcols if c in changed_cols] + rule_left_tree['columns'] = lshow + rule_right_tree['columns'] = rshow + for c in lshow: + rule_left_tree.heading(c, text=c) + rule_left_tree.column(c, width=120, stretch=True) + for c in rshow: + rule_right_tree.heading(c, text=c) + rule_right_tree.column(c, width=120, stretch=True) + for i in range(len(df0)): + rule_left_tree.insert('', tk.END, values=[str(df0.iloc[i].get(c, '')) for c in lshow]) + for i in range(len(df1)): + rule_right_tree.insert('', tk.END, values=[str(df1.iloc[i].get(c, '')) for c in rshow]) + else: + for i in range(len(df0)): + rule_left_tree.insert('', tk.END, values=[str(df0.iloc[i].get(c, '')) for c in lcols]) + for i in range(len(df1)): + rule_right_tree.insert('', tk.END, values=[str(df1.iloc[i].get(c, '')) for c in rcols]) + steps = [("原始", df0)] + cur = df0.copy() + for r in rules_use: + cur = apply_rules(cur, [r], dictionary) + steps.append((r.get('type','step'), cur.copy())) + rule_step_cb['values'] = [t for t,_ in steps] + if steps: + rule_step_var.set(steps[-1][0]) + _show_rule_step_df(steps[-1][1]) + def _on_rule_step_change(evt=None): + sel = rule_step_var.get() + for t, d in steps: + if t == sel: + _show_rule_step_df(d) + break + rule_step_cb.bind('<>', _on_rule_step_change) + rule_step_cb.event_generate('<>') + rule_step_row._steps_cache = steps + # 错误计数:统计缺失单位/规格、无法拆分数量 + try: + empty_unit = int(df1.get('unit').isna().sum()) if 'unit' in df1.columns else len(df1) + empty_qty = int(pd.to_numeric(df1.get('quantity'), errors='coerce').isna().sum()) if 'quantity' in df1.columns else len(df1) + empty_spec = int(df1.get('specification').isna().sum()) if 'specification' in df1.columns else len(df1) + err_label.configure(text=f"错误计数: 单位缺失 {empty_unit},数量缺失 {empty_qty},规格缺失 {empty_spec}") + except Exception: + err_label.configure(text="错误计数: 统计失败") + except Exception as e: + messagebox.showerror("预览失败", str(e)) + def _show_rule_step_df(dfshow): + cols = list(dfshow.columns) + rule_step_tree['columns'] = cols + for c in cols: + rule_step_tree.heading(c, text=c) + rule_step_tree.column(c, width=120, stretch=True) + for iid in rule_step_tree.get_children(): + rule_step_tree.delete(iid) + for i in range(len(dfshow)): + rule_step_tree.insert('', tk.END, values=[str(dfshow.iloc[i].get(c, '')) for c in cols]) + def _export_rule_step_csv(): + try: + if not hasattr(rule_step_row, '_steps_cache'): + return + sel = rule_step_var.get() + for t, d in rule_step_row._steps_cache: + if t == sel: + save_path = filedialog.asksaveasfilename(title="导出预览为CSV", defaultextension=".csv", filetypes=[("CSV","*.csv")]) + if save_path: + d.to_csv(save_path, index=False, encoding='utf-8-sig') + messagebox.showinfo("成功","已导出CSV") + break + except Exception as e: + messagebox.showerror("导出失败", str(e)) + ttk.Button(rule_step_row, text="生成步骤预览", command=_build_rule_preview).pack(side=tk.LEFT, padx=6) + ttk.Button(rule_step_row, text="导出预览CSV", command=_export_rule_step_csv).pack(side=tk.LEFT, padx=6) + + # 规则列表编辑器 + rules_frame = ttk.LabelFrame(rule_tab, text="规则列表") + rules_frame.pack(fill=tk.BOTH, expand=True, pady=6) + rules_list = tk.Listbox(rules_frame, height=8) + rules_list.pack(fill=tk.BOTH, expand=True) + rules_btns = ttk.Frame(rules_frame) + rules_btns.pack(fill=tk.X, pady=4) + RULE_TYPES = { + 'split_quantity_unit': {'label': '拆分数量单位', 'params': [('source','quantity')]}, + 'extract_spec_from_name': {'label': '名称提取规格', 'params': [('source','name')]}, + 'normalize_unit': {'label': '单位归一', 'params': [('target','unit'), ('map','{"箱":"件","提":"件","盒":"件"}')]}, + 'compute_quantity_from_total': {'label': '金额回推数量', 'params': []}, + 'fill_missing': {'label': '缺省填充', 'params': [('fills','{}')]}, + 'mark_gift': {'label': '标记赠品', 'params': []} + } + add_row = ttk.Frame(rules_btns) + add_row.pack(fill=tk.X) + new_rule_var = tk.StringVar() + ttk.Combobox(add_row, textvariable=new_rule_var, state='readonly', values=list(RULE_TYPES.keys())).pack(side=tk.LEFT) + def _add_rule(): + r = new_rule_var.get() + if not r: + return + rules_list.insert(tk.END, r) + new_rule_var.set('') + _refresh_rule_params() + ttk.Button(add_row, text="添加", command=_add_rule).pack(side=tk.LEFT, padx=6) + def _remove_rule(): + sel = rules_list.curselection() + if sel: + rules_list.delete(sel[0]) + _refresh_rule_params() + def _move_up(): + sel = rules_list.curselection() + if sel: + idx = sel[0] + if idx > 0: + val = rules_list.get(idx) + rules_list.delete(idx) + rules_list.insert(idx-1, val) + rules_list.select_set(idx-1) + _refresh_rule_params() + def _move_down(): + sel = rules_list.curselection() + if sel: + idx = sel[0] + if idx < rules_list.size()-1: + val = rules_list.get(idx) + rules_list.delete(idx) + rules_list.insert(idx+1, val) + rules_list.select_set(idx+1) + _refresh_rule_params() + ttk.Button(rules_btns, text="删除", command=_remove_rule).pack(side=tk.LEFT, padx=6) + ttk.Button(rules_btns, text="上移", command=_move_up).pack(side=tk.LEFT, padx=6) + ttk.Button(rules_btns, text="下移", command=_move_down).pack(side=tk.LEFT, padx=6) + rule_params_frame = ttk.LabelFrame(rule_tab, text="规则参数") + rule_params_frame.pack(fill=tk.BOTH, expand=True, pady=6) + rule_param_vars = {} + def _refresh_rule_params(): + for w in rule_params_frame.winfo_children(): + w.destroy() + sel = rules_list.curselection() + if not sel: + return + rkey = rules_list.get(sel[0]) + spec = RULE_TYPES.get(rkey, {'params': []}) + row = ttk.Frame(rule_params_frame) + row.pack(fill=tk.X, pady=4) + rule_param_vars.clear() + for name, default in spec['params']: + r = ttk.Frame(rule_params_frame) + r.pack(fill=tk.X, pady=4) + ttk.Label(r, text=name).pack(side=tk.LEFT) + var = tk.StringVar(value=default) + # 对 source/target 提供下拉列选择 + if name in ('source','target'): + cb = ttk.Combobox(r, textvariable=var, state='readonly', values=rule_available_columns) + cb.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=6) + else: + ttk.Entry(r, textvariable=var).pack(side=tk.LEFT, fill=tk.X, expand=True, padx=6) + rule_param_vars[name] = var + def _build_rules_from_ui(): + rules = [] + for i in range(rules_list.size()): + rkey = rules_list.get(i) + spec = RULE_TYPES.get(rkey, {'params': []}) + rd = {'type': rkey} + # if selected, use edited params; else defaults + if rules_list.curselection() and rules_list.get(rules_list.curselection()[0]) == rkey: + for name, default in spec['params']: + val = rule_param_vars.get(name).get() if name in rule_param_vars else default + try: + rd[name] = json.loads(val) if (val.strip().startswith('{') or val.strip().startswith('[')) else val + except Exception: + rd[name] = val + else: + for name, default in spec['params']: + try: + rd[name] = json.loads(default) if (isinstance(default, str) and (default.strip().startswith('{') or default.strip().startswith('['))) else default + except Exception: + rd[name] = default + rules.append(rd) + return rules + def _apply_quick_template_no_unit(): + try: + rules_list.delete(0, tk.END) + for r in ['split_quantity_unit','extract_spec_from_name','normalize_unit','fill_missing','mark_gift']: + rules_list.insert(tk.END, r) + unit_synonyms_var.set(json.dumps({"箱":"件","提":"件","盒":"件","瓶":"瓶"}, ensure_ascii=False)) + pack_multipliers_var.set(json.dumps({"件":24,"箱":24,"提":12,"盒":10}, ensure_ascii=False)) + default_unit_var.set('瓶') + default_pq_var.set('1') + messagebox.showinfo("成功","已应用无数量/单位快速模板,请在规则参数中选择来源列") + _refresh_rule_params() + except Exception as e: + messagebox.showerror("应用失败", str(e)) + ttk.Button(rules_btns, text="应用无数量/单位模板", command=_apply_quick_template_no_unit).pack(side=tk.LEFT, padx=6) + rules_list.bind('<>', lambda e: _refresh_rule_params()) + def _load_rules_to_ui(rules): + rules_list.delete(0, tk.END) + for r in rules or []: + rtype = r.get('type') + if rtype in RULE_TYPES: + rules_list.insert(tk.END, rtype) + _refresh_rule_params() + tpl_list = tk.Listbox(tpl_tab, height=8) + tpl_list.pack(fill=tk.BOTH, expand=True) + tpl_btns = ttk.Frame(tpl_tab) + tpl_btns.pack(fill=tk.X, pady=6) + current_tpl_idx_var = tk.StringVar(value='0') + ttk.Label(tpl_tab, text="当前模板索引").pack(anchor='w') + ttk.Entry(tpl_tab, textvariable=current_tpl_idx_var).pack(fill=tk.X, pady=4) + def load_selected(): + sel = sup_list.curselection() + if not sel: + return + idx = sel[0] + s = data['suppliers'][idx] + name_var.set(s.get('name','')) + desc_var.set(s.get('description','')) + header_row_var.set(str((s.get('header_row') or 0)+1)) + fp = s.get('filename_patterns',[]) + ci = s.get('content_indicators',[]) + fp_text.delete(1.0, tk.END) + fp_text.insert(tk.END, '\n'.join(fp)) + ci_text.delete(1.0, tk.END) + ci_text.insert(tk.END, '\n'.join(ci)) + d = s.get('dictionary') or {} + ignore_words_text.delete(1.0, tk.END) + ignore_words_text.insert(tk.END, '\n'.join(d.get('ignore_words', []))) + unit_synonyms_var.set(json.dumps(d.get('unit_synonyms', {}), ensure_ascii=False)) + pack_multipliers_var.set(json.dumps(d.get('pack_multipliers', {}), ensure_ascii=False)) + name_patterns_text.delete(1.0, tk.END) + name_patterns_text.insert(tk.END, '\n'.join(d.get('name_patterns', []))) + default_unit_var.set(d.get('default_unit','瓶')) + default_pq_var.set(str(d.get('default_package_quantity',1))) + tpl_list.delete(0, tk.END) + for t in s.get('output_templates', []): + tpl_list.insert(tk.END, t) + current_tpl_idx_var.set(str(s.get('current_template_index', 0))) + # 载入规则列表到UI + _load_rules_to_ui(s.get('rules', [])) + def add_template(): + p = filedialog.askopenfilename(title="选择模板文件", filetypes=[("Excel模板","*.xls *.xlsx")]) + if p: + tpl_list.insert(tk.END, os.path.relpath(p, os.getcwd()) if os.path.isabs(p) else p) + def remove_template(): + sel = tpl_list.curselection() + if sel: + tpl_list.delete(sel[0]) + ttk.Button(tpl_btns, text="添加模板", command=add_template).pack(side=tk.LEFT) + ttk.Button(tpl_btns, text="删除模板", command=remove_template).pack(side=tk.LEFT, padx=6) + def save_supplier(): + try: + sel = sup_list.curselection() + if not sel: + return + idx = sel[0] + s = data['suppliers'][idx] + s['name'] = name_var.get().strip() or s.get('name','') + s['description'] = desc_var.get().strip() + fp = [w.strip() for w in fp_text.get(1.0, tk.END).splitlines() if w.strip()] + ci = [w.strip() for w in ci_text.get(1.0, tk.END).splitlines() if w.strip()] + s['filename_patterns'] = fp + s['content_indicators'] = ci + hr = header_row_var.get().strip() + try: + s['header_row'] = max(0, int(hr)-1) if hr else 0 + except Exception: + s['header_row'] = 0 + s['dictionary'] = { + 'ignore_words': [w.strip() for w in ignore_words_text.get(1.0, tk.END).splitlines() if w.strip()], + 'unit_synonyms': json.loads(unit_synonyms_var.get() or '{}'), + 'pack_multipliers': json.loads(pack_multipliers_var.get() or '{}'), + 'name_patterns': [w.strip() for w in name_patterns_text.get(1.0, tk.END).splitlines() if w.strip()], + 'default_unit': default_unit_var.get().strip() or '瓶', + 'default_package_quantity': int(default_pq_var.get() or '1') + } + # 优先使用自定义规则列表;如未编辑则使用预设或原有 + rules_ui = _build_rules_from_ui() + if rules_ui: + s['rules'] = rules_ui + else: + s['rules'] = rule_presets.get(rule_preset_var.get(), s.get('rules', [])) + s['output_templates'] = [tpl_list.get(i) for i in range(tpl_list.size())] + try: + s['current_template_index'] = int(current_tpl_idx_var.get() or '0') + except Exception: + s['current_template_index'] = 0 + with open(cfg_path,'w',encoding='utf-8') as f: + json.dump(data,f,ensure_ascii=False,indent=2) + try: + global PROCESSOR_SERVICE + if PROCESSOR_SERVICE is None: + PROCESSOR_SERVICE = ProcessorService(ConfigManager()) + PROCESSOR_SERVICE.reload_processors() + except Exception: + pass + add_to_log(log_widget, "供应商配置已保存并重载\n", "success") + refresh_list(idx) + except Exception as e: + messagebox.showerror("保存失败", str(e)) + ctl_row = ttk.Frame(dlg) + ctl_row.pack(fill=tk.X, pady=8) + ttk.Button(ctl_row, text="保存", command=save_supplier).pack(side=tk.RIGHT) + def on_select(evt): + load_selected() + sup_list.bind('<>', on_select) + refresh_list(0) + load_selected() + except Exception as e: + messagebox.showerror("供应商管理错误", str(e)) + +def open_column_mapping_wizard_alt(log_widget, supplier_name: str = None): + try: + import json + import pandas as pd + dlg = tk.Toplevel() + dlg.title("列映射向导") + dlg.geometry("780x660") + center_window(dlg) + try: + dlg.lift() + dlg.attributes('-topmost', True) + dlg.after(200, lambda: dlg.attributes('-topmost', False)) + dlg.focus_force() + except Exception: + pass + container_scroll = ttk.Frame(dlg) + container_scroll.pack(fill=tk.BOTH, expand=True) + canvas = tk.Canvas(container_scroll) + vsb = ttk.Scrollbar(container_scroll, orient='vertical', command=canvas.yview) + canvas.configure(yscrollcommand=vsb.set) + canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + vsb.pack(side=tk.RIGHT, fill=tk.Y) + frame = ttk.Frame(canvas) + canvas.create_window((0,0), window=frame, anchor='nw') + def _on_frame_config(evt): + try: + canvas.configure(scrollregion=canvas.bbox("all")) + except Exception: + pass + frame.bind("", _on_frame_config) + def _on_mousewheel(event): + try: + delta = -1 * int(event.delta / 120) + canvas.yview_scroll(delta, "units") + except Exception: + pass + dlg.bind("", _on_mousewheel) + # inner padding + inner_pad = ttk.Frame(frame) + inner_pad.pack(fill=tk.BOTH, expand=True, padx=12, pady=12) + frame = inner_pad + ttk.Label(frame, text="选择Excel文件").pack(anchor='w') + excel_path_var = tk.StringVar() + path_row = ttk.Frame(frame) + path_row.pack(fill=tk.X, pady=6) + ttk.Entry(path_row, textvariable=excel_path_var).pack(side=tk.LEFT, fill=tk.X, expand=True) + def _browse_excel(): + p = filedialog.askopenfilename(title="选择Excel文件", filetypes=[("Excel","*.xlsx *.xls")]) + if p: + excel_path_var.set(p) + try: + dlg.lift() + dlg.attributes('-topmost', True) + dlg.after(200, lambda: dlg.attributes('-topmost', False)) + dlg.focus_force() + except Exception: + pass + ttk.Button(path_row, text="浏览", command=_browse_excel).pack(side=tk.LEFT, padx=6) + ttk.Label(frame, text="选择供应商").pack(anchor='w', pady=(8,0)) + supplier_var = tk.StringVar() + supplier_combo = ttk.Combobox(frame, textvariable=supplier_var, state='readonly') + supplier_combo.pack(fill=tk.X) + cfg_path = os.path.join("config","suppliers_config.json") + suppliers = [] + try: + if os.path.exists(cfg_path): + with open(cfg_path,'r',encoding='utf-8') as f: + data = json.load(f) + suppliers = [s.get('name','') for s in data.get('suppliers',[])] + except Exception: + pass + supplier_combo['values'] = suppliers + if supplier_name and supplier_name in suppliers: + supplier_var.set(supplier_name) + elif suppliers: + supplier_var.set(suppliers[0]) + hdr_row = ttk.Frame(frame) + hdr_row.pack(fill=tk.X, pady=6) + ttk.Label(hdr_row, text="表头行号(从1开始)").pack(side=tk.LEFT) + header_row_var = tk.StringVar() + ttk.Entry(hdr_row, textvariable=header_row_var, width=8).pack(side=tk.LEFT, padx=6) + preview_frame = ttk.Frame(frame) + preview_frame.pack(fill=tk.BOTH, expand=True, pady=6) + preview_tree = ttk.Treeview(preview_frame, show='headings', height=8) + preview_tree.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + preview_scroll_y = ttk.Scrollbar(preview_frame, orient='vertical', command=preview_tree.yview) + preview_tree.configure(yscrollcommand=preview_scroll_y.set) + preview_scroll_y.pack(side=tk.RIGHT, fill=tk.Y) + cols_box = ttk.Frame(frame) + cols_box.pack(fill=tk.BOTH, expand=True, pady=8) + ttk.Label(cols_box, text="源列 → 标准列映射").pack(anchor='w') + map_container = ttk.Frame(cols_box) + map_container.pack(fill=tk.BOTH, expand=True, pady=6) + map_canvas = tk.Canvas(map_container) + map_canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + map_scroll_y = ttk.Scrollbar(map_container, orient='vertical', command=map_canvas.yview) + map_scroll_y.pack(side=tk.RIGHT, fill=tk.Y) + map_canvas.configure(yscrollcommand=map_scroll_y.set) + map_frame = ttk.Frame(map_canvas) + map_canvas.create_window((0,0), window=map_frame, anchor='nw') + def _on_map_frame_config(evt): + try: + map_canvas.configure(scrollregion=map_canvas.bbox("all")) + except Exception: + pass + map_frame.bind("", _on_map_frame_config) + # 标准字段与中文标签 + std_fields = [ + "barcode","name","specification","quantity","unit", + "unit_price","total_price","category","brand","supplier" + ] + friendly_labels = { + "barcode": "条码", + "name": "商品名称", + "specification": "规格", + "quantity": "数量", + "unit": "单位", + "unit_price": "采购单价", + "total_price": "金额/小计", + "category": "类别", + "brand": "品牌", + "supplier": "供应商" + } + try: + from app.core.handlers.column_mapper import ColumnMapper + cm = ColumnMapper() + # 若项目有更完整集合,替换并生成中文标签 + std_fields = list(cm.STANDARD_COLUMNS.keys()) + for k, v in cm.STANDARD_COLUMNS.items(): + if isinstance(v, dict) and v.get('label_zh'): + friendly_labels[k] = v['label_zh'] + except Exception: + pass + source_col_options = [] + source_cols = [] + def load_columns(): + nonlocal source_cols + p = excel_path_var.get() + if not p: + return + try: + idx = None + try: + val = header_row_var.get().strip() + if val: + n = int(val) + if n > 0: + idx = n - 1 + except Exception: + pass + if p.lower().endswith('.xlsx'): + df = pd.read_excel(p, engine='openpyxl', header=idx if idx is not None else 0) + else: + df = pd.read_excel(p, engine='xlrd', header=idx if idx is not None else 0) + source_cols = [str(c) for c in list(df.columns)] + for cmb in source_col_options: + cmb['values'] = source_cols + if source_cols: + cmb.set(source_cols[0]) + try: + # 1) 先按已保存的映射预填 + if os.path.exists(cfg_path): + with open(cfg_path,'r',encoding='utf-8') as f: + data_cfg = json.load(f) + for s in data_cfg.get('suppliers',[]): + if s.get('name') == supplier_var.get(): + cm_saved = s.get('column_mapping', {}) + for src, target in cm_saved.items(): + if target in entries and src in source_cols: + entries[target].set(src) + break + # 2) 再用关键词建议补齐未映射项 + lower = [str(c).lower() for c in source_cols] + def find_any(keys): + for i, lc in enumerate(lower): + for k in keys: + if k in lc: + return source_cols[i] + return None + mapping_suggestions = { + 'barcode': find_any(['条码','barcode','条形码']), + 'name': find_any(['商品名称','name','品名','商品']), + 'specification': find_any(['规格','型号']), + 'quantity': find_any(['数量','订购量','订货数量','采购数量']), + 'unit': find_any(['单位']), + 'unit_price': find_any(['单价','采购单价','进货价','价格']), + 'total_price': find_any(['金额','小计','合计']), + 'category': find_any(['类别','分类','品类']), + 'brand': find_any(['品牌']), + 'supplier': find_any(['供应商','供货商']) + } + for f, src in mapping_suggestions.items(): + if f in entries and (not entries[f].get()) and src: + entries[f].set(src) + except Exception: + pass + except Exception as e: + messagebox.showerror("加载失败", str(e)) + def preview_rows(): + try: + p = excel_path_var.get() + if not p: + return + if p.lower().endswith('.xlsx'): + df0 = pd.read_excel(p, engine='openpyxl', header=None, nrows=30) + else: + df0 = pd.read_excel(p, engine='xlrd', header=None, nrows=30) + cols = [str(i+1) for i in range(df0.shape[1])] + preview_tree['columns'] = cols + for c in cols: + preview_tree.heading(c, text=c) + preview_tree.column(c, width=120, stretch=True) + for iid in preview_tree.get_children(): + preview_tree.delete(iid) + for r in range(df0.shape[0]): + vals = [str(df0.iloc[r, c]) if c < df0.shape[1] else '' for c in range(df0.shape[1])] + preview_tree.insert('', tk.END, values=vals) + except Exception as e: + messagebox.showerror("加载失败", str(e)) + def on_preview_select(evt): + try: + sel = preview_tree.selection() + if sel: + idx = preview_tree.index(sel[0]) + header_row_var.set(str(idx+1)) + except Exception: + pass + preview_tree.bind('<>', on_preview_select) + ttk.Button(path_row, text="预览前30行", command=preview_rows).pack(side=tk.LEFT, padx=6) + ttk.Button(path_row, text="加载列", command=load_columns).pack(side=tk.LEFT, padx=6) + entries = {} + for i, field in enumerate(std_fields): + row = ttk.Frame(map_frame) + row.pack(fill=tk.X, pady=4) + label_text = field + (f"({friendly_labels.get(field,'')})" if friendly_labels.get(field) else "") + ttk.Label(row, text=label_text, width=22).pack(side=tk.LEFT) + var = tk.StringVar() + cmb = ttk.Combobox(row, textvariable=var, state='readonly') + cmb.pack(side=tk.LEFT, fill=tk.X, expand=True) + source_col_options.append(cmb) + entries[field] = var + act_row = ttk.Frame(frame) + act_row.pack(fill=tk.X, pady=8) + preset_row = ttk.Frame(frame) + preset_row.pack(fill=tk.X, pady=6) + ttk.Label(preset_row, text="规则预设").pack(side=tk.LEFT) + rule_preset_var = tk.StringVar() + rule_presets = { + "基础拆分与推断": [ + {"type": "split_quantity_unit", "source": "quantity"}, + {"type": "extract_spec_from_name", "source": "name"}, + {"type": "normalize_unit", "target": "unit", "map": {"箱": "件", "提": "件", "盒": "件"}}, + {"type": "compute_quantity_from_total"}, + {"type": "mark_gift"}, + {"type": "fill_missing", "fills": {"unit": "瓶"}} + ] + } + preset_cb = ttk.Combobox(preset_row, textvariable=rule_preset_var, state='readonly', values=list(rule_presets.keys())) + preset_cb.pack(side=tk.LEFT, padx=6) + dict_frame = ttk.LabelFrame(frame, text="供应商规则") + dict_frame.pack(fill=tk.BOTH, expand=True, pady=6) + ttk.Label(dict_frame, text="忽略词").pack(anchor='w') + ignore_words_text = scrolledtext.ScrolledText(dict_frame, height=3) + ignore_words_text.pack(fill=tk.X, pady=4) + ttk.Label(dict_frame, text="单位同义词(JSON)").pack(anchor='w') + unit_synonyms_var = tk.StringVar(value='{}') + ttk.Entry(dict_frame, textvariable=unit_synonyms_var).pack(fill=tk.X, pady=4) + ttk.Label(dict_frame, text="包装倍数(JSON)").pack(anchor='w') + pack_multipliers_var = tk.StringVar(value='{}') + ttk.Entry(dict_frame, textvariable=pack_multipliers_var).pack(fill=tk.X, pady=4) + ttk.Label(dict_frame, text="名称正则(每行一条)").pack(anchor='w') + name_patterns_text = scrolledtext.ScrolledText(dict_frame, height=3) + name_patterns_text.pack(fill=tk.X, pady=4) + ttk.Label(dict_frame, text="默认单位").pack(anchor='w') + default_unit_var = tk.StringVar(value='瓶') + ttk.Entry(dict_frame, textvariable=default_unit_var).pack(fill=tk.X, pady=4) + ttk.Label(dict_frame, text="默认包装数量").pack(anchor='w') + default_pq_var = tk.StringVar(value='1') + ttk.Entry(dict_frame, textvariable=default_pq_var).pack(fill=tk.X, pady=4) + def load_dictionary_for_supplier(): + try: + if os.path.exists(cfg_path): + with open(cfg_path,'r',encoding='utf-8') as f: + data = json.load(f) + for s in data.get('suppliers',[]): + if s.get('name') == supplier_var.get(): + d = s.get('dictionary') or {} + ignore_words = '\n'.join(d.get('ignore_words', [])) + ignore_words_text.delete(1.0, tk.END) + ignore_words_text.insert(tk.END, ignore_words) + unit_synonyms_var.set(json.dumps(d.get('unit_synonyms', {}), ensure_ascii=False)) + pack_multipliers_var.set(json.dumps(d.get('pack_multipliers', {}), ensure_ascii=False)) + name_patterns_text.delete(1.0, tk.END) + name_patterns_text.insert(tk.END, '\n'.join(d.get('name_patterns', []))) + default_unit_var.set(d.get('default_unit','瓶')) + default_pq_var.set(str(d.get('default_package_quantity',1))) + break + except Exception: + pass + load_dictionary_for_supplier() + def export_dictionary(): + try: + save_path = filedialog.asksaveasfilename(title="导出规则", defaultextension=".json", filetypes=[("JSON","*.json")]) + if not save_path: + return + payload = { + 'ignore_words': [w.strip() for w in ignore_words_text.get(1.0, tk.END).splitlines() if w.strip()], + 'unit_synonyms': json.loads(unit_synonyms_var.get() or '{}'), + 'pack_multipliers': json.loads(pack_multipliers_var.get() or '{}'), + 'name_patterns': [w.strip() for w in name_patterns_text.get(1.0, tk.END).splitlines() if w.strip()], + 'default_unit': default_unit_var.get().strip() or '瓶', + 'default_package_quantity': int(default_pq_var.get() or '1') + } + with open(save_path,'w',encoding='utf-8') as f: + json.dump(payload,f,ensure_ascii=False,indent=2) + messagebox.showinfo("成功","规则已导出") + except Exception as e: + messagebox.showerror("导出失败", str(e)) + def import_dictionary(): + try: + open_path = filedialog.askopenfilename(title="导入规则", filetypes=[("JSON","*.json")]) + if not open_path: + return + with open(open_path,'r',encoding='utf-8') as f: + payload = json.load(f) + ignore_words_text.delete(1.0, tk.END) + ignore_words_text.insert(tk.END, '\n'.join(payload.get('ignore_words', []))) + unit_synonyms_var.set(json.dumps(payload.get('unit_synonyms', {}), ensure_ascii=False)) + pack_multipliers_var.set(json.dumps(payload.get('pack_multipliers', {}), ensure_ascii=False)) + name_patterns_text.delete(1.0, tk.END) + name_patterns_text.insert(tk.END, '\n'.join(payload.get('name_patterns', []))) + default_unit_var.set(payload.get('default_unit','瓶')) + default_pq_var.set(str(payload.get('default_package_quantity',1))) + messagebox.showinfo("成功","规则已导入,请保存以应用") + except Exception as e: + messagebox.showerror("导入失败", str(e)) + dict_io_row = ttk.Frame(dict_frame) + dict_io_row.pack(fill=tk.X, pady=4) + ttk.Button(dict_io_row, text="导入规则", command=import_dictionary).pack(side=tk.LEFT) + ttk.Button(dict_io_row, text="导出规则", command=export_dictionary).pack(side=tk.LEFT, padx=6) + preview_box = ttk.Frame(frame) + preview_box.pack(fill=tk.BOTH, expand=True, pady=6) + left_tree = ttk.Treeview(preview_box, show='headings', height=8) + right_tree = ttk.Treeview(preview_box, show='headings', height=8) + left_tree.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + right_tree.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + scroll_x_row = ttk.Frame(frame) + scroll_x_row.pack(fill=tk.X) + left_scroll_x = ttk.Scrollbar(scroll_x_row, orient='horizontal', command=left_tree.xview) + right_scroll_x = ttk.Scrollbar(scroll_x_row, orient='horizontal', command=right_tree.xview) + left_tree.configure(xscrollcommand=left_scroll_x.set) + right_tree.configure(xscrollcommand=right_scroll_x.set) + left_scroll_x.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=(0,3)) + right_scroll_x.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=(3,0)) + def apply_rules_preview(): + try: + p = excel_path_var.get() + if not p: + return + idx = None + try: + val = header_row_var.get().strip() + if val: + n = int(val) + if n > 0: + idx = n - 1 + except Exception: + pass + df = pd.read_excel(p, engine='openpyxl' if p.lower().endswith('.xlsx') else 'xlrd', header=idx if idx is not None else 0, nrows=15) + rename_map = {} + for f in std_fields: + v = entries[f].get() + if v: + rename_map[v] = f + df0 = df.rename(columns=rename_map) + from app.core.handlers.rule_engine import apply_rules + rules = rule_presets.get(rule_preset_var.get(), rule_presets["基础拆分与推断"]) + dictionary = { + 'ignore_words': [w.strip() for w in ignore_words_text.get(1.0, tk.END).splitlines() if w.strip()], + 'unit_synonyms': json.loads(unit_synonyms_var.get() or '{}'), + 'pack_multipliers': json.loads(pack_multipliers_var.get() or '{}'), + 'name_patterns': [w.strip() for w in name_patterns_text.get(1.0, tk.END).splitlines() if w.strip()], + 'default_unit': default_unit_var.get().strip() or '瓶', + 'default_package_quantity': int(default_pq_var.get() or '1') + } + df1 = apply_rules(df0, rules, dictionary) + lcols = list(df0.columns) + rcols = list(df1.columns) + left_tree['columns'] = lcols + right_tree['columns'] = rcols + for c in lcols: + left_tree.heading(c, text=c) + left_tree.column(c, width=120, stretch=True) + for c in rcols: + right_tree.heading(c, text=c) + right_tree.column(c, width=120, stretch=True) + for iid in left_tree.get_children(): + left_tree.delete(iid) + for iid in right_tree.get_children(): + right_tree.delete(iid) + for i in range(len(df0)): + left_tree.insert('', tk.END, values=[str(df0.iloc[i].get(c, '')) for c in lcols]) + for i in range(len(df1)): + right_tree.insert('', tk.END, values=[str(df1.iloc[i].get(c, '')) for c in rcols]) + except Exception as e: + messagebox.showerror("预览失败", str(e)) + ttk.Button(preset_row, text="应用规则预览", command=apply_rules_preview).pack(side=tk.LEFT, padx=6) + step_row = ttk.Frame(frame) + step_row.pack(fill=tk.X, pady=6) + ttk.Label(step_row, text="预览步骤").pack(side=tk.LEFT) + step_select_var = tk.StringVar() + step_select_cb = ttk.Combobox(step_row, textvariable=step_select_var, state='readonly') + step_select_cb.pack(side=tk.LEFT, padx=6) + step_box = ttk.Frame(frame) + step_box.pack(fill=tk.BOTH, expand=True, pady=6) + step_tree = ttk.Treeview(step_box, show='headings', height=8) + step_tree.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + step_scroll_x = ttk.Scrollbar(frame, orient='horizontal', command=step_tree.xview) + step_tree.configure(xscrollcommand=step_scroll_x.set) + step_scroll_x.pack(fill=tk.X) + def build_step_preview(): + try: + p = excel_path_var.get() + if not p: + return + idx = None + try: + val = header_row_var.get().strip() + if val: + n = int(val) + if n > 0: + idx = n - 1 + except Exception: + pass + df = pd.read_excel(p, engine='openpyxl' if p.lower().endswith('.xlsx') else 'xlrd', header=idx if idx is not None else 0, nrows=50) + rename_map = {} + for f in std_fields: + v = entries[f].get() + if v: + rename_map[v] = f + df0 = df.rename(columns=rename_map) + from app.core.handlers.rule_engine import apply_rules + rules = rule_presets.get(rule_preset_var.get(), rule_presets["基础拆分与推断"]) + dictionary = { + 'ignore_words': [w.strip() for w in ignore_words_text.get(1.0, tk.END).splitlines() if w.strip()], + 'unit_synonyms': json.loads(unit_synonyms_var.get() or '{}'), + 'pack_multipliers': json.loads(pack_multipliers_var.get() or '{}'), + 'name_patterns': [w.strip() for w in name_patterns_text.get(1.0, tk.END).splitlines() if w.strip()], + 'default_unit': default_unit_var.get().strip() or '瓶', + 'default_package_quantity': int(default_pq_var.get() or '1') + } + steps = [("原始", df0)] + cur = df0.copy() + for r in rules: + cur = apply_rules(cur, [r], dictionary) + steps.append((r.get('type','step'), cur.copy())) + step_select_cb['values'] = [t for t,_ in steps] + if steps: + step_select_var.set(steps[-1][0]) + show_step_df(steps[-1][1]) + def on_step_change(evt=None): + sel = step_select_var.get() + for t, d in steps: + if t == sel: + show_step_df(d) + break + step_select_cb.bind('<>', on_step_change) + step_select_cb.event_generate('<>') + step_row._steps_cache = steps + except Exception as e: + messagebox.showerror("预览失败", str(e)) + def show_step_df(dfshow): + cols = list(dfshow.columns) + step_tree['columns'] = cols + for c in cols: + step_tree.heading(c, text=c) + step_tree.column(c, width=120, stretch=True) + for iid in step_tree.get_children(): + step_tree.delete(iid) + for i in range(len(dfshow)): + step_tree.insert('', tk.END, values=[str(dfshow.iloc[i].get(c, '')) for c in cols]) + def export_step_csv(): + try: + if not hasattr(step_row, '_steps_cache'): + return + sel = step_select_var.get() + for t, d in step_row._steps_cache: + if t == sel: + save_path = filedialog.asksaveasfilename(title="导出预览为CSV", defaultextension=".csv", filetypes=[("CSV","*.csv")]) + if save_path: + d.to_csv(save_path, index=False, encoding='utf-8-sig') + messagebox.showinfo("成功","已导出CSV") + break + except Exception as e: + messagebox.showerror("导出失败", str(e)) + ttk.Button(step_row, text="生成步骤预览", command=build_step_preview).pack(side=tk.LEFT, padx=6) + ttk.Button(step_row, text="导出预览CSV", command=export_step_csv).pack(side=tk.LEFT, padx=6) + def save_mapping(): + try: + if not supplier_var.get(): + messagebox.showwarning("提示","请选择供应商") + return + mapping = {} + for f in std_fields: + v = entries[f].get() + if v: + mapping[v] = f + if not mapping: + messagebox.showwarning("提示","请先加载列并选择映射") + return + if os.path.exists(cfg_path): + with open(cfg_path,'r',encoding='utf-8') as f: + data = json.load(f) + else: + data = {"suppliers":[]} + for s in data.get('suppliers',[]): + if s.get('name') == supplier_var.get(): + s['column_mapping'] = mapping + hr = header_row_var.get().strip() + try: + if hr: + n = int(hr) + if n > 0: + s['header_row'] = n - 1 + except Exception: + pass + if rule_preset_var.get(): + s['rules'] = rule_presets.get(rule_preset_var.get(), []) + s['dictionary'] = { + 'ignore_words': [w.strip() for w in ignore_words_text.get(1.0, tk.END).splitlines() if w.strip()], + 'unit_synonyms': json.loads(unit_synonyms_var.get() or '{}'), + 'pack_multipliers': json.loads(pack_multipliers_var.get() or '{}'), + 'name_patterns': [w.strip() for w in name_patterns_text.get(1.0, tk.END).splitlines() if w.strip()], + 'default_unit': default_unit_var.get().strip() or '瓶', + 'default_package_quantity': int(default_pq_var.get() or '1') + } + with open(cfg_path,'w',encoding='utf-8') as f: + json.dump(data,f,ensure_ascii=False,indent=2) + add_to_log(log_widget, "列映射已保存\n", "success") + messagebox.showinfo("成功","列映射已保存") + dlg.destroy() + except Exception as e: + messagebox.showerror("保存失败", str(e)) + def export_mapping(): + try: + save_path = filedialog.asksaveasfilename(title="导出映射", defaultextension=".json", filetypes=[("JSON","*.json")]) + if not save_path: + return + mapping = {} + for f in std_fields: + v = entries[f].get() + if v: + mapping[v] = f + payload = {'supplier': supplier_var.get(), 'header_row': None, 'column_mapping': mapping} + hr = header_row_var.get().strip() + try: + if hr: + n = int(hr) + if n > 0: + payload['header_row'] = n - 1 + except Exception: + pass + with open(save_path,'w',encoding='utf-8') as f: + json.dump(payload,f,ensure_ascii=False,indent=2) + messagebox.showinfo("成功","映射已导出") + except Exception as e: + messagebox.showerror("导出失败", str(e)) + def import_mapping(): + try: + open_path = filedialog.askopenfilename(title="导入映射", filetypes=[("JSON","*.json")]) + if not open_path: + return + with open(open_path,'r',encoding='utf-8') as f: + payload = json.load(f) + cm = payload.get('column_mapping',{}) + for src, target in cm.items(): + if target in entries: + entries[target].set(src) + hr = payload.get('header_row') + if isinstance(hr,int) and hr >= 0: + header_row_var.set(str(hr+1)) + messagebox.showinfo("成功","映射已导入,请保存以应用") + except Exception as e: + messagebox.showerror("导入失败", str(e)) + ttk.Button(act_row, text="导入映射", command=import_mapping).pack(side=tk.LEFT) + ttk.Button(act_row, text="导出映射", command=export_mapping).pack(side=tk.LEFT, padx=8) + ttk.Button(act_row, text="保存映射", command=save_mapping).pack(side=tk.LEFT, padx=8) + ttk.Button(act_row, text="保存并返回", command=save_mapping).pack(side=tk.LEFT, padx=8) + ttk.Button(act_row, text="取消", command=dlg.destroy).pack(side=tk.RIGHT) + except Exception as e: + messagebox.showerror("向导错误", str(e)) + +def open_template_manager(log_widget): + try: + import json + import xlrd + dlg = tk.Toplevel() + dlg.title("模板管理与校验") + dlg.geometry("780x540") + center_window(dlg) + try: + dlg.lift() + dlg.attributes('-topmost', True) + dlg.after(200, lambda: dlg.attributes('-topmost', False)) + dlg.focus_force() + except Exception: + pass + frame = ttk.Frame(dlg) + frame.pack(fill=tk.BOTH, expand=True, padx=12, pady=12) + cfg_path = os.path.join("config","suppliers_config.json") + suppliers = [] + data = {"suppliers":[]} + try: + if os.path.exists(cfg_path): + with open(cfg_path,'r',encoding='utf-8') as f: + data = json.load(f) + suppliers = [s.get('name','') for s in data.get('suppliers',[])] + except Exception: + pass + ttk.Label(frame, text="选择供应商").pack(anchor='w') + supplier_var = tk.StringVar() + supplier_combo = ttk.Combobox(frame, textvariable=supplier_var, state='readonly', values=suppliers) + supplier_combo.pack(fill=tk.X) + if suppliers: + supplier_var.set(suppliers[0]) + ttk.Label(frame, text="模板文件").pack(anchor='w', pady=(8,0)) + tpl_var = tk.StringVar() + tpl_row = ttk.Frame(frame) + tpl_row.pack(fill=tk.X, pady=6) + ttk.Entry(tpl_row, textvariable=tpl_var).pack(side=tk.LEFT, fill=tk.X, expand=True) + def choose_tpl(): + p = filedialog.askopenfilename(title="选择模板文件", filetypes=[("Excel模板","*.xls *.xlsx")]) + if p: + tpl_var.set(os.path.relpath(p, os.getcwd()) if os.path.isabs(p) else p) + try: + dlg.lift() + dlg.attributes('-topmost', True) + dlg.after(200, lambda: dlg.attributes('-topmost', False)) + dlg.focus_force() + except Exception: + pass + ttk.Button(tpl_row, text="选择", command=choose_tpl).pack(side=tk.LEFT, padx=6) + ttk.Label(frame, text="校验结果").pack(anchor='w', pady=(8,0)) + result_text = scrolledtext.ScrolledText(frame, height=12) + result_text.pack(fill=tk.BOTH, expand=True) + def validate_tpl(): + try: + p = tpl_var.get() + if not p: + messagebox.showwarning("提示","请先选择模板文件") + return + ap = os.path.abspath(p) + wb = xlrd.open_workbook(ap, formatting_info=True) + sh = wb.sheet_by_index(0) + headers = [] + try: + headers = [str(sh.cell_value(0, c)).strip() for c in range(sh.ncols)] + except Exception: + pass + required = ["条码","采购量","赠送量","采购单价"] + missing = [h for h in required if h not in headers] + result_text.configure(state=tk.NORMAL) + result_text.delete(1.0, tk.END) + result_text.insert(tk.END, f"模板列: {headers}\n") + if missing: + result_text.insert(tk.END, f"缺少列: {missing}\n") + else: + result_text.insert(tk.END, "模板校验通过\n") + result_text.configure(state=tk.DISABLED) + except Exception as e: + messagebox.showerror("校验失败", str(e)) + def save_tpl(): + try: + if not supplier_var.get() or not tpl_var.get(): + messagebox.showwarning("提示","请选择供应商并选择模板文件") + return + for s in data.get('suppliers',[]): + if s.get('name') == supplier_var.get(): + s['output_template'] = tpl_var.get() + with open(cfg_path,'w',encoding='utf-8') as f: + json.dump(data,f,ensure_ascii=False,indent=2) + add_to_log(log_widget, "模板路径已保存\n", "success") + messagebox.showinfo("成功","模板路径已保存") + dlg.destroy() + except Exception as e: + messagebox.showerror("保存失败", str(e)) + act = ttk.Frame(frame) + act.pack(fill=tk.X, pady=8) + ttk.Button(act, text="校验模板", command=validate_tpl).pack(side=tk.LEFT) + ttk.Button(act, text="保存", command=save_tpl).pack(side=tk.LEFT, padx=8) + ttk.Button(act, text="取消", command=dlg.destroy).pack(side=tk.RIGHT) + except Exception as e: + messagebox.showerror("模板管理错误", str(e)) + def clean_data_files(log_widget): """清理数据文件(仅清理input和output目录)""" try: @@ -2713,6 +4425,100 @@ def edit_barcode_mappings(log_widget): add_to_log(log_widget, f"编辑条码映射时出错: {str(e)}\n", "error") messagebox.showerror("错误", f"编辑条码映射时出错: {str(e)}") +def open_column_mapping_wizard(log_widget): + try: + import json + from tkinter import ttk + from app.services.order_service import OrderService + from app.core.handlers.column_mapper import ColumnMapper + suppliers = [] + config_path = os.path.abspath(os.path.join('config','suppliers_config.json')) + if os.path.exists(config_path): + with open(config_path,'r',encoding='utf-8') as f: + data = json.load(f) + suppliers = data.get('suppliers', []) + file_path = select_excel_file(log_widget) + if not file_path: + try: + svc = OrderService() + file_path = svc.get_latest_excel() + except Exception: + file_path = None + if not file_path: + messagebox.showwarning("未选择文件","请选择一个用于分析的Excel文件") + return + import pandas as pd + df = pd.read_excel(file_path, nrows=5) + detected_cols = list(df.columns) + dlg = tk.Toplevel() + dlg.title("列映射向导") + dlg.geometry("520x560") + center_window(dlg) + frame = tk.Frame(dlg, bg=THEMES[THEME_MODE]["card_bg"]) + frame.pack(fill=tk.BOTH, expand=True, padx=12, pady=12) + tk.Label(frame, text="供应商", bg=THEMES[THEME_MODE]["card_bg"], fg=THEMES[THEME_MODE]["fg"]).pack(anchor='w') + supplier_names = [s.get('name','') for s in suppliers] + supplier_var = tk.StringVar(value=supplier_names[0] if supplier_names else '') + supplier_cb = ttk.Combobox(frame, values=supplier_names, textvariable=supplier_var, state='readonly') + supplier_cb.pack(fill=tk.X, pady=6) + std_cols = list(ColumnMapper.STANDARD_COLUMNS.keys()) + mapper = ColumnMapper() + suggestions = mapper.suggest_column_mapping(df) + mapping_vars = {} + for sc in std_cols: + row = tk.Frame(frame, bg=THEMES[THEME_MODE]["card_bg"]) + row.pack(fill=tk.X, pady=4) + tk.Label(row, text=sc, width=14, anchor='w', bg=THEMES[THEME_MODE]["card_bg"], fg=THEMES[THEME_MODE]["fg"]).pack(side=tk.LEFT) + var = tk.StringVar() + values = ['未映射'] + detected_cols + cb = ttk.Combobox(row, values=values, textvariable=var, state='readonly') + pre = None + for col, stds in suggestions.items(): + if sc in stds and col in detected_cols: + pre = col + break + var.set(pre if pre else '未映射') + cb.pack(side=tk.LEFT, fill=tk.X, expand=True) + mapping_vars[sc] = var + btn_row = tk.Frame(frame, bg=THEMES[THEME_MODE]["card_bg"]) + btn_row.pack(fill=tk.X, pady=12) + def save_mapping(): + try: + supplier_name = supplier_var.get() + if not supplier_name: + messagebox.showwarning("未选择供应商","请选择一个供应商") + return + updated = False + for s in suppliers: + if s.get('name') == supplier_name: + cm = {} + for sc, var in mapping_vars.items(): + src = var.get() + if src and src != '未映射': + cm[src] = sc + s['column_mapping'] = cm + updated = True + break + if not updated: + messagebox.showerror("错误","未找到供应商配置") + return + with open(config_path,'w',encoding='utf-8') as f: + json.dump({'suppliers': suppliers}, f, ensure_ascii=False, indent=2) + try: + global PROCESSOR_SERVICE + if PROCESSOR_SERVICE is None: + PROCESSOR_SERVICE = ProcessorService(ConfigManager()) + PROCESSOR_SERVICE.reload_processors() + except Exception: + pass + add_to_log(log_widget, "列映射已保存并重新加载供应商配置\n", "success") + dlg.destroy() + except Exception as e: + messagebox.showerror("保存失败", str(e)) + create_modern_button(btn_row, "保存", save_mapping, "primary", px_width=92, px_height=32).pack(side=tk.RIGHT) + except Exception as e: + messagebox.showerror("向导错误", str(e)) + def bind_keyboard_shortcuts(root, log_widget, status_bar): """绑定键盘快捷键""" # Ctrl+O - 处理单个图片 @@ -2814,3 +4620,237 @@ def _extract_path_from_recent_item(s: str) -> str: return p.strip().strip('"') except Exception: return s.strip().strip('"') +def open_validation_panel(log_widget): + try: + import json + import pandas as pd + import xlrd + dlg = tk.Toplevel() + dlg.title("验证匹配") + dlg.geometry("900x680") + center_window(dlg) + try: + dlg.lift() + dlg.attributes('-topmost', True) + dlg.after(200, lambda: dlg.attributes('-topmost', False)) + dlg.focus_force() + except Exception: + pass + outer = ttk.Frame(dlg) + outer.pack(fill=tk.BOTH, expand=True) + canvas = tk.Canvas(outer) + vsb = ttk.Scrollbar(outer, orient='vertical', command=canvas.yview) + canvas.configure(yscrollcommand=vsb.set) + canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + vsb.pack(side=tk.RIGHT, fill=tk.Y) + frame = ttk.Frame(canvas) + canvas.create_window((0,0), window=frame, anchor='nw') + frame.bind("", lambda e: canvas.configure(scrollregion=canvas.bbox("all"))) + cfg_path = os.path.join("config","suppliers_config.json") + suppliers = [] + data_cfg = {"suppliers": []} + try: + if os.path.exists(cfg_path): + with open(cfg_path,'r',encoding='utf-8') as f: + data_cfg = json.load(f) + suppliers = [s.get('name','') for s in data_cfg.get('suppliers',[])] + except Exception: + pass + row1 = ttk.Frame(frame) + row1.pack(fill=tk.X, pady=6) + ttk.Label(row1, text="供应商").pack(side=tk.LEFT) + sup_var = tk.StringVar() + ttk.Combobox(row1, textvariable=sup_var, state='readonly', values=suppliers).pack(side=tk.LEFT, padx=6) + row2 = ttk.Frame(frame) + row2.pack(fill=tk.X, pady=6) + ttk.Label(row2, text="原始文件").pack(side=tk.LEFT) + orig_var = tk.StringVar() + ttk.Entry(row2, textvariable=orig_var).pack(side=tk.LEFT, fill=tk.X, expand=True, padx=6) + ttk.Button(row2, text="浏览", command=lambda: orig_var.set(filedialog.askopenfilename(title="选择原始Excel", filetypes=[("Excel","*.xlsx *.xls")]) or orig_var.get())).pack(side=tk.LEFT) + row3 = ttk.Frame(frame) + row3.pack(fill=tk.X, pady=6) + ttk.Label(row3, text="期望结果").pack(side=tk.LEFT) + expect_var = tk.StringVar() + ttk.Entry(row3, textvariable=expect_var).pack(side=tk.LEFT, fill=tk.X, expand=True, padx=6) + ttk.Button(row3, text="浏览", command=lambda: expect_var.set(filedialog.askopenfilename(title="选择期望结果", filetypes=[("Excel","*.xls *.xlsx")]) or expect_var.get())).pack(side=tk.LEFT) + act_row = ttk.Frame(frame) + act_row.pack(fill=tk.X, pady=8) + result_text = scrolledtext.ScrolledText(frame, height=6) + result_text.pack(fill=tk.BOTH, expand=True) + diff_box = ttk.Frame(frame) + diff_box.pack(fill=tk.BOTH, expand=True, pady=6) + diff_tree = ttk.Treeview(diff_box, show='headings', height=12) + diff_tree.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + diff_scroll_x = ttk.Scrollbar(frame, orient='horizontal', command=diff_tree.xview) + diff_tree.configure(xscrollcommand=diff_scroll_x.set) + diff_scroll_x.pack(fill=tk.X) + suggestions_cache = [] + def _run_validation(): + try: + import numpy as np + from app.services.order_service import OrderService + supplier = sup_var.get() + orig = orig_var.get().strip() + expect = expect_var.get().strip() + if not supplier or not orig or not expect: + messagebox.showwarning("提示","请选择供应商、原始文件与期望结果") + return + service = OrderService() + out_path = service.process_excel(orig, progress_cb=lambda p: None) + result_text.configure(state=tk.NORMAL) + result_text.delete(1.0, tk.END) + result_text.insert(tk.END, f"生成结果: {out_path}\n") + def _read_df(path): + ap = os.path.abspath(path) + if ap.lower().endswith('.xlsx'): + return pd.read_excel(ap, engine='openpyxl') + else: + return pd.read_excel(ap, engine='xlrd') + df_actual = _read_df(out_path) + df_expect = _read_df(expect) + keys = None + if 'barcode' in df_actual.columns and 'barcode' in df_expect.columns: + keys = 'barcode' + elif '条码' in df_actual.columns and '条码' in df_expect.columns: + keys = '条码' + elif 'name' in df_actual.columns and 'name' in df_expect.columns: + keys = 'name' + else: + keys = None + fields = ['barcode','name','specification','quantity','unit','unit_price','total_price'] + for c in ['条码','商品名称','规格','采购量','单位','采购单价','金额','小计']: + if c in df_expect.columns and c not in fields: + fields.append(c) + records = [] + mismatches = 0 + if keys: + a = df_actual.set_index(keys) + e = df_expect.set_index(keys) + idx_union = list(set(a.index.tolist()) | set(e.index.tolist())) + for k in idx_union: + ra = a.loc[k] if k in a.index else None + rexp = e.loc[k] if k in e.index else None + for f in ['barcode','name','specification','quantity','unit','unit_price','total_price']: + va = None + ve = None + if ra is not None and f in a.columns: + va = ra.get(f) + if rexp is not None and f in e.columns: + ve = rexp.get(f) + if va is None and ve is None: + continue + def _norm(v): + try: + return float(v) + except Exception: + return str(v) if v is not None else '' + if _norm(va) != _norm(ve): + records.append([str(k), f, str(ve), str(va)]) + mismatches += 1 + else: + for i in range(min(len(df_actual), len(df_expect))): + for f in ['barcode','name','specification','quantity','unit','unit_price','total_price']: + va = df_actual.iloc[i].get(f) if f in df_actual.columns else None + ve = df_expect.iloc[i].get(f) if f in df_expect.columns else None + if va is None and ve is None: + continue + def _norm(v): + try: + return float(v) + except Exception: + return str(v) if v is not None else '' + if _norm(va) != _norm(ve): + records.append([str(i), f, str(ve), str(va)]) + mismatches += 1 + diff_tree['columns'] = ['key','field','expected','actual'] + for c in ['key','field','expected','actual']: + diff_tree.heading(c, text=c) + diff_tree.column(c, width=160, stretch=True) + for iid in diff_tree.get_children(): + diff_tree.delete(iid) + for row in records: + diff_tree.insert('', tk.END, values=row) + result_text.insert(tk.END, f"差异条目: {mismatches}\n") + result_text.configure(state=tk.DISABLED) + suggestions = [] + try: + unit_vals = df_actual.get('unit') if 'unit' in df_actual.columns else pd.Series([]) + bad_units = unit_vals.astype(str).isin(['箱','件','提','盒']).sum() + if bad_units > 0: + suggestions.append({"type":"normalize_unit","target":"unit","map":{"箱":"件","提":"件","盒":"件"}}) + except Exception: + pass + try: + qty = pd.to_numeric(df_actual.get('quantity'), errors='coerce') if 'quantity' in df_actual.columns else pd.Series([]) + missing_qty = int(qty.isna().sum()) if not qty.empty else 0 + if missing_qty > 0: + cols = df_actual.columns.tolist() + src = None + for cand in ['订单数量','订购量','订货数量']: + if cand in cols: + src = cand + break + if src: + suggestions.append({"type":"split_quantity_unit","source":src}) + except Exception: + pass + try: + spec = df_actual.get('specification') if 'specification' in df_actual.columns else pd.Series([]) + missing_spec = int(spec.isna().sum()) if not spec.empty else 0 + if missing_spec > 0: + suggestions.append({"type":"extract_spec_from_name","source":"name"}) + except Exception: + pass + try: + up = pd.to_numeric(df_actual.get('unit_price'), errors='coerce').fillna(0) if 'unit_price' in df_actual.columns else pd.Series([]) + tp = pd.to_numeric(df_actual.get('total_price'), errors='coerce').fillna(0) if 'total_price' in df_actual.columns else pd.Series([]) + qty = pd.to_numeric(df_actual.get('quantity'), errors='coerce').fillna(np.nan) if 'quantity' in df_actual.columns else pd.Series([]) + if not qty.empty and not up.empty and not tp.empty: + need_compute = ((qty.isna()) & (up > 0) & (tp > 0)).sum() + if need_compute > 0: + suggestions.append({"type":"compute_quantity_from_total"}) + except Exception: + pass + suggestions_cache.clear() + suggestions_cache.extend(suggestions) + if suggestions: + result_text.configure(state=tk.NORMAL) + result_text.insert(tk.END, f"建议: {json.dumps(suggestions, ensure_ascii=False)}\n") + result_text.configure(state=tk.DISABLED) + except Exception as e: + messagebox.showerror("验证失败", str(e)) + def _apply_suggestions(): + try: + supplier = sup_var.get() + if not supplier: + return + if os.path.exists(cfg_path): + with open(cfg_path,'r',encoding='utf-8') as f: + data = json.load(f) + for s in data.get('suppliers',[]): + if s.get('name') == supplier: + rules = s.get('rules', []) + for sug in suggestions_cache: + exists = any(r.get('type') == sug.get('type') for r in rules) + if not exists: + rules.append(sug) + s['rules'] = rules + d = s.get('dictionary') or {} + d.setdefault('unit_synonyms', {"箱":"件","提":"件","盒":"件","瓶":"瓶"}) + d.setdefault('pack_multipliers', {"件":24,"箱":24,"提":12,"盒":10}) + s['dictionary'] = d + break + with open(cfg_path,'w',encoding='utf-8') as f: + json.dump(data,f,ensure_ascii=False,indent=2) + result_text.configure(state=tk.NORMAL) + result_text.insert(tk.END, "已应用建议并保存配置\n") + result_text.configure(state=tk.DISABLED) + else: + messagebox.showwarning("提示","配置文件不存在") + except Exception as e: + messagebox.showerror("应用失败", str(e)) + ttk.Button(act_row, text="运行验证", command=_run_validation).pack(side=tk.LEFT) + ttk.Button(act_row, text="应用建议", command=_apply_suggestions).pack(side=tk.LEFT, padx=6) + ttk.Button(act_row, text="关闭", command=dlg.destroy).pack(side=tk.RIGHT) + except Exception as e: + messagebox.showerror("验证匹配错误", str(e))