提交 8ca88357 authored 作者: 贺阳's avatar 贺阳

没有勾选同步或没有勾选涂抹文字也需要创建附件信息

上级 b127cb4b
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import base64
import io
import logging
import base64
import requests
from odoo import models, fields, _
from odoo.exceptions import ValidationError
......@@ -63,9 +64,12 @@ class BatchGetPodInfoWizard(models.TransientModel):
# 用于测试的:保存处理后的PDF并返回下载链接
# if processed_files and processed_files[0].get('file_data'):
# return self._save_and_return_download_link(processed_files[0])
# 回写到附件信息
if processed_files:
# 回写PDF文件到清关文件
self._write_pdf_file(processed_files)
# 再同步和回写
if self.sync_last_mile_pod:
if self.sync_last_mile_pod and processed_files:
self._sync_last_mile_pod(processed_files)
# 写一个方法掉接口获取提单pdf文件
......@@ -78,7 +82,8 @@ class BatchGetPodInfoWizard(models.TransientModel):
bill_numbers = [self.env['common.common'].sudo().process_match_str(bl.bl_no) for bl in bl_objs]
# 调用API获取PDF文件
api_url = self.env['ir.config_parameter'].sudo().get_param('last_mile_pod_api_url','http://172.104.52.150:7002')
api_url = self.env['ir.config_parameter'].sudo().get_param('last_mile_pod_api_url',
'http://172.104.52.150:7002')
if not api_url:
raise ValidationError(_('API URL not configured'))
......@@ -107,7 +112,7 @@ class BatchGetPodInfoWizard(models.TransientModel):
results = result.get('results', [])
if not results:
raise ValidationError(_('No PDF files found in API response'))#提示:API调用成功,但没有PDF文件
raise ValidationError(_('No PDF files found in API response')) # 提示:API调用成功,但没有PDF文件
# 构建PDF文件数组
pdf_file_arr = []
for result_item in results:
......@@ -176,7 +181,7 @@ class BatchGetPodInfoWizard(models.TransientModel):
select_bl_no = self.env['common.common'].sudo().process_match_str(bl.bl_no)
for pdf_file in pdf_file_arr:
# 尝试不同的字段名(API可能使用不同的字段名)
file_name = pdf_file.get('file_name' ) # 获取文件名
file_name = pdf_file.get('file_name') # 获取文件名
file_data = pdf_file.get('file_data') # 获取文件数据
bl_no = pdf_file.get('bl_no') # 获取提单号
if bl_no and select_bl_no == bl_no:
......@@ -198,8 +203,6 @@ class BatchGetPodInfoWizard(models.TransientModel):
Sync last mile POD information # 同步尾程POD信息
:param processed_files: 处理后的文件数组
"""
# 回写PDF文件到清关文件
self._write_pdf_file(processed_files)
# return False#测试 先不同步
# 同步尾程POD信息
for file_info in processed_files:
......@@ -256,7 +259,6 @@ class BatchGetPodInfoWizard(models.TransientModel):
:param bl_no: 提单号(用于日志)
:return: 处理后的PDF二进制数据
"""
import os
import fitz # PyMuPDF
import numpy as np
from PIL import Image
......@@ -280,7 +282,7 @@ class BatchGetPodInfoWizard(models.TransientModel):
processed_pages = 0
detected_texts = []
all_recognized_texts = []
result_data=False
result_data = False
# 处理每一页(完全按照HTML逻辑)
for page_num in range(len(pdf_document)):
page = pdf_document[page_num]
......@@ -366,7 +368,6 @@ class BatchGetPodInfoWizard(models.TransientModel):
'height': text_info['height']
}
# 绘制白色矩形覆盖文字
try:
page.draw_rect(
......@@ -473,8 +474,10 @@ class BatchGetPodInfoWizard(models.TransientModel):
Find target texts using OCR results (完全按照HTML逻辑) # 使用OCR结果查找目标文字
"""
# 定义目标文字和排除文字(与HTML文件完全一致)
TARGET_TEXTS = ['AGN', 'UCLINK LOGISITICS LTD', 'UCLINK LOGISITICS', 'UCLINK', 'LOGISITICS', 'LOGISTICS', 'LTD','UCLINKLOGISITICSLTD']
EXCLUDE_TEXTS = ['AIR EQK', 'ARN', 'EQK', 'AIR', 'Page 1 of 1', 'Page 2 of 2', 'Page 3 of 3', 'Page 4 of 4', 'Page 5 of 5']
TARGET_TEXTS = ['AGN', 'UCLINK LOGISITICS LTD', 'UCLINK LOGISITICS', 'UCLINK', 'LOGISITICS', 'LOGISTICS', 'LTD',
'UCLINKLOGISITICSLTD']
EXCLUDE_TEXTS = ['AIR EQK', 'ARN', 'EQK', 'AIR', 'Page 1 of 1', 'Page 2 of 2', 'Page 3 of 3', 'Page 4 of 4',
'Page 5 of 5']
found_texts = []
......@@ -532,7 +535,6 @@ class BatchGetPodInfoWizard(models.TransientModel):
converted_width = (word['bbox']['x1'] - word['bbox']['x0']) * scale_x
converted_height = (word['bbox']['y1'] - word['bbox']['y0']) * scale_y
found_texts.append({
'text': target_text,
'full_text': word['text'],
......@@ -600,7 +602,7 @@ class BatchGetPodInfoWizard(models.TransientModel):
file_name = file_info.get('file_name', 'processed.pdf')
if not file_data:
raise ValidationError(_('No processed file data available'))#提示:没有处理后的文件数据
raise ValidationError(_('No processed file data available')) # 提示:没有处理后的文件数据
# 解码base64数据
if isinstance(file_data, str):
......@@ -652,7 +654,8 @@ class BatchGetPodInfoWizard(models.TransientModel):
'res_id': self.id,
})
_logger.info(f"成功保存处理后的PDF附件,文件名: {file_name}, 大小: {len(pdf_binary)}字节, 附件ID: {attachment.id}")
_logger.info(
f"成功保存处理后的PDF附件,文件名: {file_name}, 大小: {len(pdf_binary)}字节, 附件ID: {attachment.id}")
# 返回下载动作
return {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论