提交 d5ccac2a authored 作者: 贺阳's avatar 贺阳

失败的保存成功的提单优化

上级 ab556fae
......@@ -134,22 +134,19 @@ class BatchGetPodInfoWizard(models.TransientModel):
_logger.info(f"所有提单都处理成功,自动勾选同步选项")
else:
# 有失败的文件,保持未勾选状态,让用户决定
# 将成功处理的提单信息追加到show_error_message中(使用特殊分隔符)
# 将成功处理的提单号追加到show_error_message中
if successful_files:
successful_bl_data = []
successful_bl_nos = []
for file_info in successful_files:
if file_info.get('bl'):
bl = file_info['bl']
successful_bl_data.append({
'bl_id': bl.id,
'bl_no': bl.bl_no
})
# 在错误消息后面追加成功处理的提单信息(使用特殊分隔符,不会在UI中显示)
successful_bls_json = json.dumps(successful_bl_data, ensure_ascii=False)
successful_bl_nos.append(bl.bl_no)
# 在错误消息后面追加成功处理的提单号
existing_error = self.show_error_message or ''
# 使用特殊分隔符,方便后续解析,但在UI中不会显示这部分
self.show_error_message = f"{existing_error}\n<!--SUCCESSFUL_BLS_START-->{successful_bls_json}<!--SUCCESSFUL_BLS_END-->"
_logger.info(f"部分提单处理失败(成功:{len(successful_files)},失败:{len(failed_files)}),成功处理的提单信息已保存到错误消息中")
successful_bl_nos_str = '、'.join(successful_bl_nos) if successful_bl_nos else ''
success_msg = f"\n成功处理的提单: {successful_bl_nos_str}" if successful_bl_nos_str else ''
self.show_error_message = f"{existing_error}{success_msg}"
_logger.info(f"部分提单处理失败(成功:{len(successful_files)},失败:{len(failed_files)}),成功处理的提单号已显示")
self.sync_successful_processed = False
# 序列化并存储处理后的文件数据(包括成功和失败的,但只有成功的才会合并PDF)
......@@ -277,36 +274,23 @@ class BatchGetPodInfoWizard(models.TransientModel):
}
# 只处理成功涂抹的提单
# 从show_error_message中获取成功处理的提单ID(如果有失败的话)
successful_bl_ids = []
if self.show_error_message and '<!--SUCCESSFUL_BLS_START-->' in str(self.show_error_message):
try:
# 从show_error_message中提取成功处理的提单信息
error_msg = str(self.show_error_message)
start_marker = '<!--SUCCESSFUL_BLS_START-->'
end_marker = '<!--SUCCESSFUL_BLS_END-->'
start_idx = error_msg.find(start_marker)
end_idx = error_msg.find(end_marker)
if start_idx != -1 and end_idx != -1:
successful_bls_json = error_msg[start_idx + len(start_marker):end_idx]
successful_bl_data = json.loads(successful_bls_json)
successful_bl_ids = [item['bl_id'] for item in successful_bl_data]
_logger.info(f"从错误消息中解析出{len(successful_bl_ids)}个成功处理的提单ID")
except Exception as e:
_logger.warning(f"解析成功处理的提单数据失败: {str(e)}")
# 过滤出成功处理的文件
# 直接根据processed_files中的processing_failed标志筛选成功处理的文件,无需从文本解析
successful_processed_files = []
if successful_bl_ids:
# 如果有成功处理的提单ID(说明有失败),只处理成功的
if processed_files:
successful_bl_ids_set = set(successful_bl_ids)
for file_info in processed_files:
if file_info.get('bl') and file_info['bl'].id in successful_bl_ids_set:
successful_processed_files.append(file_info)
if processed_files:
for file_info in processed_files:
# 检查是否有bl对象和有文件数据
if not file_info.get('bl'):
continue
bl = file_info['bl']
file_data = file_info.get('file_data', '')
# 检查处理是否失败(通过processing_failed标记)
processing_failed = file_info.get('processing_failed', False)
# 如果有文件数据且未标记为失败,则认为处理成功
if file_data and not processing_failed:
successful_processed_files.append(file_info)
_logger.info(f"从{len(processed_files)}个文件中筛选出{len(successful_processed_files)}个成功处理的文件")
else:
# 如果没有失败(没有成功处理的提单ID列表),说明全部成功,处理所有文件
successful_processed_files = processed_files
_logger.warning("没有找到已处理的文件数据")
# 回写到附件信息
if successful_processed_files and (self.sync_last_mile_pod or self.sync_match_node):
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论