feat(供应商管理): 新增规则引擎与词典配置支持
refactor(处理器): 重构通用供应商处理器以支持规则引擎 docs: 更新README与文档说明供应商管理功能 build: 更新打包脚本注入版本信息 test: 添加规则引擎单元测试
This commit is contained in:
parent
73d17836d7
commit
fb12e63c4c
42
.gitignore
vendored
42
.gitignore
vendored
@ -1,29 +1,27 @@
|
|||||||
# Python缓存文件
|
# Python
|
||||||
__pycache__/
|
__pycache__/
|
||||||
*.py[cod]
|
*.pyc
|
||||||
*$py.class
|
*.pyo
|
||||||
|
.pytest_cache/
|
||||||
|
.venv/
|
||||||
|
|
||||||
# 虚拟环境
|
# Build & dist
|
||||||
venv/
|
build/
|
||||||
env/
|
dist/
|
||||||
ENV/
|
release/
|
||||||
|
*.spec
|
||||||
|
|
||||||
# 日志文件
|
# Logs & temp
|
||||||
logs/*.log
|
logs/
|
||||||
logs/*.active
|
|
||||||
*.log.*
|
|
||||||
|
|
||||||
# 临时文件和缓存
|
|
||||||
data/temp/
|
data/temp/
|
||||||
data/*.bak
|
|
||||||
*.bak
|
# Runtime outputs
|
||||||
|
data/output/
|
||||||
|
data/result/
|
||||||
|
|
||||||
|
# OS/IDE
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
# 输出文件(可选是否忽略)
|
|
||||||
# data/output/
|
|
||||||
|
|
||||||
# IDE文件
|
|
||||||
.idea/
|
.idea/
|
||||||
.vscode/
|
.vscode/
|
||||||
*.swp
|
|
||||||
*.swo
|
|
||||||
|
|||||||
43
.trae/documents/优化列映射向导的尺寸、置顶行为与字段标签.md
Normal file
43
.trae/documents/优化列映射向导的尺寸、置顶行为与字段标签.md
Normal file
@ -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行与加载列同一行;点击预览行自动写入表头行号;保存后提示成功并写入配置
|
||||||
|
|
||||||
|
请确认以上方案,确认后我将立即实施并验证。
|
||||||
41
.trae/documents/供应商管理GUI与可视化配置方案.md
Normal file
41
.trae/documents/供应商管理GUI与可视化配置方案.md
Normal file
@ -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及其数据流,并将现有向导整合到供应商管理中以形成一站式配置体验。
|
||||||
70
.trae/documents/供应商规则系统全面优化与落地计划.md
Normal file
70
.trae/documents/供应商规则系统全面优化与落地计划.md
Normal file
@ -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:回归修正与打包交付
|
||||||
|
|
||||||
|
确认后我将开始实现上述内容,确保不同供应商可独立配置精细规则并“所见即所得”验证,流程稳定可跑通。
|
||||||
52
.trae/documents/供应商词典与规则编辑器扩展方案.md
Normal file
52
.trae/documents/供应商词典与规则编辑器扩展方案.md
Normal file
@ -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与预览→测试。
|
||||||
30
.trae/documents/修复“验证匹配”面板未加载问题.md
Normal file
30
.trae/documents/修复“验证匹配”面板未加载问题.md
Normal file
@ -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` 相邻区域,确保可见与可用。
|
||||||
|
|
||||||
|
## 验证
|
||||||
|
|
||||||
|
* 启动程序→系统设置→点击“验证匹配”,应正常打开面板无提示。
|
||||||
|
|
||||||
|
* 选择“农夫山泉”与提供的文件后运行验证,查看差异与建议。
|
||||||
|
|
||||||
|
## 预期
|
||||||
|
|
||||||
|
* 面板不再提示重启;功能可用。
|
||||||
|
|
||||||
57
.trae/documents/基于样例结果的验证闭环与规则简化优化.md
Normal file
57
.trae/documents/基于样例结果的验证闭环与规则简化优化.md
Normal file
@ -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:回归测试与打包;提供“农夫山泉”预设并用你的样例验证匹配
|
||||||
|
|
||||||
|
确认后我将实现“验证匹配”面板并接入建议修复,先用你提供的农夫山泉样例跑通闭环,再推广到其它供应商。
|
||||||
54
.trae/documents/继续执行周计划(任务7–10).md
Normal file
54
.trae/documents/继续执行周计划(任务7–10).md
Normal file
@ -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 打包与版本信息,回归测试与文档补充
|
||||||
|
|
||||||
|
确认后我将按以上计划开始实施并逐项提交验证结果。
|
||||||
52
.trae/documents/继续改进并显性呈现改动.md
Normal file
52
.trae/documents/继续改进并显性呈现改动.md
Normal file
@ -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 与功能;提供操作说明与可见验证点。
|
||||||
|
|
||||||
|
请确认以上计划,确认后我将按此逐项实现并验证。
|
||||||
50
.trae/documents/解决“只有订单数量列”场景的可操作方案.md
Normal file
50
.trae/documents/解决“只有订单数量列”场景的可操作方案.md
Normal file
@ -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预览、错误计数与一键测试),并把默认规则与词典预设直接提供出来,确保“只有订单数量列”的场景开箱可用。
|
||||||
42
.trae/documents/通用采购单规范化与规则引擎优化方案.md
Normal file
42
.trae/documents/通用采购单规范化与规则引擎优化方案.md
Normal file
@ -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<num>\d+(?:\.\d+)?)(?P<unit>箱|件|提|盒|瓶)`
|
||||||
|
|
||||||
|
## 验证
|
||||||
|
- 单元测试覆盖规则与表头识别;烟雾测试涵盖“无单位/规格/数量混杂”的样本
|
||||||
|
- GUI预览确认规则效果;保存后热重载处理器
|
||||||
|
|
||||||
|
## 里程碑
|
||||||
|
- Day 1:规则引擎与处理器接入
|
||||||
|
- Day 2:向导规则预览与导入/导出;模板组管理
|
||||||
|
- Day 3:测试与样本库
|
||||||
|
- Day 4:打包与交付验证
|
||||||
|
|
||||||
|
请确认,我将立即开始实现并逐步提交验证结果。
|
||||||
58
README.md
Normal file
58
README.md
Normal file
@ -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元提示)
|
||||||
|
- 蓉城易购新模板适配(第三行表头、单位(订购单位)、多条码拆分、金额映射)
|
||||||
|
|
||||||
@ -605,17 +605,16 @@ class ExcelProcessor:
|
|||||||
Returns:
|
Returns:
|
||||||
表头行索引,如果未找到则返回None
|
表头行索引,如果未找到则返回None
|
||||||
"""
|
"""
|
||||||
# 定义可能的表头关键词
|
|
||||||
header_keywords = [
|
header_keywords = [
|
||||||
'条码', '条形码', '商品条码', '商品名称', '名称', '数量', '单位', '单价',
|
'条码', '条形码', '商品条码', '商品名称', '名称', '数量', '单位', '单价',
|
||||||
'规格', '商品编码', '采购数量', '采购单位', '商品', '品名'
|
'规格', '商品编码', '采购数量', '采购单位', '商品', '品名',
|
||||||
|
'金额', '小计', '总计', '合计', '合计金额'
|
||||||
]
|
]
|
||||||
|
|
||||||
# 存储每行的匹配分数
|
# 存储每行的匹配分数
|
||||||
row_scores = []
|
row_scores = []
|
||||||
|
|
||||||
# 遍历前10行(通常表头不会太靠后)
|
max_rows_to_check = min(30, len(df))
|
||||||
max_rows_to_check = min(10, len(df))
|
|
||||||
for row in range(max_rows_to_check):
|
for row in range(max_rows_to_check):
|
||||||
row_data = df.iloc[row]
|
row_data = df.iloc[row]
|
||||||
score = 0
|
score = 0
|
||||||
|
|||||||
150
app/core/handlers/rule_engine.py
Normal file
150
app/core/handlers/rule_engine.py
Normal file
@ -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
|
||||||
@ -11,6 +11,7 @@ from pathlib import Path
|
|||||||
|
|
||||||
from ..base import BaseProcessor
|
from ..base import BaseProcessor
|
||||||
from ...utils.log_utils import get_logger
|
from ...utils.log_utils import get_logger
|
||||||
|
from ...handlers.rule_engine import apply_rules
|
||||||
|
|
||||||
logger = get_logger(__name__)
|
logger = get_logger(__name__)
|
||||||
|
|
||||||
@ -118,10 +119,17 @@ class GenericSupplierProcessor(BaseProcessor):
|
|||||||
self.logger.error("数据清洗失败")
|
self.logger.error("数据清洗失败")
|
||||||
self.log_processing_end(input_file, success=False)
|
self.log_processing_end(input_file, success=False)
|
||||||
return None
|
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: 计算处理
|
# 步骤4: 计算处理
|
||||||
self.logger.info("步骤4/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:
|
if calculated_df is None:
|
||||||
self.logger.error("计算处理失败")
|
self.logger.error("计算处理失败")
|
||||||
self.log_processing_end(input_file, success=False)
|
self.log_processing_end(input_file, success=False)
|
||||||
@ -205,15 +213,26 @@ class GenericSupplierProcessor(BaseProcessor):
|
|||||||
数据DataFrame或None
|
数据DataFrame或None
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
|
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)
|
df = self._read_excel_safely(file_path)
|
||||||
|
else:
|
||||||
if df.empty:
|
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("数据文件为空")
|
self.logger.warning("数据文件为空")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
self.logger.info(f"成功读取数据,形状: {df.shape}")
|
self.logger.info(f"成功读取数据,形状: {df.shape}")
|
||||||
return df
|
return df
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.logger.error(f"读取数据失败: {e}")
|
self.logger.error(f"读取数据失败: {e}")
|
||||||
return None
|
return None
|
||||||
@ -236,6 +255,40 @@ class GenericSupplierProcessor(BaseProcessor):
|
|||||||
self.logger.error(f"读取Excel失败: {file_path} - {e}")
|
self.logger.error(f"读取Excel失败: {file_path} - {e}")
|
||||||
raise
|
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]:
|
def _apply_column_mapping(self, df: pd.DataFrame) -> Optional[pd.DataFrame]:
|
||||||
"""应用列映射
|
"""应用列映射
|
||||||
|
|
||||||
|
|||||||
48
build_exe.py
48
build_exe.py
@ -121,6 +121,40 @@ def build_exe():
|
|||||||
"""构建EXE文件"""
|
"""构建EXE文件"""
|
||||||
print("开始构建EXE文件...")
|
print("开始构建EXE文件...")
|
||||||
try:
|
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([
|
result = subprocess.run([
|
||||||
'pyinstaller',
|
'pyinstaller',
|
||||||
'OCR订单处理系统.spec'
|
'OCR订单处理系统.spec'
|
||||||
@ -150,6 +184,9 @@ def build_exe():
|
|||||||
if root_config_file.exists():
|
if root_config_file.exists():
|
||||||
shutil.copy2(root_config_file, dist_dir)
|
shutil.copy2(root_config_file, dist_dir)
|
||||||
print(f"已复制根配置文件到dist: {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:
|
except subprocess.CalledProcessError as e:
|
||||||
print(f"构建失败: {e}")
|
print(f"构建失败: {e}")
|
||||||
@ -210,6 +247,17 @@ def create_portable_package():
|
|||||||
print(f"已复制模板文件: {template_file} -> {release_dir / 'templates'}")
|
print(f"已复制模板文件: {template_file} -> {release_dir / 'templates'}")
|
||||||
else:
|
else:
|
||||||
print(f"警告: 模板文件不存在: {template_file}")
|
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文件
|
||||||
readme_content = '''
|
readme_content = '''
|
||||||
|
|||||||
@ -26,3 +26,5 @@ max_file_size_mb = 4
|
|||||||
[Templates]
|
[Templates]
|
||||||
purchase_order = 银豹-采购单模板.xls
|
purchase_order = 银豹-采购单模板.xls
|
||||||
|
|
||||||
|
[App]
|
||||||
|
version = 2025.12.12.1309
|
||||||
|
|||||||
@ -179,6 +179,14 @@
|
|||||||
"map_to": "69021343",
|
"map_to": "69021343",
|
||||||
"description": "条码映射:6923450653012 -> 69021343"
|
"description": "条码映射:6923450653012 -> 69021343"
|
||||||
},
|
},
|
||||||
|
"6923644295844": {
|
||||||
|
"map_to": "6923644285036",
|
||||||
|
"description": "条码映射:6923644295844 -> 6923644285036"
|
||||||
|
},
|
||||||
|
"6907992513157": {
|
||||||
|
"map_to": "6907992513195",
|
||||||
|
"description": "条码映射:6907992513157 -> 6907992513195"
|
||||||
|
},
|
||||||
"6925019900087": {
|
"6925019900087": {
|
||||||
"multiplier": 10,
|
"multiplier": 10,
|
||||||
"target_unit": "瓶",
|
"target_unit": "瓶",
|
||||||
|
|||||||
@ -3,13 +3,26 @@
|
|||||||
{
|
{
|
||||||
"name": "蓉城易购",
|
"name": "蓉城易购",
|
||||||
"description": "蓉城易购供应商订单处理",
|
"description": "蓉城易购供应商订单处理",
|
||||||
"filename_patterns": ["*蓉城*", "*rongcheng*", "*易*"],
|
"filename_patterns": [
|
||||||
"content_indicators": ["蓉城易购", "商品编码", "订货数量"],
|
"*蓉城*",
|
||||||
|
"*rongcheng*",
|
||||||
|
"*易*"
|
||||||
|
],
|
||||||
|
"content_indicators": [
|
||||||
|
"蓉城易购",
|
||||||
|
"商品编码",
|
||||||
|
"订货数量"
|
||||||
|
],
|
||||||
"column_mapping": {
|
"column_mapping": {
|
||||||
"商品编码": "barcode",
|
"商品条码(小条码)": "barcode",
|
||||||
"商品名称": "name",
|
"商品名称": "name",
|
||||||
"订货数量": "quantity",
|
"规格": "specification",
|
||||||
"单价": "unit_price"
|
"订购数量(小单位)": "quantity",
|
||||||
|
"单位": "unit",
|
||||||
|
"单价(小单位)": "unit_price",
|
||||||
|
"优惠后金额(小单位)": "total_price",
|
||||||
|
"备注": "category",
|
||||||
|
"行号": "supplier"
|
||||||
},
|
},
|
||||||
"cleaning_rules": [
|
"cleaning_rules": [
|
||||||
{
|
{
|
||||||
@ -18,7 +31,9 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "fill_na",
|
"type": "fill_na",
|
||||||
"columns": ["unit_price"],
|
"columns": [
|
||||||
|
"unit_price"
|
||||||
|
],
|
||||||
"value": 0
|
"value": 0
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -30,13 +45,57 @@
|
|||||||
"factor": 1
|
"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": "通用食品供应商",
|
"name": "通用食品供应商",
|
||||||
"description": "通用食品类供应商订单",
|
"description": "通用食品类供应商订单",
|
||||||
"filename_patterns": ["*食品*", "*配送*", "*供货*"],
|
"filename_patterns": [
|
||||||
"content_indicators": ["产品条码", "订购量", "进货价"],
|
"*食品*",
|
||||||
|
"*配送*",
|
||||||
|
"*供货*"
|
||||||
|
],
|
||||||
|
"content_indicators": [
|
||||||
|
"产品条码",
|
||||||
|
"订购量",
|
||||||
|
"进货价"
|
||||||
|
],
|
||||||
"column_mapping": {
|
"column_mapping": {
|
||||||
"产品条码": "barcode",
|
"产品条码": "barcode",
|
||||||
"产品名称": "name",
|
"产品名称": "name",
|
||||||
@ -46,16 +105,133 @@
|
|||||||
"cleaning_rules": [
|
"cleaning_rules": [
|
||||||
{
|
{
|
||||||
"type": "convert_type",
|
"type": "convert_type",
|
||||||
"columns": ["unit_price"],
|
"columns": [
|
||||||
|
"unit_price"
|
||||||
|
],
|
||||||
"target_type": "float"
|
"target_type": "float"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "fill_na",
|
"type": "fill_na",
|
||||||
"columns": ["barcode", "name", "quantity"],
|
"columns": [
|
||||||
|
"barcode",
|
||||||
|
"name",
|
||||||
|
"quantity"
|
||||||
|
],
|
||||||
"value": 0
|
"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
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
8
data/user_settings.json
Normal file
8
data/user_settings.json
Normal file
@ -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"
|
||||||
|
]
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@ -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: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,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-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, 单位: 盒
|
||||||
|
|||||||
@ -161,3 +161,97 @@
|
|||||||
2025-11-15 18:00:07,582 - app.core.excel.merger - INFO - 找到 3 个采购单Excel文件
|
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,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-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
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -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,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,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-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位
|
||||||
|
|||||||
@ -14,3 +14,8 @@
|
|||||||
2025-11-15 16:39:06,073 - app.core.ocr.baidu_ocr - INFO - 成功获取访问令牌
|
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 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-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 - 成功获取访问令牌
|
||||||
|
|||||||
@ -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: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,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-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
|
||||||
|
|||||||
@ -1 +1,4 @@
|
|||||||
2025-11-14 21:55:05,688 - app.core.utils.file_utils - WARNING - 未在目录 data/output 中找到符合条件的文件
|
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 中找到符合条件的文件
|
||||||
|
|||||||
@ -535,3 +535,55 @@
|
|||||||
2025-11-15 18:00:04,120 - app.services.ocr_service - INFO - OCRService初始化完成
|
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,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-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
|
||||||
|
|||||||
@ -591,3 +591,100 @@
|
|||||||
2025-11-15 18:01:51,643 - app.services.order_service - INFO - 初始化OrderService
|
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,715 - app.services.order_service - INFO - OrderService初始化完成
|
||||||
2025-11-15 18:01:51,763 - app.services.order_service - INFO - OrderService开始处理最新Excel文件
|
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
|
||||||
|
|||||||
BIN
templates/商品资料.xlsx
Normal file
BIN
templates/商品资料.xlsx
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user