form.dart 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. import 'package:fis_jsonrpc/rpc.dart';
  2. import 'package:get/get.dart';
  3. import 'package:uuid/uuid.dart';
  4. import 'package:vitalapp/architecture/storage/text_storage.dart';
  5. import 'package:vitalapp/architecture/utils/datetime.dart';
  6. import 'package:vitalapp/pages/home/controller.dart';
  7. import 'package:vitalapp/pages/medical_checkup_station/registration/controller.dart';
  8. import 'package:vitalapp/pages/medical_checkup_station/registration/state/list.dart';
  9. import 'package:vitalapp/pages/medical_checkup_station/registration/widgets/form/index.dart';
  10. import 'package:vitalapp/store/store.dart';
  11. class RegistrationFormController {
  12. late RegistrationController registrationController;
  13. RegistrationFormController(
  14. RegistrationController controller,
  15. ) {
  16. registrationController = controller;
  17. }
  18. final state = ListState();
  19. final _homeController = Get.find<HomeController>();
  20. List<VSelectGenderEnumModel> selectGenderList = [
  21. VSelectGenderEnumModel(code: GenderEnum.Female, name: "女"),
  22. VSelectGenderEnumModel(code: GenderEnum.Male, name: "男"),
  23. VSelectGenderEnumModel(code: GenderEnum.Unknown, name: "未知"),
  24. ];
  25. /// 创建登记
  26. Future<void> createResident(
  27. PatientDTO? patient, {
  28. required bool isVital,
  29. }) async {
  30. AddRegiterInfoRequest addRegiterInfo = AddRegiterInfoRequest();
  31. addRegiterInfo.adress = patient?.patientAddress;
  32. addRegiterInfo.age = DataTimeUtils.calculateAge(
  33. patient?.birthday ?? DateTime.now(),
  34. );
  35. addRegiterInfo.iDCardNo = patient?.cardNo;
  36. addRegiterInfo.name = patient?.patientName;
  37. addRegiterInfo.phone = patient?.phone;
  38. addRegiterInfo.sex = patient?.patientGender == GenderEnum.Male ? "男" : "女";
  39. addRegiterInfo.birthday = patient?.birthday?.toLocal();
  40. addRegiterInfo.code = await saveCachedBatchNumber(patient);
  41. addRegiterInfo.projectType = isVital
  42. ? VitalProjectTypeEnum.VinnoHealth
  43. : VitalProjectTypeEnum.VitalStation;
  44. AddRegiterInfoResult? infoResult =
  45. await registrationController.registrationManager.addRegiterInfoAsync(
  46. request: addRegiterInfo,
  47. );
  48. if (infoResult?.isNewPatient ?? false) {
  49. Store.user.currentSelectPatientInfo = patient;
  50. Get.toNamed("/patient/info");
  51. }
  52. }
  53. Future<String?> saveCachedBatchNumber(PatientDTO? patient) async {
  54. String batchNumber = const Uuid().v4().replaceAll('-', '');
  55. TextStorage cachedRecord = TextStorage(
  56. fileName: 'batchNumber',
  57. directory: "patient/${patient?.cardNo}",
  58. );
  59. await cachedRecord.save(batchNumber);
  60. return batchNumber;
  61. }
  62. /// 编辑登记
  63. Future<void> editResident(PatientDTO? patient) async {
  64. UpdateRegiterInfoRequest editRegiterInfo = UpdateRegiterInfoRequest();
  65. editRegiterInfo.adress = patient?.patientAddress;
  66. editRegiterInfo.age = DataTimeUtils.calculateAge(
  67. patient?.birthday ?? DateTime.now(),
  68. );
  69. editRegiterInfo.birthday = patient?.birthday;
  70. editRegiterInfo.iDCardNo = patient?.cardNo;
  71. editRegiterInfo.name = patient?.patientName;
  72. editRegiterInfo.phone = patient?.phone;
  73. editRegiterInfo.sex = patient?.patientGender == GenderEnum.Male ? "男" : "女";
  74. editRegiterInfo.code = patient?.code;
  75. await registrationController.registrationManager.updateRegiterInfoAsync(
  76. request: editRegiterInfo,
  77. );
  78. }
  79. /// 创建登记之前查看有没有预约
  80. Future<HealthExamPersonDTO?> getExamBookingByIDCard(String idCard) async {
  81. return await registrationController.appointmentManager
  82. .getExamBookingByIDCardAsync(
  83. idCardNo: idCard,
  84. );
  85. }
  86. /// 若未预约则需要补充手机号信息
  87. Future<PatientDTO?> fillInIdentityInfo(PatientDTO? patient) async {
  88. final PatientDTO? result = await Get.dialog<PatientDTO>(
  89. RegistrationFormDialog(patient: patient),
  90. barrierDismissible: false,
  91. );
  92. return result;
  93. }
  94. /// 提交
  95. Future<void> confirmSubmit({
  96. required PatientDTO patient,
  97. required bool isVital,
  98. }) async {
  99. if (patient.cardNo == null) {
  100. return;
  101. }
  102. /// 判断是否预约过,若未预约则需要更新手机号信息
  103. HealthExamPersonDTO? healthExamPerson = await getExamBookingByIDCard(
  104. patient.cardNo!,
  105. );
  106. if (healthExamPerson != null) {
  107. patient.cardNo = healthExamPerson.identityCard;
  108. patient.patientGender = healthExamPerson.gender == PatientGenderEnum.Male
  109. ? GenderEnum.Male
  110. : GenderEnum.Female;
  111. patient.patientName = healthExamPerson.name;
  112. patient.phone = healthExamPerson.phone;
  113. // patient.patientAddress = healthExamPerson.a
  114. } else {
  115. PatientDTO? currentPatient = await fillInIdentityInfo(patient);
  116. if (currentPatient != null) {
  117. patient = currentPatient;
  118. } else {
  119. return;
  120. }
  121. }
  122. await createResidentInList(
  123. patient: patient,
  124. isVital: isVital,
  125. );
  126. }
  127. /// 提交数据给server 生成登记列表
  128. Future<void> createResidentInList({
  129. required PatientDTO patient,
  130. required bool isVital,
  131. }) async {
  132. var now = DateTime.now();
  133. var startTime = new DateTime(now.year, now.month, now.day);
  134. var endTime = startTime.add(Duration(hours: 23, minutes: 59, seconds: 59));
  135. await createResident(
  136. patient,
  137. isVital: isVital,
  138. );
  139. await registrationController.listController.getRegisterInfoPage(
  140. startTime: startTime,
  141. endTime: endTime,
  142. );
  143. }
  144. }