123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- 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';
- import 'package:vitalapp/store/store.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: "未知"),
- ];
- /// 创建登记
- 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.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) {
- Store.user.currentSelectPatientInfo = patient;
- Get.toNamed("/patient/info");
- }
- }
- Future<String?> 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<void> 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<HealthExamPersonDTO?> getExamBookingByIDCard(String idCard) async {
- return await registrationController.appointmentManager
- .getExamBookingByIDCardAsync(
- idCardNo: idCard,
- );
- }
- /// 若未预约则需要补充手机号信息
- Future<PatientDTO?> fillInIdentityInfo(PatientDTO? patient) async {
- final PatientDTO? result = await Get.dialog<PatientDTO>(
- RegistrationFormDialog(patient: patient),
- barrierDismissible: false,
- );
- return result;
- }
- /// 提交
- 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;
- // 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<void> 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,
- );
- }
- }
|