Browse Source

Merge branch 'master' of http://git.ius.plus/Project-Vital/VitalApp

guanxinyi 1 year ago
parent
commit
aa3c0f5b88

+ 18 - 5
lib/database/repositories/diagnosis.dart

@@ -29,18 +29,31 @@ class DiagnosisRepository
   }
 
   @override
-  Future<int> getListCountByPatientCode(String patientCode,
-      {OfflineDataSyncState? syncState}) async {
+  Future<int> getNotUploadedCountByPatientCode(String patientCode) async {
     final query = queryable.where((x) {
       final List<IDbColumnCondition> arr = [];
       arr.add(x.isValid.equals(true));
       arr.add(x.patientCode.equals(patientCode));
-      if (syncState != null) {
-        arr.add(x.syncState.equals(syncState));
-      }
+      arr.add(x.syncState.notEquals(OfflineDataSyncState.success));
       return arr;
     });
     final listCount = await query.count();
     return listCount;
   }
+
+  @override
+  Future<List<DiagnosisEntity>> getNotUploadedListByPatientCode(
+      String patientCode) async {
+    final query = queryable.where((x) {
+      final List<IDbColumnCondition> arr = [];
+      arr.add(x.isValid.equals(true));
+      arr.add(x.patientCode.equals(patientCode));
+
+      arr.add(x.syncState.notEquals(OfflineDataSyncState.success));
+
+      return arr;
+    });
+    final list = await query.toList();
+    return list;
+  }
 }

+ 10 - 5
lib/database/repositories/interfaces/diagnosis.dart

@@ -14,13 +14,18 @@ abstract class IDiagnosisRepository
     OfflineDataSyncState? syncState,
   });
 
-  /// 根据居民Code查找数据数量
+  /// 根据居民Code查找未上传数据数量
   ///
   /// [patientCode] 居民Code
   ///
   /// [syncState] 同步状态,不传搜索全部
-  Future<int> getListCountByPatientCode(
-    String patientCode, {
-    OfflineDataSyncState? syncState,
-  });
+  Future<int> getNotUploadedCountByPatientCode(String patientCode);
+
+  /// 根据居民Code查找未上传数据列表
+  ///
+  /// [patientCode] 居民Code
+  ///
+  /// [syncState] 同步状态,不传搜索全部
+  Future<List<DiagnosisEntity>> getNotUploadedListByPatientCode(
+      String patientCode);
 }

+ 7 - 0
lib/database/repositories/interfaces/patient.dart

@@ -5,4 +5,11 @@ abstract class IPatientRepository
     implements IDbRepositroy<PatientEntity, PatientColumnsDefine> {
   /// 根据code获取实体
   Future<PatientEntity?> singleByCode(String code);
+
+  /// 根据居民Code查找未上传数据列表
+  ///
+  /// [patientCode] 居民Code
+  ///
+  /// [syncState] 同步状态,不传搜索全部
+  Future<bool> isNotUploadedPatient(String code);
 }

+ 13 - 0
lib/database/repositories/patient.dart

@@ -1,4 +1,5 @@
 import 'package:vital_local_database/core/index.dart';
+import 'package:vitalapp/database/entities/defines.dart';
 import 'package:vitalapp/database/entities/patient.dart';
 
 import 'interfaces/patient.dart';
@@ -21,4 +22,16 @@ class PatientRepository
         .first();
     return entity;
   }
+
+  @override
+  Future<bool> isNotUploadedPatient(String code) async {
+    final entity = await queryable
+        .where((x) => [
+              x.isValid.equals(true),
+              x.code.equals(code),
+              x.syncState.notEquals(OfflineDataSyncState.success),
+            ])
+        .first();
+    return entity != null;
+  }
 }

+ 2 - 2
lib/managers/diagnosis.dart

@@ -43,8 +43,8 @@ class DiagnosisManager implements IDiagnosisManager {
     try {
       List<DiagnosisAggregationRecordModel> records =
           <DiagnosisAggregationRecordModel>[];
-      final localRecords =
-          await db.repositories.diagnosis.getListByPatientCode(patientCode);
+      final localRecords = await db.repositories.diagnosis
+          .getNotUploadedListByPatientCode(patientCode);
       var currentPatient = Store.user.currentSelectPatientInfo!;
       for (var element in localRecords) {
         Map<String, dynamic> data = jsonDecode(element.dataJson);

+ 9 - 3
lib/managers/patient.dart

@@ -48,10 +48,16 @@ class PatientManager implements IPatientManager {
       listPatientDto.pageData = [];
       for (var element in result.pageData!) {
         var patientModel = PatientModelDTO.fromJson(element.toJson());
-        final localCount = await db.repositories.diagnosis
-            .getListCountByPatientCode(element.code!);
-        if (localCount > 0) {
+        var isNotUploadedPatient =
+            await db.repositories.patient.isNotUploadedPatient(element.code!);
+        if (isNotUploadedPatient) {
           patientModel.isExistLocalData = true;
+        } else {
+          final localCount = await db.repositories.diagnosis
+              .getNotUploadedCountByPatientCode(element.code!);
+          if (localCount > 0) {
+            patientModel.isExistLocalData = true;
+          }
         }
         listPatientDto.pageData?.add(patientModel);
       }