controller.dart 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. import 'dart:convert';
  2. import 'package:ecg_list_view/entitys/resident_model.dart';
  3. import 'package:ecg_list_view/rpc/rpc_bridge.dart';
  4. import 'package:flutter/foundation.dart';
  5. import 'package:get/get.dart';
  6. import 'package:fis_jsonrpc/rpc.dart';
  7. import 'package:fis_common/logger/logger.dart';
  8. import 'package:fis_common/index.dart';
  9. class EcgListController extends GetxController {
  10. RecordProcessStateEnum typeFilter = RecordProcessStateEnum.All;
  11. List<ExamStateEnum>? states;
  12. EcgListController();
  13. //右侧选中的Tab
  14. int selectedTabIndex = 0;
  15. ///展示下级的数据
  16. bool showLowerDatas = false;
  17. /// 表格loading
  18. bool tableLoading = true;
  19. /// 当前表格页数
  20. int currPageIndex = 1;
  21. /// 当前列表选中的
  22. int currectSelected = -1;
  23. DateTime? startTime;
  24. DateTime? endTime;
  25. List<ElectrocardiogramRecord> residentList = [];
  26. /// 列表的总数
  27. int tableCount = 0;
  28. /// 当前检测详情
  29. List<List<String>> tableData = [];
  30. List<ReportDTO> reports = [];
  31. Future<void> getDatas({
  32. int? pageSize = 10,
  33. int? pageIndex = 1,
  34. String? keyword = "",
  35. }) async {
  36. tableLoading = true;
  37. currPageIndex = pageIndex!;
  38. currectSelected = -1;
  39. tableData.clear();
  40. if (kDebugMode && startTime == null) {
  41. startTime = DateTime(2024, 01, 01);
  42. }
  43. final result = await RPCBridge.ins.rpc.vitalElectrocardiogram
  44. .getElectrocardiogramRecordPageAsync(
  45. ElectrocardiogramRecordPageRequest(
  46. token: RPCBridge.ins.token,
  47. pageSize: pageSize!,
  48. pageIndex: pageIndex,
  49. keyWord: keyword,
  50. startTime: startTime?.toUtc(),
  51. endTime: endTime?.toUtc(),
  52. isQuerySubordinate: showLowerDatas,
  53. states: states,
  54. ),
  55. );
  56. residentList.clear();
  57. residentList = result.pageData ?? [];
  58. tableCount = result.totalCount;
  59. residentList = residentList;
  60. tableLoading = false;
  61. update(["ecg_list"]);
  62. update(["table"]);
  63. update(["table_pagination"]);
  64. }
  65. Future<List<List<String>>> getTableData(String data) async {
  66. if (data.isEmpty) {
  67. return [];
  68. }
  69. var currentDiagnosis = <List<String>>[];
  70. var jsonData = json.decode(data);
  71. List<String> keys = jsonData.keys.toList();
  72. List<DictionaryWithUnitDTO>? dtos = [];
  73. dtos = await RPCBridge.ins.rpc.vitalDictionary
  74. .getDictionaryNameAndUnitByKeysAsync(
  75. GetDictionaryNameAndUnitByKeysRequest(
  76. keys: keys,
  77. token: RPCBridge.ins.token,
  78. ));
  79. for (var key in keys) {
  80. if (key == "ECG_POINT" || key == "ECG_POINT12") {
  81. continue;
  82. }
  83. var dto = dtos.firstWhereOrNull((item) => item.key == key);
  84. if (dto == null) {
  85. continue;
  86. }
  87. final value = jsonData[key].toString();
  88. if (value.isEmpty) {
  89. // 不展示空值
  90. continue;
  91. }
  92. currentDiagnosis.add([
  93. dto.name ?? '',
  94. value,
  95. dto.unit ?? '',
  96. ]);
  97. }
  98. return currentDiagnosis;
  99. }
  100. @override
  101. void onReady() {
  102. super.onReady();
  103. getDatas();
  104. }
  105. Future<void> onRowTap(int index) async {
  106. currectSelected = index;
  107. var examRecord = residentList[index];
  108. if (examRecord.examData.isNotNullOrEmpty) {
  109. tableData = await getTableData(examRecord.examData!);
  110. }
  111. loadReports();
  112. update(["ecg_list"]);
  113. }
  114. void changeDatas(bool v) {
  115. showLowerDatas = v;
  116. }
  117. void loadCurrentRecordInfo() {
  118. update(["ecg_list"]);
  119. }
  120. Future<void> loadReports() async {
  121. if (currectSelected == -1) {
  122. return;
  123. }
  124. var recordCode = residentList[currectSelected].code;
  125. try {
  126. reports = await RPCBridge.ins.rpc.ultrasoundReport.vitalFindReportsAsync(
  127. FindReportsRequest(
  128. token: RPCBridge.ins.token,
  129. recordCode: recordCode,
  130. ),
  131. );
  132. } catch (e) {
  133. logger.e('EcgListController loadReports ex:$e');
  134. }
  135. if (reports.isEmpty && kDebugMode) {
  136. reports.add(
  137. ReportDTO(
  138. reportCode: "AD96F326D881443BAE00712F78D9E45A",
  139. patientId: "01320240515007",
  140. reportUserName: "Loki",
  141. updateTime: DateTime.now(),
  142. reportPreviewList: [
  143. ReportPreviewDTO(
  144. fileToken:
  145. "https://flyinsono-bj-1300984704.cos.ap-beijing.myqcloud.com/4D659CAE89B44E248653AAE6A158221B.jpg",
  146. fileType: UploadFileTypeEnum.JPG,
  147. language: "",
  148. thumbnailToken:
  149. "https://flyinsono-bj-1300984704.cos.ap-beijing.myqcloud.com/ED4F2F0B011746FF86220D4DB2C2CE64.jpg",
  150. ),
  151. ReportPreviewDTO(
  152. fileToken:
  153. "https://flyinsono-bj-1300984704.cos.ap-beijing.myqcloud.com/7392BDE8F90148D8B8772C7576465AFB.pdf",
  154. fileType: UploadFileTypeEnum.PDF,
  155. language: "",
  156. thumbnailToken:
  157. "https://flyinsono-bj-1300984704.cos.ap-beijing.myqcloud.com/7392BDE8F90148D8B8772C7576465AFB.pdf",
  158. ),
  159. ],
  160. ),
  161. );
  162. }
  163. update(["ecg_list"]);
  164. }
  165. Future<void> changeTypeFilter(RecordProcessStateEnum value) async {
  166. typeFilter = value;
  167. if (value == RecordProcessStateEnum.All) {
  168. states = null;
  169. } else if (value == RecordProcessStateEnum.Done) {
  170. states = [ExamStateEnum.Reported];
  171. } else {
  172. states = [
  173. ExamStateEnum.Unchecked,
  174. ExamStateEnum.Invalid,
  175. ExamStateEnum.Inspected
  176. ];
  177. }
  178. await getDatas();
  179. update(["ecg_list"]);
  180. }
  181. // @override
  182. // void onClose() {
  183. // super.onClose();
  184. // }
  185. }