|
@@ -2,19 +2,24 @@ import 'package:fis_jsonrpc/rpc.dart';
|
|
|
import 'package:fis_ui/types/widget_builders.dart';
|
|
|
import 'package:flutter/material.dart';
|
|
|
import 'package:get/get.dart';
|
|
|
+import 'package:vitalapp/architecture/utils/datetime.dart';
|
|
|
+import 'package:vitalapp/architecture/utils/prompt_box.dart';
|
|
|
import 'package:vitalapp/components/table/table_column.dart';
|
|
|
import 'package:vitalapp/managers/interfaces/appointment.dart';
|
|
|
+import 'package:vitalapp/managers/interfaces/device.dart';
|
|
|
import 'package:vitalapp/managers/interfaces/patient.dart';
|
|
|
import 'package:vitalapp/managers/interfaces/registration.dart';
|
|
|
import 'package:vitalapp/pages/medical_checkup_station/registration/state/list.dart';
|
|
|
+import 'package:vitalapp/rpc.dart';
|
|
|
import 'package:vitalapp/store/store.dart';
|
|
|
|
|
|
/// 体检表格控制器
|
|
|
class HealthCheckListController extends GetxController {
|
|
|
final appointmentManager = Get.find<IAppointmentManager>();
|
|
|
final registrationManager = Get.find<IRegistrationManager>();
|
|
|
+ final deviceManager = Get.find<IDeviceManager>();
|
|
|
final state = ListState();
|
|
|
-
|
|
|
+ final _patientManager = Get.find<IPatientManager>();
|
|
|
String? checkKey = "HEIBasic";
|
|
|
|
|
|
HealthCheckListController({this.checkKey});
|
|
@@ -187,6 +192,7 @@ class HealthCheckListController extends GetxController {
|
|
|
var startTime = new DateTime(now.year, now.month, now.day);
|
|
|
var endTime = startTime.add(Duration(hours: 23, minutes: 59, seconds: 59));
|
|
|
await getRegisterInfoPage(startTime: startTime, endTime: endTime);
|
|
|
+ deviceManager.onScanCode.addListener(_onSacanCode);
|
|
|
}
|
|
|
|
|
|
void onTap() {}
|
|
@@ -202,8 +208,77 @@ class HealthCheckListController extends GetxController {
|
|
|
_initData();
|
|
|
}
|
|
|
|
|
|
+ @override
|
|
|
+ void dispose() {
|
|
|
+ deviceManager.onScanCode.removeListener(_onSacanCode);
|
|
|
+ super.dispose();
|
|
|
+ }
|
|
|
+
|
|
|
// @override
|
|
|
// void onClose() {
|
|
|
// super.onClose();
|
|
|
// }
|
|
|
+
|
|
|
+ Future<void> _onSacanCode(Object sender, String e) async {
|
|
|
+ if (residentList.any((element) => element.physicalExamNumber == e)) {
|
|
|
+ var data =
|
|
|
+ residentList.firstWhere((element) => element.physicalExamNumber == e);
|
|
|
+ await changeHeartCheck(data);
|
|
|
+ } else {
|
|
|
+ RegisterPersonInfoDTO? registerPersonInfo =
|
|
|
+ await _patientManager.getRegisterPersonInfoByPhysicalExamNumberAsync(
|
|
|
+ physicalExamNumber: e,
|
|
|
+ );
|
|
|
+ if (registerPersonInfo == null) {
|
|
|
+ PromptBox.toast("未找到此体检号");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ String statusStr = '';
|
|
|
+ ExamStateEnum status = registerPersonInfo.state;
|
|
|
+ switch (status) {
|
|
|
+ case ExamStateEnum.Unchecked:
|
|
|
+ statusStr = "未体检";
|
|
|
+ break;
|
|
|
+ case ExamStateEnum.Invalid:
|
|
|
+ statusStr = "已作废";
|
|
|
+ break;
|
|
|
+ case ExamStateEnum.Inspected:
|
|
|
+ statusStr = "已体检";
|
|
|
+ break;
|
|
|
+ case ExamStateEnum.Reported:
|
|
|
+ statusStr = "已报告";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ await changeHeartCheck(ResidentModel(
|
|
|
+ name: registerPersonInfo.name ?? '',
|
|
|
+ idNumber: registerPersonInfo.iDCardNo ?? '',
|
|
|
+ code: registerPersonInfo.code ?? '',
|
|
|
+ homeAddress: registerPersonInfo.adress,
|
|
|
+ age: getAgeOfIdNumber(registerPersonInfo.iDCardNo ?? ''),
|
|
|
+ physicalExamNumber: registerPersonInfo.physicalExamNumber,
|
|
|
+ phone: registerPersonInfo.phone,
|
|
|
+ finishedExamKeys: registerPersonInfo.finishedExamKeys,
|
|
|
+ physicalExamStatus: statusStr,
|
|
|
+ birthDay: registerPersonInfo.birthday,
|
|
|
+ sex: registerPersonInfo.sex,
|
|
|
+ ));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ String getAgeOfIdNumber(String idNumber) {
|
|
|
+ if (idNumber.isEmpty) return '';
|
|
|
+ final idCardRegex = RegExp(r'^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})(\d|X)$');
|
|
|
+ final match = idCardRegex.firstMatch(idNumber);
|
|
|
+ if (match != null) {
|
|
|
+ final year = int.parse(match.group(2)!);
|
|
|
+ final month = int.parse(match.group(3)!);
|
|
|
+ final day = int.parse(match.group(4)!);
|
|
|
+
|
|
|
+ final birthDate = DateTime(year, month, day);
|
|
|
+
|
|
|
+ String age = DataTimeUtils.calculateAge(birthDate);
|
|
|
+ return age;
|
|
|
+ }
|
|
|
+ return ''; // 返回一个默认值
|
|
|
+ }
|
|
|
}
|