소스 검색

居民列表添加,提交状态

finlay 1 년 전
부모
커밋
3ba13517a2

+ 0 - 120
lib/managers/adapters/offline/patient.dart

@@ -10,126 +10,6 @@ import 'package:vitalapp/database/entities/patient.dart';
 import 'package:vitalapp/managers/interfaces/patient.dart';
 import 'package:fis_common/logger/logger.dart';
 
-class PatientOfflineStoreAdapter implements IPatientStoreAdapter {
-  @override
-  Future<String?> create(CreatePatientRequest request) async {
-    // await db.database.execute("DROP TABLE IF EXISTS Patients;");
-    // await db.database.execute(PatientEntity.TABLE_CREATE_SQL);
-    final dto = PatientDtoConverter.create2Dto(request);
-    final dtoJson = dto.toJson();
-
-    final entity = PatientEntity();
-    entity.code = request.code!;
-    entity.isValid = true;
-    entity.name = request.patientName!;
-    entity.dataJson = jsonEncode(dtoJson);
-
-    final id = await db.repositories.patient.insert(entity);
-    print("Patient Id: $id");
-
-    return id > 0 ? entity.code : null;
-  }
-
-  @override
-  Future<bool> updatePatientAsync(UpdatePatientRequest request) async {
-    PatientEntity? entity =
-        await db.repositories.patient.singleByCode(request.code!);
-    PatientDTO dto;
-    if (entity == null) {
-      entity = PatientEntity();
-      entity.isValid = true;
-      entity.syncType = OfflineDataSyncType.update;
-
-      final id = await db.repositories.patient.insert(entity);
-      if (id == 0) {
-        logger.i("PatientOfflineStoreAdapter insert patient update fail.");
-        return false;
-      }
-
-      dto = PatientDTO();
-    } else {
-      final jsonMap = jsonDecode(entity.dataJson);
-      dto = PatientDTO.fromJson(jsonMap);
-    }
-    if (entity.syncType == OfflineDataSyncType.create) {
-      if (entity.syncState == OfflineDataSyncState.success) {
-        entity.syncType = OfflineDataSyncType.update;
-        entity.syncState = OfflineDataSyncState.wait;
-      }
-    }
-
-    PatientDtoConverter.syncUpdate2Dto(dto, request);
-
-    entity.name = request.patientName!;
-    entity.dataJson = jsonEncode(dto.toJson());
-
-    final count = await db.repositories.patient.update(entity);
-    // final dataJson = jsonEncode(dto.toJson());
-    // final count = await db.repositories.patient.queryable
-    //     .where((x) => [x.code.equals(dto.code)])
-    //     .update((x) => [x.dataJson.update(dataJson)]);
-    print("Patient Update count: $count");
-
-    return count > 0;
-  }
-
-  @override
-  Future<PatientDTO?> getDetail(String code) async {
-    final entity = await db.repositories.patient.singleByCode(code);
-    if (entity == null || entity.dataJson.isEmpty) {
-      return null;
-    }
-    final jsonMap = jsonDecode(entity.dataJson);
-    final dto = PatientDTO.fromJson(jsonMap);
-    return dto;
-  }
-
-  @override
-  Future<bool> setCrowdLabelsAsync(
-      String patientCode, List<String> carowLabels) async {
-    final dto = await getDetail(patientCode);
-    if (dto == null) {
-      return false;
-    }
-
-    dto.crowdLabels = carowLabels;
-    final dataJson = jsonEncode(dto.toJson());
-
-    final count = await db.repositories.patient.queryable
-        .where((x) => [x.code.equals(patientCode)])
-        .update((x) => [x.dataJson.update(dataJson)]);
-    print("Patient setCrowdLabelsAsync count: $count");
-
-    return count > 0;
-  }
-
-  @override
-  Future<PatientExtensionDTO?> getPatientExtensionDetailByCodeAndKeyAsync(
-      GetPatientExtensionByCodeAndKeyRequest request) {
-    // TODO: implement getPatientExtensionDetailByCodeAndKeyAsync
-    throw UnimplementedError();
-  }
-
-  @override
-  Future<String> createPatientExtensionAsync(
-      CreatePatientExtensionRequest request) {
-    // TODO: implement createPatientExtensionAsync
-    throw UnimplementedError();
-  }
-
-  @override
-  Future<bool> updatePatientExtensionAsync(
-      UpdatePatientExtensionRequest request) {
-    // TODO: implement updatePatientExtensionAsync
-    throw UnimplementedError();
-  }
-
-  @override
-  Future<PageCollection<PatientDTO>?> getPagedList(PatientPageRequest request) {
-    throw UnimplementedError();
-  }
-}
-
 abstract class PatientDtoConverter {
   /// 根据新建请求创建DTO
   static PatientDTO create2Dto(CreatePatientRequest request) {

+ 0 - 108
lib/managers/adapters/online/patient.dart

@@ -1,108 +0,0 @@
-import 'package:fis_jsonrpc/services/analyzeConfig.m.dart';
-import 'package:fis_jsonrpc/services/patient.m.dart';
-import 'package:fis_jsonrpc/services/patientExtension.m.dart';
-import 'package:vitalapp/managers/interfaces/patient.dart';
-import 'package:vitalapp/rpc.dart';
-import 'package:vitalapp/store/store.dart';
-import 'package:fis_common/logger/logger.dart';
-
-class PatientOnlineStoreAdapter implements IPatientStoreAdapter {
-  @override
-  Future<String?> create(CreatePatientRequest request) async {
-    try {
-      request.token = Store.user.token;
-      request.code = request.cardNo;
-      final result = await rpc.patient.createPatientAsync(request);
-      return result;
-    } catch (e) {
-      logger.e("PatientManager create patient error.", e);
-      return null;
-    }
-  }
-
-  @override
-  Future<PatientDTO?> getDetail(String code) async {
-    try {
-      final request = GetPatientRequest(code: code, token: Store.user.token);
-      final result = await rpc.patient.getPatientDetailAsync(request);
-      return result;
-    } catch (e) {
-      logger.e("PatientManager query patient detail error.", e);
-      return null;
-    }
-  }
-
-  @override
-  Future<PageCollection<PatientDTO>?> getPagedList(
-      PatientPageRequest request) async {
-    try {
-      request.token = Store.user.token;
-      final result = await rpc.patient.getPatientPageAsync(request);
-      return result;
-    } catch (e) {
-      logger.e("PatientManager query patient paged list error.", e);
-      return null;
-    }
-  }
-
-  @override
-  Future<bool> updatePatientAsync(UpdatePatientRequest request) async {
-    try {
-      request.token = Store.user.token;
-      final result = await rpc.patient.updatePatientAsync(request);
-      return result;
-    } catch (e) {
-      return false;
-    }
-  }
-
-  @override
-  Future<bool> setCrowdLabelsAsync(
-      String patientCode, List<String> crowLabels) async {
-    try {
-      final request = SetCrowdLabelsRequest(
-          code: patientCode, crowdLabels: crowLabels, token: Store.user.token);
-      final result = rpc.patient.setCrowdLabelsAsync(request);
-      return result;
-    } catch (e) {
-      return false;
-    }
-  }
-
-  @override
-  Future<String> createPatientExtensionAsync(
-      CreatePatientExtensionRequest request) async {
-    try {
-      final result =
-          await rpc.patientExtension.createPatientExtensionAsync(request);
-      return result;
-    } catch (e) {
-      return '';
-    }
-  }
-
-  @override
-  Future<PatientExtensionDTO?> getPatientExtensionDetailByCodeAndKeyAsync(
-      GetPatientExtensionByCodeAndKeyRequest request) async {
-    try {
-      final result = await rpc.patientExtension
-          .getPatientExtensionDetailByCodeAndKeyAsync(request);
-      return result;
-    } catch (e) {
-      return null;
-    }
-  }
-
-  @override
-
-  ///更新居民健康信息
-  Future<bool> updatePatientExtensionAsync(
-      UpdatePatientExtensionRequest request) async {
-    try {
-      final result =
-          await rpc.patientExtension.updatePatientExtensionAsync(request);
-      return result;
-    } catch (e) {}
-    return false;
-  }
-}

+ 17 - 0
lib/managers/contract/index.dart

@@ -1,5 +1,6 @@
 import 'package:fis_jsonrpc/rpc.dart';
 import 'package:flutter/material.dart';
+import 'package:vitalapp/database/entities/defines.dart';
 
 class ContractUtils {
   String contractStateTransition(ContractStateEnum state) {
@@ -39,4 +40,20 @@ class ContractUtils {
         return Colors.blue;
     }
   }
+
+  String dataOfflineStatus(bool state) {
+    if (state) {
+      return "未上传";
+    } else {
+      return "已上传";
+    }
+  }
+
+  Color dataOfflineColor(bool state) {
+    if (state) {
+      return Colors.red;
+    } else {
+      return Colors.green;
+    }
+  }
 }

+ 8 - 0
lib/managers/diagnosis.dart

@@ -1,6 +1,7 @@
 import 'dart:convert';
 
 import 'package:fis_jsonrpc/services/diagnosis.m.dart';
+import 'package:vitalapp/database/db.dart';
 import 'package:vitalapp/managers/interfaces/diagnosis.dart';
 import 'package:vitalapp/rpc.dart';
 import 'package:vitalapp/store/store.dart';
@@ -24,6 +25,13 @@ class DiagnosisManager implements IDiagnosisManager {
         pageSize: 20,
         patientCode: patientCode);
     var result = await rpc.diagnosis.getDiagnosisAggregationPageAsync(request);
+
+    // final localRecords =
+    //     await db.repositories.diagnosis.getListByPatientCode(patientCode);
+    // for (var element in localRecords) {
+    //   result.pageData.insert(0, element);
+    // }
+
     return result.pageData?.toList();
   }
 

+ 73 - 0
lib/managers/interfaces/models/patient_model_dto.dart

@@ -0,0 +1,73 @@
+import 'package:fis_jsonrpc/rpc.dart';
+
+class PatientModelDTO extends PatientDTO {
+  bool? isExistLocalData;
+  PatientModelDTO({
+    super.recordNo,
+    // String? recordNo,
+    super.patientName,
+    super.phone,
+    super.cardNo,
+    super.nationality,
+    super.birthday,
+    super.crowdLabels,
+    super.cardType = CardTypeEnum.Identity,
+    super.patientGender = GenderEnum.Unknown,
+    super.patientAddress,
+    super.permanentResidenceAddress,
+    super.teamRegionCode,
+    super.createdDoctor,
+    super.contractedDoctor,
+    super.labelNames,
+    super.createdDoctorName,
+    super.createdOrgName,
+    super.createdTeamName,
+    super.status = PatientStatusEnum.Created,
+    super.createdOrgCode,
+    super.createdTeamCode,
+    super.contractedDoctorName,
+    super.contractState = ContractStateEnum.Unsigned,
+    super.code,
+    super.createTime,
+    super.updateTime,
+    this.isExistLocalData = false,
+  });
+
+  factory PatientModelDTO.fromJson(Map<String, dynamic> map) {
+    return PatientModelDTO(
+      recordNo: map['RecordNo'],
+      patientName: map['PatientName'],
+      phone: map['Phone'],
+      cardNo: map['CardNo'],
+      nationality: map['Nationality'],
+      birthday:
+          map['Birthday'] != null ? DateTime.parse(map['Birthday']) : null,
+      crowdLabels: map['CrowdLabels']?.cast<String>().toList(),
+      cardType:
+          CardTypeEnum.values.firstWhere((e) => e.index == map['CardType']),
+      patientGender:
+          GenderEnum.values.firstWhere((e) => e.index == map['PatientGender']),
+      patientAddress: map['PatientAddress'],
+      permanentResidenceAddress: map['PermanentResidenceAddress'],
+      teamRegionCode: map['TeamRegionCode'],
+      createdDoctor: map['CreatedDoctor'],
+      contractedDoctor: map['ContractedDoctor'],
+      labelNames: map['LabelNames']?.cast<String>().toList(),
+      createdDoctorName: map['CreatedDoctorName'],
+      createdOrgName: map['CreatedOrgName'],
+      createdTeamName: map['CreatedTeamName'],
+      status:
+          PatientStatusEnum.values.firstWhere((e) => e.index == map['Status']),
+      createdOrgCode: map['CreatedOrgCode'],
+      createdTeamCode: map['CreatedTeamCode'],
+      contractedDoctorName: map['ContractedDoctorName'],
+      contractState: ContractStateEnum.values
+          .firstWhere((e) => e.index == map['ContractState']),
+      code: map['Code'],
+      createTime:
+          map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
+      updateTime:
+          map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
+    );
+  }
+}

+ 3 - 1
lib/managers/interfaces/patient.dart

@@ -1,4 +1,5 @@
 import 'package:fis_jsonrpc/rpc.dart';
+import 'package:vitalapp/managers/interfaces/models/patient_model_dto.dart';
 
 import 'base.dart';
 
@@ -9,7 +10,8 @@ abstract class IPatientManager implements IManager {
   Future<String?> create(CreatePatientRequest request);
 
   /// 获取居民分页列表
-  Future<PageCollection<PatientDTO>?> getPagedList(PatientPageRequest request);
+  Future<PageCollection<PatientModelDTO>?> getPagedList(
+      PatientPageRequest request);
 
   /// 获取居民详情
   Future<PatientDTO?> getDetail(String code);

+ 23 - 17
lib/managers/patient.dart

@@ -2,31 +2,21 @@ import 'dart:convert';
 
 import 'package:fis_jsonrpc/rpc.dart';
 import 'package:vitalapp/architecture/network_connectivity.dart';
+import 'package:vitalapp/database/db.dart';
 import 'package:vitalapp/managers/adapters/offline/patient.dart';
-import 'package:vitalapp/managers/adapters/online/patient.dart';
+import 'package:vitalapp/managers/interfaces/models/patient_model_dto.dart';
 import 'package:vitalapp/managers/interfaces/patient.dart';
 import 'package:vitalapp/rpc.dart';
 import 'package:fis_common/logger/logger.dart';
 import 'package:vitalapp/store/store.dart';
 
 class PatientManager implements IPatientManager {
-  final onlineAdapter = PatientOnlineStoreAdapter();
-  final offlineAdapter = PatientOfflineStoreAdapter();
-
-  /// 适配器
-  IPatientStoreAdapter get adapter {
-    if (netChecker.isOnline) {
-      return onlineAdapter;
-    } else {
-      return offlineAdapter;
-    }
-  }
-
   @override
   Future<String?> create(CreatePatientRequest request) async {
     try {
+      request.token = Store.user.token;
       request.code = request.cardNo;
-      final result = await adapter.create(request);
+      final result = await rpc.patient.createPatientAsync(request);
       return result;
     } catch (e) {
       logger.e("PatientManager create patient error.", e);
@@ -37,7 +27,8 @@ class PatientManager implements IPatientManager {
   @override
   Future<PatientDTO?> getDetail(String code) async {
     try {
-      final result = await adapter.getDetail(code);
+      final request = GetPatientRequest(code: code, token: Store.user.token);
+      final result = await rpc.patient.getPatientDetailAsync(request);
       return result;
     } catch (e) {
       logger.e("PatientManager query patient detail error.", e);
@@ -46,13 +37,28 @@ class PatientManager implements IPatientManager {
   }
 
   @override
-  Future<PageCollection<PatientDTO>?> getPagedList(
+  Future<PageCollection<PatientModelDTO>?> getPagedList(
       PatientPageRequest request) async {
+    PageCollection<PatientModelDTO>? listPatientDto =
+        PageCollection<PatientModelDTO>();
     try {
       request.token = Store.user.token;
       print(jsonEncode(request.toJson()));
       final result = await rpc.patient.getPatientPageAsync(request);
-      return result;
+      listPatientDto.dataCount = result.dataCount;
+      listPatientDto.pageData = [];
+      for (var element in result.pageData!) {
+        var patientModel = PatientModelDTO.fromJson(element.toJson());
+
+        ///等待接口实现
+        // final localRecords =
+        //     await db.repositories.diagnosis.getListByPatientCode(element.code!);
+        // if (localRecords.isNotEmpty) {
+        //   patientModel.isExistLocalData = true;
+        // }
+        listPatientDto.pageData?.add(patientModel);
+      }
+      return listPatientDto;
     } catch (e) {
       logger.e("PatientManager query patient paged list error.", e);
       return null;

+ 10 - 9
lib/pages/patient/list/view.dart

@@ -18,6 +18,7 @@ import 'package:vitalapp/pages/patient/list/widgets/status.dart';
 import 'package:vitalapp/pages/patient/list/widgets/tab_button.dart';
 import 'package:vitalapp/pages/patient/list/widgets/tab_button_group.dart';
 import 'package:vitalapp/store/store.dart';
+import 'package:vitalapp/database/entities/defines.dart';
 
 import 'controller.dart';
 
@@ -384,13 +385,13 @@ class _PatientCard extends StatelessWidget {
             ],
           ),
         ),
-        // Positioned(
-        //   top: 0,
-        //   right: 0,
-        //   child: _PatientSignStatusTag(
-        //     dto: dto,
-        //   ),
-        // ),
+        Positioned(
+          top: 0,
+          right: 0,
+          child: _PatientSignStatusTag(
+            dto: dto,
+          ),
+        ),
       ],
     );
     return Material(
@@ -513,8 +514,8 @@ class _PatientSignStatusTag extends StatelessWidget {
       width: 120,
       padding: const EdgeInsets.only(top: 18),
       child: StatusLabel(
-        title: _contractUtils.contractStateTransition(dto.contractState),
-        color: _contractUtils.contractStateColors(dto.contractState),
+        title: _contractUtils.dataOfflineStatus(dto.isExistLocalData!),
+        color: _contractUtils.dataOfflineColor(dto.isExistLocalData!),
       ),
     );
   }

+ 2 - 2
pubspec.lock

@@ -278,8 +278,8 @@ packages:
     dependency: "direct main"
     description:
       path: "."
-      ref: "9c057d7"
-      resolved-ref: "9c057d70aceec2842c4751ff41593637ddcb4ff8"
+      ref: d8566e3
+      resolved-ref: d8566e3d98f54e9940019d0ffb98db93f5adc2b5
       url: "http://git.ius.plus/Project-Vital/FlutterJsonRPC.git"
     source: git
     version: "0.0.1"

+ 1 - 1
pubspec.yaml

@@ -44,7 +44,7 @@ dependencies:
   fis_jsonrpc:
     git:
       url: http://git.ius.plus/Project-Vital/FlutterJsonRPC.git
-      ref: c3ed3d7
+      ref: d8566e3
     # path: ..\FlutterJsonRPC
   vnote_device_plugin:
     git: