controller.dart 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import 'dart:convert';
  2. import 'package:fis_jsonrpc/rpc.dart';
  3. import 'package:get/get.dart';
  4. import 'package:uuid/uuid.dart';
  5. import 'package:vnoteapp/architecture/defines.dart';
  6. import 'package:vnoteapp/architecture/storage/text_storage.dart';
  7. import 'package:vnoteapp/architecture/utils/prompt_box.dart';
  8. import 'package:vnoteapp/managers/interfaces/cachedRecord.dart';
  9. import 'package:vnoteapp/managers/interfaces/device.dart';
  10. import 'package:vnoteapp/managers/interfaces/diagnosis.dart';
  11. import 'package:vnoteapp/managers/interfaces/models/device.dart';
  12. import 'package:vnoteapp/pages/medical/models/item.dart';
  13. import 'package:vnoteapp/pages/medical/state.dart';
  14. import 'package:vnoteapp/store/store.dart';
  15. class MedicalController extends FControllerBase {
  16. final state = MedicalState();
  17. // final deviceCloseSuccessEvent = FEventHandler<bool>();
  18. final _diagnosisManager = Get.find<IDiagnosisManager>();
  19. final _cachedRecordManager = Get.find<ICachedRecordManager>();
  20. final _deviceManager = Get.find<IDeviceManager>();
  21. String patientCode = '';
  22. late String appDataId;
  23. List<MedicalItem> medicalMenuList = [
  24. MedicalItem(key: 'Temp', diagnosticItem: '体温'),
  25. MedicalItem(key: 'GLU', diagnosticItem: '血糖'),
  26. MedicalItem(key: 'NIBP', diagnosticItem: '血压'),
  27. MedicalItem(key: 'SpO2', diagnosticItem: '血氧'),
  28. MedicalItem(key: 'BMI', diagnosticItem: 'BMI'),
  29. ];
  30. Map<String, dynamic> diagnosisDataValue = {};
  31. @override
  32. Future<void> onLoad() async {
  33. patientCode = Store.user.currentSelectPatientInfo?.code ?? '';
  34. Get.put(MedicalController());
  35. var cachedAppDataId = await readCachedAppDataId();
  36. if (cachedAppDataId != null) {
  37. appDataId = cachedAppDataId;
  38. } else {
  39. await saveCachedAppDataId();
  40. }
  41. return super.onLoad();
  42. }
  43. Future<DeviceModel?> getDevice(String type) async {
  44. List<DeviceModel> devices = await _deviceManager.getDeviceList();
  45. return devices.firstWhereOrNull((element) => element.type == type);
  46. }
  47. Future<void> readCachedRecord() async {
  48. String? value = await _cachedRecordManager.readCachedRecord(
  49. state.currentTab,
  50. patientCode,
  51. 'ZLZS',
  52. );
  53. if (value == null) {
  54. return;
  55. }
  56. diagnosisDataValue[state.currentTab] = jsonDecode(value);
  57. }
  58. Future<bool?> saveCachedAppDataId() async {
  59. appDataId = const Uuid().v4().replaceAll('-', '');
  60. print(appDataId);
  61. print('🌰');
  62. TextStorage cachedRecord = TextStorage(
  63. fileName: 'appDataId',
  64. directory: "patient/$patientCode",
  65. );
  66. return cachedRecord.save(appDataId);
  67. }
  68. Future<String?> readCachedAppDataId() async {
  69. TextStorage cachedRecord = TextStorage(
  70. fileName: 'appDataId',
  71. directory: "patient/$patientCode",
  72. );
  73. return cachedRecord.read();
  74. }
  75. Future<void> saveCachedRecord() async {
  76. await _cachedRecordManager.saveCachedRecord(
  77. state.currentTab,
  78. patientCode,
  79. 'ZLZS',
  80. jsonEncode(
  81. diagnosisDataValue[state.currentTab],
  82. ),
  83. );
  84. print(diagnosisDataValue['BMI']);
  85. }
  86. Future<void> createDiagnosis() async {
  87. CreateDiagnosisRequest diagnosisRequest = CreateDiagnosisRequest(
  88. patientCode: patientCode,
  89. appDataId: appDataId,
  90. diagnosisTime: DateTime.now(),
  91. diagnosisData: jsonEncode(diagnosisDataValue[state.currentTab]),
  92. key: state.currentTab,
  93. );
  94. saveCachedRecord();
  95. final result =
  96. await _diagnosisManager.createDiagnosisAsync(diagnosisRequest);
  97. if (result.isNotEmpty) {
  98. PromptBox.toast('保存成功');
  99. final index = state.medicalMenuList
  100. .indexWhere((element) => element.key == state.currentTab);
  101. if (index < 4) {
  102. state.currentTab = state.medicalMenuList[index + 1].key;
  103. } else {
  104. Get.back();
  105. }
  106. }
  107. }
  108. }