提交 39e4150e authored 作者: 刘擎阳's avatar 刘擎阳

1.优化小包同步

上级 f771f662
......@@ -560,39 +560,116 @@ class CcBl(models.Model):
# 在 Odoo 中运行异步任务
responses = asyncio.run(perform_requests())
# log_values=[]
result_dict = {}
select_ids = [i[2] for i in responses]
if select_ids:
select_ids_str = '(%s)' % str(select_ids)[1:-1]
sql = "select id,tracking_no,state,state_explain,process_time from cc_ship_package where id in %s" % select_ids_str
self._cr.execute(sql)
result = self._cr.fetchall()
result_dict = {row[0]: row for row in result}
package_node_sql = "select id,tk_code from cc_node where node_type='package'"
self._cr.execute(package_node_sql)
package_node_result = self._cr.fetchall()
package_node_result_dict = {row[0]: row for row in package_node_result}
update_false_arr = [] # 更新小包is_sync为False
update_true_arr = [] # 更新小包is_sync为True
create_sync_log_value_arr = [] # 创建小包同步日志数据
create_api_log_value_arr = [] # 创建api_log日志数据
utc_time = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S')
user_id = self.env.user.id
for response_item in responses:
response_data = response_item[0]
logging.info('ship response_data:%s' % response_data)
data = response_item[1]
package_id = response_item[2]
package_order = self.env['cc.ship.package'].sudo().browse(package_id)
tuple_data = result_dict.get(package_id, [])
if not tuple_data:
continue
tracking_no = tuple_data[1] or ''
state = tuple_data[2] or ''
state_explain = tuple_data[3] or ''
process_time = tuple_data[4] or ''
data_text = json.dumps(data)
# package_order = self.env['cc.ship.package'].sudo().browse(package_id)
if response_data['code'] != 0:
package_order.is_sync = False
self._cr.commit() # 提交事务
# package_order.is_sync = False
update_false_arr.append(package_id) # 更新 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='推出')
create_api_log_value_arr.append((tracking_no, utc_time, '小包状态轨迹回传:' + error_msg, False, data_text, request_id, '推出', utc_time))
is_ok = False
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'))
self._cr.commit() # 提交事务
update_true_arr.append(package_id) # 更新 is_sync为 True
state_arr = package_node_result_dict.get(state, [])
tk_code = state_arr[1] if state_arr else ''
create_sync_log_value_arr.append((package_id, utc_time, 'Tiktok', tk_code, process_time, state_explain, user_id))
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='推出')
# log_values.append(
# (package_order.id,
# 'Tiktok',
# package_order.state.tk_code,
# package_order.state_explain or '',
# package_order.process_time.strftime('%Y-%m-%d %H:%M:%S')
# ))
create_api_log_value_arr.append((tracking_no, utc_time, '', True, data_text, request_id, '推出', utc_time))
if update_false_arr:
update_false_ids = '(%s)' % str(update_false_arr)[1:-1]
sql = "update cc_ship_package set is_sync=False where id in %s" % update_false_ids
self._cr.execute(sql)
if update_true_arr:
update_true_ids = '(%s)' % str(update_true_arr)[1:-1]
sql = "update cc_ship_package set is_sync=True where id in %s" % update_true_ids
self._cr.execute(sql)
if create_sync_log_value_arr:
# 插入 SQL 语句
insert_sql = """
INSERT INTO cc_ship_package_sync_log (package_id, sync_time, api_customer, process_code, operate_time, operate_remark, operate_user)
VALUES (%s, %s, %s, %s, %s, %s, %s)
"""
self._cr.executemany(insert_sql, create_sync_log_value_arr)
if create_api_log_value_arr:
insert_log_sql = """
INSERT INTO ao_tt_api_log (big_bag_no, push_time, error_msg, success_bl, data_text, request_id, source, create_date)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
"""
self._cr.executemany(insert_log_sql, create_api_log_value_arr)
self._cr.commit()
if self.id:
update_bl_sql = "update cc_bl set unsync_package_count=(select count(*) from cc_ship_package where " \
"bl_id=%s and is_sync=False) where id=%s;" % (self.id, self.id)
self._cr.execute(update_bl_sql)
self._cr.commit()
# for response_item in responses:
# response_data = response_item[0]
# logging.info('ship response_data:%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
# self._cr.commit() # 提交事务
# 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='推出')
# is_ok = False
# 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'))
# self._cr.commit() # 提交事务
# 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='推出')
# # log_values.append(
# # (package_order.id,
# # 'Tiktok',
# # package_order.state.tk_code,
# # package_order.state_explain or '',
# # package_order.process_time.strftime('%Y-%m-%d %H:%M:%S')
# # ))
# self.batch_create_package_sync_logs_by_sql(log_values)
# 如果提单有小包变成了清关开始,提单状态变为清关中;如果提单所有小包的清关节点变成"是完成节点",则该提单状态变成已完成
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论