form.dart 5.3 KB

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