diagnosis.dart 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import 'dart:convert';
  2. import 'package:fis_jsonrpc/rpc.dart';
  3. import 'package:get/get.dart';
  4. import 'package:vital_local_database/core/index.dart';
  5. import 'package:vitalapp/database/db.dart';
  6. import 'package:vitalapp/database/entities/defines.dart';
  7. import 'package:vitalapp/database/entities/diagnosis.dart';
  8. import 'package:vitalapp/database/entities/patient.dart';
  9. import 'package:vitalapp/global.dart';
  10. import 'package:vitalapp/managers/interfaces/diagnosis.dart';
  11. import 'package:vitalapp/managers/interfaces/models/diagnosis_aggregation_record_model.dart';
  12. import 'package:vitalapp/rpc.dart';
  13. import 'package:vitalapp/store/store.dart';
  14. import 'package:fis_common/logger/logger.dart';
  15. class DiagnosisManager implements IDiagnosisManager {
  16. DiagnosisManager();
  17. @override
  18. Future<PageCollection<DiagnosisAggregationRecordModel>?>
  19. getDiagnosisAggregationPageAsync(
  20. String patientCode, int pageIndex, int pageSize) async {
  21. PageCollection<DiagnosisAggregationRecordModel> diagnosisAggregationRecord =
  22. PageCollection<DiagnosisAggregationRecordModel>();
  23. try {
  24. var request = DiagnosisPageRequest(
  25. token: Store.user.token,
  26. pageIndex: pageIndex,
  27. pageSize: pageSize,
  28. patientCode: patientCode,
  29. );
  30. diagnosisAggregationRecord.pageData = [];
  31. var result =
  32. await rpc.diagnosis.getDiagnosisAggregationPageAsync(request);
  33. diagnosisAggregationRecord.pageIndex = result.pageIndex;
  34. diagnosisAggregationRecord.pageSize = result.pageSize;
  35. diagnosisAggregationRecord.dataCount = result.dataCount;
  36. for (var element in result.pageData!) {
  37. var record = DiagnosisAggregationRecordModel.fromJson(element.toJson());
  38. record.isExistLocalData = false;
  39. diagnosisAggregationRecord.pageData!.add(record);
  40. }
  41. } catch (e) {}
  42. return diagnosisAggregationRecord;
  43. }
  44. @override
  45. Future<List<DiagnosisAggregationRecordModel>?> getListByPatientCode(
  46. String patientCode) async {
  47. try {
  48. List<DiagnosisAggregationRecordModel> records =
  49. <DiagnosisAggregationRecordModel>[];
  50. List<DiagnosisEntity> localRecords = [];
  51. localRecords = await db.repositories.diagnosis
  52. .getNotUploadedListByPatientCode(patientCode, Store.user.userCode!);
  53. if (!kIsOnline) {
  54. localRecords = await db.repositories.diagnosis
  55. .getListByPatientCode(patientCode, userCode: Store.user.userCode!);
  56. }
  57. var currentPatient = Store.user.currentSelectPatientInfo!;
  58. for (var element in localRecords) {
  59. Map<String, dynamic> data = jsonDecode(element.dataJson);
  60. List<DiagnosisAggregationData> list = [];
  61. for (var key in data.keys) {
  62. list.add(DiagnosisAggregationData(
  63. key: key, diagnosisData: jsonEncode(data[key])));
  64. }
  65. records.add(DiagnosisAggregationRecordModel(
  66. patientCode: element.patientCode,
  67. patientName: currentPatient.patientName,
  68. doctorName: Store.user.displayName,
  69. diagnosisTime: element.createTime,
  70. diagnosisAggregationData: list,
  71. isExistLocalData: element.syncState != OfflineDataSyncState.success,
  72. ));
  73. }
  74. return records;
  75. } catch (e) {}
  76. return null;
  77. }
  78. /// 创建健康检测
  79. @override
  80. Future<bool> submitDiagnosisAsync(SubmitDiagnosisRequest request) async {
  81. request.token = Store.user.token;
  82. print(jsonEncode(request.toJson()));
  83. var result = await rpc.diagnosis.submitDiagnosisAsync(request);
  84. return result;
  85. }
  86. /// 创建健康检测(在线)
  87. @override
  88. Future<bool> syncPatientAndDiagnosisData(
  89. SyncPatientAndDiagnosisDataRequest request) async {
  90. try {
  91. var result = await rpc.diagnosis.syncPatientAndDiagnosisDataAsync(
  92. request,
  93. );
  94. if (result) {
  95. final code = request.cardNo!;
  96. var existEntity = await _checkPatientExist(code);
  97. if (existEntity != null) {
  98. existEntity.syncState = OfflineDataSyncState.success;
  99. await db.repositories.patient.update(existEntity);
  100. }
  101. }
  102. return result;
  103. } catch (e) {
  104. logger.e(
  105. "syncPatientAndDiagnosisData - Check patient exist error. Code: ${request.cardNo}.",
  106. e);
  107. return false;
  108. }
  109. }
  110. Future<PatientEntity?> _checkPatientExist(String code) async {
  111. try {
  112. final entity = await db.repositories.patient
  113. .singleByCode(code, Store.user.userCode!);
  114. return entity;
  115. } catch (e) {
  116. logger.e(
  117. "PatientServiceMock - Check patient exist error. Code: $code.", e);
  118. }
  119. return null;
  120. }
  121. ///获取所有userCode为空的数据,并赋值
  122. @override
  123. Future<void> resettingUsercodeIsEmptyData() async {
  124. var version = await db.database.getVersion();
  125. if (version > 0) {
  126. final list = await db.repositories.diagnosis.queryable.where((x) {
  127. final List<IDbColumnCondition> arr = [];
  128. arr.add(x.isValid.equals(true));
  129. arr.add(x.userCode.equals(''));
  130. return arr;
  131. }).toList();
  132. logger.w(
  133. "DiagnosisManager resettingUsercodeIsEmptyData list.count:${list.length}.");
  134. for (var element in list) {
  135. if (element.syncState == OfflineDataSyncState.success) {
  136. var result = await getDiagnosisAggregationPageAsync(
  137. element.patientCode, 1, 1000);
  138. if (result != null && result.pageData != null) {
  139. var diagnosisAggregationRecord = result.pageData!
  140. .firstWhereOrNull((x) => x.appDataId == element.code);
  141. if (diagnosisAggregationRecord != null) {
  142. element.userCode = diagnosisAggregationRecord.doctorCode ?? '';
  143. }
  144. }
  145. } else {
  146. element.userCode = Store.user.userCode!;
  147. }
  148. await db.repositories.diagnosis.update(element);
  149. }
  150. }
  151. }
  152. }