patient.dart 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. import 'dart:convert';
  2. import 'package:fis_jsonrpc/rpc.dart';
  3. import 'package:vital_local_database/core/interface/queryable.dart';
  4. import 'package:vitalapp/architecture/network_connectivity.dart';
  5. import 'package:vitalapp/database/db.dart';
  6. import 'package:vitalapp/database/entities/defines.dart';
  7. import 'package:vitalapp/global.dart';
  8. import 'package:vitalapp/managers/adapters/offline/patient.dart';
  9. import 'package:vitalapp/managers/interfaces/models/patient_model_dto.dart';
  10. import 'package:vitalapp/managers/interfaces/patient.dart';
  11. import 'package:vitalapp/rpc.dart';
  12. import 'package:fis_common/logger/logger.dart';
  13. import 'package:vitalapp/store/store.dart';
  14. class PatientManager implements IPatientManager {
  15. @override
  16. Future<String?> create(CreatePatientRequest request) async {
  17. try {
  18. request.token = Store.user.token;
  19. request.code = request.cardNo;
  20. final result = await rpc.patient.createPatientAsync(request);
  21. return result;
  22. } catch (e) {
  23. logger.e("PatientManager create patient error.", e);
  24. return null;
  25. }
  26. }
  27. @override
  28. Future<List<PatientModelDTO>?> getPagedOfflineList(
  29. PatientPageRequest request) async {
  30. final entities = await db.repositories.patient.queryable.where((x) {
  31. final List<IDbColumnCondition> arr = [];
  32. arr.add(x.isValid.equals(true));
  33. arr.add(x.syncState.notEquals(OfflineDataSyncState.success));
  34. final keyword = request.keyword;
  35. if (keyword != null && keyword.isNotEmpty) {
  36. // TODO: 暂时只支持姓名模糊
  37. arr.add(x.name.like("%$keyword%"));
  38. } else {
  39. if (request.startTime != null) {
  40. arr.add(x.createTime.gte(request.startTime));
  41. }
  42. if (request.endTime != null) {
  43. arr.add(x.createTime.lt(request.endTime));
  44. }
  45. }
  46. return arr;
  47. }).toList();
  48. final dtos = entities.map((e) {
  49. var patientModel = PatientModelDTO.fromJson(jsonDecode(e.dataJson));
  50. patientModel.isExistLocalData = true;
  51. return patientModel;
  52. }).toList();
  53. return dtos;
  54. }
  55. @override
  56. Future<PatientDTO?> getDetail(String code) async {
  57. try {
  58. final request = GetPatientRequest(code: code, token: Store.user.token);
  59. final result = await rpc.patient.getPatientDetailAsync(request);
  60. return result;
  61. } catch (e) {
  62. logger.e("PatientManager query patient detail error.", e);
  63. return null;
  64. }
  65. }
  66. @override
  67. Future<PageCollection<PatientModelDTO>?> getPagedList(
  68. PatientPageRequest request) async {
  69. PageCollection<PatientModelDTO>? listPatientDto =
  70. PageCollection<PatientModelDTO>();
  71. try {
  72. request.token = Store.user.token;
  73. final result = await rpc.patient.getPatientPageAsync(request);
  74. listPatientDto.dataCount = result.dataCount;
  75. listPatientDto.pageData = [];
  76. for (var element in result.pageData!) {
  77. var patientModel = PatientModelDTO.fromJson(element.toJson());
  78. var isNotUploadedPatient =
  79. await db.repositories.patient.isNotUploadedPatient(element.code!);
  80. if (isNotUploadedPatient) {
  81. patientModel.isExistLocalData = true;
  82. } else {
  83. final localCount = await db.repositories.diagnosis
  84. .getNotUploadedCountByPatientCode(element.code!);
  85. if (localCount > 0) {
  86. patientModel.isExistLocalData = true;
  87. }
  88. }
  89. listPatientDto.pageData?.add(patientModel);
  90. }
  91. return listPatientDto;
  92. } catch (e) {
  93. logger.e("PatientManager query patient paged list error.", e);
  94. return null;
  95. }
  96. }
  97. @override
  98. Future<bool> updatePatientAsync(UpdatePatientRequest request) async {
  99. try {
  100. final result = await rpc.patient.updatePatientAsync(request);
  101. return result;
  102. } catch (e) {
  103. return false;
  104. }
  105. }
  106. @override
  107. Future<bool> setCrowdLabelsAsync(
  108. String patientCode, List<String> crowLabels) async {
  109. try {
  110. final request = SetCrowdLabelsRequest(
  111. code: patientCode, crowdLabels: crowLabels, token: Store.user.token);
  112. final result = rpc.patient.setCrowdLabelsAsync(request);
  113. return result;
  114. } catch (e) {
  115. return false;
  116. }
  117. }
  118. @override
  119. Future<String> createPatientExtensionAsync(
  120. CreatePatientExtensionRequest request) async {
  121. try {
  122. final result =
  123. await rpc.patientExtension.createPatientExtensionAsync(request);
  124. return result;
  125. } catch (e) {
  126. return '';
  127. }
  128. }
  129. @override
  130. Future<PatientExtensionDTO?> getPatientExtensionDetailByCodeAndKeyAsync(
  131. GetPatientExtensionByCodeAndKeyRequest request) async {
  132. try {
  133. final result = await rpc.patientExtension
  134. .getPatientExtensionDetailByCodeAndKeyAsync(request);
  135. return result;
  136. } catch (e) {
  137. return null;
  138. }
  139. }
  140. @override
  141. ///更新居民健康信息
  142. Future<bool> updatePatientExtensionAsync(
  143. UpdatePatientExtensionRequest request) async {
  144. try {
  145. final result =
  146. await rpc.patientExtension.updatePatientExtensionAsync(request);
  147. return result;
  148. } catch (e) {}
  149. return false;
  150. }
  151. }