Browse Source

feature : 企业创建id,最后修改id

dev
徐振升 1 week ago
parent
commit
08463ac679
  1. 3
      lib/app/core/models/sync_status.dart
  2. 23
      lib/app/features/enterprise/data/datasources/enterprise_remote_data_source.dart
  3. 66
      lib/app/features/enterprise/data/model/enterprise_dto.dart
  4. 10
      lib/app/features/enterprise/data/model/enterprise_model.dart
  5. 9
      lib/app/features/enterprise/domain/entities/enterprise.dart
  6. 10
      lib/app/features/enterprise/domain/usecases/add_enterprise_usecase.dart
  7. 9
      lib/app/features/enterprise/domain/usecases/editor_enterprise_usecase.dart
  8. 11
      lib/app/features/enterprise/presentation/bindings/enterprise_form_binding.dart

3
lib/app/core/models/sync_status.dart

@ -62,5 +62,6 @@ extension SyncStatusExtension on SyncStatus {
abstract class SyncableEntity { abstract class SyncableEntity {
String get id; String get id;
SyncStatus get syncStatus; SyncStatus get syncStatus;
DateTime get lastModifiedTime; // DateTime get lastModifiedTime;
String get lastModifierId;
} }

23
lib/app/features/enterprise/data/datasources/enterprise_remote_data_source.dart

@ -5,16 +5,17 @@ import 'package:problem_check_system/app/features/enterprise/data/model/enterpri
/// ///
/// API /// API
abstract class EnterpriseRemoteDataSource { abstract class EnterpriseRemoteDataSource {
/// API ///
///
/// ( DioException)
Future<void> createEnterprise(EnterpriseModel enterprise); Future<void> createEnterprise(EnterpriseModel enterprise);
/// API ///
Future<void> updateEnterprise(EnterpriseModel enterprise); Future<void> updateEnterprise(EnterpriseModel enterprise);
/// API ///
Future<void> deleteEnterprise(String enterpriseId); Future<void> deleteEnterprise(String enterpriseId);
///
Future<List<EnterpriseDto>> getEnterprises();
} }
class EnterpriseRemoteDataSourceImpl implements EnterpriseRemoteDataSource { class EnterpriseRemoteDataSourceImpl implements EnterpriseRemoteDataSource {
@ -53,4 +54,16 @@ class EnterpriseRemoteDataSourceImpl implements EnterpriseRemoteDataSource {
rethrow; rethrow;
} }
} }
@override
Future<List<EnterpriseDto>> getEnterprises() async {
try {
final response = await http.get(enterprisesEndpoint);
return (response.data as List)
.map((json) => EnterpriseDto.fromJson(json))
.toList();
} catch (e) {
rethrow;
}
}
} }

66
lib/app/features/enterprise/data/model/enterprise_dto.dart

@ -6,17 +6,27 @@ import 'package:problem_check_system/app/features/enterprise/data/model/enterpri
/// API /// API
/// API JSON /// API JSON
class EnterpriseDto { class EnterpriseDto {
final String id;
final DateTime creationTime;
final String creatorId;
final DateTime lastModificationTime;
final String lastModifierId;
final String companyName; final String companyName;
final String companyType; final String companyType;
final String? companyScope; final String? companyScope;
final String? mainPrincipalName; final String? mainPrincipalName;
final String? mainPrincipalPhone; final String? mainPrincipalPhone;
final String? securityPrincipalName; // API final String? securityPrincipalName;
final String? securityPrincipalPhone; // API final String? securityPrincipalPhone;
final String? companyAddress; final String? companyAddress;
final String? detail; // majorHazardsDescription final String? detail;
const EnterpriseDto({ const EnterpriseDto({
required this.id,
required this.creationTime,
required this.creatorId,
required this.lastModificationTime,
required this.lastModifierId,
required this.companyName, required this.companyName,
required this.companyType, required this.companyType,
this.companyScope, this.companyScope,
@ -33,6 +43,11 @@ class EnterpriseDto {
/// ///
factory EnterpriseDto.fromModel(EnterpriseModel model) { factory EnterpriseDto.fromModel(EnterpriseModel model) {
return EnterpriseDto( return EnterpriseDto(
id: model.id,
creationTime: model.creationTime,
creatorId: "", //todo
lastModificationTime: model.lastModifiedTime,
lastModifierId: "", // todo需要在企业模型中添修改用户id
companyName: model.name, companyName: model.name,
companyType: model.type, companyType: model.type,
companyScope: model.scale, companyScope: model.scale,
@ -43,9 +58,48 @@ class EnterpriseDto {
); );
} }
/// DTO JSON (Map) // =======================================================================
//
// =======================================================================
/// [] fromJson JSON Map EnterpriseDto
///
/// JSON Dart
factory EnterpriseDto.fromJson(Map<String, dynamic> json) {
return EnterpriseDto(
//
id: json['id'] as String,
creationTime: DateTime.parse(json['creationTime'] as String),
creatorId: json['creatorId'] as String,
lastModificationTime: DateTime.parse(
json['lastModificationTime'] as String,
),
lastModifierId: json['lastModifierId'] as String,
companyName: json['companyName'] as String,
companyType: json['companyType'] as String,
//
companyScope: json['companyScope'] as String?,
mainPrincipalName: json['mainPrincipalName'] as String?,
mainPrincipalPhone: json['mainPrincipalPhone'] as String?,
securityPrincipalName: json['securityPrincipalName'] as String?,
securityPrincipalPhone: json['securityPrincipalPhone'] as String?,
companyAddress: json['companyAddress'] as String?,
detail: json['detail'] as String?,
);
}
/// [] toJson EnterpriseDto JSON Map
///
/// JSON
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final originalMap = { final jsonMap = {
'id': id,
// 使 toIso8601String() DateTime
'creationTime': creationTime.toIso8601String(),
'creatorId': creatorId,
'lastModificationTime': lastModificationTime.toIso8601String(),
'lastModifierId': lastModifierId,
'companyName': companyName, 'companyName': companyName,
'companyType': companyType, 'companyType': companyType,
'companyScope': companyScope, 'companyScope': companyScope,
@ -56,6 +110,6 @@ class EnterpriseDto {
'companyAddress': companyAddress, 'companyAddress': companyAddress,
'detail': detail, 'detail': detail,
}; };
return originalMap.withoutNullOrEmptyValues; return jsonMap.withoutNullOrEmptyValues;
} }
} }

10
lib/app/features/enterprise/data/model/enterprise_model.dart

@ -10,7 +10,9 @@ class EnterpriseModel extends Enterprise {
required super.id, required super.id,
required super.syncStatus, required super.syncStatus,
required super.lastModifiedTime, required super.lastModifiedTime,
required super.lastModifierId,
required super.creationTime, required super.creationTime,
required super.creatorId,
required super.name, required super.name,
required super.type, required super.type,
super.address, super.address,
@ -29,7 +31,9 @@ class EnterpriseModel extends Enterprise {
id: entity.id, id: entity.id,
syncStatus: entity.syncStatus, syncStatus: entity.syncStatus,
lastModifiedTime: entity.lastModifiedTime, lastModifiedTime: entity.lastModifiedTime,
lastModifierId: entity.lastModifierId,
creationTime: entity.creationTime, creationTime: entity.creationTime,
creatorId: entity.creatorId,
name: entity.name, name: entity.name,
type: entity.type, type: entity.type,
address: entity.address, address: entity.address,
@ -54,10 +58,12 @@ class EnterpriseModel extends Enterprise {
map['lastModifiedTime'] as int, map['lastModifiedTime'] as int,
isUtc: true, isUtc: true,
), ),
lastModifierId: map['lastModifierId'] as String,
creationTime: DateTime.fromMillisecondsSinceEpoch( creationTime: DateTime.fromMillisecondsSinceEpoch(
map['creationTime'] as int, map['creationTime'] as int,
isUtc: true, isUtc: true,
), ),
creatorId: map['creatorId'] as String,
name: map['name'] as String, name: map['name'] as String,
type: map['type'] as String, type: map['type'] as String,
address: map['address'] as String?, address: map['address'] as String?,
@ -79,7 +85,9 @@ class EnterpriseModel extends Enterprise {
'syncStatus': syncStatus.index, 'syncStatus': syncStatus.index,
// DateTime UTC // DateTime UTC
'lastModifiedTime': lastModifiedTime.toUtc().millisecondsSinceEpoch, 'lastModifiedTime': lastModifiedTime.toUtc().millisecondsSinceEpoch,
'lastModifierId': lastModifierId,
'creationTime': creationTime.toUtc().millisecondsSinceEpoch, 'creationTime': creationTime.toUtc().millisecondsSinceEpoch,
'creatorId': creatorId,
'name': name, 'name': name,
'type': type, 'type': type,
'address': address, 'address': address,
@ -97,7 +105,9 @@ class EnterpriseModel extends Enterprise {
id: id, id: id,
syncStatus: syncStatus, syncStatus: syncStatus,
lastModifiedTime: lastModifiedTime, lastModifiedTime: lastModifiedTime,
lastModifierId: lastModifierId,
creationTime: creationTime, creationTime: creationTime,
creatorId: creatorId,
name: name, name: name,
type: type, type: type,
address: address, address: address,

9
lib/app/features/enterprise/domain/entities/enterprise.dart

@ -10,6 +10,8 @@ class Enterprise extends Equatable implements SyncableEntity {
final SyncStatus syncStatus; final SyncStatus syncStatus;
@override @override
final DateTime lastModifiedTime; final DateTime lastModifiedTime;
@override
final String lastModifierId;
final String name; final String name;
final String type; final String type;
final String? address; final String? address;
@ -17,6 +19,7 @@ class Enterprise extends Equatable implements SyncableEntity {
final String? contactPerson; final String? contactPerson;
final String? contactPhone; final String? contactPhone;
final String? majorHazardsDescription; final String? majorHazardsDescription;
final String creatorId;
final DateTime creationTime; final DateTime creationTime;
const Enterprise({ const Enterprise({
@ -29,7 +32,9 @@ class Enterprise extends Equatable implements SyncableEntity {
this.contactPhone, this.contactPhone,
this.majorHazardsDescription, this.majorHazardsDescription,
required this.lastModifiedTime, required this.lastModifiedTime,
required this.lastModifierId,
required this.creationTime, required this.creationTime,
required this.creatorId,
required this.syncStatus, required this.syncStatus,
}); });
@ -37,6 +42,7 @@ class Enterprise extends Equatable implements SyncableEntity {
String? id, String? id,
SyncStatus? syncStatus, SyncStatus? syncStatus,
DateTime? lastModifiedTime, DateTime? lastModifiedTime,
String? lastModifierId,
String? name, String? name,
String? type, String? type,
String? address, String? address,
@ -45,11 +51,13 @@ class Enterprise extends Equatable implements SyncableEntity {
String? contactPhone, String? contactPhone,
String? majorHazardsDescription, String? majorHazardsDescription,
DateTime? creationTime, DateTime? creationTime,
String? creatorId,
}) { }) {
return Enterprise( return Enterprise(
id: id ?? this.id, id: id ?? this.id,
syncStatus: syncStatus ?? this.syncStatus, syncStatus: syncStatus ?? this.syncStatus,
lastModifiedTime: lastModifiedTime ?? this.lastModifiedTime, lastModifiedTime: lastModifiedTime ?? this.lastModifiedTime,
lastModifierId: lastModifierId ?? this.lastModifierId,
name: name ?? this.name, name: name ?? this.name,
type: type ?? this.type, type: type ?? this.type,
address: address ?? this.address, address: address ?? this.address,
@ -59,6 +67,7 @@ class Enterprise extends Equatable implements SyncableEntity {
majorHazardsDescription: majorHazardsDescription:
majorHazardsDescription ?? this.majorHazardsDescription, majorHazardsDescription ?? this.majorHazardsDescription,
creationTime: creationTime ?? this.creationTime, creationTime: creationTime ?? this.creationTime,
creatorId: creatorId ?? this.creatorId,
); );
} }

10
lib/app/features/enterprise/domain/usecases/add_enterprise_usecase.dart

@ -1,13 +1,19 @@
import 'package:problem_check_system/app/core/models/sync_status.dart'; import 'package:problem_check_system/app/core/models/sync_status.dart';
import 'package:problem_check_system/app/core/repositories/auth_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.dart';
import 'package:problem_check_system/app/features/enterprise/domain/repositories/enterprise_repository.dart'; import 'package:problem_check_system/app/features/enterprise/domain/repositories/enterprise_repository.dart';
import 'package:uuid/uuid.dart'; import 'package:uuid/uuid.dart';
class AddEnterpriseUsecase { class AddEnterpriseUsecase {
final EnterpriseRepository repository; final EnterpriseRepository repository;
final AuthRepository authRepository;
final Uuid uuid; final Uuid uuid;
AddEnterpriseUsecase({required this.repository, required this.uuid}); AddEnterpriseUsecase({
required this.repository,
required this.authRepository,
required this.uuid,
});
Future<void> call({ Future<void> call({
required String name, required String name,
@ -28,7 +34,9 @@ class AddEnterpriseUsecase {
contactPhone: contactPhone, contactPhone: contactPhone,
majorHazardsDescription: majorHazardsDescription, majorHazardsDescription: majorHazardsDescription,
lastModifiedTime: DateTime.now(), lastModifiedTime: DateTime.now(),
lastModifierId: authRepository.getUserId()!,
creationTime: DateTime.now(), creationTime: DateTime.now(),
creatorId: authRepository.getUserId()!,
syncStatus: SyncStatus.pendingCreate, syncStatus: SyncStatus.pendingCreate,
); );
await repository.addEnterprise(enterprise); await repository.addEnterprise(enterprise);

9
lib/app/features/enterprise/domain/usecases/editor_enterprise_usecase.dart

@ -1,11 +1,15 @@
import 'package:problem_check_system/app/core/models/sync_status.dart'; import 'package:problem_check_system/app/core/models/sync_status.dart';
import 'package:problem_check_system/app/core/repositories/auth_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.dart';
import 'package:problem_check_system/app/features/enterprise/domain/repositories/enterprise_repository.dart'; import 'package:problem_check_system/app/features/enterprise/domain/repositories/enterprise_repository.dart';
class EditEnterpriseUsecase { class EditEnterpriseUsecase {
final EnterpriseRepository repository; final EnterpriseRepository repository;
final AuthRepository authRepository;
EditEnterpriseUsecase({required this.repository}); EditEnterpriseUsecase({
required this.repository,
required this.authRepository,
});
/// [] Usecase /// [] Usecase
/// Enterprise /// Enterprise
@ -13,6 +17,7 @@ class EditEnterpriseUsecase {
// 1. // 1.
final enterpriseToSave = updatedEnterprise.copyWith( final enterpriseToSave = updatedEnterprise.copyWith(
lastModifiedTime: DateTime.now(), lastModifiedTime: DateTime.now(),
lastModifierId: authRepository.getUserId(),
// 2. // 2.
// //
syncStatus: updatedEnterprise.syncStatus == SyncStatus.pendingCreate syncStatus: updatedEnterprise.syncStatus == SyncStatus.pendingCreate

11
lib/app/features/enterprise/presentation/bindings/enterprise_form_binding.dart

@ -25,10 +25,17 @@ class EnterpriseFormBinding extends Bindings {
)), )),
); );
Get.lazyPut<AddEnterpriseUsecase>( Get.lazyPut<AddEnterpriseUsecase>(
() => AddEnterpriseUsecase(repository: Get.find(), uuid: Get.find()), () => AddEnterpriseUsecase(
repository: Get.find(),
authRepository: Get.find(),
uuid: Get.find(),
),
); );
Get.lazyPut<EditEnterpriseUsecase>( Get.lazyPut<EditEnterpriseUsecase>(
() => EditEnterpriseUsecase(repository: Get.find()), () => EditEnterpriseUsecase(
repository: Get.find(),
authRepository: Get.find(),
),
); );
// 2. null Controller // 2. null Controller

Loading…
Cancel
Save