Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
H
hh_ccs
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
贺阳
hh_ccs
Commits
8ca88357
提交
8ca88357
authored
10月 20, 2025
作者:
贺阳
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
没有勾选同步或没有勾选涂抹文字也需要创建附件信息
上级
b127cb4b
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
19 行增加
和
16 行删除
+19
-16
batch_get_pod_info_wizard.py
ccs_base/wizard/batch_get_pod_info_wizard.py
+19
-16
没有找到文件。
ccs_base/wizard/batch_get_pod_info_wizard.py
浏览文件 @
8ca88357
# -*- 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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论