提交 963de709 authored 作者: 郑笛's avatar 郑笛

优化批量提单

上级 7672c8d0
...@@ -247,46 +247,47 @@ class CcBl(models.Model): ...@@ -247,46 +247,47 @@ class CcBl(models.Model):
# 定义一个方法, 获取提单下的所有未同步的小包,并回传小包状态 # 定义一个方法, 获取提单下的所有未同步的小包,并回传小包状态
def callback_track(self): def callback_track(self):
ship_packages = self.env['cc.ship.package'].search([('bl_id', 'in', self.ids), ('is_sync', '=', False)]) for item in self:
# for package in ship_packages: ship_packages = self.env['cc.ship.package'].search([('bl_id', '=', item.id), ('is_sync', '=', False)])
# package.callback_track() # for package in ship_packages:
tt_api_obj = self.env["ao.tt.api"].sudo() # package.callback_track()
async def perform_requests(): tt_api_obj = self.env["ao.tt.api"].sudo()
ssl_context = ssl.create_default_context(cafile=certifi.where()) async def perform_requests():
async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=ssl_context), timeout=aiohttp.ClientTimeout(total=60)) as session: ssl_context = ssl.create_default_context(cafile=certifi.where())
tasks = [] async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=ssl_context), timeout=aiohttp.ClientTimeout(total=60)) as session:
for index, package in enumerate(ship_packages): tasks = []
if not package.is_sync and package.state and package.state.tk_code: for index, package in enumerate(ship_packages):
data = package.get_callback_track_data() if not package.is_sync and package.state and package.state.tk_code:
tasks.append(tt_api_obj.async_callback_track(session, data, package.id)) data = package.get_callback_track_data()
responses = await asyncio.gather(*tasks) tasks.append(tt_api_obj.async_callback_track(session, data, package.id))
return responses responses = await asyncio.gather(*tasks)
return responses
# 在 Odoo 中运行异步任务
responses = asyncio.run(perform_requests()) # 在 Odoo 中运行异步任务
for response_item in responses: responses = asyncio.run(perform_requests())
response_data = response_item[0] for response_item in responses:
logging.info('response_data response:%s' % response_data) response_data = response_item[0]
data = response_item[1] logging.info('response_data response:%s' % response_data)
package_id = response_item[2] data = response_item[1]
package_order = self.env['cc.ship.package'].sudo().browse(package_id) package_id = response_item[2]
if response_data['code'] != 0: package_order = self.env['cc.ship.package'].sudo().browse(package_id)
package_order.is_sync = False if response_data['code'] != 0:
error_msg = response_data['msg'] package_order.is_sync = False
request_id = response_data['requestID'] error_msg = response_data['msg']
code = response_data['code'] request_id = response_data['requestID']
self.env['ao.tt.api.log'].sudo().create_api_log( code = response_data['code']
package_order.tracking_no or '', '小包状态轨迹回传:' + error_msg, data, code, request_id, self.env['ao.tt.api.log'].sudo().create_api_log(
source='推出') package_order.tracking_no or '', '小包状态轨迹回传:' + error_msg, data, code, request_id,
else: source='推出')
# 回传成功 else:
package_order.is_sync = True # 回传成功
self.env['cc.ship.package.sync.log'].sudo().create_sync_log( package_order.is_sync = True
package_order.id, 'Tiktok', package_order.state.tk_code, package_order.state_explain, self.env['cc.ship.package.sync.log'].sudo().create_sync_log(
package_order.process_time.strftime('%Y-%m-%d %H:%M:%S')) package_order.id, 'Tiktok', package_order.state.tk_code, package_order.state_explain,
request_id = response_data['requestID'] package_order.process_time.strftime('%Y-%m-%d %H:%M:%S'))
self.env['ao.tt.api.log'].sudo().create_api_log( request_id = response_data['requestID']
package_order.tracking_no or '', '', data, 0, request_id, source='推出') self.env['ao.tt.api.log'].sudo().create_api_log(
package_order.tracking_no or '', '', data, 0, request_id, source='推出')
def deal_ship_package_state(self): def deal_ship_package_state(self):
for item in self: for item in self:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论