form.dart 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import 'package:fis_jsonrpc/rpc.dart';
  2. import 'package:get/get.dart';
  3. import 'package:vitalapp/architecture/utils/datetime.dart';
  4. import 'package:vitalapp/pages/medical_checkup_station/registration/controller.dart';
  5. import 'package:vitalapp/pages/medical_checkup_station/registration/state/list.dart';
  6. import 'package:vitalapp/pages/medical_checkup_station/registration/widgets/form/index.dart';
  7. class RegistrationFormController {
  8. late RegistrationController registrationController;
  9. RegistrationFormController(
  10. RegistrationController controller,
  11. ) {
  12. registrationController = controller;
  13. }
  14. final state = ListState();
  15. List<VSelectGenderEnumModel> selectGenderList = [
  16. VSelectGenderEnumModel(code: GenderEnum.Female, name: "女"),
  17. VSelectGenderEnumModel(code: GenderEnum.Male, name: "男"),
  18. VSelectGenderEnumModel(code: GenderEnum.Unknown, name: "未知"),
  19. ];
  20. /// 创建登记
  21. Future<void> createResident(PatientDTO? patient) async {
  22. AddRegiterInfoRequest addRegiterInfo = AddRegiterInfoRequest();
  23. addRegiterInfo.adress = patient?.patientAddress;
  24. addRegiterInfo.age = DataTimeUtils.calculateAge(
  25. patient?.birthday ?? DateTime.now(),
  26. );
  27. addRegiterInfo.iDCardNo = patient?.cardNo;
  28. addRegiterInfo.name = patient?.patientName;
  29. addRegiterInfo.phone = patient?.phone;
  30. addRegiterInfo.sex = patient?.patientGender == GenderEnum.Male ? "男" : "女";
  31. addRegiterInfo.birthday = patient?.birthday?.toLocal();
  32. await registrationController.registrationManager.addRegiterInfoAsync(
  33. request: addRegiterInfo,
  34. );
  35. }
  36. /// 编辑登记
  37. Future<void> editResident(PatientDTO? patient) async {
  38. UpdateRegiterInfoRequest editRegiterInfo = UpdateRegiterInfoRequest();
  39. editRegiterInfo.adress = patient?.patientAddress;
  40. editRegiterInfo.age = DataTimeUtils.calculateAge(
  41. patient?.birthday ?? DateTime.now(),
  42. );
  43. editRegiterInfo.birthday = patient?.birthday;
  44. editRegiterInfo.iDCardNo = patient?.cardNo;
  45. editRegiterInfo.name = patient?.patientName;
  46. editRegiterInfo.phone = patient?.phone;
  47. editRegiterInfo.sex = patient?.patientGender == GenderEnum.Male ? "男" : "女";
  48. editRegiterInfo.code = patient?.code;
  49. await registrationController.registrationManager.updateRegiterInfoAsync(
  50. request: editRegiterInfo,
  51. );
  52. }
  53. /// 创建登记之前查看有没有预约
  54. Future<HealthExamPersonDTO?> getExamBookingByIDCard(String idCard) async {
  55. return await registrationController.appointmentManager
  56. .getExamBookingByIDCardAsync(
  57. idCardNo: idCard,
  58. );
  59. }
  60. /// 若未预约则需要补充手机号信息
  61. Future<PatientDTO?> fillInIdentityInfo(PatientDTO? patient) async {
  62. final PatientDTO? result = await Get.dialog<PatientDTO>(
  63. RegistrationFormDialog(patient: patient),
  64. barrierDismissible: false,
  65. );
  66. return result;
  67. }
  68. /// 提交
  69. Future<void> confirmSubmit({
  70. required PatientDTO patient,
  71. }) async {
  72. if (patient.cardNo == null) {
  73. return;
  74. }
  75. /// 判断是否预约过,若未预约则需要更新手机号信息
  76. HealthExamPersonDTO? healthExamPerson = await getExamBookingByIDCard(
  77. patient.cardNo!,
  78. );
  79. if (healthExamPerson != null) {
  80. patient.cardNo = healthExamPerson.identityCard;
  81. patient.patientGender = healthExamPerson.gender == PatientGenderEnum.Male
  82. ? GenderEnum.Male
  83. : GenderEnum.Female;
  84. patient.patientName = healthExamPerson.name;
  85. patient.phone = healthExamPerson.phone;
  86. // patient.patientAddress = healthExamPerson.a
  87. } else {
  88. PatientDTO? currentPatient = await fillInIdentityInfo(patient);
  89. if (currentPatient != null) {
  90. patient = currentPatient;
  91. } else {
  92. return;
  93. }
  94. }
  95. await createResidentInList(patient: patient);
  96. }
  97. /// 提交数据给server 生成登记列表
  98. Future<void> createResidentInList({
  99. required PatientDTO patient,
  100. }) async {
  101. await createResident(patient);
  102. await registrationController.listController.getRegisterInfoPage();
  103. }
  104. }