提交 44d2fe95 authored 作者: 贺阳's avatar 贺阳

修改小包状态改为sql

上级 9aa9e4a9
...@@ -293,6 +293,7 @@ class CcBl(models.Model): ...@@ -293,6 +293,7 @@ class CcBl(models.Model):
package_order = self.env['cc.ship.package'].sudo().browse(package_id) package_order = self.env['cc.ship.package'].sudo().browse(package_id)
if response_data['code'] != 0: if response_data['code'] != 0:
package_order.is_sync = False package_order.is_sync = False
self._cr.commit() # 提交事务
error_msg = response_data['msg'] error_msg = response_data['msg']
request_id = response_data['requestID'] request_id = response_data['requestID']
code = response_data['code'] code = response_data['code']
...@@ -303,6 +304,7 @@ class CcBl(models.Model): ...@@ -303,6 +304,7 @@ class CcBl(models.Model):
else: else:
# 回传成功 # 回传成功
package_order.is_sync = True package_order.is_sync = True
self._cr.commit() # 提交事务
self.env['cc.ship.package.sync.log'].sudo().create_sync_log( 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.id, 'Tiktok', package_order.state.tk_code, package_order.state_explain,
package_order.process_time.strftime('%Y-%m-%d %H:%M:%S')) package_order.process_time.strftime('%Y-%m-%d %H:%M:%S'))
...@@ -449,24 +451,60 @@ class CcBl(models.Model): ...@@ -449,24 +451,60 @@ class CcBl(models.Model):
order='seq asc') order='seq asc')
# 理货或尾程交接之前没有生成的节点 # 理货或尾程交接之前没有生成的节点
for before_node in before_node_obj: for before_node in before_node_obj:
print('before_node:%s' % before_node.name)
before_minutes = before_node.calculate_total_interval(node_obj[0]) before_minutes = before_node.calculate_total_interval(node_obj[0])
# 准备批量更新数据
update_data = []
for package in all_ship_package_obj: for package in all_ship_package_obj:
package_id = package.id package_id = package.id
if package_id not in sync_log_dict or before_node.tk_code not in sync_log_dict.get( if package_id not in sync_log_dict or before_node.tk_code not in sync_log_dict.get(
package_id, set()): package_id, set()):
tally_time = ship_packages_dict.get(package_id) tally_time = ship_packages_dict.get(package_id)
if tally_time: if tally_time:
operation_time = ( operation_time = (datetime.strptime(tally_time, '%Y-%m-%d %H:%M:%S') - timedelta(
datetime.strptime(tally_time, '%Y-%m-%d %H:%M:%S') - timedelta(
minutes=before_minutes)) if tally_time else fields.Datetime.now() - timedelta( minutes=before_minutes)) if tally_time else fields.Datetime.now() - timedelta(
minutes=before_minutes) minutes=before_minutes)
package.write({ update_data.append((
'state': before_node.id, package_id,
'process_time': operation_time, before_node.id,
'state_explain': before_node.desc, operation_time,
'is_sync': True if before_node.is_default else False before_node.desc,
}) True if before_node.is_default else False
self.try_callback_track(max_retries=2, ship_package_ids=ship_package_ids) ))
if update_data:
# 构建批量更新SQL
values_str = ','.join(
self.env.cr.mogrify("(%s,%s,%s,%s,%s)", row).decode('utf-8') for row in update_data)
sql = """
UPDATE cc_ship_package AS t SET
state = c.state,
process_time = c.process_time,
state_explain = c.state_explain,
is_sync = c.is_sync
FROM (VALUES
{}
) AS c(id, state, process_time, state_explain, is_sync)
WHERE t.id = c.id
""".format(values_str)
self.env.cr.execute(sql)
self._cr.commit() # 提交事务
# # 更新提单的未同步小包数量
# sql = """
# UPDATE cc_bl AS bl SET
# unsync_package_count = (
# SELECT COUNT(*)
# FROM cc_ship_package sp
# WHERE sp.bl_id = bl.id
# AND sp.is_sync = false
# )
# WHERE bl.id = %s
# """
# self.env.cr.execute(sql, (item.id,))
# self._cr.commit() # 提交事务
self.try_callback_track(max_retries=2, ship_package_ids=ship_package_ids)
# 理货或尾程交接的节点 # 理货或尾程交接的节点
# 预先获取所有状态节点 # 预先获取所有状态节点
all_state_nodes = self.env['cc.node'].sudo().search([ all_state_nodes = self.env['cc.node'].sudo().search([
...@@ -475,6 +513,8 @@ class CcBl(models.Model): ...@@ -475,6 +513,8 @@ class CcBl(models.Model):
state_node_dict = {node.name: node for node in all_state_nodes} state_node_dict = {node.name: node for node in all_state_nodes}
next_minutes = int(self.env['ir.config_parameter'].sudo().get_param('next_minutes', default=20)) next_minutes = int(self.env['ir.config_parameter'].sudo().get_param('next_minutes', default=20))
for index, node in enumerate(node_obj): for index, node in enumerate(node_obj):
print('node:%s' % node.name)
update_data = []
for package in all_ship_package_obj: for package in all_ship_package_obj:
if package.state.name in state_node_dict: if package.state.name in state_node_dict:
current_state_node = state_node_dict[package.state.name] current_state_node = state_node_dict[package.state.name]
...@@ -482,16 +522,43 @@ class CcBl(models.Model): ...@@ -482,16 +522,43 @@ class CcBl(models.Model):
tally_time = ship_packages_dict.get(package.id) tally_time = ship_packages_dict.get(package.id)
if tally_time: if tally_time:
operation_time = ( operation_time = (
datetime.strptime(tally_time, '%Y-%m-%d %H:%M:%S') + timedelta( datetime.strptime(tally_time, '%Y-%m-%d %H:%M:%S') + timedelta(
minutes=next_minutes * index)) if tally_time else fields.Datetime.now() + timedelta( minutes=next_minutes * index)) if tally_time else fields.Datetime.now() + timedelta(
minutes=next_minutes * index) minutes=next_minutes * index)
package.write({ update_data.append((
'state': node.id, package.id,
'process_time': operation_time, node.id,
'state_explain': node.desc, operation_time,
'is_sync': True if node.is_default else False node.desc,
}) True if node.is_default else False
self.try_callback_track(max_retries=2, ship_package_ids=ship_package_ids) ))
print('update_data:%s' % update_data)
if update_data:
print('11111111111')
# 构建批量更新SQL
values_str = ','.join(
self.env.cr.mogrify("(%s,%s,%s,%s,%s)", row).decode('utf-8') for row in update_data)
sql = """
UPDATE cc_ship_package AS t SET
state = c.state,
process_time = c.process_time,
state_explain = c.state_explain,
is_sync = c.is_sync
FROM (VALUES
{}
) AS c(id, state, process_time, state_explain, is_sync)
WHERE t.id = c.id
""".format(values_str)
self.env.cr.execute(sql)
self._cr.commit() # 提交事务
# # 更新提单的未同步小包数量
# sql = """UPDATE cc_bl AS bl SET unsync_package_count = ( SELECT COUNT(*) FROM cc_ship_package sp WHERE sp.bl_id = bl.id AND sp.is_sync = false) WHERE bl.id = %s """
# self.env.cr.execute(sql, (item.id,))
# self._cr.commit() # 提交事务
print('222222')
self.try_callback_track(max_retries=2, ship_package_ids=ship_package_ids)
print('33333')
return True return True
# except Exception as err: # except Exception as err:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论