From 14eeb7b39a8089035e4c0184ce5f9a333b2ef7b2 Mon Sep 17 00:00:00 2001 From: houhuan Date: Fri, 2 May 2025 18:52:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E5=BF=97=E5=90=8C=E6=AD=A5=E5=88=B0?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=8F=B0=E6=98=BE=E7=A4=BA=EF=BC=8C=E5=A4=84?= =?UTF-8?q?=E7=90=86=E9=80=BB=E8=BE=91=E5=A2=9E=E5=BC=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__pycache__/converter.cpython-39.pyc | Bin 7535 -> 7531 bytes .../__pycache__/processor.cpython-39.pyc | Bin 11672 -> 15608 bytes app/core/excel/converter.py | 4 +- app/core/excel/processor.py | 153 ++++++++- data/output/processed_files.json | 2 +- data/output/微信图片_20250227193150(1).xlsx | Bin 10790 -> 10754 bytes .../采购单_微信图片_20250227193150(1).xls | Bin 0 -> 5632 bytes logs/__main__.active | 2 +- logs/__main__.log | 12 + logs/app.core.excel.converter.active | 2 +- logs/app.core.excel.converter.log | 74 +++++ logs/app.core.excel.merger.active | 2 +- logs/app.core.excel.merger.log | 12 + logs/app.core.excel.processor.active | 2 +- logs/app.core.excel.processor.log | 294 ++++++++++++++++++ logs/app.core.ocr.baidu_ocr.active | 2 +- logs/app.core.ocr.table_ocr.active | 2 +- logs/app.core.ocr.table_ocr.log | 24 ++ logs/app.core.utils.file_utils.active | 2 +- logs/app.services.ocr_service.active | 2 +- logs/app.services.ocr_service.log | 12 + logs/app.services.order_service.active | 2 +- logs/app.services.order_service.log | 18 ++ 启动器.py | 41 ++- 24 files changed, 631 insertions(+), 33 deletions(-) create mode 100644 data/output/采购单_微信图片_20250227193150(1).xls diff --git a/app/core/excel/__pycache__/converter.cpython-39.pyc b/app/core/excel/__pycache__/converter.cpython-39.pyc index ab54b9a50e264aada437fae8e015b1b84c9a476c..a4bc686eb8e80ae1e4b142f016389bc8d8e92b7f 100644 GIT binary patch delta 71 zcmaEF_1cOzk(ZZ?0SGoM5Xnf{$g3;DIBm1F$Qwr4vKsyriBiT1OhsWe{Ivo#tTh56 Z47J=fY(Npd%^qSqSQ%M1Gs@&K0s!556K4Pb delta 75 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 Di<|!t diff --git a/app/core/excel/converter.py b/app/core/excel/converter.py index a0cfd39..30c11d4 100644 --- a/app/core/excel/converter.py +++ b/app/core/excel/converter.py @@ -301,8 +301,8 @@ class UnitConverter: if unit in ['提', '盒']: # 如果是三级规格,按件处理 if level3 is not None: - # 计算包装数量 - packaging_count = level2 * level3 + # 计算包装数量 - 只乘以最后一级数量 + packaging_count = level3 # 数量×包装数量 new_quantity = quantity * packaging_count diff --git a/app/core/excel/processor.py b/app/core/excel/processor.py index 0919dad..c36affe 100644 --- a/app/core/excel/processor.py +++ b/app/core/excel/processor.py @@ -171,14 +171,40 @@ class ExcelProcessor: possible_barcode_columns = [ '条码', '条形码', '商品条码', '商品条形码', '商品编码', '商品编号', '条形码', '条码(必填)', - 'barcode', 'Barcode', '编码', '条形码' + 'barcode', 'Barcode', '编码', '条形码', '电脑条码', + '条码ID', '产品条码', 'BarCode' ] found_columns = [] + + # 检查精确匹配 for col in df.columns: col_str = str(col).strip() if col_str in possible_barcode_columns: found_columns.append(col) + logger.info(f"找到精确匹配的条码列: {col_str}") + + # 如果找不到精确匹配,尝试部分匹配 + if not found_columns: + for col in df.columns: + col_str = str(col).strip().lower() + for keyword in ['条码', '条形码', 'barcode', '编码']: + if keyword.lower() in col_str: + found_columns.append(col) + logger.info(f"找到部分匹配的条码列: {col} (包含关键词: {keyword})") + break + + # 如果仍然找不到,尝试使用数据特征识别 + if not found_columns and len(df) > 0: + for col in df.columns: + # 检查此列数据是否符合条码特征 + sample_values = df[col].dropna().astype(str).tolist()[:10] # 取前10个非空值 + + if sample_values and all(len(val) >= 8 and len(val) <= 14 for val in sample_values): + # 大多数条码长度在8-14之间 + if all(val.isdigit() for val in sample_values): + found_columns.append(col) + logger.info(f"基于数据特征识别的可能条码列: {col}") return found_columns @@ -192,6 +218,10 @@ class ExcelProcessor: Returns: 商品信息列表 """ + # 清理数据:移除全空行 + df = df.dropna(how='all') + logger.info(f"移除空行后,有效数据行数: {len(df)}") + # 提取有用的列 barcode_cols = self.extract_barcode(df) @@ -202,36 +232,53 @@ class ExcelProcessor: # 定义列名映射 column_mapping = { - 'name': ['商品名称', '名称', '品名', '商品', '商品名', '商品或服务名称', '品项名'], - 'specification': ['规格', '规格型号', '型号', '商品规格'], - 'quantity': ['数量', '采购数量', '购买数量', '采购数量', '订单数量', '数量(必填)'], - 'unit': ['单位', '采购单位', '计量单位', '单位(必填)'], - 'price': ['单价', '价格', '采购单价', '销售价', '进货价', '单价(必填)'] + 'name': ['商品名称', '名称', '品名', '商品', '商品名', '商品或服务名称', '品项名', '产品名称', '品项'], + 'specification': ['规格', '规格型号', '型号', '商品规格', '产品规格', '包装规格'], + 'quantity': ['数量', '采购数量', '购买数量', '采购数量', '订单数量', '数量(必填)', '入库数', '入库数量'], + 'unit': ['单位', '采购单位', '计量单位', '单位(必填)', '单位名称', '计价单位'], + 'price': ['单价', '价格', '采购单价', '销售价', '进货价', '单价(必填)', '采购价', '参考价', '入库单价'] } # 映射列名到标准名称 mapped_columns = {'barcode': barcode_cols[0]} # 使用第一个找到的条码列 + # 记录列名映射详情 + logger.info(f"使用条码列: {mapped_columns['barcode']}") + for target, possible_names in column_mapping.items(): for col in df.columns: col_str = str(col).strip() for name in possible_names: if col_str == name: mapped_columns[target] = col + logger.info(f"找到{target}列: {col}") break if target in mapped_columns: break + + # 如果没有找到精确匹配,尝试部分匹配 + if target not in mapped_columns: + for col in df.columns: + col_str = str(col).strip().lower() + for name in possible_names: + if name.lower() in col_str: + mapped_columns[target] = col + logger.info(f"找到{target}列(部分匹配): {col}") + break + if target in mapped_columns: + break logger.info(f"列名映射结果: {mapped_columns}") # 提取商品信息 products = [] - for _, row in df.iterrows(): + for idx, row in df.iterrows(): barcode = row.get(mapped_columns['barcode']) # 跳过空行或无效条码 if pd.isna(barcode) or not self.validate_barcode(barcode): + logger.debug(f"跳过第{idx+1}行: 条码为空或无效 [{barcode}]") continue # 创建商品信息字典 @@ -244,9 +291,12 @@ class ExcelProcessor: 'price': extract_number(str(row.get(mapped_columns.get('price', ''), 0))) or 0 } + logger.info(f"第{idx+1}行: 提取商品信息 条码={product['barcode']}, 名称={product['name']}, 规格={product['specification']}, 数量={product['quantity']}, 单位={product['unit']}, 单价={product['price']}") + # 如果商品名称为空但商品条码不为空,则使用条码作为名称 if not product['name'] and product['barcode']: product['name'] = f"商品 ({product['barcode']})" + logger.info(f"商品名称为空,使用条码作为名称: {product['name']}") # 推断规格 if not product['specification'] and product['name']: @@ -257,7 +307,7 @@ class ExcelProcessor: # 单位处理:如果单位为空但数量包含单位信息 quantity_str = str(row.get(mapped_columns.get('quantity', ''), '')) - if not product['unit'] and '数量' in mapped_columns: + if not product['unit'] and 'quantity' in mapped_columns: num, unit = self.unit_converter.extract_unit_from_quantity(quantity_str) if unit: product['unit'] = unit @@ -398,6 +448,77 @@ class ExcelProcessor: logger.error(f"填充模板时出错: {e}") return False + def _find_header_row(self, df: pd.DataFrame) -> Optional[int]: + """ + 自动识别表头行 + + 通过多种规则识别表头: + 1. 检查行是否包含典型的表头关键词(条码、商品名称、数量等) + 2. 检查是否是第一个非空行 + 3. 检查行是否有较多的字符串类型单元格(表头通常是字符串) + + Args: + df: 数据帧 + + Returns: + 表头行索引,如果未找到则返回None + """ + # 定义可能的表头关键词 + header_keywords = [ + '条码', '条形码', '商品条码', '商品名称', '名称', '数量', '单位', '单价', + '规格', '商品编码', '采购数量', '采购单位', '商品', '品名' + ] + + # 存储每行的匹配分数 + row_scores = [] + + # 遍历前10行(通常表头不会太靠后) + max_rows_to_check = min(10, len(df)) + for row in range(max_rows_to_check): + row_data = df.iloc[row] + score = 0 + + # 检查1: 关键词匹配 + for cell in row_data: + if isinstance(cell, str): + cell_clean = str(cell).strip().lower() + for keyword in header_keywords: + if keyword.lower() in cell_clean: + score += 5 # 每匹配一个关键词加5分 + + # 检查2: 非空单元格比例 + non_empty_cells = row_data.count() + if non_empty_cells / len(row_data) > 0.5: # 如果超过一半的单元格有内容 + score += 2 + + # 检查3: 字符串类型单元格比例 + string_cells = sum(1 for cell in row_data if isinstance(cell, str)) + if string_cells / len(row_data) > 0.5: # 如果超过一半的单元格是字符串 + score += 3 + + row_scores.append((row, score)) + + # 日志记录每行的评分情况 + logger.debug(f"第{row+1}行评分: {score},内容: {row_data.values}") + + # 按评分排序 + row_scores.sort(key=lambda x: x[1], reverse=True) + + # 如果最高分达到一定阈值,认为是表头 + if row_scores and row_scores[0][1] >= 5: + best_row = row_scores[0][0] + logger.info(f"找到可能的表头行: 第{best_row+1}行,评分: {row_scores[0][1]}") + return best_row + + # 如果没有找到明确的表头,尝试找第一个非空行 + for row in range(len(df)): + if df.iloc[row].notna().sum() > 3: # 至少有3个非空单元格 + logger.info(f"未找到明确表头,使用第一个有效行: 第{row+1}行") + return row + + logger.warning("无法识别表头行") + return None + def process_specific_file(self, file_path: str) -> Optional[str]: """ 处理指定的Excel文件 @@ -415,10 +536,22 @@ class ExcelProcessor: return None try: - # 读取Excel文件 - df = pd.read_excel(file_path) + # 读取Excel文件时不立即指定表头 + df = pd.read_excel(file_path, header=None) logger.info(f"成功读取Excel文件: {file_path}, 共 {len(df)} 行") + # 自动识别表头行 + header_row = self._find_header_row(df) + if header_row is None: + logger.error("无法识别表头行") + return None + + logger.info(f"识别到表头在第 {header_row+1} 行") + + # 重新读取Excel,正确指定表头行 + df = pd.read_excel(file_path, header=header_row) + logger.info(f"使用表头行重新读取数据,共 {len(df)} 行有效数据") + # 提取商品信息 products = self.extract_product_info(df) diff --git a/data/output/processed_files.json b/data/output/processed_files.json index 077404a..3cc8c6b 100644 --- a/data/output/processed_files.json +++ b/data/output/processed_files.json @@ -1,3 +1,3 @@ { - + "D:\\My Documents\\python\\orc-order-v2\\data\\output\\微信图片_20250227193150(1).xlsx": "D:\\My Documents\\python\\orc-order-v2\\data\\output\\采购单_微信图片_20250227193150(1).xls" } \ No newline at end of file diff --git a/data/output/微信图片_20250227193150(1).xlsx b/data/output/微信图片_20250227193150(1).xlsx index ba110830edbb06d3b79d913c52389ca47fd42b19..7db12e3a54faf842d39885763c9d13aab0c27d3a 100644 GIT binary patch delta 5457 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 diff --git a/data/output/采购单_微信图片_20250227193150(1).xls b/data/output/采购单_微信图片_20250227193150(1).xls new file mode 100644 index 0000000000000000000000000000000000000000..e843746125fa029aa9369f3e7375bb4fad1e0d40 GIT binary patch literal 5632 zcmeHLU1(fI6#nM!-Ob)6+iuo0XoR>Ft+v*(Ki6azY&R*`7NxP87V8hR+jP}6v5{>M zE2!0)zDS_KC$$e2>_Z={3W7?j*oUeQLPQ?~e-nN5MM2Sr*7ZB*?%&<4fuLBFo#mc8 z=jWR_bLPy<-T8E`d;a8`eG6zRn-RbtWe1@KxnbR@@=;JCFDsb`HuhdWsCZdH{!!4 zQiBteti)C7RZQua(kqm{u9oMN4yj~D=_bT5Z|=ohZe)FiZGkQAvDT<=C8@#NiuqC{ zNvy`lv?)J*T#}vIAcjlD{KREYaOAbluff;q)j0`=bquSpqc~QYJT&>hRQ#U&_Chhq zz`R9W4(d3~9BeO4JXV-0j^&f+QGD1_;utLR{C%T$^xIu{6`b~Mg@c7sexl#*#3{*u z#Kr{6JYhi^{929!zp!yFAH>^o3B|ol> z4yF>Rv^$`D>gGf;n`Po=1{?K>)PSFN6KTk7OV3Cp5C`Rb>4=J3q2kWOC|#lpJj^y)~g3MDt%V^#MN5w zQ!1MPeO|kBb)~ZPsMyFF^$qnKSfBp!&UgB!f5@$4{miz7Cwk6&kvqwx zbr=m9fx%I1FdNKEFG_hgSA84q*%GC1lzKaU<6a-OcxJH#QPN#{$gIMp%6MX`@i=Km z3_Q-NwCZsIa)Fx8CdVX(v@D1qqc5e}viKUM6nM&7!Ma7Rx5nA5ZzLyZ@w*u<5sm7} zDrlLjC}ZxmWwGC0yv)fLw0P8v<~pFg9L|CcC|XWwj}!E_ 15.0, 单价: 0 -> 0, 单位: 件 -> 瓶 2025-05-02 17:57:42,346 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 2025-05-02 17:57:42,346 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 0 -> 0, 单位: 件 -> 瓶 +2025-05-02 18:27:30,825 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:27:30,825 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-05-02 18:27:30,826 - app.core.excel.converter - INFO - 特殊条码处理: 6925019900087, 数量: 1.0 -> 10.0, 单价: 55.0 -> 5.5, 单位: 副 -> 瓶 +2025-05-02 18:27:30,826 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:27:30,826 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-05-02 18:27:30,827 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:27:30,827 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-05-02 18:27:30,827 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:27:30,827 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 65.0 -> 4.333333333333333, 单位: 件 -> 瓶 +2025-05-02 18:27:30,828 - app.core.excel.converter - INFO - 解析三级规格: 1*6*15 -> 1*6*15 +2025-05-02 18:27:30,828 - app.core.excel.converter - INFO - 提/盒单位(三级规格)处理: 数量: 1.0 -> 90.0, 单价: 65.0 -> 0.7222222222222222, 单位: 提 -> 瓶 +2025-05-02 18:27:30,828 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:27:30,828 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 0 -> 0, 单位: 件 -> 瓶 +2025-05-02 18:27:30,829 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:27:30,829 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 0 -> 0, 单位: 件 -> 瓶 +2025-05-02 18:31:29,887 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:31:29,887 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-05-02 18:31:29,887 - app.core.excel.converter - INFO - 特殊条码处理: 6925019900087, 数量: 1.0 -> 10.0, 单价: 55.0 -> 5.5, 单位: 副 -> 瓶 +2025-05-02 18:31:29,888 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:31:29,888 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-05-02 18:31:29,888 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:31:29,888 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-05-02 18:31:29,889 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:31:29,889 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 65.0 -> 4.333333333333333, 单位: 件 -> 瓶 +2025-05-02 18:31:29,889 - app.core.excel.converter - INFO - 解析三级规格: 1*6*15 -> 1*6*15 +2025-05-02 18:31:29,890 - app.core.excel.converter - INFO - 提/盒单位(三级规格)处理: 数量: 1.0 -> 90.0, 单价: 65.0 -> 0.7222222222222222, 单位: 提 -> 瓶 +2025-05-02 18:31:29,890 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:31:29,890 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 0 -> 0, 单位: 件 -> 瓶 +2025-05-02 18:31:29,891 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:31:29,891 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 0 -> 0, 单位: 件 -> 瓶 +2025-05-02 18:31:29,891 - app.core.excel.converter - INFO - 解析三级规格: 1*9*8 -> 1*9*8 +2025-05-02 18:31:29,896 - app.core.excel.converter - INFO - 提/盒单位(三级规格)处理: 数量: 1.0 -> 72.0, 单价: 16.0 -> 0.2222222222222222, 单位: 盒 -> 瓶 +2025-05-02 18:33:05,848 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:33:05,848 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-05-02 18:33:05,849 - app.core.excel.converter - INFO - 特殊条码处理: 6925019900087, 数量: 1.0 -> 10.0, 单价: 55.0 -> 5.5, 单位: 副 -> 瓶 +2025-05-02 18:33:05,849 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:33:05,849 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-05-02 18:33:05,850 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:33:05,850 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-05-02 18:33:05,851 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:33:05,851 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 65.0 -> 4.333333333333333, 单位: 件 -> 瓶 +2025-05-02 18:33:05,851 - app.core.excel.converter - INFO - 解析三级规格: 1*6*15 -> 1*6*15 +2025-05-02 18:33:05,851 - app.core.excel.converter - INFO - 提/盒单位(三级规格)处理: 数量: 1.0 -> 90.0, 单价: 65.0 -> 0.7222222222222222, 单位: 提 -> 瓶 +2025-05-02 18:33:05,851 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:33:05,851 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 0 -> 0, 单位: 件 -> 瓶 +2025-05-02 18:33:05,852 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:33:05,852 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 0 -> 0, 单位: 件 -> 瓶 +2025-05-02 18:33:05,852 - app.core.excel.converter - INFO - 解析三级规格: 1*9*8 -> 1*9*8 +2025-05-02 18:33:05,865 - app.core.excel.converter - INFO - 提/盒单位(三级规格)处理: 数量: 1.0 -> 72.0, 单价: 16.0 -> 0.2222222222222222, 单位: 盒 -> 瓶 +2025-05-02 18:38:53,628 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:38:53,628 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-05-02 18:38:53,630 - app.core.excel.converter - INFO - 特殊条码处理: 6925019900087, 数量: 1.0 -> 10.0, 单价: 55.0 -> 5.5, 单位: 副 -> 瓶 +2025-05-02 18:38:53,630 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:38:53,631 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-05-02 18:38:53,632 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:38:53,632 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 55.0 -> 3.6666666666666665, 单位: 件 -> 瓶 +2025-05-02 18:38:53,634 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:38:53,635 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 65.0 -> 4.333333333333333, 单位: 件 -> 瓶 +2025-05-02 18:38:53,636 - app.core.excel.converter - INFO - 解析三级规格: 1*6*15 -> 1*6*15 +2025-05-02 18:38:53,636 - app.core.excel.converter - INFO - 提/盒单位(三级规格)处理: 数量: 1.0 -> 15.0, 单价: 65.0 -> 4.333333333333333, 单位: 提 -> 瓶 +2025-05-02 18:38:53,637 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:38:53,638 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 0 -> 0, 单位: 件 -> 瓶 +2025-05-02 18:38:53,640 - app.core.excel.converter - INFO - 解析二级规格: 1*15 -> 1*15 +2025-05-02 18:38:53,640 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 15.0, 单价: 0 -> 0, 单位: 件 -> 瓶 +2025-05-02 18:38:53,666 - app.core.excel.converter - INFO - 解析三级规格: 1*9*8 -> 1*9*8 +2025-05-02 18:38:53,666 - app.core.excel.converter - INFO - 提/盒单位(三级规格)处理: 数量: 1.0 -> 8.0, 单价: 16.0 -> 2.0, 单位: 盒 -> 瓶 +2025-05-02 18:41:17,311 - app.core.excel.converter - INFO - 从名称推断规格(入): 无糖茶栀栀乌龙*15入纸箱 -> 1*5 +2025-05-02 18:41:17,311 - app.core.excel.converter - INFO - 解析二级规格: 1*5 -> 1*5 +2025-05-02 18:41:17,311 - app.core.excel.converter - INFO - 件单位处理: 数量: 1.0 -> 5.0, 单价: 55.0 -> 11.0, 单位: 件 -> 瓶 +2025-05-02 18:41:17,312 - app.core.excel.converter - INFO - 从名称推断规格(入): 无糖茶茉莉龙井16入纸箱 -> 1*6 +2025-05-02 18:41:17,312 - app.core.excel.converter - INFO - 特殊条码处理: 6925019900087, 数量: 1.0 -> 10.0, 单价: 55.0 -> 5.5, 单位: 副 -> 瓶 +2025-05-02 18:41:17,314 - app.core.excel.converter - INFO - 从名称推断规格(入): 450ml轻乳茶大红袍乌龙12入纸箱 -> 1*2 +2025-05-02 18:41:17,315 - app.core.excel.converter - INFO - 解析二级规格: 1*2 -> 1*2 +2025-05-02 18:41:17,315 - app.core.excel.converter - INFO - 提/盒单位(二级规格)处理: 保持原样 数量: 1.0, 单价: 65.0, 单位: 提 diff --git a/logs/app.core.excel.merger.active b/logs/app.core.excel.merger.active index ab58f88..b92430b 100644 --- a/logs/app.core.excel.merger.active +++ b/logs/app.core.excel.merger.active @@ -1 +1 @@ -Active since: 2025-05-02 18:01:40 \ No newline at end of file +Active since: 2025-05-02 18:41:16 \ No newline at end of file diff --git a/logs/app.core.excel.merger.log b/logs/app.core.excel.merger.log index 8120af7..ccaa994 100644 --- a/logs/app.core.excel.merger.log +++ b/logs/app.core.excel.merger.log @@ -40,3 +40,15 @@ 2025-05-02 18:01:27,765 - app.core.excel.merger - INFO - 初始化完成,模板文件: templates\银豹-采购单模板.xls 2025-05-02 18:01:40,471 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger 2025-05-02 18:01:40,472 - app.core.excel.merger - INFO - 初始化完成,模板文件: templates\银豹-采购单模板.xls +2025-05-02 18:16:10,313 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger +2025-05-02 18:16:10,314 - app.core.excel.merger - INFO - 初始化完成,模板文件: templates\银豹-采购单模板.xls +2025-05-02 18:27:30,081 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger +2025-05-02 18:27:30,082 - app.core.excel.merger - INFO - 初始化完成,模板文件: templates\银豹-采购单模板.xls +2025-05-02 18:31:29,327 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger +2025-05-02 18:31:29,328 - app.core.excel.merger - INFO - 初始化完成,模板文件: templates\银豹-采购单模板.xls +2025-05-02 18:33:05,101 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger +2025-05-02 18:33:05,103 - app.core.excel.merger - INFO - 初始化完成,模板文件: templates\银豹-采购单模板.xls +2025-05-02 18:38:52,880 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger +2025-05-02 18:38:52,881 - app.core.excel.merger - INFO - 初始化完成,模板文件: templates\银豹-采购单模板.xls +2025-05-02 18:41:16,743 - app.core.excel.merger - INFO - 初始化PurchaseOrderMerger +2025-05-02 18:41:16,743 - app.core.excel.merger - INFO - 初始化完成,模板文件: templates\银豹-采购单模板.xls diff --git a/logs/app.core.excel.processor.active b/logs/app.core.excel.processor.active index ab58f88..b92430b 100644 --- a/logs/app.core.excel.processor.active +++ b/logs/app.core.excel.processor.active @@ -1 +1 @@ -Active since: 2025-05-02 18:01:40 \ No newline at end of file +Active since: 2025-05-02 18:41:16 \ No newline at end of file diff --git a/logs/app.core.excel.processor.log b/logs/app.core.excel.processor.log index 1fe2fc9..8d03679 100644 --- a/logs/app.core.excel.processor.log +++ b/logs/app.core.excel.processor.log @@ -163,3 +163,297 @@ 2025-05-02 18:01:41,097 - app.core.excel.processor - INFO - 成功读取Excel文件: D:\My Documents\python\orc-order-v2\data\output\微信图片_20250227193150(1).xlsx, 共 12 行 2025-05-02 18:01:41,097 - app.core.excel.processor - ERROR - 未找到条码列,无法处理 2025-05-02 18:01:41,097 - app.core.excel.processor - WARNING - 未提取到有效商品信息 +2025-05-02 18:16:10,312 - app.core.excel.processor - INFO - 初始化ExcelProcessor +2025-05-02 18:16:10,313 - app.core.excel.processor - INFO - 初始化完成,模板文件: templates\银豹-采购单模板.xls +2025-05-02 18:16:10,314 - app.core.excel.processor - INFO - 开始处理Excel文件: D:\My Documents\python\orc-order-v2\data\output\微信图片_20250227193150(1).xlsx +2025-05-02 18:16:10,958 - app.core.excel.processor - INFO - 成功读取Excel文件: D:\My Documents\python\orc-order-v2\data\output\微信图片_20250227193150(1).xlsx, 共 12 行 +2025-05-02 18:16:10,959 - app.core.excel.processor - ERROR - 未找到条码列,无法处理 +2025-05-02 18:16:10,959 - app.core.excel.processor - WARNING - 未提取到有效商品信息 +2025-05-02 18:27:30,080 - app.core.excel.processor - INFO - 初始化ExcelProcessor +2025-05-02 18:27:30,081 - app.core.excel.processor - INFO - 初始化完成,模板文件: templates\银豹-采购单模板.xls +2025-05-02 18:27:30,083 - app.core.excel.processor - INFO - 开始处理Excel文件: D:\My Documents\python\orc-order-v2\data\output\微信图片_20250227193150(1).xlsx +2025-05-02 18:27:30,780 - app.core.excel.processor - INFO - 成功读取Excel文件: D:\My Documents\python\orc-order-v2\data\output\微信图片_20250227193150(1).xlsx, 共 13 行 +2025-05-02 18:27:30,783 - app.core.excel.processor - INFO - 找到可能的表头行: 第2行,评分: 35 +2025-05-02 18:27:30,783 - app.core.excel.processor - INFO - 识别到表头在第 2 行 +2025-05-02 18:27:30,821 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 11 行有效数据 +2025-05-02 18:27:30,822 - app.core.excel.processor - INFO - 移除空行后,有效数据行数: 11 +2025-05-02 18:27:30,823 - app.core.excel.processor - INFO - 找到精确匹配的条码列: 条码 +2025-05-02 18:27:30,823 - app.core.excel.processor - INFO - 使用条码列: 条码 +2025-05-02 18:27:30,823 - app.core.excel.processor - INFO - 找到name列(部分匹配): 商品全名 +2025-05-02 18:27:30,823 - app.core.excel.processor - INFO - 找到specification列: 规格 +2025-05-02 18:27:30,823 - app.core.excel.processor - INFO - 找到quantity列: 数量 +2025-05-02 18:27:30,823 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-05-02 18:27:30,824 - app.core.excel.processor - INFO - 找到price列: 单价 +2025-05-02 18:27:30,824 - app.core.excel.processor - INFO - 列名映射结果: {'barcode': '条码', 'name': '商品全名', 'specification': '规格', 'quantity': '数量', 'unit': '单位', 'price': '单价'} +2025-05-02 18:27:30,825 - app.core.excel.processor - INFO - 第1行: 提取商品信息 条码=6973497202346, 名称=无糖茶栀栀乌龙, 规格=1*15, 数量=1.0, 单位=件, 单价=55.0 +2025-05-02 18:27:30,826 - app.core.excel.processor - INFO - 第2行: 提取商品信息 条码=6925019900087, 名称=无糖茶茉莉龙井, 规格=1*15, 数量=1.0, 单位=副, 单价=55.0 +2025-05-02 18:27:30,826 - app.core.excel.processor - INFO - 第3行: 提取商品信息 条码=6973497200267, 名称=活力水平衡香水柠檬味, 规格=1*15, 数量=1.0, 单位=件, 单价=55.0 +2025-05-02 18:27:30,827 - app.core.excel.processor - INFO - 第4行: 提取商品信息 条码=6973497200403, 名称=活力水平衡红提味, 规格=1*15, 数量=1.0, 单位=件, 单价=55.0 +2025-05-02 18:27:30,827 - app.core.excel.processor - INFO - 第5行: 提取商品信息 条码=6873497204449, 名称=450ml轻乳茶桂花乌龙, 规格=1*15, 数量=1.0, 单位=件, 单价=65.0 +2025-05-02 18:27:30,828 - app.core.excel.processor - INFO - 第6行: 提取商品信息 条码=6973497204432, 名称=450ml轻乳茶大红袍乌龙, 规格=1*6*15, 数量=1.0, 单位=提, 单价=65.0 +2025-05-02 18:27:30,828 - app.core.excel.processor - INFO - 第7行: 提取商品信息 条码=6973497202360, 名称=无糖茶金桂乌龙, 规格=1*15, 数量=1.0, 单位=件, 单价=0 +2025-05-02 18:27:30,829 - app.core.excel.processor - INFO - 第8行: 提取商品信息 条码=6973497202889, 名称=无糖茶青柑乌龙, 规格=1*15, 数量=1.0, 单位=件, 单价=0 +2025-05-02 18:27:30,830 - app.core.excel.processor - INFO - 提取到 8 个商品信息 +2025-05-02 18:27:30,840 - app.core.excel.processor - INFO - 开始处理8 个产品信息 +2025-05-02 18:27:30,840 - app.core.excel.processor - INFO - 处理商品: 条码=6973497202346, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-05-02 18:27:30,840 - app.core.excel.processor - INFO - 发现正常商品:条码6973497202346, 数量=15.0, 单价=3.6666666666666665 +2025-05-02 18:27:30,840 - app.core.excel.processor - INFO - 处理商品: 条码=6925019900087, 数量=10.0, 单价=5.5, 是否赠品=False +2025-05-02 18:27:30,840 - app.core.excel.processor - INFO - 发现正常商品:条码6925019900087, 数量=10.0, 单价=5.5 +2025-05-02 18:27:30,840 - app.core.excel.processor - INFO - 处理商品: 条码=6973497200267, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-05-02 18:27:30,841 - app.core.excel.processor - INFO - 发现正常商品:条码6973497200267, 数量=15.0, 单价=3.6666666666666665 +2025-05-02 18:27:30,841 - app.core.excel.processor - INFO - 处理商品: 条码=6973497200403, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-05-02 18:27:30,951 - app.core.excel.processor - INFO - 发现正常商品:条码6973497200403, 数量=15.0, 单价=3.6666666666666665 +2025-05-02 18:27:30,951 - app.core.excel.processor - INFO - 处理商品: 条码=6873497204449, 数量=15.0, 单价=4.333333333333333, 是否赠品=False +2025-05-02 18:27:30,951 - app.core.excel.processor - INFO - 发现正常商品:条码6873497204449, 数量=15.0, 单价=4.333333333333333 +2025-05-02 18:27:30,951 - app.core.excel.processor - INFO - 处理商品: 条码=6973497204432, 数量=90.0, 单价=0.7222222222222222, 是否赠品=False +2025-05-02 18:27:30,951 - app.core.excel.processor - INFO - 发现正常商品:条码6973497204432, 数量=90.0, 单价=0.7222222222222222 +2025-05-02 18:27:30,952 - app.core.excel.processor - INFO - 处理商品: 条码=6973497202360, 数量=15.0, 单价=0, 是否赠品=True +2025-05-02 18:27:30,952 - app.core.excel.processor - INFO - 发现赠品:条码6973497202360, 数量=15.0 +2025-05-02 18:27:30,952 - app.core.excel.processor - INFO - 处理商品: 条码=6973497202889, 数量=15.0, 单价=0, 是否赠品=True +2025-05-02 18:27:30,952 - app.core.excel.processor - INFO - 发现赠品:条码6973497202889, 数量=15.0 +2025-05-02 18:27:30,952 - app.core.excel.processor - INFO - 分组后共8 个不同条码的商品 +2025-05-02 18:27:30,952 - app.core.excel.processor - INFO - 条码 6973497202346 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-05-02 18:27:30,952 - app.core.excel.processor - INFO - 条码 6925019900087 处理结果:正常商品数量10.0,单价5.5,赠品数量0 +2025-05-02 18:27:30,952 - app.core.excel.processor - INFO - 条码 6973497200267 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-05-02 18:27:30,952 - app.core.excel.processor - INFO - 条码 6973497200403 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-05-02 18:27:30,952 - app.core.excel.processor - INFO - 条码 6873497204449 处理结果:正常商品数量15.0,单价4.333333333333333,赠品数量0 +2025-05-02 18:27:30,952 - app.core.excel.processor - INFO - 条码 6973497204432 处理结果:正常商品数量90.0,单价0.7222222222222222,赠品数量0 +2025-05-02 18:27:30,952 - app.core.excel.processor - INFO - 条码 6973497202360 处理结果:只有赠品,数量=15.0 +2025-05-02 18:27:30,952 - app.core.excel.processor - INFO - 条码 6973497202889 处理结果:只有赠品,数量=15.0 +2025-05-02 18:27:30,953 - app.core.excel.processor - INFO - 条码 6973497202360 填充:仅有赠品,采购量=0,赠品数量=15.0 +2025-05-02 18:27:30,953 - app.core.excel.processor - INFO - 条码 6973497202889 填充:仅有赠品,采购量=0,赠品数量=15.0 +2025-05-02 18:27:30,955 - app.core.excel.processor - INFO - 采购单已保存到: D:\My Documents\python\orc-order-v2\data\output\采购单_微信图片_20250227193150(1).xls +2025-05-02 18:31:29,326 - app.core.excel.processor - INFO - 初始化ExcelProcessor +2025-05-02 18:31:29,327 - app.core.excel.processor - INFO - 初始化完成,模板文件: templates\银豹-采购单模板.xls +2025-05-02 18:31:29,329 - app.core.excel.processor - INFO - 开始处理Excel文件: D:\My Documents\python\orc-order-v2\data\output\微信图片_20250227193150(1).xlsx +2025-05-02 18:31:29,849 - app.core.excel.processor - INFO - 成功读取Excel文件: D:\My Documents\python\orc-order-v2\data\output\微信图片_20250227193150(1).xlsx, 共 13 行 +2025-05-02 18:31:29,852 - app.core.excel.processor - INFO - 找到可能的表头行: 第2行,评分: 35 +2025-05-02 18:31:29,852 - app.core.excel.processor - INFO - 识别到表头在第 2 行 +2025-05-02 18:31:29,884 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 11 行有效数据 +2025-05-02 18:31:29,885 - app.core.excel.processor - INFO - 移除空行后,有效数据行数: 11 +2025-05-02 18:31:29,885 - app.core.excel.processor - INFO - 找到精确匹配的条码列: 条码 +2025-05-02 18:31:29,885 - app.core.excel.processor - INFO - 使用条码列: 条码 +2025-05-02 18:31:29,885 - app.core.excel.processor - INFO - 找到name列(部分匹配): 商品全名 +2025-05-02 18:31:29,885 - app.core.excel.processor - INFO - 找到specification列: 规格 +2025-05-02 18:31:29,886 - app.core.excel.processor - INFO - 找到quantity列: 数量 +2025-05-02 18:31:29,886 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-05-02 18:31:29,886 - app.core.excel.processor - INFO - 找到price列: 单价 +2025-05-02 18:31:29,886 - app.core.excel.processor - INFO - 列名映射结果: {'barcode': '条码', 'name': '商品全名', 'specification': '规格', 'quantity': '数量', 'unit': '单位', 'price': '单价'} +2025-05-02 18:31:29,886 - app.core.excel.processor - INFO - 第1行: 提取商品信息 条码=6973497202346, 名称=无糖茶栀栀乌龙, 规格=1*15, 数量=1.0, 单位=件, 单价=55.0 +2025-05-02 18:31:29,887 - app.core.excel.processor - INFO - 第2行: 提取商品信息 条码=6925019900087, 名称=无糖茶茉莉龙井, 规格=1*15, 数量=1.0, 单位=副, 单价=55.0 +2025-05-02 18:31:29,888 - app.core.excel.processor - INFO - 第3行: 提取商品信息 条码=6973497200267, 名称=活力水平衡香水柠檬味, 规格=1*15, 数量=1.0, 单位=件, 单价=55.0 +2025-05-02 18:31:29,888 - app.core.excel.processor - INFO - 第4行: 提取商品信息 条码=6973497200403, 名称=活力水平衡红提味, 规格=1*15, 数量=1.0, 单位=件, 单价=55.0 +2025-05-02 18:31:29,888 - app.core.excel.processor - INFO - 第5行: 提取商品信息 条码=6873497204449, 名称=450ml轻乳茶桂花乌龙, 规格=1*15, 数量=1.0, 单位=件, 单价=65.0 +2025-05-02 18:31:29,889 - app.core.excel.processor - INFO - 第6行: 提取商品信息 条码=6973497204432, 名称=450ml轻乳茶大红袍乌龙, 规格=1*6*15, 数量=1.0, 单位=提, 单价=65.0 +2025-05-02 18:31:29,890 - app.core.excel.processor - INFO - 第7行: 提取商品信息 条码=6973497202360, 名称=无糖茶金桂乌龙, 规格=1*15, 数量=1.0, 单位=件, 单价=0 +2025-05-02 18:31:29,891 - app.core.excel.processor - INFO - 第8行: 提取商品信息 条码=6973497202889, 名称=无糖茶青柑乌龙, 规格=1*15, 数量=1.0, 单位=件, 单价=0 +2025-05-02 18:31:29,891 - app.core.excel.processor - INFO - 第9行: 提取商品信息 条码=6973497202884, 名称=无糖茶(单瓶), 规格=1*9*8, 数量=1.0, 单位=盒, 单价=16.0 +2025-05-02 18:31:29,896 - app.core.excel.processor - INFO - 提取到 9 个商品信息 +2025-05-02 18:31:29,907 - app.core.excel.processor - INFO - 开始处理9 个产品信息 +2025-05-02 18:31:29,907 - app.core.excel.processor - INFO - 处理商品: 条码=6973497202346, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-05-02 18:31:29,907 - app.core.excel.processor - INFO - 发现正常商品:条码6973497202346, 数量=15.0, 单价=3.6666666666666665 +2025-05-02 18:31:29,907 - app.core.excel.processor - INFO - 处理商品: 条码=6925019900087, 数量=10.0, 单价=5.5, 是否赠品=False +2025-05-02 18:31:29,907 - app.core.excel.processor - INFO - 发现正常商品:条码6925019900087, 数量=10.0, 单价=5.5 +2025-05-02 18:31:29,907 - app.core.excel.processor - INFO - 处理商品: 条码=6973497200267, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-05-02 18:31:29,907 - app.core.excel.processor - INFO - 发现正常商品:条码6973497200267, 数量=15.0, 单价=3.6666666666666665 +2025-05-02 18:31:29,907 - app.core.excel.processor - INFO - 处理商品: 条码=6973497200403, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-05-02 18:31:29,908 - app.core.excel.processor - INFO - 发现正常商品:条码6973497200403, 数量=15.0, 单价=3.6666666666666665 +2025-05-02 18:31:29,908 - app.core.excel.processor - INFO - 处理商品: 条码=6873497204449, 数量=15.0, 单价=4.333333333333333, 是否赠品=False +2025-05-02 18:31:29,908 - app.core.excel.processor - INFO - 发现正常商品:条码6873497204449, 数量=15.0, 单价=4.333333333333333 +2025-05-02 18:31:29,908 - app.core.excel.processor - INFO - 处理商品: 条码=6973497204432, 数量=90.0, 单价=0.7222222222222222, 是否赠品=False +2025-05-02 18:31:29,908 - app.core.excel.processor - INFO - 发现正常商品:条码6973497204432, 数量=90.0, 单价=0.7222222222222222 +2025-05-02 18:31:29,908 - app.core.excel.processor - INFO - 处理商品: 条码=6973497202360, 数量=15.0, 单价=0, 是否赠品=True +2025-05-02 18:31:29,908 - app.core.excel.processor - INFO - 发现赠品:条码6973497202360, 数量=15.0 +2025-05-02 18:31:29,908 - app.core.excel.processor - INFO - 处理商品: 条码=6973497202889, 数量=15.0, 单价=0, 是否赠品=True +2025-05-02 18:31:29,908 - app.core.excel.processor - INFO - 发现赠品:条码6973497202889, 数量=15.0 +2025-05-02 18:31:29,908 - app.core.excel.processor - INFO - 处理商品: 条码=6973497202884, 数量=72.0, 单价=0.2222222222222222, 是否赠品=False +2025-05-02 18:31:29,908 - app.core.excel.processor - INFO - 发现正常商品:条码6973497202884, 数量=72.0, 单价=0.2222222222222222 +2025-05-02 18:31:29,908 - app.core.excel.processor - INFO - 分组后共9 个不同条码的商品 +2025-05-02 18:31:29,908 - app.core.excel.processor - INFO - 条码 6973497202346 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-05-02 18:31:29,908 - app.core.excel.processor - INFO - 条码 6925019900087 处理结果:正常商品数量10.0,单价5.5,赠品数量0 +2025-05-02 18:31:29,908 - app.core.excel.processor - INFO - 条码 6973497200267 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-05-02 18:31:29,909 - app.core.excel.processor - INFO - 条码 6973497200403 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-05-02 18:31:29,909 - app.core.excel.processor - INFO - 条码 6873497204449 处理结果:正常商品数量15.0,单价4.333333333333333,赠品数量0 +2025-05-02 18:31:29,909 - app.core.excel.processor - INFO - 条码 6973497204432 处理结果:正常商品数量90.0,单价0.7222222222222222,赠品数量0 +2025-05-02 18:31:29,909 - app.core.excel.processor - INFO - 条码 6973497202360 处理结果:只有赠品,数量=15.0 +2025-05-02 18:31:29,909 - app.core.excel.processor - INFO - 条码 6973497202889 处理结果:只有赠品,数量=15.0 +2025-05-02 18:31:29,909 - app.core.excel.processor - INFO - 条码 6973497202884 处理结果:正常商品数量72.0,单价0.2222222222222222,赠品数量0 +2025-05-02 18:31:29,909 - app.core.excel.processor - INFO - 条码 6973497202360 填充:仅有赠品,采购量=0,赠品数量=15.0 +2025-05-02 18:31:29,909 - app.core.excel.processor - INFO - 条码 6973497202889 填充:仅有赠品,采购量=0,赠品数量=15.0 +2025-05-02 18:31:31,499 - app.core.excel.processor - INFO - 采购单已保存到: D:\My Documents\python\orc-order-v2\data\output\采购单_微信图片_20250227193150(1).xls +2025-05-02 18:33:05,100 - app.core.excel.processor - INFO - 初始化ExcelProcessor +2025-05-02 18:33:05,101 - app.core.excel.processor - INFO - 初始化完成,模板文件: templates\银豹-采购单模板.xls +2025-05-02 18:33:05,104 - app.core.excel.processor - INFO - 开始处理Excel文件: D:\My Documents\python\orc-order-v2\data\output\微信图片_20250227193150(1).xlsx +2025-05-02 18:33:05,813 - app.core.excel.processor - INFO - 成功读取Excel文件: D:\My Documents\python\orc-order-v2\data\output\微信图片_20250227193150(1).xlsx, 共 14 行 +2025-05-02 18:33:05,816 - app.core.excel.processor - INFO - 找到可能的表头行: 第3行,评分: 35 +2025-05-02 18:33:05,816 - app.core.excel.processor - INFO - 识别到表头在第 3 行 +2025-05-02 18:33:05,844 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 11 行有效数据 +2025-05-02 18:33:05,845 - app.core.excel.processor - INFO - 移除空行后,有效数据行数: 11 +2025-05-02 18:33:05,845 - app.core.excel.processor - INFO - 找到精确匹配的条码列: 条码 +2025-05-02 18:33:05,845 - app.core.excel.processor - INFO - 使用条码列: 条码 +2025-05-02 18:33:05,846 - app.core.excel.processor - INFO - 找到name列(部分匹配): 商品全名 +2025-05-02 18:33:05,846 - app.core.excel.processor - INFO - 找到specification列: 规格 +2025-05-02 18:33:05,846 - app.core.excel.processor - INFO - 找到quantity列: 数量 +2025-05-02 18:33:05,846 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-05-02 18:33:05,846 - app.core.excel.processor - INFO - 找到price列: 单价 +2025-05-02 18:33:05,846 - app.core.excel.processor - INFO - 列名映射结果: {'barcode': '条码', 'name': '商品全名', 'specification': '规格', 'quantity': '数量', 'unit': '单位', 'price': '单价'} +2025-05-02 18:33:05,847 - app.core.excel.processor - INFO - 第1行: 提取商品信息 条码=6973497202346, 名称=无糖茶栀栀乌龙, 规格=1*15, 数量=1.0, 单位=件, 单价=55.0 +2025-05-02 18:33:05,849 - app.core.excel.processor - INFO - 第2行: 提取商品信息 条码=6925019900087, 名称=无糖茶茉莉龙井, 规格=1*15, 数量=1.0, 单位=副, 单价=55.0 +2025-05-02 18:33:05,849 - app.core.excel.processor - INFO - 第3行: 提取商品信息 条码=6973497200267, 名称=活力水平衡香水柠檬味, 规格=1*15, 数量=1.0, 单位=件, 单价=55.0 +2025-05-02 18:33:05,850 - app.core.excel.processor - INFO - 第4行: 提取商品信息 条码=6973497200403, 名称=活力水平衡红提味, 规格=1*15, 数量=1.0, 单位=件, 单价=55.0 +2025-05-02 18:33:05,850 - app.core.excel.processor - INFO - 第5行: 提取商品信息 条码=6873497204449, 名称=450ml轻乳茶桂花乌龙, 规格=1*15, 数量=1.0, 单位=件, 单价=65.0 +2025-05-02 18:33:05,851 - app.core.excel.processor - INFO - 第6行: 提取商品信息 条码=6973497204432, 名称=450ml轻乳茶大红袍乌龙, 规格=1*6*15, 数量=1.0, 单位=提, 单价=65.0 +2025-05-02 18:33:05,851 - app.core.excel.processor - INFO - 第7行: 提取商品信息 条码=6973497202360, 名称=无糖茶金桂乌龙, 规格=1*15, 数量=1.0, 单位=件, 单价=0 +2025-05-02 18:33:05,852 - app.core.excel.processor - INFO - 第8行: 提取商品信息 条码=6973497202889, 名称=无糖茶青柑乌龙, 规格=1*15, 数量=1.0, 单位=件, 单价=0 +2025-05-02 18:33:05,852 - app.core.excel.processor - INFO - 第9行: 提取商品信息 条码=6973497202884, 名称=无糖茶(单瓶), 规格=1*9*8, 数量=1.0, 单位=盒, 单价=16.0 +2025-05-02 18:33:05,866 - app.core.excel.processor - INFO - 提取到 9 个商品信息 +2025-05-02 18:33:05,874 - app.core.excel.processor - INFO - 开始处理9 个产品信息 +2025-05-02 18:33:05,874 - app.core.excel.processor - INFO - 处理商品: 条码=6973497202346, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-05-02 18:33:05,874 - app.core.excel.processor - INFO - 发现正常商品:条码6973497202346, 数量=15.0, 单价=3.6666666666666665 +2025-05-02 18:33:05,874 - app.core.excel.processor - INFO - 处理商品: 条码=6925019900087, 数量=10.0, 单价=5.5, 是否赠品=False +2025-05-02 18:33:05,875 - app.core.excel.processor - INFO - 发现正常商品:条码6925019900087, 数量=10.0, 单价=5.5 +2025-05-02 18:33:05,875 - app.core.excel.processor - INFO - 处理商品: 条码=6973497200267, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-05-02 18:33:05,875 - app.core.excel.processor - INFO - 发现正常商品:条码6973497200267, 数量=15.0, 单价=3.6666666666666665 +2025-05-02 18:33:05,875 - app.core.excel.processor - INFO - 处理商品: 条码=6973497200403, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-05-02 18:33:05,875 - app.core.excel.processor - INFO - 发现正常商品:条码6973497200403, 数量=15.0, 单价=3.6666666666666665 +2025-05-02 18:33:05,875 - app.core.excel.processor - INFO - 处理商品: 条码=6873497204449, 数量=15.0, 单价=4.333333333333333, 是否赠品=False +2025-05-02 18:33:05,875 - app.core.excel.processor - INFO - 发现正常商品:条码6873497204449, 数量=15.0, 单价=4.333333333333333 +2025-05-02 18:33:05,875 - app.core.excel.processor - INFO - 处理商品: 条码=6973497204432, 数量=90.0, 单价=0.7222222222222222, 是否赠品=False +2025-05-02 18:33:05,875 - app.core.excel.processor - INFO - 发现正常商品:条码6973497204432, 数量=90.0, 单价=0.7222222222222222 +2025-05-02 18:33:05,875 - app.core.excel.processor - INFO - 处理商品: 条码=6973497202360, 数量=15.0, 单价=0, 是否赠品=True +2025-05-02 18:33:05,876 - app.core.excel.processor - INFO - 发现赠品:条码6973497202360, 数量=15.0 +2025-05-02 18:33:05,876 - app.core.excel.processor - INFO - 处理商品: 条码=6973497202889, 数量=15.0, 单价=0, 是否赠品=True +2025-05-02 18:33:05,876 - app.core.excel.processor - INFO - 发现赠品:条码6973497202889, 数量=15.0 +2025-05-02 18:33:05,876 - app.core.excel.processor - INFO - 处理商品: 条码=6973497202884, 数量=72.0, 单价=0.2222222222222222, 是否赠品=False +2025-05-02 18:33:05,876 - app.core.excel.processor - INFO - 发现正常商品:条码6973497202884, 数量=72.0, 单价=0.2222222222222222 +2025-05-02 18:33:05,876 - app.core.excel.processor - INFO - 分组后共9 个不同条码的商品 +2025-05-02 18:33:05,876 - app.core.excel.processor - INFO - 条码 6973497202346 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-05-02 18:33:05,876 - app.core.excel.processor - INFO - 条码 6925019900087 处理结果:正常商品数量10.0,单价5.5,赠品数量0 +2025-05-02 18:33:05,876 - app.core.excel.processor - INFO - 条码 6973497200267 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-05-02 18:33:05,876 - app.core.excel.processor - INFO - 条码 6973497200403 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-05-02 18:33:05,876 - app.core.excel.processor - INFO - 条码 6873497204449 处理结果:正常商品数量15.0,单价4.333333333333333,赠品数量0 +2025-05-02 18:33:05,876 - app.core.excel.processor - INFO - 条码 6973497204432 处理结果:正常商品数量90.0,单价0.7222222222222222,赠品数量0 +2025-05-02 18:33:05,876 - app.core.excel.processor - INFO - 条码 6973497202360 处理结果:只有赠品,数量=15.0 +2025-05-02 18:33:05,876 - app.core.excel.processor - INFO - 条码 6973497202889 处理结果:只有赠品,数量=15.0 +2025-05-02 18:33:05,876 - app.core.excel.processor - INFO - 条码 6973497202884 处理结果:正常商品数量72.0,单价0.2222222222222222,赠品数量0 +2025-05-02 18:33:05,877 - app.core.excel.processor - INFO - 条码 6973497202360 填充:仅有赠品,采购量=0,赠品数量=15.0 +2025-05-02 18:33:05,877 - app.core.excel.processor - INFO - 条码 6973497202889 填充:仅有赠品,采购量=0,赠品数量=15.0 +2025-05-02 18:33:07,376 - app.core.excel.processor - INFO - 采购单已保存到: D:\My Documents\python\orc-order-v2\data\output\采购单_微信图片_20250227193150(1).xls +2025-05-02 18:38:52,879 - app.core.excel.processor - INFO - 初始化ExcelProcessor +2025-05-02 18:38:52,880 - app.core.excel.processor - INFO - 初始化完成,模板文件: templates\银豹-采购单模板.xls +2025-05-02 18:38:52,881 - app.core.excel.processor - INFO - 开始处理Excel文件: D:\My Documents\python\orc-order-v2\data\output\微信图片_20250227193150(1).xlsx +2025-05-02 18:38:53,571 - app.core.excel.processor - INFO - 成功读取Excel文件: D:\My Documents\python\orc-order-v2\data\output\微信图片_20250227193150(1).xlsx, 共 14 行 +2025-05-02 18:38:53,574 - app.core.excel.processor - INFO - 找到可能的表头行: 第3行,评分: 35 +2025-05-02 18:38:53,574 - app.core.excel.processor - INFO - 识别到表头在第 3 行 +2025-05-02 18:38:53,621 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 11 行有效数据 +2025-05-02 18:38:53,623 - app.core.excel.processor - INFO - 移除空行后,有效数据行数: 11 +2025-05-02 18:38:53,623 - app.core.excel.processor - INFO - 找到精确匹配的条码列: 条码 +2025-05-02 18:38:53,624 - app.core.excel.processor - INFO - 使用条码列: 条码 +2025-05-02 18:38:53,624 - app.core.excel.processor - INFO - 找到name列(部分匹配): 商品全名 +2025-05-02 18:38:53,624 - app.core.excel.processor - INFO - 找到specification列: 规格 +2025-05-02 18:38:53,624 - app.core.excel.processor - INFO - 找到quantity列: 数量 +2025-05-02 18:38:53,624 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-05-02 18:38:53,625 - app.core.excel.processor - INFO - 找到price列: 单价 +2025-05-02 18:38:53,625 - app.core.excel.processor - INFO - 列名映射结果: {'barcode': '条码', 'name': '商品全名', 'specification': '规格', 'quantity': '数量', 'unit': '单位', 'price': '单价'} +2025-05-02 18:38:53,627 - app.core.excel.processor - INFO - 第1行: 提取商品信息 条码=6973497202346, 名称=无糖茶栀栀乌龙, 规格=1*15, 数量=1.0, 单位=件, 单价=55.0 +2025-05-02 18:38:53,629 - app.core.excel.processor - INFO - 第2行: 提取商品信息 条码=6925019900087, 名称=无糖茶茉莉龙井, 规格=1*15, 数量=1.0, 单位=副, 单价=55.0 +2025-05-02 18:38:53,630 - app.core.excel.processor - INFO - 第3行: 提取商品信息 条码=6973497200267, 名称=活力水平衡香水柠檬味, 规格=1*15, 数量=1.0, 单位=件, 单价=55.0 +2025-05-02 18:38:53,632 - app.core.excel.processor - INFO - 第4行: 提取商品信息 条码=6973497200403, 名称=活力水平衡红提味, 规格=1*15, 数量=1.0, 单位=件, 单价=55.0 +2025-05-02 18:38:53,634 - app.core.excel.processor - INFO - 第5行: 提取商品信息 条码=6873497204449, 名称=450ml轻乳茶桂花乌龙, 规格=1*15, 数量=1.0, 单位=件, 单价=65.0 +2025-05-02 18:38:53,635 - app.core.excel.processor - INFO - 第6行: 提取商品信息 条码=6973497204432, 名称=450ml轻乳茶大红袍乌龙, 规格=1*6*15, 数量=1.0, 单位=提, 单价=65.0 +2025-05-02 18:38:53,637 - app.core.excel.processor - INFO - 第7行: 提取商品信息 条码=6973497202360, 名称=无糖茶金桂乌龙, 规格=1*15, 数量=1.0, 单位=件, 单价=0 +2025-05-02 18:38:53,639 - app.core.excel.processor - INFO - 第8行: 提取商品信息 条码=6973497202889, 名称=无糖茶青柑乌龙, 规格=1*15, 数量=1.0, 单位=件, 单价=0 +2025-05-02 18:38:53,641 - app.core.excel.processor - INFO - 第9行: 提取商品信息 条码=6973497202884, 名称=无糖茶(单瓶), 规格=1*9*8, 数量=1.0, 单位=盒, 单价=16.0 +2025-05-02 18:38:53,667 - app.core.excel.processor - INFO - 提取到 9 个商品信息 +2025-05-02 18:38:53,677 - app.core.excel.processor - INFO - 开始处理9 个产品信息 +2025-05-02 18:38:53,678 - app.core.excel.processor - INFO - 处理商品: 条码=6973497202346, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-05-02 18:38:53,678 - app.core.excel.processor - INFO - 发现正常商品:条码6973497202346, 数量=15.0, 单价=3.6666666666666665 +2025-05-02 18:38:53,678 - app.core.excel.processor - INFO - 处理商品: 条码=6925019900087, 数量=10.0, 单价=5.5, 是否赠品=False +2025-05-02 18:38:53,678 - app.core.excel.processor - INFO - 发现正常商品:条码6925019900087, 数量=10.0, 单价=5.5 +2025-05-02 18:38:53,678 - app.core.excel.processor - INFO - 处理商品: 条码=6973497200267, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-05-02 18:38:53,678 - app.core.excel.processor - INFO - 发现正常商品:条码6973497200267, 数量=15.0, 单价=3.6666666666666665 +2025-05-02 18:38:53,678 - app.core.excel.processor - INFO - 处理商品: 条码=6973497200403, 数量=15.0, 单价=3.6666666666666665, 是否赠品=False +2025-05-02 18:38:53,679 - app.core.excel.processor - INFO - 发现正常商品:条码6973497200403, 数量=15.0, 单价=3.6666666666666665 +2025-05-02 18:38:53,679 - app.core.excel.processor - INFO - 处理商品: 条码=6873497204449, 数量=15.0, 单价=4.333333333333333, 是否赠品=False +2025-05-02 18:38:53,680 - app.core.excel.processor - INFO - 发现正常商品:条码6873497204449, 数量=15.0, 单价=4.333333333333333 +2025-05-02 18:38:53,680 - app.core.excel.processor - INFO - 处理商品: 条码=6973497204432, 数量=15.0, 单价=4.333333333333333, 是否赠品=False +2025-05-02 18:38:53,680 - app.core.excel.processor - INFO - 发现正常商品:条码6973497204432, 数量=15.0, 单价=4.333333333333333 +2025-05-02 18:38:53,680 - app.core.excel.processor - INFO - 处理商品: 条码=6973497202360, 数量=15.0, 单价=0, 是否赠品=True +2025-05-02 18:38:53,680 - app.core.excel.processor - INFO - 发现赠品:条码6973497202360, 数量=15.0 +2025-05-02 18:38:53,680 - app.core.excel.processor - INFO - 处理商品: 条码=6973497202889, 数量=15.0, 单价=0, 是否赠品=True +2025-05-02 18:38:53,680 - app.core.excel.processor - INFO - 发现赠品:条码6973497202889, 数量=15.0 +2025-05-02 18:38:53,680 - app.core.excel.processor - INFO - 处理商品: 条码=6973497202884, 数量=8.0, 单价=2.0, 是否赠品=False +2025-05-02 18:38:53,680 - app.core.excel.processor - INFO - 发现正常商品:条码6973497202884, 数量=8.0, 单价=2.0 +2025-05-02 18:38:53,681 - app.core.excel.processor - INFO - 分组后共9 个不同条码的商品 +2025-05-02 18:38:53,682 - app.core.excel.processor - INFO - 条码 6973497202346 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-05-02 18:38:53,683 - app.core.excel.processor - INFO - 条码 6925019900087 处理结果:正常商品数量10.0,单价5.5,赠品数量0 +2025-05-02 18:38:53,683 - app.core.excel.processor - INFO - 条码 6973497200267 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-05-02 18:38:53,683 - app.core.excel.processor - INFO - 条码 6973497200403 处理结果:正常商品数量15.0,单价3.6666666666666665,赠品数量0 +2025-05-02 18:38:53,683 - app.core.excel.processor - INFO - 条码 6873497204449 处理结果:正常商品数量15.0,单价4.333333333333333,赠品数量0 +2025-05-02 18:38:53,683 - app.core.excel.processor - INFO - 条码 6973497204432 处理结果:正常商品数量15.0,单价4.333333333333333,赠品数量0 +2025-05-02 18:38:53,683 - app.core.excel.processor - INFO - 条码 6973497202360 处理结果:只有赠品,数量=15.0 +2025-05-02 18:38:53,683 - app.core.excel.processor - INFO - 条码 6973497202889 处理结果:只有赠品,数量=15.0 +2025-05-02 18:38:53,683 - app.core.excel.processor - INFO - 条码 6973497202884 处理结果:正常商品数量8.0,单价2.0,赠品数量0 +2025-05-02 18:38:53,684 - app.core.excel.processor - INFO - 条码 6973497202360 填充:仅有赠品,采购量=0,赠品数量=15.0 +2025-05-02 18:38:53,684 - app.core.excel.processor - INFO - 条码 6973497202889 填充:仅有赠品,采购量=0,赠品数量=15.0 +2025-05-02 18:38:56,888 - app.core.excel.processor - INFO - 采购单已保存到: D:\My Documents\python\orc-order-v2\data\output\采购单_微信图片_20250227193150(1).xls +2025-05-02 18:41:16,741 - app.core.excel.processor - INFO - 初始化ExcelProcessor +2025-05-02 18:41:16,742 - app.core.excel.processor - INFO - 初始化完成,模板文件: templates\银豹-采购单模板.xls +2025-05-02 18:41:16,744 - app.core.excel.processor - INFO - 开始处理Excel文件: D:\My Documents\python\orc-order-v2\data\output\微信图片_20250227193150(1).xlsx +2025-05-02 18:41:17,261 - app.core.excel.processor - INFO - 成功读取Excel文件: D:\My Documents\python\orc-order-v2\data\output\微信图片_20250227193150(1).xlsx, 共 14 行 +2025-05-02 18:41:17,264 - app.core.excel.processor - INFO - 找到可能的表头行: 第3行,评分: 30 +2025-05-02 18:41:17,264 - app.core.excel.processor - INFO - 识别到表头在第 3 行 +2025-05-02 18:41:17,309 - app.core.excel.processor - INFO - 使用表头行重新读取数据,共 11 行有效数据 +2025-05-02 18:41:17,309 - app.core.excel.processor - INFO - 移除空行后,有效数据行数: 11 +2025-05-02 18:41:17,309 - app.core.excel.processor - INFO - 找到精确匹配的条码列: 条码 +2025-05-02 18:41:17,309 - app.core.excel.processor - INFO - 使用条码列: 条码 +2025-05-02 18:41:17,309 - app.core.excel.processor - INFO - 找到name列(部分匹配): 商品全名 +2025-05-02 18:41:17,310 - app.core.excel.processor - INFO - 找到quantity列: 数量 +2025-05-02 18:41:17,310 - app.core.excel.processor - INFO - 找到unit列: 单位 +2025-05-02 18:41:17,310 - app.core.excel.processor - INFO - 找到price列: 单价 +2025-05-02 18:41:17,310 - app.core.excel.processor - INFO - 列名映射结果: {'barcode': '条码', 'name': '商品全名', 'quantity': '数量', 'unit': '单位', 'price': '单价'} +2025-05-02 18:41:17,311 - app.core.excel.processor - INFO - 第1行: 提取商品信息 条码=6973497202346, 名称=无糖茶栀栀乌龙*15入纸箱, 规格=, 数量=1.0, 单位=件, 单价=55.0 +2025-05-02 18:41:17,311 - app.core.excel.processor - INFO - 从商品名称推断规格: 无糖茶栀栀乌龙*15入纸箱 -> 1*5 +2025-05-02 18:41:17,312 - app.core.excel.processor - INFO - 第2行: 提取商品信息 条码=6925019900087, 名称=无糖茶茉莉龙井16入纸箱, 规格=, 数量=1.0, 单位=副, 单价=55.0 +2025-05-02 18:41:17,312 - app.core.excel.processor - INFO - 从商品名称推断规格: 无糖茶茉莉龙井16入纸箱 -> 1*6 +2025-05-02 18:41:17,312 - app.core.excel.processor - INFO - 第3行: 提取商品信息 条码=6973497200267, 名称=活力水平衡香水柠檬味, 规格=, 数量=1.0, 单位=件, 单价=55.0 +2025-05-02 18:41:17,314 - app.core.excel.processor - INFO - 第4行: 提取商品信息 条码=6973497200403, 名称=活力水平衡红提味, 规格=, 数量=1.0, 单位=件, 单价=55.0 +2025-05-02 18:41:17,314 - app.core.excel.processor - INFO - 第5行: 提取商品信息 条码=6873497204449, 名称=450ml轻乳茶桂花乌龙18纸箱, 规格=, 数量=1.0, 单位=件, 单价=65.0 +2025-05-02 18:41:17,314 - app.core.excel.processor - INFO - 第6行: 提取商品信息 条码=6973497204432, 名称=450ml轻乳茶大红袍乌龙12入纸箱, 规格=, 数量=1.0, 单位=提, 单价=65.0 +2025-05-02 18:41:17,314 - app.core.excel.processor - INFO - 从商品名称推断规格: 450ml轻乳茶大红袍乌龙12入纸箱 -> 1*2 +2025-05-02 18:41:17,315 - app.core.excel.processor - INFO - 第7行: 提取商品信息 条码=6973497202360, 名称=无糖茶金桂乌龙, 规格=, 数量=1.0, 单位=件, 单价=0 +2025-05-02 18:41:17,316 - app.core.excel.processor - INFO - 第8行: 提取商品信息 条码=6973497202889, 名称=无糖茶青柑乌龙, 规格=, 数量=1.0, 单位=件, 单价=0 +2025-05-02 18:41:17,317 - app.core.excel.processor - INFO - 第9行: 提取商品信息 条码=6973497202884, 名称=无糖茶(单瓶), 规格=, 数量=1.0, 单位=盒, 单价=16.0 +2025-05-02 18:41:17,318 - app.core.excel.processor - INFO - 提取到 9 个商品信息 +2025-05-02 18:41:17,329 - app.core.excel.processor - INFO - 开始处理9 个产品信息 +2025-05-02 18:41:17,329 - app.core.excel.processor - INFO - 处理商品: 条码=6973497202346, 数量=5.0, 单价=11.0, 是否赠品=False +2025-05-02 18:41:17,329 - app.core.excel.processor - INFO - 发现正常商品:条码6973497202346, 数量=5.0, 单价=11.0 +2025-05-02 18:41:17,330 - app.core.excel.processor - INFO - 处理商品: 条码=6925019900087, 数量=10.0, 单价=5.5, 是否赠品=False +2025-05-02 18:41:17,391 - app.core.excel.processor - INFO - 发现正常商品:条码6925019900087, 数量=10.0, 单价=5.5 +2025-05-02 18:41:17,392 - app.core.excel.processor - INFO - 处理商品: 条码=6973497200267, 数量=1.0, 单价=55.0, 是否赠品=False +2025-05-02 18:41:17,392 - app.core.excel.processor - INFO - 发现正常商品:条码6973497200267, 数量=1.0, 单价=55.0 +2025-05-02 18:41:17,392 - app.core.excel.processor - INFO - 处理商品: 条码=6973497200403, 数量=1.0, 单价=55.0, 是否赠品=False +2025-05-02 18:41:17,392 - app.core.excel.processor - INFO - 发现正常商品:条码6973497200403, 数量=1.0, 单价=55.0 +2025-05-02 18:41:17,392 - app.core.excel.processor - INFO - 处理商品: 条码=6873497204449, 数量=1.0, 单价=65.0, 是否赠品=False +2025-05-02 18:41:17,393 - app.core.excel.processor - INFO - 发现正常商品:条码6873497204449, 数量=1.0, 单价=65.0 +2025-05-02 18:41:17,393 - app.core.excel.processor - INFO - 处理商品: 条码=6973497204432, 数量=1.0, 单价=65.0, 是否赠品=False +2025-05-02 18:41:17,393 - app.core.excel.processor - INFO - 发现正常商品:条码6973497204432, 数量=1.0, 单价=65.0 +2025-05-02 18:41:17,393 - app.core.excel.processor - INFO - 处理商品: 条码=6973497202360, 数量=1.0, 单价=0, 是否赠品=True +2025-05-02 18:41:17,393 - app.core.excel.processor - INFO - 发现赠品:条码6973497202360, 数量=1.0 +2025-05-02 18:41:17,393 - app.core.excel.processor - INFO - 处理商品: 条码=6973497202889, 数量=1.0, 单价=0, 是否赠品=True +2025-05-02 18:41:17,394 - app.core.excel.processor - INFO - 发现赠品:条码6973497202889, 数量=1.0 +2025-05-02 18:41:17,394 - app.core.excel.processor - INFO - 处理商品: 条码=6973497202884, 数量=1.0, 单价=16.0, 是否赠品=False +2025-05-02 18:41:17,394 - app.core.excel.processor - INFO - 发现正常商品:条码6973497202884, 数量=1.0, 单价=16.0 +2025-05-02 18:41:17,394 - app.core.excel.processor - INFO - 分组后共9 个不同条码的商品 +2025-05-02 18:41:17,394 - app.core.excel.processor - INFO - 条码 6973497202346 处理结果:正常商品数量5.0,单价11.0,赠品数量0 +2025-05-02 18:41:17,394 - app.core.excel.processor - INFO - 条码 6925019900087 处理结果:正常商品数量10.0,单价5.5,赠品数量0 +2025-05-02 18:41:17,394 - app.core.excel.processor - INFO - 条码 6973497200267 处理结果:正常商品数量1.0,单价55.0,赠品数量0 +2025-05-02 18:41:17,395 - app.core.excel.processor - INFO - 条码 6973497200403 处理结果:正常商品数量1.0,单价55.0,赠品数量0 +2025-05-02 18:41:17,395 - app.core.excel.processor - INFO - 条码 6873497204449 处理结果:正常商品数量1.0,单价65.0,赠品数量0 +2025-05-02 18:41:17,395 - app.core.excel.processor - INFO - 条码 6973497204432 处理结果:正常商品数量1.0,单价65.0,赠品数量0 +2025-05-02 18:41:17,395 - app.core.excel.processor - INFO - 条码 6973497202360 处理结果:只有赠品,数量=1.0 +2025-05-02 18:41:17,395 - app.core.excel.processor - INFO - 条码 6973497202889 处理结果:只有赠品,数量=1.0 +2025-05-02 18:41:17,395 - app.core.excel.processor - INFO - 条码 6973497202884 处理结果:正常商品数量1.0,单价16.0,赠品数量0 +2025-05-02 18:41:17,396 - app.core.excel.processor - INFO - 条码 6973497202360 填充:仅有赠品,采购量=0,赠品数量=1.0 +2025-05-02 18:41:17,396 - app.core.excel.processor - INFO - 条码 6973497202889 填充:仅有赠品,采购量=0,赠品数量=1.0 +2025-05-02 18:41:17,400 - app.core.excel.processor - INFO - 采购单已保存到: D:\My Documents\python\orc-order-v2\data\output\采购单_微信图片_20250227193150(1).xls diff --git a/logs/app.core.ocr.baidu_ocr.active b/logs/app.core.ocr.baidu_ocr.active index 5ad1445..b92430b 100644 --- a/logs/app.core.ocr.baidu_ocr.active +++ b/logs/app.core.ocr.baidu_ocr.active @@ -1 +1 @@ -Active since: 2025-05-02 18:01:39 \ No newline at end of file +Active since: 2025-05-02 18:41:16 \ No newline at end of file diff --git a/logs/app.core.ocr.table_ocr.active b/logs/app.core.ocr.table_ocr.active index 5ad1445..b92430b 100644 --- a/logs/app.core.ocr.table_ocr.active +++ b/logs/app.core.ocr.table_ocr.active @@ -1 +1 @@ -Active since: 2025-05-02 18:01:39 \ No newline at end of file +Active since: 2025-05-02 18:41:16 \ No newline at end of file diff --git a/logs/app.core.ocr.table_ocr.log b/logs/app.core.ocr.table_ocr.log index 8417256..034d6ad 100644 --- a/logs/app.core.ocr.table_ocr.log +++ b/logs/app.core.ocr.table_ocr.log @@ -79,3 +79,27 @@ 2025-05-02 18:01:40,470 - app.core.ocr.table_ocr - INFO - 使用输出目录: D:\My Documents\python\orc-order-v2\data\output 2025-05-02 18:01:40,470 - app.core.ocr.table_ocr - INFO - 使用临时目录: D:\My Documents\python\orc-order-v2\data\temp 2025-05-02 18:01:40,470 - app.core.ocr.table_ocr - INFO - OCR处理器初始化完成,输入目录: D:\My Documents\python\orc-order-v2\data\input, 输出目录: D:\My Documents\python\orc-order-v2\data\output +2025-05-02 18:16:10,311 - app.core.ocr.table_ocr - INFO - 使用输入目录: D:\My Documents\python\orc-order-v2\data\input +2025-05-02 18:16:10,311 - app.core.ocr.table_ocr - INFO - 使用输出目录: D:\My Documents\python\orc-order-v2\data\output +2025-05-02 18:16:10,312 - app.core.ocr.table_ocr - INFO - 使用临时目录: D:\My Documents\python\orc-order-v2\data\temp +2025-05-02 18:16:10,312 - app.core.ocr.table_ocr - INFO - OCR处理器初始化完成,输入目录: D:\My Documents\python\orc-order-v2\data\input, 输出目录: D:\My Documents\python\orc-order-v2\data\output +2025-05-02 18:27:30,079 - app.core.ocr.table_ocr - INFO - 使用输入目录: D:\My Documents\python\orc-order-v2\data\input +2025-05-02 18:27:30,079 - app.core.ocr.table_ocr - INFO - 使用输出目录: D:\My Documents\python\orc-order-v2\data\output +2025-05-02 18:27:30,079 - app.core.ocr.table_ocr - INFO - 使用临时目录: D:\My Documents\python\orc-order-v2\data\temp +2025-05-02 18:27:30,080 - app.core.ocr.table_ocr - INFO - OCR处理器初始化完成,输入目录: D:\My Documents\python\orc-order-v2\data\input, 输出目录: D:\My Documents\python\orc-order-v2\data\output +2025-05-02 18:31:29,324 - app.core.ocr.table_ocr - INFO - 使用输入目录: D:\My Documents\python\orc-order-v2\data\input +2025-05-02 18:31:29,325 - app.core.ocr.table_ocr - INFO - 使用输出目录: D:\My Documents\python\orc-order-v2\data\output +2025-05-02 18:31:29,325 - app.core.ocr.table_ocr - INFO - 使用临时目录: D:\My Documents\python\orc-order-v2\data\temp +2025-05-02 18:31:29,326 - app.core.ocr.table_ocr - INFO - OCR处理器初始化完成,输入目录: D:\My Documents\python\orc-order-v2\data\input, 输出目录: D:\My Documents\python\orc-order-v2\data\output +2025-05-02 18:33:05,099 - app.core.ocr.table_ocr - INFO - 使用输入目录: D:\My Documents\python\orc-order-v2\data\input +2025-05-02 18:33:05,099 - app.core.ocr.table_ocr - INFO - 使用输出目录: D:\My Documents\python\orc-order-v2\data\output +2025-05-02 18:33:05,099 - app.core.ocr.table_ocr - INFO - 使用临时目录: D:\My Documents\python\orc-order-v2\data\temp +2025-05-02 18:33:05,100 - app.core.ocr.table_ocr - INFO - OCR处理器初始化完成,输入目录: D:\My Documents\python\orc-order-v2\data\input, 输出目录: D:\My Documents\python\orc-order-v2\data\output +2025-05-02 18:38:52,878 - app.core.ocr.table_ocr - INFO - 使用输入目录: D:\My Documents\python\orc-order-v2\data\input +2025-05-02 18:38:52,878 - app.core.ocr.table_ocr - INFO - 使用输出目录: D:\My Documents\python\orc-order-v2\data\output +2025-05-02 18:38:52,878 - app.core.ocr.table_ocr - INFO - 使用临时目录: D:\My Documents\python\orc-order-v2\data\temp +2025-05-02 18:38:52,879 - app.core.ocr.table_ocr - INFO - OCR处理器初始化完成,输入目录: D:\My Documents\python\orc-order-v2\data\input, 输出目录: D:\My Documents\python\orc-order-v2\data\output +2025-05-02 18:41:16,740 - app.core.ocr.table_ocr - INFO - 使用输入目录: D:\My Documents\python\orc-order-v2\data\input +2025-05-02 18:41:16,740 - app.core.ocr.table_ocr - INFO - 使用输出目录: D:\My Documents\python\orc-order-v2\data\output +2025-05-02 18:41:16,740 - app.core.ocr.table_ocr - INFO - 使用临时目录: D:\My Documents\python\orc-order-v2\data\temp +2025-05-02 18:41:16,741 - app.core.ocr.table_ocr - INFO - OCR处理器初始化完成,输入目录: D:\My Documents\python\orc-order-v2\data\input, 输出目录: D:\My Documents\python\orc-order-v2\data\output diff --git a/logs/app.core.utils.file_utils.active b/logs/app.core.utils.file_utils.active index 5ad1445..21fec46 100644 --- a/logs/app.core.utils.file_utils.active +++ b/logs/app.core.utils.file_utils.active @@ -1 +1 @@ -Active since: 2025-05-02 18:01:39 \ No newline at end of file +Active since: 2025-05-02 18:41:15 \ No newline at end of file diff --git a/logs/app.services.ocr_service.active b/logs/app.services.ocr_service.active index 5ad1445..b92430b 100644 --- a/logs/app.services.ocr_service.active +++ b/logs/app.services.ocr_service.active @@ -1 +1 @@ -Active since: 2025-05-02 18:01:39 \ No newline at end of file +Active since: 2025-05-02 18:41:16 \ No newline at end of file diff --git a/logs/app.services.ocr_service.log b/logs/app.services.ocr_service.log index 2ced16f..3fc133b 100644 --- a/logs/app.services.ocr_service.log +++ b/logs/app.services.ocr_service.log @@ -39,3 +39,15 @@ 2025-05-02 18:01:27,763 - app.services.ocr_service - INFO - OCRService初始化完成 2025-05-02 18:01:40,468 - app.services.ocr_service - INFO - 初始化OCRService 2025-05-02 18:01:40,470 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-05-02 18:16:10,310 - app.services.ocr_service - INFO - 初始化OCRService +2025-05-02 18:16:10,312 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-05-02 18:27:30,078 - app.services.ocr_service - INFO - 初始化OCRService +2025-05-02 18:27:30,080 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-05-02 18:31:29,323 - app.services.ocr_service - INFO - 初始化OCRService +2025-05-02 18:31:29,326 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-05-02 18:33:05,097 - app.services.ocr_service - INFO - 初始化OCRService +2025-05-02 18:33:05,100 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-05-02 18:38:52,876 - app.services.ocr_service - INFO - 初始化OCRService +2025-05-02 18:38:52,879 - app.services.ocr_service - INFO - OCRService初始化完成 +2025-05-02 18:41:16,739 - app.services.ocr_service - INFO - 初始化OCRService +2025-05-02 18:41:16,741 - app.services.ocr_service - INFO - OCRService初始化完成 diff --git a/logs/app.services.order_service.active b/logs/app.services.order_service.active index ab58f88..b92430b 100644 --- a/logs/app.services.order_service.active +++ b/logs/app.services.order_service.active @@ -1 +1 @@ -Active since: 2025-05-02 18:01:40 \ No newline at end of file +Active since: 2025-05-02 18:41:16 \ No newline at end of file diff --git a/logs/app.services.order_service.log b/logs/app.services.order_service.log index a8471c8..14d8c9d 100644 --- a/logs/app.services.order_service.log +++ b/logs/app.services.order_service.log @@ -41,3 +41,21 @@ 2025-05-02 18:01:40,470 - app.services.order_service - INFO - 初始化OrderService 2025-05-02 18:01:40,472 - app.services.order_service - INFO - OrderService初始化完成 2025-05-02 18:01:40,472 - app.services.order_service - INFO - OrderService开始处理指定Excel文件: D:\My Documents\python\orc-order-v2\data\output\微信图片_20250227193150(1).xlsx +2025-05-02 18:16:10,312 - app.services.order_service - INFO - 初始化OrderService +2025-05-02 18:16:10,314 - app.services.order_service - INFO - OrderService初始化完成 +2025-05-02 18:16:10,314 - app.services.order_service - INFO - OrderService开始处理指定Excel文件: D:\My Documents\python\orc-order-v2\data\output\微信图片_20250227193150(1).xlsx +2025-05-02 18:27:30,080 - app.services.order_service - INFO - 初始化OrderService +2025-05-02 18:27:30,082 - app.services.order_service - INFO - OrderService初始化完成 +2025-05-02 18:27:30,083 - app.services.order_service - INFO - OrderService开始处理指定Excel文件: D:\My Documents\python\orc-order-v2\data\output\微信图片_20250227193150(1).xlsx +2025-05-02 18:31:29,326 - app.services.order_service - INFO - 初始化OrderService +2025-05-02 18:31:29,328 - app.services.order_service - INFO - OrderService初始化完成 +2025-05-02 18:31:29,329 - app.services.order_service - INFO - OrderService开始处理指定Excel文件: D:\My Documents\python\orc-order-v2\data\output\微信图片_20250227193150(1).xlsx +2025-05-02 18:33:05,100 - app.services.order_service - INFO - 初始化OrderService +2025-05-02 18:33:05,103 - app.services.order_service - INFO - OrderService初始化完成 +2025-05-02 18:33:05,104 - app.services.order_service - INFO - OrderService开始处理指定Excel文件: D:\My Documents\python\orc-order-v2\data\output\微信图片_20250227193150(1).xlsx +2025-05-02 18:38:52,879 - app.services.order_service - INFO - 初始化OrderService +2025-05-02 18:38:52,881 - app.services.order_service - INFO - OrderService初始化完成 +2025-05-02 18:38:52,881 - app.services.order_service - INFO - OrderService开始处理指定Excel文件: D:\My Documents\python\orc-order-v2\data\output\微信图片_20250227193150(1).xlsx +2025-05-02 18:41:16,741 - app.services.order_service - INFO - 初始化OrderService +2025-05-02 18:41:16,743 - app.services.order_service - INFO - OrderService初始化完成 +2025-05-02 18:41:16,744 - app.services.order_service - INFO - OrderService开始处理指定Excel文件: D:\My Documents\python\orc-order-v2\data\output\微信图片_20250227193150(1).xlsx diff --git a/启动器.py b/启动器.py index 059bb22..94dd603 100644 --- a/启动器.py +++ b/启动器.py @@ -30,9 +30,12 @@ class LogRedirector: def __init__(self, text_widget): self.text_widget = text_widget self.buffer = "" + self.terminal = sys.__stdout__ # 保存原始的stdout引用 def write(self, string): self.buffer += string + # 同时输出到终端 + self.terminal.write(string) # 在UI线程中更新文本控件 self.text_widget.after(0, self.update_text_widget) @@ -45,7 +48,7 @@ class LogRedirector: self.buffer = "" def flush(self): - pass + self.terminal.flush() # 确保终端也被刷新 def run_command_with_logging(command, log_widget): """运行命令并将输出重定向到日志窗口""" @@ -59,6 +62,13 @@ def run_command_with_logging(command, log_widget): log_widget.insert(tk.END, "=" * 50 + "\n\n") log_widget.configure(state=tk.DISABLED) + # 获取原始的stdout和stderr + old_stdout = sys.stdout + old_stderr = sys.stderr + + # 创建日志重定向器 + log_redirector = LogRedirector(log_widget) + # 设置环境变量,强制OCR模块输出到data目录 env = os.environ.copy() env["OCR_OUTPUT_DIR"] = os.path.abspath("data/output") @@ -66,6 +76,13 @@ def run_command_with_logging(command, log_widget): env["OCR_LOG_LEVEL"] = "DEBUG" # 设置更详细的日志级别 try: + # 重定向stdout和stderr到日志重定向器 + sys.stdout = log_redirector + sys.stderr = log_redirector + + # 打印一条消息,确认重定向已生效 + print("日志重定向已启动,现在同时输出到终端和GUI") + # 运行命令并捕获输出 process = subprocess.Popen( command, @@ -79,7 +96,7 @@ def run_command_with_logging(command, log_widget): # 读取并显示输出 for line in process.stdout: - log_widget.after(0, lambda l=line: add_to_log(log_widget, l)) + print(line.rstrip()) # 直接打印到已重定向的stdout # 等待进程结束 process.wait() @@ -88,12 +105,10 @@ def run_command_with_logging(command, log_widget): end_time = datetime.datetime.now() duration = end_time - start_time - log_widget.after(0, lambda: add_to_log( - log_widget, - f"\n{'=' * 50}\n执行完毕!返回码: {process.returncode}\n" - f"结束时间: {end_time.strftime('%Y-%m-%d %H:%M:%S')}\n" - f"耗时: {duration.total_seconds():.2f} 秒\n" - )) + print(f"\n{'=' * 50}") + print(f"执行完毕!返回码: {process.returncode}") + print(f"结束时间: {end_time.strftime('%Y-%m-%d %H:%M:%S')}") + print(f"耗时: {duration.total_seconds():.2f} 秒") # 如果处理成功,显示成功信息 if process.returncode == 0: @@ -102,8 +117,12 @@ def run_command_with_logging(command, log_widget): log_widget.after(0, lambda: messagebox.showerror("操作失败", f"处理失败,返回码:{process.returncode}")) except Exception as e: - log_widget.after(0, lambda: add_to_log(log_widget, f"\n执行出错: {str(e)}\n")) + print(f"\n执行出错: {str(e)}") log_widget.after(0, lambda: messagebox.showerror("执行错误", f"执行命令时出错: {str(e)}")) + finally: + # 恢复原始stdout和stderr + sys.stdout = old_stdout + sys.stderr = old_stderr # 在新线程中运行,避免UI阻塞 Thread(target=run_in_thread).start() @@ -417,7 +436,7 @@ def main(): # 创建窗口 root = tk.Tk() root.title("OCR订单处理系统 v2.0") - root.geometry("800x600") # 增加窗口宽度以容纳日志 + root.geometry("1200x600") # 增加窗口宽度以容纳日志 # 创建主区域分割 main_pane = tk.PanedWindow(root, orient=tk.HORIZONTAL) @@ -428,7 +447,7 @@ def main(): main_pane.add(left_frame) # 标题 - tk.Label(left_frame, text="OCR订单处理系统", font=("Arial", 16)).pack(pady=10) + tk.Label(left_frame, text="益选-OCR订单处理系统", font=("Arial", 16)).pack(pady=10) # 功能按钮区域 buttons_frame = tk.Frame(left_frame)