Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
H
hh_ccs
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
贺阳
hh_ccs
Commits
86981303
提交
86981303
authored
9月 27, 2024
作者:
郑笛
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
完成异步处理小包状态
上级
50fbbe32
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
83 行增加
和
2 行删除
+83
-2
.gitignore
.gitignore
+1
-0
cc_bill_loading.py
ccs_connect_tiktok/models/cc_bill_loading.py
+44
-2
tt_api.py
ccs_connect_tiktok/models/tt_api.py
+38
-0
没有找到文件。
.gitignore
浏览文件 @
86981303
*.pyc
.idea/
*.log
ccs_connect_tiktok/models/cc_bill_loading.py
浏览文件 @
86981303
import
asyncio
import
base64
import
json
import
logging
import
ssl
import
aiohttp
import
certifi
import
pytz
from
datetime
import
datetime
from
lxml
import
etree
...
...
@@ -244,8 +249,45 @@ class CcBl(models.Model):
def
callback_track
(
self
):
for
item
in
self
:
ship_packages
=
self
.
env
[
'cc.ship.package'
]
.
search
([(
'bl_id'
,
'='
,
item
.
id
),
(
'is_sync'
,
'='
,
False
)])
for
package
in
ship_packages
:
package
.
callback_track
()
# for package in ship_packages:
# package.callback_track()
tt_api_obj
=
self
.
env
[
"ao.tt.api"
]
.
sudo
()
async
def
perform_requests
():
ssl_context
=
ssl
.
create_default_context
(
cafile
=
certifi
.
where
())
async
with
aiohttp
.
ClientSession
(
connector
=
aiohttp
.
TCPConnector
(
ssl
=
ssl_context
))
as
session
:
tasks
=
[]
for
index
,
package
in
enumerate
(
ship_packages
):
if
not
package
.
is_sync
and
package
.
state
and
package
.
state
.
tk_code
:
data
=
package
.
get_callback_track_data
()
tasks
.
append
(
tt_api_obj
.
async_callback_track
(
session
,
data
,
package
.
id
))
responses
=
await
asyncio
.
gather
(
*
tasks
)
return
responses
# 在 Odoo 中运行异步任务
responses
=
asyncio
.
run
(
perform_requests
())
for
response_item
in
responses
:
response_data
=
response_item
[
0
]
logging
.
info
(
'response_data response:
%
s'
%
response_data
)
data
=
response_item
[
1
]
package_id
=
response_item
[
2
]
package_order
=
self
.
env
[
'cc.ship.package'
]
.
sudo
()
.
browse
(
package_id
)
if
response_data
[
'code'
]
!=
0
:
package_order
.
is_sync
=
False
error_msg
=
response_data
[
'msg'
]
request_id
=
response_data
[
'requestID'
]
code
=
response_data
[
'code'
]
self
.
env
[
'ao.tt.api.log'
]
.
sudo
()
.
create_api_log
(
package_order
.
tracking_no
or
''
,
'小包状态轨迹回传:'
+
error_msg
,
data
,
code
,
request_id
,
source
=
'推出'
)
else
:
# 回传成功
package_order
.
is_sync
=
True
self
.
env
[
'cc.ship.package.sync.log'
]
.
sudo
()
.
create_sync_log
(
package_order
.
id
,
'Tiktok'
,
package_order
.
state
.
tk_code
,
package_order
.
state_explain
,
package_order
.
process_time
.
strftime
(
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
))
request_id
=
response_data
[
'requestID'
]
self
.
env
[
'ao.tt.api.log'
]
.
sudo
()
.
create_api_log
(
package_order
.
tracking_no
or
''
,
''
,
data
,
0
,
request_id
,
source
=
'推出'
)
return
True
def
deal_ship_package_state
(
self
):
...
...
ccs_connect_tiktok/models/tt_api.py
浏览文件 @
86981303
...
...
@@ -110,3 +110,41 @@ class TT(models.Model):
# response = {'code': 0}
return
response
async
def
async_get_response
(
self
,
session
,
url
,
sign
,
timestamp
,
push_data
):
headers
=
{
'Content-Type'
:
'application/x-www-form-urlencoded'
}
app_key
=
self
.
env
[
"ir.config_parameter"
]
.
sudo
()
.
get_param
(
'tt_app_key'
)
or
''
version
=
self
.
env
[
"ir.config_parameter"
]
.
sudo
()
.
get_param
(
'tt_version'
)
or
'3.0'
tt_url
=
self
.
env
[
"ir.config_parameter"
]
.
sudo
()
.
get_param
(
'tt_url'
)
or
''
parameter
=
{
'sign'
:
sign
,
'param_json'
:
json
.
dumps
(
push_data
,
ensure_ascii
=
False
),
'timestamp'
:
timestamp
,
'version'
:
version
,
'app_key'
:
app_key
}
request_url
=
tt_url
+
url
logging
.
info
(
'request_url:
%
s'
%
request_url
)
logging
.
info
(
'request_data:
%
s'
%
parameter
)
async
with
session
.
post
(
request_url
,
headers
=
headers
,
data
=
parameter
)
as
response
:
response_data
=
await
response
.
json
()
logging
.
info
(
'response:
%
s'
,
response_data
)
# print(response.json())
return
response_data
async
def
async_callback_track_callback
(
self
,
session
,
push_data
,
package_id
):
"""包裹轨迹回传"""
url
=
'/logistics/provider/cross_border/callback_track?country=GB'
# cb_excustoms_finished 出口清关完毕
# cb_transport_assigned 干线揽收
timestamp
=
int
(
time
.
time
())
sign
=
self
.
generate_sign
(
timestamp
,
push_data
)
response
=
await
self
.
async_get_response
(
session
,
url
,
sign
,
timestamp
,
push_data
)
logging
.
info
(
'callback_track response:
%
s'
%
response
)
return
response
,
push_data
,
package_id
async
def
async_callback_track
(
self
,
session
,
data
,
package_id
):
"""异步调用推送接口"""
# async with semaphore:
return
await
self
.
async_callback_track_callback
(
session
,
data
,
package_id
)
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论