Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
H
hh_ccs
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
贺阳
hh_ccs
Commits
7eab946f
提交
7eab946f
authored
3月 21, 2025
作者:
刘擎阳
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1.尾程pod同步
上级
67b95c33
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
76 行增加
和
0 行删除
+76
-0
fetch_mail.py
ccs_base/models/fetch_mail.py
+4
-0
order_state_change_rule.py
ccs_base/models/order_state_change_rule.py
+72
-0
没有找到文件。
ccs_base/models/fetch_mail.py
浏览文件 @
7eab946f
...
@@ -151,6 +151,10 @@ class FetchmailServer(models.Model):
...
@@ -151,6 +151,10 @@ class FetchmailServer(models.Model):
elif
email_body
:
elif
email_body
:
rule_obj
=
self
.
env
[
'order.state.change.rule'
]
.
sudo
()
rule_obj
=
self
.
env
[
'order.state.change.rule'
]
.
sudo
()
rule_obj
.
fetch_mail_dlv
(
email_body
=
email_body
,
year
=
year
)
rule_obj
.
fetch_mail_dlv
(
email_body
=
email_body
,
year
=
year
)
if
'POD'
in
subject
.
upper
():
if
attachment_arr
:
rule_obj
=
self
.
env
[
'order.state.change.rule'
]
.
sudo
()
rule_obj
.
fetch_final_mail_dlv
(
attachment_arr
=
attachment_arr
,
email_body
=
email_body
)
imap_server
.
store
(
num
,
'-FLAGS'
,
'
\\
Seen'
)
imap_server
.
store
(
num
,
'-FLAGS'
,
'
\\
Seen'
)
try
:
try
:
pass
pass
...
...
ccs_base/models/order_state_change_rule.py
浏览文件 @
7eab946f
...
@@ -113,6 +113,43 @@ class OrderStateChangeRule(models.Model):
...
@@ -113,6 +113,43 @@ class OrderStateChangeRule(models.Model):
file_obj
.
is_upload
=
False
file_obj
.
is_upload
=
False
file_obj
.
action_sync
()
file_obj
.
action_sync
()
def
upload_pod_attachment
(
self
,
bl_obj
,
name
,
data
):
"""尾程交接POD(待大包数量和箱号) 文件上传与同步"""
file_objs
=
self
.
env
[
'cc.clearance.file'
]
.
sudo
()
.
search
([(
'file_name'
,
'='
,
'尾程交接POD(待大包数量和箱号)'
),
(
'bl_id'
,
'in'
,
bl_obj
.
ids
)])
# 最大重试次数
max_retries
=
2
for
file_obj
in
file_objs
:
retries
=
0
while
retries
<=
max_retries
:
try
:
# 设置文件内容
file_obj
.
file
=
base64
.
encodebytes
(
data
)
file_obj
.
attachment_name
=
name
file_obj
.
is_upload
=
False
# 确保文件状态是未上传
# 尝试上传操作
file_obj
.
action_sync
()
# 检查是否上传成功,假设 is_upload 为 False 表示上传失败
if
file_obj
.
is_upload
is
False
:
retries
+=
1
# 上传失败,增加重试次数
if
retries
>
max_retries
:
_logger
.
info
(
f
"上传文件 {file_obj.attachment_name} 失败,已尝试 {max_retries} 次,仍然失败。"
)
break
# 超过最大重试次数后跳出循环
else
:
_logger
.
info
(
f
"上传文件 {file_obj.attachment_name} 失败,正在重新尝试第 {retries} 次..."
)
else
:
# 如果上传成功,退出重试循环
_logger
.
info
(
f
"文件 {file_obj.attachment_name} 上传成功"
)
break
except
Exception
as
e
:
# 捕获任何异常并重试
retries
+=
1
_logger
.
info
(
f
"发生异常:{e},正在重新尝试第 {retries} 次上传文件 {file_obj.attachment_name}..."
)
if
retries
>
max_retries
:
_logger
.
info
(
f
"上传文件 {file_obj.attachment_name} 失败,已尝试 {max_retries} 次,仍然失败。"
)
break
# 超过最大重试次数后跳出循环
def
fetch_mail_dlv_attachment
(
self
,
**
kwargs
):
def
fetch_mail_dlv_attachment
(
self
,
**
kwargs
):
attachment_arr
=
kwargs
[
'attachment_arr'
]
attachment_arr
=
kwargs
[
'attachment_arr'
]
for
attachment_tuple
in
attachment_arr
:
for
attachment_tuple
in
attachment_arr
:
...
@@ -144,6 +181,41 @@ class OrderStateChangeRule(models.Model):
...
@@ -144,6 +181,41 @@ class OrderStateChangeRule(models.Model):
except
Exception
as
err
:
except
Exception
as
err
:
logging
.
error
(
'fetch_mail_dlv_attachment--error:
%
s'
%
str
(
err
))
logging
.
error
(
'fetch_mail_dlv_attachment--error:
%
s'
%
str
(
err
))
def
find_final_email_text
(
self
,
email_body
):
"""匹配尾程pod邮件内容"""
pattern
=
re
.
compile
(
"
\\
d{3}-
\\
d{8}
\
s*"
)
data_re
=
re
.
compile
(
pattern
)
data_arr
=
data_re
.
findall
(
email_body
)
data_arr
=
[
i
.
replace
(
'
\r\n
'
,
''
)
for
i
in
data_arr
]
return
data_arr
def
fetch_final_mail_dlv
(
self
,
**
kwargs
):
"""尾程交接邮件提取"""
email_body
=
kwargs
[
'email_body'
]
email_body
=
html
.
unescape
(
email_body
)
text_arr
=
self
.
find_final_email_text
(
email_body
)
logging
.
info
(
'data_arr:
%
s'
%
text_arr
)
attachment_arr
=
kwargs
[
'attachment_arr'
]
attachment_tuple
=
attachment_arr
[
0
]
if
attachment_arr
else
[]
# order_obj_arr = []
try
:
text_arr
=
[
i
.
replace
(
'-'
,
''
)
.
replace
(
' '
,
''
)
for
i
in
text_arr
]
sql
=
"select id from cc_bl where UPPER(REPLACE(REPLACE(REPLACE(bl_no, ' ', ''), '-', ''), '/', '')) in
%
s"
self
.
_cr
.
execute
(
sql
,
(
tuple
(
text_arr
),))
result
=
self
.
_cr
.
fetchall
()
ids
=
[
i
[
0
]
for
i
in
result
]
bl_objs
=
self
.
env
[
'cc.bl'
]
.
sudo
()
.
search
([(
'id'
,
'in'
,
ids
)])
if
result
else
False
if
bl_objs
and
attachment_tuple
:
attachment_name
,
attachment_data
=
attachment_tuple
self
.
upload_pod_attachment
(
bl_objs
,
attachment_name
,
attachment_data
)
# redis_conn = self.env['common.common'].sudo().get_redis()
# if redis_conn == 'no':
# raise ValidationError('未连接redis')
# else:
# redis_conn.lpush('mail_push_package_list', json.dumps({'id': bl_obj.id, 'utc_time': utc_time.strftime("%Y-%m-%d %H:%M:%S")}))
except
Exception
as
err
:
logging
.
error
(
'fetch_final_mail_dlv--error:
%
s'
%
str
(
err
))
def
fetch_mail_dlv
(
self
,
**
kwargs
):
def
fetch_mail_dlv
(
self
,
**
kwargs
):
email_body
=
kwargs
[
'email_body'
]
email_body
=
kwargs
[
'email_body'
]
year
=
kwargs
[
'year'
]
year
=
kwargs
[
'year'
]
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论