From 7d54be4805472f49ee83b130476d24f15d34db94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=8C=AF=E5=8D=87?= <359059686@qq.com> Date: Wed, 5 Nov 2025 15:30:36 +0800 Subject: [PATCH] =?UTF-8?q?refactor=20:=20=E5=90=8C=E6=AD=A5=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=EF=BC=8C=E6=95=B0=E6=8D=AE=E5=B7=AE=E5=BC=82=E9=87=8D?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/app/core/domain/entities/data_conflict.dart | 13 +++++++++++++ .../domain/entities/sync_result.dart | 6 +++--- .../enterprise_repository_impl.dart | 8 ++++---- .../domain/entities/enterprise_conflict.dart | 16 ---------------- .../repositories/enterprise_repository.dart | 9 ++++++--- .../usecases/sync_enterprises_usecase.dart | 3 +-- .../controllers/enterprise_list_controller.dart | 2 +- 7 files changed, 28 insertions(+), 29 deletions(-) create mode 100644 lib/app/core/domain/entities/data_conflict.dart rename lib/app/{features/enterprise => core}/domain/entities/sync_result.dart (74%) delete mode 100644 lib/app/features/enterprise/domain/entities/enterprise_conflict.dart diff --git a/lib/app/core/domain/entities/data_conflict.dart b/lib/app/core/domain/entities/data_conflict.dart new file mode 100644 index 0000000..57f184a --- /dev/null +++ b/lib/app/core/domain/entities/data_conflict.dart @@ -0,0 +1,13 @@ +import 'package:equatable/equatable.dart'; + +/// 表示本地版本和服务器版本之间的数据冲突 +/// [T] 是一个泛型参数,代表任何核心实体类型 (如 Enterprise, ProblemEntity) +class DataConflict extends Equatable { + final T localVersion; + final T serverVersion; + + const DataConflict({required this.localVersion, required this.serverVersion}); + + @override + List get props => [localVersion, serverVersion]; +} diff --git a/lib/app/features/enterprise/domain/entities/sync_result.dart b/lib/app/core/domain/entities/sync_result.dart similarity index 74% rename from lib/app/features/enterprise/domain/entities/sync_result.dart rename to lib/app/core/domain/entities/sync_result.dart index cf59c4a..e555af9 100644 --- a/lib/app/features/enterprise/domain/entities/sync_result.dart +++ b/lib/app/core/domain/entities/sync_result.dart @@ -1,12 +1,12 @@ import 'package:equatable/equatable.dart'; -import 'enterprise_conflict.dart'; +import 'package:problem_check_system/app/core/domain/entities/data_conflict.dart'; -class SyncResult extends Equatable { +class SyncResult extends Equatable { /// 存在于服务器但本地没有的数据条目数量 final int newItemsFromServer; /// 本地和服务器都存在,但内容有冲突的条目列表 - final List conflicts; + final List> conflicts; const SyncResult({this.newItemsFromServer = 0, this.conflicts = const []}); diff --git a/lib/app/features/enterprise/data/repositories_impl/enterprise_repository_impl.dart b/lib/app/features/enterprise/data/repositories_impl/enterprise_repository_impl.dart index a90af06..604a0ac 100644 --- a/lib/app/features/enterprise/data/repositories_impl/enterprise_repository_impl.dart +++ b/lib/app/features/enterprise/data/repositories_impl/enterprise_repository_impl.dart @@ -5,9 +5,9 @@ import 'package:problem_check_system/app/features/enterprise/data/datasources/en import 'package:problem_check_system/app/features/enterprise/data/model/enterprise_dto.dart'; import 'package:problem_check_system/app/features/enterprise/data/model/enterprise_model.dart'; import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise.dart'; -import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise_conflict.dart'; +import 'package:problem_check_system/app/core/domain/entities/data_conflict.dart'; import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise_list_item.dart'; -import 'package:problem_check_system/app/features/enterprise/domain/entities/sync_result.dart'; +import 'package:problem_check_system/app/core/domain/entities/sync_result.dart'; import 'package:problem_check_system/app/features/enterprise/domain/repositories/enterprise_repository.dart'; import 'package:uuid/uuid.dart'; @@ -128,10 +128,10 @@ class EnterpriseRepositoryImpl implements EnterpriseRepository { // [新增] 实现同步逻辑 @override - Future syncWithServer() async { + Future syncWithServer() async { if (!networkStatusService.isOnline.value) { // 如果离线,直接返回一个空的同步结果 - return const SyncResult(); + return const EnterpriseSyncResult(); } // 1. 从远程和本地获取所有数据 diff --git a/lib/app/features/enterprise/domain/entities/enterprise_conflict.dart b/lib/app/features/enterprise/domain/entities/enterprise_conflict.dart deleted file mode 100644 index 0552526..0000000 --- a/lib/app/features/enterprise/domain/entities/enterprise_conflict.dart +++ /dev/null @@ -1,16 +0,0 @@ -import 'package:equatable/equatable.dart'; -import 'enterprise.dart'; // 假设 Enterprise 是你的核心实体 - -/// 表示本地版本和服务器版本之间的数据冲突 -class EnterpriseConflict extends Equatable { - final Enterprise localVersion; - final Enterprise serverVersion; - - const EnterpriseConflict({ - required this.localVersion, - required this.serverVersion, - }); - - @override - List get props => [localVersion, serverVersion]; -} diff --git a/lib/app/features/enterprise/domain/repositories/enterprise_repository.dart b/lib/app/features/enterprise/domain/repositories/enterprise_repository.dart index 009d083..e60fde9 100644 --- a/lib/app/features/enterprise/domain/repositories/enterprise_repository.dart +++ b/lib/app/features/enterprise/domain/repositories/enterprise_repository.dart @@ -1,9 +1,12 @@ +import 'package:problem_check_system/app/core/domain/entities/data_conflict.dart'; import 'package:problem_check_system/app/core/domain/entities/sync_status.dart'; import 'package:problem_check_system/app/core/repositories/syncable_repository.dart'; +import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise.dart'; import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise_list_item.dart'; -import 'package:problem_check_system/app/features/enterprise/domain/entities/sync_result.dart'; +import 'package:problem_check_system/app/core/domain/entities/sync_result.dart'; -import '../entities/enterprise.dart'; +typedef EnterpriseSyncResult = SyncResult; +typedef EnterpriseConflict = DataConflict; abstract class EnterpriseRepository implements SyncableRepository { /// 新增 @@ -26,7 +29,7 @@ abstract class EnterpriseRepository implements SyncableRepository { Future updateEnterpriseSyncStatus(String id, SyncStatus synced); // [新增] 执行同步并返回结果 - Future syncWithServer(); + Future syncWithServer(); // [新增] 用户选择后,用一个版本覆盖另一个版本 Future resolveConflictAndUpdate(Enterprise chosenEnterprise); // 获取所有企业信息 diff --git a/lib/app/features/enterprise/domain/usecases/sync_enterprises_usecase.dart b/lib/app/features/enterprise/domain/usecases/sync_enterprises_usecase.dart index 17079e9..0daaa0a 100644 --- a/lib/app/features/enterprise/domain/usecases/sync_enterprises_usecase.dart +++ b/lib/app/features/enterprise/domain/usecases/sync_enterprises_usecase.dart @@ -1,4 +1,3 @@ -import '../entities/sync_result.dart'; import '../repositories/enterprise_repository.dart'; class SyncEnterprisesUsecase { @@ -6,7 +5,7 @@ class SyncEnterprisesUsecase { SyncEnterprisesUsecase({required this.repository}); - Future call() async { + Future call() async { return repository.syncWithServer(); } } diff --git a/lib/app/features/enterprise/presentation/controllers/enterprise_list_controller.dart b/lib/app/features/enterprise/presentation/controllers/enterprise_list_controller.dart index d8c8b83..94e10eb 100644 --- a/lib/app/features/enterprise/presentation/controllers/enterprise_list_controller.dart +++ b/lib/app/features/enterprise/presentation/controllers/enterprise_list_controller.dart @@ -7,8 +7,8 @@ import 'package:problem_check_system/app/core/models/company_enum.dart'; import 'package:problem_check_system/app/core/models/form_mode.dart'; import 'package:problem_check_system/app/core/routes/app_routes.dart'; import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise.dart'; -import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise_conflict.dart'; import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise_list_item.dart'; +import 'package:problem_check_system/app/features/enterprise/domain/repositories/enterprise_repository.dart'; import 'package:problem_check_system/app/features/enterprise/domain/usecases/get_enterprise_list_usecase.dart'; import 'package:problem_check_system/app/features/enterprise/domain/usecases/resolve_conflict_usecase.dart'; import 'package:problem_check_system/app/features/enterprise/domain/usecases/sync_enterprises_usecase.dart';