123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- import 'package:fis_common/index.dart';
- 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/architecture/utils/prompt_box.dart';
- import 'package:vitalapp/managers/interfaces/patient.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<HomeController>();
- List<VSelectGenderEnumModel> selectGenderList = [
- VSelectGenderEnumModel(code: GenderEnum.Female, name: "女"),
- VSelectGenderEnumModel(code: GenderEnum.Male, name: "男"),
- VSelectGenderEnumModel(code: GenderEnum.Unknown, name: "未知的性别"),
- VSelectGenderEnumModel(code: GenderEnum.Unspecified, name: "未说明的性别"),
- ];
- /// 创建登记
- Future<void> 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.nationality = patient?.nationality;
- addRegiterInfo.permanentResidenceAddress =
- patient?.permanentResidenceAddress;
- addRegiterInfo.sex =
- RegistrationInfoModel.getGenderString(patient?.patientGender);
- addRegiterInfo.birthday = patient?.birthday?.toLocal();
- addRegiterInfo.code = await saveCachedBatchNumber(patient?.cardNo);
- addRegiterInfo.projectType = isVital
- ? VitalProjectTypeEnum.VinnoHealth
- : VitalProjectTypeEnum.VitalStation;
- AddRegiterInfoResult? infoResult =
- await registrationController.registrationManager.addRegiterInfoAsync(
- request: addRegiterInfo,
- );
- // 登记失败
- if (infoResult == null) {
- return;
- }
- if (infoResult.isNewPatient) {
- await Get.find<IPatientManager>()
- .switchCurrentPatientByCode(patient!.cardNo!);
- Get.toNamed("/patient/info");
- } else {
- PromptBox.toast('新建成功');
- }
- }
- /// 创建登记
- Future<void> createResidentFromRegistrationInfoModel(
- RegistrationInfoModel? 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.nationality = patient?.nationality;
- addRegiterInfo.permanentResidenceAddress =
- patient?.permanentResidenceAddress;
- addRegiterInfo.sex =
- RegistrationInfoModel.getGenderString(patient?.patientGender);
- addRegiterInfo.birthday = patient?.birthday?.toLocal();
- addRegiterInfo.code = await saveCachedBatchNumber(patient?.cardNo);
- addRegiterInfo.projectType = isVital
- ? VitalProjectTypeEnum.VinnoHealth
- : VitalProjectTypeEnum.VitalStation;
- AddRegiterInfoResult? infoResult =
- await registrationController.registrationManager.addRegiterInfoAsync(
- request: addRegiterInfo,
- );
- // 登记失败
- if (infoResult == null) {
- return;
- }
- if (infoResult.isNewPatient) {
- await Get.find<IPatientManager>()
- .switchCurrentPatientByCode(patient!.cardNo!);
- Get.toNamed("/patient/info");
- } else {
- PromptBox.toast('新建成功');
- }
- }
- Future<String?> saveCachedBatchNumber(String? cardNo) async {
- String batchNumber = const Uuid().v4().replaceAll('-', '');
- TextStorage cachedRecord = TextStorage(
- fileName: 'batchNumber',
- directory: "patient/${cardNo}",
- );
- await cachedRecord.save(batchNumber);
- return batchNumber;
- }
- /// 编辑登记
- Future<void> editResident(RegistrationInfoModel? 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 =
- RegistrationInfoModel.getGenderString(patient?.patientGender);
- editRegiterInfo.code = patient?.code;
- final result =
- await registrationController.registrationManager.updateRegiterInfoAsync(
- request: editRegiterInfo,
- );
- if (result == true) {
- await registrationController.listController.getRegisterInfoPage();
- }
- }
- /// 创建登记之前查看有没有预约
- Future<HealthExamPersonDTO?> getExamBookingByIDCard(String idCard) async {
- return await registrationController.appointmentManager
- .getExamBookingByIDCardAsync(
- idCardNo: idCard,
- );
- }
- /// 若未预约则需要补充手机号信息
- Future<PatientDTO?> fillInIdentityInfo(PatientDTO? patient) async {
- RegistrationInfoModel patientInfo = RegistrationInfoModel();
- if (patient != null) {
- patientInfo = RegistrationInfoModel.fromPatientDTO(patient);
- }
- // RegistrationInfoModel from PatientDTO
- final RegistrationInfoModel? result =
- await Get.dialog<RegistrationInfoModel>(
- RegistrationFormDialog(patient: patientInfo),
- barrierDismissible: false,
- );
- if (result == null) {
- return null;
- }
- if (patient != null) {
- patient.cardNo = result.cardNo;
- patient.patientName = result.patientName;
- patient.patientGender = result.patientGender ?? GenderEnum.Unknown;
- patient.birthday = result.birthday;
- patient.phone = result.phone;
- patient.patientAddress = result.patientAddress;
- }
- return patient;
- }
- /// 提交
- Future<void> 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;
- if (patient.patientAddress.isNotNullOrEmpty) {
- patient.patientAddress = patient.patientAddress;
- }
- } else {
- if (patient.phone.isNullOrEmpty) {
- ///判断是否录入过居民信息,若录入过则加载录入时的手机号
- final patientDto =
- await registrationController.getPatientByID(patient.cardNo!);
- if (patientDto != null) {
- patient.phone = patientDto.phone;
- }
- ///若未预约也未录入则需要更新手机号
- PatientDTO? currentPatient = await fillInIdentityInfo(patient);
- if (currentPatient != null) {
- patient = currentPatient;
- await createResidentInList(
- patient: patient,
- isVital: isVital,
- );
- } else {
- return;
- }
- } else {
- PatientDTO? currentPatient = await fillInIdentityInfo(patient);
- if (currentPatient != null) {
- patient = currentPatient;
- await createResidentInList(
- patient: patient,
- isVital: isVital,
- );
- }
- }
- }
- }
- /// 提交数据给server 生成登记列表
- Future<void> createResidentInList({
- required PatientDTO patient,
- required bool isVital,
- }) async {
- await createResident(
- patient,
- isVital: isVital,
- );
- await registrationController.listController.getRegisterInfoPage();
- }
- /// 提交数据给server 生成登记列表
- Future<void> createResidentInListFromRegistrationInfoModel({
- required RegistrationInfoModel patient,
- required bool isVital,
- }) async {
- await createResidentFromRegistrationInfoModel(
- patient,
- isVital: isVital,
- );
- await registrationController.listController.getRegisterInfoPage();
- }
- }
|