From d00ae38e16cadf2bb5197e3f72113ff4bfb5a7f9 Mon Sep 17 00:00:00 2001 From: lhx Date: Mon, 17 Nov 2025 16:37:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8B=E5=8A=A1=E5=9B=9E=E6=BB=9A=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/checkpoint.py | 8 +++++--- app/services/level_data.py | 8 +++++--- app/services/section_data.py | 8 +++++--- app/services/settlement_data.py | 8 +++++--- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/app/services/checkpoint.py b/app/services/checkpoint.py index 83ed0ee..0d035d3 100644 --- a/app/services/checkpoint.py +++ b/app/services/checkpoint.py @@ -163,12 +163,14 @@ class CheckpointService(BaseService[Checkpoint]): logger.error(f"Failed to insert batch: {str(e)}") raise e - # 如果有失败记录,不提交事务 - if failed_items: + # 如果有插入失败记录(不是跳过记录),不提交事务 + # 跳过记录不应该影响事务,只插入失败的记录才需要回滚 + insert_failed_items = [item for item in failed_items if '插入失败' in item.get('error', '')] + if insert_failed_items: db.rollback() return { 'success': False, - 'message': f'批量导入失败: {len(failed_items)}条记录处理失败', + 'message': f'批量导入失败: {len(insert_failed_items)}条记录插入失败', 'total_count': total_count, 'success_count': success_count, 'failed_count': failed_count, diff --git a/app/services/level_data.py b/app/services/level_data.py index 1b02c2a..cdd5b30 100644 --- a/app/services/level_data.py +++ b/app/services/level_data.py @@ -191,12 +191,14 @@ class LevelDataService(BaseService[LevelData]): logger.error(f"Failed to insert batch: {str(e)}") raise e - # 如果有失败记录,不提交事务 - if failed_items: + # 如果有插入失败记录(不是跳过记录),不提交事务 + # 跳过记录不应该影响事务,只插入失败的记录才需要回滚 + insert_failed_items = [item for item in failed_items if '插入失败' in item.get('error', '')] + if insert_failed_items: db.rollback() return { 'success': False, - 'message': f'批量导入失败: {len(failed_items)}条记录处理失败', + 'message': f'批量导入失败: {len(insert_failed_items)}条记录插入失败', 'total_count': total_count, 'success_count': success_count, 'failed_count': failed_count, diff --git a/app/services/section_data.py b/app/services/section_data.py index e9a0b56..a467b1b 100644 --- a/app/services/section_data.py +++ b/app/services/section_data.py @@ -354,12 +354,14 @@ class SectionDataService(BaseService[SectionData]): logger.error(f"Failed to insert batch: {str(e)}") raise e - # 如果有失败记录,不提交事务 - if failed_items: + # 如果有插入失败记录(不是跳过记录),不提交事务 + # 跳过记录不应该影响事务,只插入失败的记录才需要回滚 + insert_failed_items = [item for item in failed_items if '插入失败' in item.get('error', '')] + if insert_failed_items: db.rollback() return { 'success': False, - 'message': f'批量导入失败: {len(failed_items)}条记录处理失败', + 'message': f'批量导入失败: {len(insert_failed_items)}条记录插入失败', 'total_count': total_count, 'success_count': success_count, 'failed_count': failed_count, diff --git a/app/services/settlement_data.py b/app/services/settlement_data.py index f42f03d..251e24a 100644 --- a/app/services/settlement_data.py +++ b/app/services/settlement_data.py @@ -487,12 +487,14 @@ class SettlementDataService(BaseService[SettlementData]): logger.error(f"Failed to insert batch: {str(e)}") raise e - # 如果有失败记录,不提交事务 - if failed_items: + # 如果有插入失败记录(不是跳过记录),不提交事务 + # 跳过记录不应该影响事务,只插入失败的记录才需要回滚 + insert_failed_items = [item for item in failed_items if '插入失败' in item.get('error', '')] + if insert_failed_items: db.rollback() return { 'success': False, - 'message': f'批量导入失败: {len(failed_items)}条记录处理失败', + 'message': f'批量导入失败: {len(insert_failed_items)}条记录插入失败', 'total_count': total_count, 'success_count': success_count, 'failed_count': failed_count,