controller.dart 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. import 'dart:convert';
  2. import 'package:fis_jsonrpc/rpc.dart';
  3. import 'package:flutter/widgets.dart';
  4. import 'package:get/get.dart';
  5. import 'package:vitalapp/architecture/defines.dart';
  6. import 'package:vitalapp/architecture/values/features.dart';
  7. import 'package:vitalapp/consts/diagnosis.dart';
  8. import 'package:vitalapp/database/entities/defines.dart';
  9. import 'package:vitalapp/global.dart';
  10. import 'package:vitalapp/managers/interfaces/diagnosis.dart';
  11. import 'package:vitalapp/managers/interfaces/dictionary.dart';
  12. import 'package:vitalapp/managers/interfaces/models/diagnosis_aggregation_record_model.dart';
  13. import 'package:vitalapp/managers/interfaces/patient.dart';
  14. import 'package:vitalapp/managers/interfaces/record_data_cache.dart';
  15. import 'package:vitalapp/pages/controllers/home_nav_mixin.dart';
  16. import 'package:vitalapp/store/store.dart';
  17. import 'state.dart';
  18. class PatientDetailController extends FControllerBase with HomeNavMixin {
  19. final state = PatientDetailState();
  20. final _patientManager = Get.find<IPatientManager>();
  21. @override
  22. void onInit() {
  23. WidgetsBinding.instance.addPostFrameCallback(
  24. (timeStamp) async {
  25. loadData();
  26. if (Store.user.hasFeature(FeatureKeys.RecentTestRecords)) {
  27. await onReadLastRecordInfo();
  28. }
  29. },
  30. );
  31. super.onInit();
  32. }
  33. /// 打开信息页
  34. void gotoInfo() {
  35. Get.toNamed(
  36. "/patient/info",
  37. parameters: {"code": state.code},
  38. );
  39. }
  40. /// 前往随访页
  41. void gotoFollowUp() {
  42. Get.toNamed(
  43. "/check/follow_up",
  44. parameters: {"patientCode": state.code, "patientName": state.name},
  45. );
  46. }
  47. /// 前往随访记录页
  48. void gotoFollowUpRecord() {
  49. Get.toNamed(
  50. "/check/follow_up_record",
  51. parameters: {"patientCode": state.code, "patientName": state.name},
  52. );
  53. }
  54. /// 前往健康体检页
  55. void gotoHealthCheck() {
  56. Get.toNamed(
  57. "/check/form",
  58. parameters: {"patientCode": state.code},
  59. );
  60. }
  61. /// 前往签约页
  62. void gotoContract() {
  63. Get.toNamed(
  64. "/contract/package_list",
  65. parameters: {"patientCode": state.code},
  66. );
  67. }
  68. /// 前往转诊页
  69. void gotoReferral() {
  70. //
  71. }
  72. /// 前往健康检测页
  73. void gotoExam() {
  74. //
  75. Get.toNamed(
  76. "/medical",
  77. parameters: {"patientCode": state.code},
  78. );
  79. }
  80. /// 前往诊疗记录页
  81. void gotoExamRecord() {
  82. //
  83. Get.toNamed(
  84. "/medical/records",
  85. parameters: {"patientCode": state.code},
  86. );
  87. }
  88. ///前往体检记录
  89. void gotoHealthCheckRecord() {
  90. Get.toNamed(
  91. "/check/healthCheckRecord",
  92. parameters: {"patientCode": state.code},
  93. );
  94. }
  95. void gotoContractRecords() {
  96. Get.toNamed(
  97. "/contract/contract_records",
  98. parameters: {"patientCode": state.code},
  99. );
  100. }
  101. Future<void> loadData() async {
  102. state.code = Store.user.currentSelectPatientInfo?.code ?? '';
  103. final dto = Store.user.currentSelectPatientInfo;
  104. if (dto != null) {
  105. dto.birthday = dto.birthday!.toLocal();
  106. state.updateDto(dto);
  107. }
  108. }
  109. Future<bool> setCrowdLabelsAsync(
  110. List<String> carowLabels, List<String> crowdNames) async {
  111. final result =
  112. await _patientManager.setCrowdLabelsAsync(state.code, carowLabels);
  113. if (result) {
  114. state.updateCrowd(carowLabels, crowdNames);
  115. }
  116. return result;
  117. }
  118. /// 读取到最近检测记录的数据
  119. Future<void> onReadLastRecordInfo() async {
  120. if (Store.user.currentSelectPatientInfo?.code != null) {
  121. var diagnosisManager = Get.find<IDiagnosisManager>();
  122. List<DiagnosisAggregationRecordModel> getRecords = [];
  123. var getLastRecords =
  124. await diagnosisManager.getDiagnosisAggregationPageAsync(
  125. Store.user.currentSelectPatientInfo!.code!, 1, 10);
  126. getRecords.addAll(getLastRecords?.pageData ?? []);
  127. var listRecords = await diagnosisManager
  128. .getListByPatientCode(Store.user.currentSelectPatientInfo!.code!);
  129. getRecords.addAll(listRecords ?? []);
  130. if (getRecords.isNotEmpty) {
  131. var lastRecordInfo = getRecords.reduce((curr, next) =>
  132. (curr.diagnosisTime!).isAfter(next.diagnosisTime!) ? curr : next);
  133. state.isExistLocalData = lastRecordInfo.isExistLocalData ?? false;
  134. state.currentDiagnosis =
  135. await diagnosisManager.getTableData(lastRecordInfo);
  136. }
  137. }
  138. }
  139. }