import 'package:fis_jsonrpc/rpc.dart'; import 'package:get/get.dart'; import 'package:uuid/uuid.dart'; import 'package:vitalapp/architecture/storage/text_storage.dart'; import 'package:vitalapp/architecture/utils/datetime.dart'; import 'package:vitalapp/pages/home/controller.dart'; import 'package:vitalapp/pages/medical_checkup_station/registration/controller.dart'; import 'package:vitalapp/pages/medical_checkup_station/registration/state/list.dart'; import 'package:vitalapp/pages/medical_checkup_station/registration/widgets/form/index.dart'; class RegistrationFormController { late RegistrationController registrationController; RegistrationFormController( RegistrationController controller, ) { registrationController = controller; } final state = ListState(); final _homeController = Get.find(); List selectGenderList = [ VSelectGenderEnumModel(code: GenderEnum.Female, name: "女"), VSelectGenderEnumModel(code: GenderEnum.Male, name: "男"), VSelectGenderEnumModel(code: GenderEnum.Unknown, name: "未知"), ]; /// 创建登记 Future createResident( PatientDTO? patient, { required bool isVital, }) async { AddRegiterInfoRequest addRegiterInfo = AddRegiterInfoRequest(); addRegiterInfo.adress = patient?.patientAddress; addRegiterInfo.age = DataTimeUtils.calculateAge( patient?.birthday ?? DateTime.now(), ); addRegiterInfo.iDCardNo = patient?.cardNo; addRegiterInfo.name = patient?.patientName; addRegiterInfo.phone = patient?.phone; addRegiterInfo.sex = patient?.patientGender == GenderEnum.Male ? "男" : "女"; addRegiterInfo.birthday = patient?.birthday?.toLocal(); addRegiterInfo.code = await saveCachedBatchNumber(patient); addRegiterInfo.projectType = isVital ? VitalProjectTypeEnum.VinnoHealth : VitalProjectTypeEnum.VitalStation; AddRegiterInfoResult? infoResult = await registrationController.registrationManager.addRegiterInfoAsync( request: addRegiterInfo, ); if (infoResult?.isNewPatient ?? false) { Get.toNamed( "/patient/info", parameters: {"code": patient?.cardNo ?? ''}, ); } } Future saveCachedBatchNumber(PatientDTO? patient) async { String batchNumber = const Uuid().v4().replaceAll('-', ''); TextStorage cachedRecord = TextStorage( fileName: 'batchNumber', directory: "patient/${patient?.cardNo}", ); await cachedRecord.save(batchNumber); return batchNumber; } /// 编辑登记 Future editResident(PatientDTO? patient) async { UpdateRegiterInfoRequest editRegiterInfo = UpdateRegiterInfoRequest(); editRegiterInfo.adress = patient?.patientAddress; editRegiterInfo.age = DataTimeUtils.calculateAge( patient?.birthday ?? DateTime.now(), ); editRegiterInfo.birthday = patient?.birthday; editRegiterInfo.iDCardNo = patient?.cardNo; editRegiterInfo.name = patient?.patientName; editRegiterInfo.phone = patient?.phone; editRegiterInfo.sex = patient?.patientGender == GenderEnum.Male ? "男" : "女"; editRegiterInfo.code = patient?.code; await registrationController.registrationManager.updateRegiterInfoAsync( request: editRegiterInfo, ); } /// 创建登记之前查看有没有预约 Future getExamBookingByIDCard(String idCard) async { return await registrationController.appointmentManager .getExamBookingByIDCardAsync( idCardNo: idCard, ); } /// 若未预约则需要补充手机号信息 Future fillInIdentityInfo(PatientDTO? patient) async { final PatientDTO? result = await Get.dialog( RegistrationFormDialog(patient: patient), barrierDismissible: false, ); return result; } /// 提交 Future confirmSubmit({ required PatientDTO patient, required bool isVital, }) async { if (patient.cardNo == null) { return; } /// 判断是否预约过,若未预约则需要更新手机号信息 HealthExamPersonDTO? healthExamPerson = await getExamBookingByIDCard( patient.cardNo!, ); if (healthExamPerson != null) { patient.cardNo = healthExamPerson.identityCard; patient.patientGender = healthExamPerson.gender == PatientGenderEnum.Male ? GenderEnum.Male : GenderEnum.Female; patient.patientName = healthExamPerson.name; patient.phone = healthExamPerson.phone; // patient.patientAddress = healthExamPerson.a } else { PatientDTO? currentPatient = await fillInIdentityInfo(patient); if (currentPatient != null) { patient = currentPatient; } else { return; } } await createResidentInList( patient: patient, isVital: isVital, ); } /// 提交数据给server 生成登记列表 Future createResidentInList({ required PatientDTO patient, required bool isVital, }) async { var now = DateTime.now(); var startTime = new DateTime(now.year, now.month, now.day); var endTime = startTime.add(Duration(hours: 23, minutes: 59, seconds: 59)); await createResident( patient, isVital: isVital, ); await registrationController.listController.getRegisterInfoPage( startTime: startTime, endTime: endTime, ); } }