import 'dart:convert'; import 'package:fis_jsonrpc/rpc.dart'; import 'package:get/get.dart'; import 'package:uuid/uuid.dart'; import 'package:vitalapp/architecture/utils/prompt_box.dart'; import 'package:vnote_device_plugin/consts/types.dart'; import 'package:vitalapp/architecture/defines.dart'; import 'package:vitalapp/architecture/storage/text_storage.dart'; import 'package:vitalapp/managers/interfaces/cachedRecord.dart'; import 'package:vitalapp/managers/interfaces/device.dart'; import 'package:vitalapp/managers/interfaces/diagnosis.dart'; import 'package:vitalapp/managers/interfaces/models/device.dart'; import 'package:vitalapp/pages/medical/models/item.dart'; import 'package:vitalapp/pages/medical/state.dart'; import 'package:vitalapp/store/store.dart'; class MedicalController extends FControllerBase { String patientCode = ''; Map diagnosisDataValue = {}; late String appDataId; final state = MedicalState(); static final typeConvertMap = { DeviceTypes.TEMP: "Temp", DeviceTypes.WEIGHT: "BMI", DeviceTypes.SPO2: "SpO2", DeviceTypes.NIBP: "NIBP", DeviceTypes.SUGAR: "GLU", DeviceTypes.URINE: "Urine", DeviceTypes.IC_READER: "ICReader", DeviceTypes.HEART: "HEART", // "ECG": DeviceTypes.HEART, }; final _diagnosisManager = Get.find(); final _cachedRecordManager = Get.find(); final _deviceManager = Get.find(); final _medicalMenus = [ MedicalItem(key: DeviceTypes.TEMP, diagnosticItem: '体温'), MedicalItem(key: DeviceTypes.SUGAR, diagnosticItem: '血糖'), MedicalItem(key: DeviceTypes.NIBP, diagnosticItem: '血压'), MedicalItem(key: DeviceTypes.SPO2, diagnosticItem: '血氧'), MedicalItem(key: DeviceTypes.WEIGHT, diagnosticItem: 'BMI'), MedicalItem(key: DeviceTypes.URINE, diagnosticItem: '尿常规'), MedicalItem(key: DeviceTypes.HEART, diagnosticItem: '心电'), ]; @override Future onLoad() async { initData(); getAccessTypes(); return super.onLoad(); } Future initData() async { patientCode = Store.user.currentSelectPatientInfo?.code ?? ''; if (patientCode.isNotEmpty) { var cachedAppDataId = await readCachedAppDataId(); if (cachedAppDataId != null) { appDataId = cachedAppDataId; } else { await saveCachedAppDataId(); } print('🍯'); print(appDataId); print(Store.user.currentSelectPatientInfo?.toJson()); print(patientCode); print('🍯'); await readCachedRecord(); } } Future getAccessTypes() async { List accessTypes = await _deviceManager.getAccessTypes(); // print('🍫'); // print(accessTypes); // /// TODO 后端添加后删除 暂时这样写 // accessTypes.add('heart'); print('🍫'); for (var element in _medicalMenus) { if (accessTypes.contains(element.key)) { state.medicalMenuList.add(element); } } print(state.medicalMenuList); } Future getDevice(String type) async { List devices = await _deviceManager.getDeviceList(); return devices.firstWhereOrNull((element) => element.type == type); } Future readCachedRecord() async { TextStorage cachedRecord = TextStorage( fileName: 'JKJC', directory: "patient/$patientCode", ); String? value = await cachedRecord.read(); if (value == null) { diagnosisDataValue = {}; return; } diagnosisDataValue = jsonDecode(value); } Future saveCachedAppDataId() async { appDataId = const Uuid().v4().replaceAll('-', ''); TextStorage cachedRecord = TextStorage( fileName: 'appDataId', directory: "patient/$patientCode", ); Get.back(); return cachedRecord.save(appDataId); } Future readCachedAppDataId() async { TextStorage cachedRecord = TextStorage( fileName: 'appDataId', directory: "patient/$patientCode", ); print('🍔'); print(patientCode); print('🍔'); return cachedRecord.read(); } Future saveCachedRecord() async { TextStorage cachedRecord = TextStorage( fileName: 'JKJC', directory: "patient/$patientCode", ); print('🍔'); print(patientCode); print('🍔'); return cachedRecord.save(jsonEncode(diagnosisDataValue)); } Future deleteDirectory() async { TextStorage cachedRecord = TextStorage( fileName: 'JKJC', directory: "patient/$patientCode", ); return cachedRecord.deleteDirectory(); } Future createDiagnosis() async { if (patientCode.isEmpty || patientCode != Store.user.currentSelectPatientInfo?.code) { initData(); } List diagnosisItems = []; diagnosisDataValue.forEach((key, value) { if (value != null) { diagnosisItems.add( DiagnosisItem( key: key, diagnosisData: jsonEncode(value), ), ); } }); state.currentTab = '-1'; SubmitDiagnosisRequest submitDiagnosisRequest = SubmitDiagnosisRequest( appDataId: appDataId, patientCode: patientCode, diagnosisItems: diagnosisItems, diagnosisTime: DateTime.now().toUtc(), ); print(submitDiagnosisRequest.toJson()); final result = await _diagnosisManager.submitDiagnosisAsync(submitDiagnosisRequest); if (result) { PromptBox.toast('提交成功'); await saveCachedAppDataId(); await deleteDirectory(); await readCachedRecord(); Future.delayed(const Duration(milliseconds: 10), () { state.currentTab = state.medicalMenuList[0].key; }); } } }