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,